{"openapi":"3.1.0","info":{"title":"ThreadChain Backend","description":"Backend API for ThreadChain application","version":"1.0.0"},"paths":{"/auth/signup-rules":{"get":{"tags":["authentication"],"summary":"Signup Rules","description":"Public: what the signup forms should ask for (same switch the signup endpoints enforce).","operationId":"signup_rules_auth_signup_rules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/signup":{"post":{"tags":["authentication"],"summary":"Signup","description":"Register a new user.\n\nBrand workspace signups (``account_type=brand``, no team invite) get a\nprovisional JWT immediately and defer the email OTP until\n``POST /brand/me/complete-onboarding``. Other signups still send OTP\nfirst and return ``requires_otp`` without a JWT.","operationId":"signup_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/login":{"post":{"tags":["authentication"],"summary":"Login","description":"Password check; returns JWT when credentials are valid.\n\nUnverified brand accounts that finished onboarding get ``requires_otp``\n(OTP was sent at onboarding complete). Unverified accounts that have\nnot finished onboarding get a provisional JWT so they can resume the\nwizard. Fully verified users get a normal JWT.","operationId":"login_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/token":{"post":{"tags":["authentication"],"summary":"Token","description":"OAuth2 compatible token endpoint for Swagger UI Authorize (same flow as /login).","operationId":"token_auth_token_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_token_auth_token_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/verify-signup-otp":{"post":{"tags":["authentication"],"summary":"Verify Signup Otp","description":"Verify signup email code; returns JWT and activates trial welcome email.","operationId":"verify_signup_otp_auth_verify_signup_otp_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyOtpRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/resend-signup-otp":{"post":{"tags":["authentication"],"summary":"Resend Signup Otp","description":"Resend signup verification code (unverified accounts only).\n\nBrand accounts defer OTP until onboarding is complete — resend is\nblocked until then so codes are not emailed early.","operationId":"resend_signup_otp_auth_resend_signup_otp_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendSignupOtpRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/me":{"get":{"tags":["authentication"],"summary":"Get Current User Info","description":"Get current user information with organization context.\n\nIncludes: org_id, org_name, org_role, subscription_status,\ncredit_balance, trial info, needs_profile_completion.","operationId":"get_current_user_info_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithOrgContext"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"patch":{"tags":["authentication"],"summary":"Update Current User Profile","description":"Partial update of the current user's profile.\n\nMutable fields: first_name, last_name, brand_name, role, whatsapp, cookie_consent.\nEmail, org role, and membership dates are not editable here.","operationId":"update_current_user_profile_auth_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithOrgContext"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/auth/me/complete-profile":{"patch":{"tags":["authentication"],"summary":"Complete Profile","description":"Set brand name, role, and WhatsApp (required for Google OAuth users; same rules as email signup).","operationId":"complete_profile_auth_me_complete_profile_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteProfileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithOrgContext"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/auth/me/welcome-seen":{"post":{"tags":["authentication"],"summary":"Mark Welcome Seen","description":"Record that the user closed the design board welcome pop-up, so it isn't shown again.","operationId":"mark_welcome_seen_auth_me_welcome_seen_post","responses":{"204":{"description":"Successful Response"}},"security":[{"OAuth2PasswordBearer":[]}]}},"/auth/me/learning-mode":{"put":{"tags":["authentication"],"summary":"Set Learning Mode","description":"Learning mode on: the 3D Visual Studio tour starts every visit. Off: never by itself.","operationId":"set_learning_mode_auth_me_learning_mode_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LearningModeRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/auth/me/guides-seen":{"post":{"tags":["authentication"],"summary":"Mark Guide Seen","description":"Record that the user has seen a walkthrough / help guide, so it isn't shown again.","operationId":"mark_guide_seen_auth_me_guides_seen_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuideSeenRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/auth/me/profile":{"get":{"tags":["authentication"],"summary":"Get Current User Profile","description":"Get the current user's full profile with usage statistics.\n\nIncludes everything from /me plus tech-pack usage (in progress / finished /\ndownloaded), legacy job/session counters, and recent credit history.","operationId":"get_current_user_profile_auth_me_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/auth/me/setup-org":{"post":{"tags":["authentication"],"summary":"Setup Organization","description":"Create an organization for users who don't have one (legacy accounts).\n\nAccepts optional JSON body with `org_name`. Defaults to \"{first_name}'s Workspace\".\nGrants trial credits just like a fresh signup.","operationId":"setup_organization_auth_me_setup_org_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/auth/me/org-name":{"patch":{"tags":["authentication"],"summary":"Update Organization Name","description":"Update the current user's organization name.\nRate-limited to once every 30 days.","operationId":"update_organization_name_auth_me_org_name_patch","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request"}}},"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":[]}]}},"/auth/verify-email-code":{"post":{"tags":["authentication"],"summary":"Verify Email Code","description":"Legacy endpoint kept for compatibility; code verification is no longer required.","operationId":"verify_email_code_auth_verify_email_code_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"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":[]}]}},"/auth/resend-verification-code":{"post":{"tags":["authentication"],"summary":"Resend Verification Code","description":"Legacy endpoint kept for compatibility; no verification code is sent.","operationId":"resend_verification_code_auth_resend_verification_code_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/auth/forgot-password":{"post":{"tags":["authentication"],"summary":"Forgot Password","description":"Send a password reset link to the user's email.","operationId":"forgot_password_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/reset-password":{"post":{"tags":["authentication"],"summary":"Reset Password","description":"Reset password using a valid reset token.","operationId":"reset_password_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/impersonate/{user_id}":{"post":{"tags":["authentication"],"summary":"Impersonate User","description":"Issue a short-lived (2-hour) JWT that authenticates as *user_id*.\nRestricted to platform admins. The token carries an ``impersonated_by``\nclaim for audit purposes but is otherwise a normal Bearer token — all\nexisting endpoints work without modification.","operationId":"impersonate_user_auth_impersonate__user_id__post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/google":{"post":{"tags":["authentication"],"summary":"Google Login","description":"Login or register user via Google Sign-In.","operationId":"google_login_auth_google_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/google-login":{"post":{"tags":["authentication"],"summary":"Google Login","description":"Login or register user via Google Sign-In.","operationId":"google_login_auth_google_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/device/start":{"post":{"tags":["authentication"],"summary":"Device Start","operationId":"device_start_auth_device_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/device/token":{"post":{"tags":["authentication"],"summary":"Device Token","operationId":"device_token_auth_device_token_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceTokenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/plugin/refresh":{"post":{"tags":["authentication"],"summary":"Plugin Refresh","operationId":"plugin_refresh_auth_plugin_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/auth/device/approve":{"post":{"tags":["authentication"],"summary":"Device Approve","operationId":"device_approve_auth_device_approve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceApproveRequest"}}},"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":[]}]}},"/conversations/start":{"post":{"tags":["conversations"],"summary":"Start Conversation","description":"Start a new conversation and linked questionnaire session.","operationId":"start_conversation_conversations_start_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/conversations":{"get":{"tags":["conversations"],"summary":"List Conversations","operationId":"list_conversations_conversations_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"q_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q Type"}},{"name":"archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Archived"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListConversationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/conversations/trash":{"get":{"tags":["conversations"],"summary":"List Trashed Conversations","description":"List soft-deleted techpacks in the client-facing Trash view.","operationId":"list_trashed_conversations_conversations_trash_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListConversationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/conversations/{conversation_id}":{"get":{"tags":["conversations"],"summary":"Get Conversation","operationId":"get_conversation_conversations__conversation_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__conversation__ConversationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["conversations"],"summary":"Update Conversation","operationId":"update_conversation_conversations__conversation_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__conversation__ConversationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["conversations"],"summary":"Delete Conversation","description":"Move a techpack to Trash. Recoverable via /restore for the retention window.","operationId":"delete_conversation_conversations__conversation_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/conversations/{conversation_id}/archive":{"post":{"tags":["conversations"],"summary":"Archive Conversation","operationId":"archive_conversation_conversations__conversation_id__archive_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__conversation__ConversationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/conversations/{conversation_id}/unarchive":{"post":{"tags":["conversations"],"summary":"Unarchive Conversation","operationId":"unarchive_conversation_conversations__conversation_id__unarchive_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__conversation__ConversationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/conversations/{conversation_id}/restore":{"post":{"tags":["conversations"],"summary":"Restore Conversation","description":"Restore a techpack out of Trash.","operationId":"restore_conversation_conversations__conversation_id__restore_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__conversation__ConversationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/conversations/{conversation_id}/permanent":{"delete":{"tags":["conversations"],"summary":"Permanently Delete Conversation","description":"Permanently delete a techpack that is already in Trash. Cannot be undone.","operationId":"permanently_delete_conversation_conversations__conversation_id__permanent_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designboard/folders":{"get":{"tags":["designboard-folders"],"summary":"List Folders","operationId":"list_folders_designboard_folders_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignboardFolderListResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["designboard-folders"],"summary":"Create Folder","operationId":"create_folder_designboard_folders_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignboardFolderCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignboardFolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/designboard/folders/{folder_id}":{"get":{"tags":["designboard-folders"],"summary":"Get Folder","operationId":"get_folder_designboard_folders__folder_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignboardFolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["designboard-folders"],"summary":"Update Folder","operationId":"update_folder_designboard_folders__folder_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignboardFolderUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignboardFolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["designboard-folders"],"summary":"Delete Folder","description":"Delete a folder and its memberships. Projects themselves are not deleted.","operationId":"delete_folder_designboard_folders__folder_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designboard/folders/{folder_id}/projects":{"post":{"tags":["designboard-folders"],"summary":"Add Project","operationId":"add_project_designboard_folders__folder_id__projects_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignboardFolderAddProjectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignboardFolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designboard/folders/{folder_id}/projects/bulk-remove":{"post":{"tags":["designboard-folders"],"summary":"Bulk Remove Projects","operationId":"bulk_remove_projects_designboard_folders__folder_id__projects_bulk_remove_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignboardFolderRemoveProjectsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignboardFolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designboard/folders/{folder_id}/projects/{conversation_id}":{"delete":{"tags":["designboard-folders"],"summary":"Remove Project","operationId":"remove_project_designboard_folders__folder_id__projects__conversation_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignboardFolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/illustrator/inbox":{"get":{"tags":["illustrator"],"summary":"List Inbox","operationId":"list_inbox_illustrator_inbox_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["illustrator"],"summary":"Send To Illustrator","operationId":"send_to_illustrator_illustrator_inbox_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxSendRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/illustrator/inbox/ack":{"post":{"tags":["illustrator"],"summary":"Ack Inbox","description":"Marks items placed or dismissed. Ids that aren't the caller's are ignored.","operationId":"ack_inbox_illustrator_inbox_ack_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxAckRequest"}}},"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":[]}]}},"/illustrator/inbox/{item_id}/svg":{"get":{"tags":["illustrator"],"summary":"Inbox Item Svg","description":"The item's 2D flat as editable vector paths, for the panel to place instead of the flat image.","operationId":"inbox_item_svg_illustrator_inbox__item_id__svg_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/illustrator/return":{"post":{"tags":["illustrator"],"summary":"Send Back From Illustrator","operationId":"send_back_from_illustrator_illustrator_return_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_send_back_from_illustrator_illustrator_return_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":[]}]}},"/bulk-create/suggest-mapping":{"post":{"tags":["bulk-create"],"summary":"Suggest Mapping","description":"Groups every scanned artboard into garments with one Gemini call (purely\nAI-driven -- see ``bulk_create_service.suggest_all_groups``).","operationId":"suggest_mapping_bulk_create_suggest_mapping_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/bulk-create/from-file":{"post":{"tags":["bulk-create"],"summary":"Bulk Create From File","description":"Website-upload path (Phase 2): accepts one PDF-compatible .ai file,\nstores it, and dispatches the same scan + AI-grouping pipeline the plugin\npath already uses. Poll ``GET /bulk-create/proposals/{id}`` for the result.","operationId":"bulk_create_from_file_bulk_create_from_file_post","responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/bulk-create/proposals/{proposal_id}":{"get":{"tags":["bulk-create"],"summary":"Get Bulk Create Proposal","operationId":"get_bulk_create_proposal_bulk_create_proposals__proposal_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/bulk-create/proposals/{proposal_id}/confirm":{"post":{"tags":["bulk-create"],"summary":"Confirm Bulk Create Proposal","description":"Renders the confirmed garments' views straight from the stored .ai/PDF\nand creates the jobs -- same response shape as ``POST /bulk-create/jobs``.","operationId":"confirm_bulk_create_proposal_bulk_create_proposals__proposal_id__confirm_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmBulkCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/bulk-create/logo":{"get":{"tags":["bulk-create"],"summary":"Get Bulk Logo","description":"The logo waiting for the next batch, if any.","operationId":"get_bulk_logo_bulk_create_logo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["bulk-create"],"summary":"Upload Bulk Logo","description":"Step 2 of bulk creation: the logo for the next batch. Held for 24 h and put on\nthe cover of every tech pack that batch creates.","operationId":"upload_bulk_logo_bulk_create_logo_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"delete":{"tags":["bulk-create"],"summary":"Clear Bulk Logo","description":"\"Skip for now\": the next batch gets no logo.","operationId":"clear_bulk_logo_bulk_create_logo_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/bulk-create/last-batch":{"get":{"tags":["bulk-create"],"summary":"Get Last Bulk Batch","description":"The most recent batch that landed (``folder_id``, ``created``, ``created_at``\nas epoch seconds), or nulls. Polled by the website while the user is in Illustrator.","operationId":"get_last_bulk_batch_bulk_create_last_batch_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/bulk-create/size-guides/{guide_id}/sizes":{"get":{"tags":["bulk-create"],"summary":"Get Size Guide Sizes","description":"Sizes in one of the brand's size guides, for the block spec form.","operationId":"get_size_guide_sizes_bulk_create_size_guides__guide_id__sizes_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"guide_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Guide Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/bulk-create/blocks/saved":{"get":{"tags":["bulk-create"],"summary":"List Saved Blocks","description":"Block names used in any of the user's batches, each with its last spec.","operationId":"list_saved_blocks_bulk_create_blocks_saved_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/bulk-create/folders/{folder_id}/blocks":{"get":{"tags":["bulk-create"],"summary":"List Blocks","description":"Blocks in a bulk batch folder, each design's phase, and the designs not in a block.","operationId":"list_blocks_bulk_create_folders__folder_id__blocks_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["bulk-create"],"summary":"Create Block","operationId":"create_block_bulk_create_folders__folder_id__blocks_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBlockRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/bulk-create/folders/{folder_id}/blocks/{block_id}/spec":{"put":{"tags":["bulk-create"],"summary":"Set Block Spec","description":"One spec for the whole block: size guide, sizes, sample size, fabric, samples.","operationId":"set_block_spec_bulk_create_folders__folder_id__blocks__block_id__spec_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}},{"name":"block_id","in":"path","required":true,"schema":{"type":"string","title":"Block Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockSpecRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/bulk-create/folders/{folder_id}/blocks/{block_id}/generate":{"post":{"tags":["bulk-create"],"summary":"Generate Block","description":"Generate all: apply the block spec to every design and start construction, POM and BOM.","operationId":"generate_block_bulk_create_folders__folder_id__blocks__block_id__generate_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}},{"name":"block_id","in":"path","required":true,"schema":{"type":"string","title":"Block Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/bulk-create/jobs":{"post":{"tags":["bulk-create"],"summary":"Create Bulk Jobs","description":"Creates one bare tech pack per confirmed garment, grouped into a new\ndesign board folder. One garment failing does not abort the others.","operationId":"create_bulk_jobs_bulk_create_jobs_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/questionnaires/structure":{"get":{"tags":["questionnaires"],"summary":"Get Questionnaire Structure","description":"Get questionnaire structure grouped by phases.\n\nReturns a list of phases with metadata including:\n- Phase name\n- Phase order\n- Question count\n- Question IDs in that phase\n\nIf session_id is provided, also includes completion status:\n- Answered questions count\n- Whether phase is complete\n- Whether phase is current\n\nThis endpoint is used by the frontend to display phase cards\nin the wizard overview modal.","operationId":"get_questionnaire_structure_questionnaires_structure_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"product_type","in":"query","required":true,"schema":{"$ref":"#/components/schemas/ProductType","description":"Product type (jewelry or clothes)"},"description":"Product type (jewelry or clothes)"},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Session ID to include completion status","title":"Session Id"},"description":"Session ID to include completion status"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionnaireStructureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/{session_id}/answer":{"post":{"tags":["questionnaires"],"summary":"Submit Answer","description":"Submit an answer to a question\n\nSupports file uploads for questions with input_type='file_upload'.\nFiles are uploaded to Backblaze B2 and URLs are stored in the database.","operationId":"submit_answer_questionnaires__session_id__answer_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}},{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_submit_answer_questionnaires__session_id__answer_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitAnswerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/{session_id}/current":{"get":{"tags":["questionnaires"],"summary":"Get Current Question","description":"Get the current state of a questionnaire session","operationId":"get_current_question_questionnaires__session_id__current_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}},{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCurrentQuestionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/{session_id}/conversation":{"get":{"tags":["questionnaires"],"summary":"Get Conversation History","description":"Get all questions and answers for a session in conversation format","operationId":"get_conversation_history_questionnaires__session_id__conversation_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetConversationHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/{session_id}/submit":{"post":{"tags":["questionnaires"],"summary":"Submit Questionnaire","description":"Submit completed questionnaire, create (or reuse) a queued tech pack job,\nand dispatch Phase 1 generation immediately (same Celery task as admin start).","operationId":"submit_questionnaire_questionnaires__session_id__submit_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}},{"name":"force_regenerate","in":"query","required":false,"schema":{"type":"boolean","description":"Allow regeneration even when questionnaire answers have not changed.","default":false,"title":"Force Regenerate"},"description":"Allow regeneration even when questionnaire answers have not changed."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitQuestionnaireResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/bulk-translate":{"post":{"tags":["questionnaires"],"summary":"Bulk Translate Jobs","description":"Enqueue Google Translate, into ``locale`` only, for every construction/POM\ncallout scene, the tech-pack content fields (style desc, fabric, colourway\nnames, care instructions, BOM/POM table rows), and comments across all of\nthe current user's tech pack jobs. Called when the user selects a\nlanguage in the switcher - translation is lazy/on-demand, not eager, so\nthis is the only place a locale actually gets translated into.\n\n``current_job_id``, when given, moves that job to the front of the\ndispatch order so whatever the caller is actively looking at finishes\ntranslating first instead of queueing behind the rest of the account's\njob history.","operationId":"bulk_translate_jobs_questionnaires_jobs_bulk_translate_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"locale","in":"query","required":true,"schema":{"type":"string","title":"Locale"}},{"name":"current_job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/touch-up-version":{"post":{"tags":["questionnaires"],"summary":"Create Touch Up Version","description":"Clone a tech pack into a new version for 2D touch-up (V1.1, V1.2, …).\n\nCopies questionnaire + size guide + sample size + construction + Visual Studio +\nsizing reference + current 2D flats. Parent POM is copied as an interim seed when\nflats are unchanged; workspace automation regenerates POM after Approve 3D.\n\n``touch_up_3d_intent`` controls post-approve 3D: regenerate from updated flats or\nretain renders from the source tech pack.","operationId":"create_touch_up_version_questionnaires_jobs__job_id__touch_up_version_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TouchUpVersionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/duplicate":{"post":{"tags":["questionnaires"],"summary":"Duplicate Techpack","description":"Duplicate a tech pack into a new, private Designboard project (\"Copy of …\").\n\nEverything is copied as it stands; nothing is regenerated. Billed like starting a\nnew tech pack: it counts against the monthly allowance, then spends a credit where\na new pack would.","operationId":"duplicate_techpack_questionnaires_jobs__job_id__duplicate_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/my-access":{"get":{"tags":["questionnaires"],"summary":"Get My Techpack Access","description":"What the signed-in user may do on this tech pack (team access level).","operationId":"get_my_techpack_access_questionnaires_jobs__job_id__my_access_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechpackAccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/my-techpack-permissions":{"get":{"tags":["questionnaires"],"summary":"Get My Techpack Permissions","description":"Whether the signed-in user may start new tech packs (Full access for teammates).","operationId":"get_my_techpack_permissions_questionnaires_my_techpack_permissions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechpackCreatePermissionResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/questionnaires/jobs/{job_id}/versions":{"get":{"tags":["questionnaires"],"summary":"List Job Versions","description":"List every version linked to this job's family (root + touch-up versions), oldest\nfirst. Works from any member — the root is \"V1.0\", clones are \"V1.1\", \"V1.2\", ….","operationId":"list_job_versions_questionnaires_jobs__job_id__versions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/latest-version":{"get":{"tags":["questionnaires"],"summary":"Resolve Latest Version","description":"Resolve any member of a tech pack's version family to the newest *ready* version's\njob id, so opening a tech pack lands on the latest version. Returns the requested id\nunchanged when no version is ready. Access is checked on the requested job; the family\nshares one owner.","operationId":"resolve_latest_version_questionnaires_jobs__job_id__latest_version_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}":{"get":{"tags":["questionnaires"],"summary":"Get Job Status","description":"Get the status of a tech pack generation job","operationId":"get_job_status_questionnaires_jobs__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/completion":{"get":{"tags":["questionnaires"],"summary":"Get Job Completion","description":"Report whether a tech pack finished with tabs skipped for entitlement reasons\n(legacy tiers without Size Studio) and, if so, whether the actor can now resume\nby re-running Size Studio.","operationId":"get_job_completion_questionnaires_jobs__job_id__completion_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/share/protection":{"get":{"tags":["questionnaires"],"summary":"Get Share Protection","operationId":"get_share_protection_questionnaires_jobs__job_id__share_protection_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareProtectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["questionnaires"],"summary":"Set Share Protection","operationId":"set_share_protection_questionnaires_jobs__job_id__share_protection_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareProtectionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareProtectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/share/expiry":{"patch":{"tags":["questionnaires"],"summary":"Update Share Expiry","operationId":"update_share_expiry_questionnaires_jobs__job_id__share_expiry_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareExpiryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareProtectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/share/revoke":{"post":{"tags":["questionnaires"],"summary":"Revoke Share Link","operationId":"revoke_share_link_questionnaires_jobs__job_id__share_revoke_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareProtectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/platform-state":{"get":{"tags":["questionnaires"],"summary":"Get Tech Pack Platform State","description":"Prefill + saved overrides for the in-app tech pack editor (camelCase keys).\nQuestionnaire answers and profile populate `prefill`; user edits on tech pack pages live in `saved`.","operationId":"get_tech_pack_platform_state_questionnaires_jobs__job_id__platform_state_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPlatformStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["questionnaires"],"summary":"Patch Tech Pack Platform State","description":"Merge partial tech pack platform fields into `tech_pack_jobs.platform_payload`.\n\nVisual Studio (non-questionnaire) inputs: PATCH a nested object, e.g.\n`{\"visualStudio\": {\"mainFabric\": \"...\", \"colourText\": \"…\", \"colourImageUrl\": \"https://…\",\n\"artworkImageUrl\": \"https://…\", \"patternImageUrl\": \"https://…\",\n\"artworkPlacementSides\": \"front\"|\"back\"|\"both\", \"artworkPlacementNotes\": \"…\"}}`.\n`colourRefUrl` / `printImageUrl` / `customPrintUrl` are accepted as legacy aliases.\nPartial keys merge with any previously saved `visualStudio` blob.\n\n`rebuild=false` skips the post-save full state rebuild for callers that\ndiscard the response body, returning only `job_id`/`saved`/`job_status`.\nGarment row `dye` colours may be sent as plain Pantone code strings or as the\nenriched `{\"pantone\",\"hex\",\"rgb\",\"name\"}` objects this endpoint's GET returns.","operationId":"patch_tech_pack_platform_state_questionnaires_jobs__job_id__platform_state_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"rebuild","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Rebuild"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPlatformStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/colorways/{colorway_index}/delete":{"post":{"tags":["questionnaires"],"summary":"Delete Colourway","description":"Delete colourway ``colorway_index`` (0-based; 1 and up — Colourway 1 can't be deleted).\n\nIts renders, colours and cover swatches go, and later colourways move down one slot.\nNothing is refunded. Refused while a generation is running.","operationId":"delete_colourway_questionnaires_jobs__job_id__colorways__colorway_index__delete_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"colorway_index","in":"path","required":true,"schema":{"type":"integer","title":"Colorway Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPlatformStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/construction-scene":{"patch":{"tags":["questionnaires"],"summary":"Patch Construction Scene","description":"Persist user edits to a Construction-tab CalloutScene (front or back).\n\nThe Konva editor on the frontend owns rendering; this endpoint just round-trips\nthe scene JSON into ``platform_payload.constructionSceneFront``/``Back``.","operationId":"patch_construction_scene_questionnaires_jobs__job_id__construction_scene_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConstructionScenePatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPlatformStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/pom-scene":{"patch":{"tags":["questionnaires"],"summary":"Patch Pom Scene","description":"Persist user edits to a POM-tab PomScene (front or back).\n\nMirrors ``patch_construction_scene``. Round-trips the dimension-line\nscene JSON into ``platform_payload.pomSceneFront``/``Back``.","operationId":"patch_pom_scene_questionnaires_jobs__job_id__pom_scene_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PomScenePatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPlatformStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/artwork-scene":{"patch":{"tags":["questionnaires"],"summary":"Patch Artwork Scene","description":"Persist user edits to the Artwork Image tab scene (front, back, or extra view).\n\nRound-trips Konva dimension lines into ``artworkSceneFront``/``Back`` (or the targeted\nextra view's ``artworkScene``) and syncs ``artworkPlacementViews`` for the left-hand table.","operationId":"patch_artwork_scene_questionnaires_jobs__job_id__artwork_scene_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PomScenePatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPlatformStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/infer-artwork-logo-dimensions":{"post":{"tags":["questionnaires"],"summary":"Infer Artwork Logo Dimensions","description":"Vision LLM: reads saved ``visualStudio`` (artwork URL, sides, notes) and writes ``artworkLogoDimensionSpec``.\nNormally runs automatically after automated BOM; this endpoint is for optional manual retry.","operationId":"infer_artwork_logo_dimensions_questionnaires_jobs__job_id__infer_artwork_logo_dimensions_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InferArtworkLogoDimensionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/artwork/detect":{"post":{"tags":["questionnaires"],"summary":"Detect Flat Artwork","description":"Vision: does the saved 2D flat (front/back) already have artwork? Returns ``{view, hasArtwork, regions}``.","operationId":"detect_flat_artwork_questionnaires_jobs__job_id__artwork_detect_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_detect_flat_artwork_questionnaires_jobs__job_id__artwork_detect_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/artwork/remove":{"post":{"tags":["questionnaires"],"summary":"Remove Flat Artwork","description":"Regenerate the 2D flat with the artwork removed (garment preserved); repoints\n``visualStudio.{front,back}FlatUrl``. Returns ``{view, flatUrl}``.","operationId":"remove_flat_artwork_questionnaires_jobs__job_id__artwork_remove_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_remove_flat_artwork_questionnaires_jobs__job_id__artwork_remove_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/artwork/remove-2d":{"post":{"tags":["questionnaires"],"summary":"Remove 2D Flat Artwork As Variation","description":"Remove artwork from the 2D flat(s), non-destructively: the artworked flat pair is preserved\nas a previous Design variation and the clean pair becomes the active flat. Returns\n``{scope, frontUrl, backUrl}``.","operationId":"remove_2d_flat_artwork_as_variation_questionnaires_jobs__job_id__artwork_remove_2d_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_remove_2d_flat_artwork_as_variation_questionnaires_jobs__job_id__artwork_remove_2d_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/artwork/remove-3d":{"post":{"tags":["questionnaires"],"summary":"Remove 3D Render Artwork","description":"Remove artwork from the active 3D render(s) of a colourway, non-destructively:\nthe artworked pair is preserved as a previous Design variation and the clean pair becomes the\nactive render. ``scope`` is 'front', 'back' or 'both'. The 2D flats are NOT modified.\nReturns ``{colorwayIndex, scope, frontUrl, backUrl}``.","operationId":"remove_3d_render_artwork_questionnaires_jobs__job_id__artwork_remove_3d_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_remove_3d_render_artwork_questionnaires_jobs__job_id__artwork_remove_3d_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/artwork/extract":{"post":{"tags":["questionnaires"],"summary":"Extract And Dimension Flat Artwork","description":"Uploaded flat already has artwork: measure placement on the flat (no graphic isolation).\n\nUsers upload standalone graphics in the Artwork Table. Returns placement diagrams and dimension spec.","operationId":"extract_and_dimension_flat_artwork_questionnaires_jobs__job_id__artwork_extract_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_extract_and_dimension_flat_artwork_questionnaires_jobs__job_id__artwork_extract_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/artwork/dimension-all":{"post":{"tags":["questionnaires"],"summary":"Dimension All Flat Artworks","description":"Multi-artwork: dimension EVERY artwork already on the flat (e.g. existing + newly-added)\nand render the placement diagram with callouts for all of them.\n\nAsync: this enqueues the work on the Celery worker tier (Gemini dimensioning can exceed the\nAPI load-balancer request timeout) and returns immediately. Poll ``artworkDimensionStatus``\non platform state; the measured spec lands in ``visualStudio.artworkLogoDimensionSpec``.","operationId":"dimension_all_flat_artworks_questionnaires_jobs__job_id__artwork_dimension_all_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_dimension_all_flat_artworks_questionnaires_jobs__job_id__artwork_dimension_all_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/artwork/add":{"post":{"tags":["questionnaires"],"summary":"Add Artwork To Flat","description":"Flows 1 & 2: place ``visualStudio.artworkImageUrl`` onto the uploaded flat (Gemini), keeping\nany artwork already present, then render placement (left) + artwork dimensions (right). Returns\n``{view, composedFlatUrl, placementDiagramUrl, artworkDimensionDiagramUrl, dimensionSpec}``.","operationId":"add_artwork_to_flat_questionnaires_jobs__job_id__artwork_add_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_add_artwork_to_flat_questionnaires_jobs__job_id__artwork_add_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/artwork/replace":{"post":{"tags":["questionnaires"],"summary":"Replace Artwork On Flat","description":"Flow 3: remove the existing artwork from the flat, place ``visualStudio.artworkImageUrl``\ninstead (Gemini), then render placement (left) + new artwork dimensions (right). Returns\n``{view, composedFlatUrl, placementDiagramUrl, artworkDimensionDiagramUrl, dimensionSpec}``.","operationId":"replace_artwork_on_flat_questionnaires_jobs__job_id__artwork_replace_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_replace_artwork_on_flat_questionnaires_jobs__job_id__artwork_replace_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/artwork/remove-bg":{"post":{"tags":["questionnaires"],"summary":"Remove Artwork Background","description":"Cut the background out of an artwork image server-side (ONNX, no Gemini).\n\nReturns ``{\"url\": \"<public url>\"}`` — same shape as visual-studio-upload.","operationId":"remove_artwork_background_questionnaires_jobs__job_id__artwork_remove_bg_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_remove_artwork_background_questionnaires_jobs__job_id__artwork_remove_bg_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/analyse-garment":{"post":{"tags":["questionnaires"],"summary":"Analyse Garment","description":"Enqueue vision LLM analysis of original sketch uploads + approved 2D flats.\n\nResult is written to ``platform_payload.garmentAnalysePayload`` (status + rows).\nPoll GET ``/jobs/{job_id}/platform-state`` until ``merged.garmentAnalysePayload.status``\nis ``completed`` or ``failed``. Does not persist style placement — save via PATCH\nplatform-state after the user reviews and edits.","operationId":"analyse_garment_questionnaires_jobs__job_id__analyse_garment_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/ensure-placement-anchors":{"post":{"tags":["questionnaires"],"summary":"Ensure Placement Anchors","description":"Fill missing garment-map pointer anchors on existing style-placement rows.\n\nPoll GET ``/jobs/{job_id}/platform-state`` until\n``merged.placementAnchorsPayload.status`` is ``completed`` or ``failed``.","operationId":"ensure_placement_anchors_questionnaires_jobs__job_id__ensure_placement_anchors_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/colorways/{colorway_index}/source":{"post":{"tags":["questionnaires"],"summary":"Set Colourway Source","description":"Colourway 2+: remember whether the user uploads this colourway or generates it, so the\n\"Do you have this colourway to upload?\" prompt is asked once per colourway.","operationId":"set_colourway_source_questionnaires_jobs__job_id__colorways__colorway_index__source_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"colorway_index","in":"path","required":true,"schema":{"type":"integer","title":"Colorway Index"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColourwaySourceBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/generate-colorway":{"post":{"tags":["questionnaires"],"summary":"Generate Colorway","description":"Enqueue 3D generation for a specific colorway (index 1+). Reads style placement from\n``platform_payload.colorways[colorway_index].stylePlacement``.\n\nPhotograph / 3D-input jobs recolour from Colourway 1's approved 3D renders; sketch jobs use\napproved 2D flats. Results are stored in ``platform_payload.colorways[colorway_index]``.\nJob status is not changed.","operationId":"generate_colorway_questionnaires_jobs__job_id__generate_colorway_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateColorwayBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/apply-treatments":{"post":{"tags":["questionnaires"],"summary":"Apply Treatments","description":"Enqueue Gemini treatment application (e.g. distressing, washes) onto a colourway's existing\n3D render. Reads/writes ``platform_payload.treatmentApplication``. Job status is not changed.","operationId":"apply_treatments_questionnaires_jobs__job_id__apply_treatments_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyTreatmentsBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/regenerate-3d":{"post":{"tags":["questionnaires"],"summary":"Regenerate 3D","description":"Clothes only: while ``awaiting_3d_review``, re-generate 3D for **one colourway** from the approved\nouter 2D flats and that slot's saved style placement. Other colourways are not modified.\n\nLimited to ``THREED_REGENERATE_LIMIT_PER_COLOURWAY`` per colourway slot.","operationId":"regenerate_3d_questionnaires_jobs__job_id__regenerate_3d_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Regenerate3dBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/artwork-library":{"get":{"tags":["questionnaires"],"summary":"Get Artwork Library","description":"Artwork this user (or their brand) uploaded on any previous tech pack.","operationId":"get_artwork_library_questionnaires_artwork_library_get","security":[{"OAuth2PasswordBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArtworkLibraryResponse"}}}}}},"delete":{"tags":["questionnaires"],"summary":"Delete Artwork Library Url","description":"Remove ``url`` from this user's/brand's artwork library for good. The\nstored image file and any design that already placed it are untouched;\nthis only stops the URL resurfacing in the library.","operationId":"delete_artwork_library_url_questionnaires_artwork_library_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","minLength":1,"title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArtworkLibraryDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/artwork-library/usage":{"get":{"tags":["questionnaires"],"summary":"Get Artwork Library Usage","description":"Count of this user's/brand's tech pack jobs whose SAVED design actually\nplaces ``url`` (not just library membership) — used by the delete\nconfirmation warning.","operationId":"get_artwork_library_usage_questionnaires_artwork_library_usage_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","minLength":1,"title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArtworkLibraryUsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/visual-studio-upload":{"post":{"tags":["questionnaires"],"summary":"Upload Visual Studio Image","description":"Upload a single image for Visual Studio. Returns `{ \"url\": \"<public url>\" }` — store it via\n`PATCH …/platform-state` on `visualStudio.colourImageUrl`, `visualStudio.artworkImageUrl`, or\n`visualStudio.patternImageUrl`.","operationId":"upload_visual_studio_image_questionnaires_jobs__job_id__visual_studio_upload_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_visual_studio_image_questionnaires_jobs__job_id__visual_studio_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/upload-3d-render":{"post":{"tags":["questionnaires"],"summary":"Upload Techpack 3D Render","description":"Upload a user-provided 3D render. Index 0 sets ``front_3d_url``/``back_3d_url`` on the job\n(the tech pack cover page) and syncs colourway 1; index > 0 replaces that colourway slot only.","operationId":"upload_techpack_3d_render_questionnaires_jobs__job_id__upload_3d_render_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_techpack_3d_render_questionnaires_jobs__job_id__upload_3d_render_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/illustration-upload":{"post":{"tags":["questionnaires"],"summary":"Upload Illustration Image","description":"Upload a single flattened illustration PNG (one Illustration Studio view). Returns\n`{ \"url\": \"<public url>\" }` — store it via `PATCH …/platform-state` on\n`illustrations.<front|back>.pngUrl` (alongside that view's editable `drawing` JSON).","operationId":"upload_illustration_image_questionnaires_jobs__job_id__illustration_upload_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_illustration_image_questionnaires_jobs__job_id__illustration_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/import-techpack":{"post":{"tags":["questionnaires"],"summary":"Import Techpack From Pdf","description":"Import a techpack bundle (PDF, XLSX/XLS/CSV, DOCX, images, or a safe ZIP of those)\nas a new, editable job.\n\nCreates a bare job (new Conversation + QuestionnaireSession + TechPackJob), normalizes\nevery uploaded file via ``techpack_import_ingest.normalize_bundle``, persists the resulting\nmanifest as ``techpackImportSources``, and dispatches the appropriate extraction task.\nPDFs pause after page classification so the user can confirm page roles and table-column\nmapping. Spreadsheets skip that step and extract immediately.","operationId":"import_techpack_from_pdf_questionnaires_jobs_import_techpack_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_techpack_from_pdf_questionnaires_jobs_import_techpack_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportTechpackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/questionnaires/jobs/{job_id}/confirm-techpack-import":{"post":{"tags":["questionnaires"],"summary":"Confirm Techpack Import","description":"Resume import after the user confirms page roles and table column mapping.","operationId":"confirm_techpack_import_questionnaires_jobs__job_id__confirm_techpack_import_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmImportTechpackRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportTechpackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/retry-techpack-import":{"post":{"tags":["questionnaires"],"summary":"Retry Techpack Import","description":"Re-dispatch extraction for an import that ended in ``failed`` (e.g. a Gemini\ntransport failure), reusing the previously stored source file and column mapping.","operationId":"retry_techpack_import_questionnaires_jobs__job_id__retry_techpack_import_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportTechpackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/import-readiness/recompute":{"post":{"tags":["questionnaires"],"summary":"Recompute Import Readiness","description":"Re-run the readiness checklist + capabilities audit against the job's current\n``platform_payload`` and re-save them. For jobs whose extraction already completed\nbut where ``techpackImportReadiness``/``techpackImportCapabilities`` failed to\npersist (e.g. a schema-validation drop swallowed at save time) -- lets us repair\nan existing job without re-running the (slow, costly) extraction itself.","operationId":"recompute_import_readiness_questionnaires_jobs__job_id__import_readiness_recompute_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportReadinessRecomputeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/import-acknowledge":{"post":{"tags":["questionnaires"],"summary":"Acknowledge Techpack Import Draft","description":"User chose \"Continue to tech pack\" from the import checklist with required items\nstill unresolved. Persists the acknowledgement so the tech pack pages stop redirecting\nback to the checklist purely on unresolved required items -- background processing and\na missing readiness snapshot still gate access (see get_job_platform_state's safety net\nand the FE's own processingItems/readiness-missing checks).","operationId":"acknowledge_techpack_import_draft_questionnaires_jobs__job_id__import_acknowledge_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportAcknowledgeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/cancel-techpack-import":{"post":{"tags":["questionnaires"],"summary":"Cancel Techpack Import","operationId":"cancel_techpack_import_questionnaires_jobs__job_id__cancel_techpack_import_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelImportTechpackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/import-resolve":{"post":{"tags":["questionnaires"],"summary":"Import Resolve Gap","description":"Apply one answer to one readiness checklist item, then re-audit and return readiness.\nThin wrapper -- all behaviour lives in\n``techpack_import_resolve.resolve_checklist_item``, shared with the agent's\n``resolve_checklist_item``/``apply_attachment`` tools so both paths stay identical.","operationId":"import_resolve_gap_questionnaires_jobs__job_id__import_resolve_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_resolve_gap_questionnaires_jobs__job_id__import_resolve_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportResolveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/import-candidate/{candidate_id}/approve":{"post":{"tags":["questionnaires"],"summary":"Approve Import Candidate","description":"Promotes a pending generated candidate (e.g. AI back flat) to canonical. Thin\nwrapper -- shared with the agent's ``respond_candidate`` tool via\n``techpack_import_resolve.respond_candidate``.","operationId":"approve_import_candidate_questionnaires_jobs__job_id__import_candidate__candidate_id__approve_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"candidate_id","in":"path","required":true,"schema":{"type":"string","title":"Candidate Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportResolveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/import-candidate/{candidate_id}/reject":{"post":{"tags":["questionnaires"],"summary":"Reject Import Candidate","description":"Marks a pending generated candidate rejected. Canonical asset is untouched. Thin\nwrapper -- shared with the agent's ``respond_candidate`` tool via\n``techpack_import_resolve.respond_candidate``.","operationId":"reject_import_candidate_questionnaires_jobs__job_id__import_candidate__candidate_id__reject_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"candidate_id","in":"path","required":true,"schema":{"type":"string","title":"Candidate Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportResolveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/import-candidate/{candidate_id}/regenerate":{"post":{"tags":["questionnaires"],"summary":"Regenerate Import Candidate","description":"Rejects the given candidate (if still pending) and re-dispatches generation.","operationId":"regenerate_import_candidate_questionnaires_jobs__job_id__import_candidate__candidate_id__regenerate_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"candidate_id","in":"path","required":true,"schema":{"type":"string","title":"Candidate Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportResolveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/import-agent":{"post":{"tags":["questionnaires"],"summary":"Import Agent Turn","description":"Starts one turn of the import-wizard agent as a Celery run: stores attachments\nby id, creates an idempotent ``AgentRun``, and returns ``202 {run_id}``. The bounded\ntool loop always executes off the request thread (``import_agent_tasks.run_import_agent_task``).","operationId":"import_agent_turn_questionnaires_jobs__job_id__import_agent_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_agent_turn_questionnaires_jobs__job_id__import_agent_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportAgentStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/import-agent/{run_id}":{"get":{"tags":["questionnaires"],"summary":"Get Import Agent Run","operationId":"get_import_agent_run_questionnaires_jobs__job_id__import_agent__run_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportAgentRunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/import-agent/{run_id}/cancel":{"post":{"tags":["questionnaires"],"summary":"Cancel Import Agent Run","operationId":"cancel_import_agent_run_questionnaires_jobs__job_id__import_agent__run_id__cancel_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportAgentRunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/size-guide-upload":{"post":{"tags":["questionnaires"],"summary":"Upload Size Guide For Size Studio","description":"Upload a size guide file for Size Studio (PDF/image/spreadsheet, max 20MB).","operationId":"upload_size_guide_for_size_studio_questionnaires_jobs__job_id__size_guide_upload_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_size_guide_for_size_studio_questionnaires_jobs__job_id__size_guide_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["questionnaires"],"summary":"Clear Size Guide For Size Studio","description":"Remove uploaded size guide and Size Studio extraction preview for this job.","operationId":"clear_size_guide_for_size_studio_questionnaires_jobs__job_id__size_guide_upload_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/extract-size-guide":{"post":{"tags":["questionnaires"],"summary":"Extract Size Guide For Size Studio","description":"Re-run size-chart parsing for Size Studio preview (does not write POM extraction fields).","operationId":"extract_size_guide_for_size_studio_questionnaires_jobs__job_id__extract_size_guide_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/size-studio-clarify":{"post":{"tags":["questionnaires"],"summary":"Clarify Size Studio","description":"Apply user answers to Size Studio LLM clarification questions.","operationId":"clarify_size_studio_questionnaires_jobs__job_id__size_studio_clarify_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizeStudioClarifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/complete-size-studio":{"post":{"tags":["questionnaires"],"summary":"Complete Size Studio","description":"Confirm Size Studio columns + sample size; open tech pack workspace (or resume legacy phase-1).","operationId":"complete_size_studio_questionnaires_jobs__job_id__complete_size_studio_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteSizeStudioRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/apply-manufacturer-size-guide":{"post":{"tags":["questionnaires"],"summary":"Apply Manufacturer Size Guide","description":"Apply a manufacturer's pre-extracted size guide into this job (no re-extraction).","operationId":"apply_manufacturer_size_guide_questionnaires_jobs__job_id__apply_manufacturer_size_guide_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyManufacturerSizeGuideRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/apply-brand-size-guide":{"post":{"tags":["questionnaires"],"summary":"Apply Brand Size Guide","description":"Apply a brand's own pre-extracted size guide into this job (no re-extraction).\n\nOnly the owning brand may apply their own guide.","operationId":"apply_brand_size_guide_questionnaires_jobs__job_id__apply_brand_size_guide_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyBrandSizeGuideRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/save-brand-size-guide":{"post":{"tags":["questionnaires"],"summary":"Save Brand Size Guide From Job","description":"Save the current job's extracted size guide into the brand's private library.","operationId":"save_brand_size_guide_from_job_questionnaires_jobs__job_id__save_brand_size_guide_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveBrandSizeGuideFromJobRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/update-size-studio-for-pom":{"post":{"tags":["questionnaires"],"summary":"Update Size Studio For Pom","description":"Recovery path when POM could not run: save Size Studio approval and enqueue POM only.\nDoes not restart construction, 2D, or 3D. Normal flow uses complete-size-studio instead.","operationId":"update_size_studio_for_pom_questionnaires_jobs__job_id__update_size_studio_for_pom_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteSizeStudioRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/colourway-swatch":{"post":{"tags":["questionnaires"],"summary":"Upload Colourway Swatch","description":"Save a colourway swatch from the colour picker (hex) and/or an uploaded image to Backblaze B2.\n\nUpdates ``platform_payload.colourwaySwatchHexByKey`` and ``colourwaySwatchImageByKey``.","operationId":"upload_colourway_swatch_questionnaires_jobs__job_id__colourway_swatch_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_colourway_swatch_questionnaires_jobs__job_id__colourway_swatch_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/colourway-pattern":{"post":{"tags":["questionnaires"],"summary":"Upload Colourway Pattern","description":"Save a colourway pattern image to Backblaze B2.\n\nSame persistence path as ``/colourway-swatch`` but image-only (no picker hex);\nthe swatch is tagged ``type='pattern'`` in ``platform_payload.coverColourwaySwatches``.","operationId":"upload_colourway_pattern_questionnaires_jobs__job_id__colourway_pattern_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_colourway_pattern_questionnaires_jobs__job_id__colourway_pattern_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/refine":{"post":{"tags":["questionnaires"],"summary":"Refine Visuals","description":"Submit a refinement request for a specific render.\n\nSupports three types of refinement inputs (all optional, but at least one required):\n1. Comment/note: Text feedback describing desired changes\n2. Annotated image: Original render with circles/marks showing WHERE to make changes\n3. Reference image: Separate image showing WHAT the user wants (style, color, design reference)\n\nThese can be used together or separately.\n\nThis endpoint:\n- Validates the job is in 'awaiting_review' status\n- Validates refinement count hasn't exceeded limit (max per side, tracked separately for 3D vs 2D)\n- Uploads images to storage (if provided)\n- Triggers regeneration of the specified render\n\n**asset=3d (default) — Clothing:** refining **front** also regenerates **back** 3D when\n``pair_mode=paired``; refining **back** can sync **front** when paired. Use ``pair_mode=single``\nto update only the selected side. Stored 2D flat URLs are cleared whenever 3D is refined so\nPhase 2 can rebuild flats from the latest 3Ds.\n\n**asset=2d:** refines **outer** technical **2D** flats only. Separate per-side limit.\n**Clothing** paired refresh (front↔back) is controlled by ``pair_mode``. Inner 2D, POM overlays,\nand BOM callout images are cleared when 2D is refined; 3D URLs are not modified.\n\nReturns updated job status.\n\nAllowed callers: session owner (the designer) or an admin.","operationId":"refine_visuals_questionnaires_jobs__job_id__refine_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"background_tasks","in":"query","required":false,"schema":{"title":"Background Tasks"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_refine_visuals_questionnaires_jobs__job_id__refine_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/regenerate-2d-flats":{"post":{"tags":["questionnaires"],"summary":"Regenerate 2D Flats","description":"Clothes only: while ``awaiting_review``, re-generate the outer front/back 2D technical\nflat pair from the user's original questionnaire design uploads (not from the current flats).\n\nLimited to ``FLAT2D_REGENERATE_LIMIT`` per job (separate from per-side refine limits).\nClears inner 2D and downstream POM/BOM callout URLs when complete.","operationId":"regenerate_2d_flats_questionnaires_jobs__job_id__regenerate_2d_flats_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/refine/cancel":{"post":{"tags":["questionnaires"],"summary":"Cancel Refinement","description":"Cancel an in-flight refinement operation for a specific side.\n\nBehavior:\n- Revokes matching Celery refine task(s) for this job/side.\n- Attempts termination for already running tasks.\n- Rolls back one refinement counter increment for this side so user can start over.\n\nAllowed callers: session owner or an admin.","operationId":"cancel_refinement_questionnaires_jobs__job_id__refine_cancel_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_cancel_refinement_questionnaires_jobs__job_id__refine_cancel_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/select-render-version":{"post":{"tags":["questionnaires"],"summary":"Select Render Version","description":"Select an older/newer render version as active for front/back.\nURLs must exist in current job URLs or in platform_payload render history.","operationId":"select_render_version_questionnaires_jobs__job_id__select_render_version_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectRenderVersionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/approve":{"post":{"tags":["questionnaires"],"summary":"Approve Tech Pack","description":"Accept reviewed renders.\n\n**Clothes (2D-first):** moves to ``awaiting_3d_start`` so the designer can complete Visual Studio\non the tech pack review page, then call ``POST /jobs/{job_id}/start-clothes-3d-generation`` to\nqueue 3D-from-2D — unless both production-match yes/no questions are Yes, in which case style\nplacement is analysed, saved, and colourway 1 3D is queued automatically (``processing``).\n\nConstruction KV merge and POM/BOM prefills run only after the user accepts 3D\n(see ``POST /jobs/{job_id}/approve-3d-renders``).\n\n**Jewelry:** marks the job **completed** (pack is produced in ``process_job``; no second finalize from approve).","operationId":"approve_tech_pack_questionnaires_jobs__job_id__approve_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Approve2DRenderRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/start-clothes-3d-generation":{"post":{"tags":["questionnaires"],"summary":"Start Clothes 3D Generation","description":"Clothes only: after outer 2D is approved (``awaiting_3d_start``), enqueue front+back 3D generation\nfrom approved flats plus Visual Studio references. Use when the designer is ready — not on 2D approve.","operationId":"start_clothes_3d_generation_questionnaires_jobs__job_id__start_clothes_3d_generation_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/approve-3d-renders":{"post":{"tags":["questionnaires"],"summary":"Approve Clothes 3D Renders","description":"Clothes: user accepts 3D front/back — move to ``awaiting_size_studio``.\nSize Studio completion opens ``workspace_active`` and queues post-render automation.\n\nRequires ``awaiting_3d_review``, confirmed colourway count, and front/back 3D for every colourway.","operationId":"approve_clothes_3d_renders_questionnaires_jobs__job_id__approve_3d_renders_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/approve-construction":{"post":{"tags":["questionnaires"],"summary":"Approve Construction Workspace","description":"Lock construction key-values after user review (clothes).\nAfter approval, Phase 1 render generation starts and uses the approved construction\nvalues in the render prompts.","operationId":"approve_construction_workspace_questionnaires_jobs__job_id__approve_construction_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveConstructionWorkspaceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/extra-views":{"post":{"tags":["questionnaires"],"summary":"Create Extra View","description":"Add a named extra 2D view; dispatch construction-KV generation for it.","operationId":"create_extra_view_questionnaires_jobs__job_id__extra_views_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateExtraViewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/extra-views/{view_id}/approve-construction":{"post":{"tags":["questionnaires"],"summary":"Approve Extra View Construction","description":"Approve (with optional edits) the construction KV for an extra view; dispatch 2D generation.","operationId":"approve_extra_view_construction_questionnaires_jobs__job_id__extra_views__view_id__approve_construction_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view_id","in":"path","required":true,"schema":{"type":"string","title":"View Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveExtraViewConstructionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/extra-views/{view_id}/refine":{"post":{"tags":["questionnaires"],"summary":"Refine Extra View","description":"Refine the single 2D image of a ready extra view (same operation as the 2D flat refine,\ntargeting an extra view by id). Multipart, mirroring ``POST /jobs/{job_id}/refine``:\nat least one of comment, annotated_image, or reference_image is required.","operationId":"refine_extra_view_questionnaires_jobs__job_id__extra_views__view_id__refine_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view_id","in":"path","required":true,"schema":{"type":"string","title":"View Id"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_refine_extra_view_questionnaires_jobs__job_id__extra_views__view_id__refine_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/extra-views/{view_id}/touch-up":{"post":{"tags":["questionnaires"],"summary":"Touch Up Extra View","description":"Accept a manual 2D touch-up (pencil/cover/eraser) drawn over a ready extra view.\n\nMirrors ``POST /jobs/{job_id}/accept-manual-2d-touchup`` but targets a single extra view:\nreplaces ``extraViews[view_id].url`` in place with the merged PNG, keeping the prior image\nunder ``previousUrl`` for undo. The view must already be ready with a generated image.","operationId":"touch_up_extra_view_questionnaires_jobs__job_id__extra_views__view_id__touch_up_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view_id","in":"path","required":true,"schema":{"type":"string","title":"View Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_touch_up_extra_view_questionnaires_jobs__job_id__extra_views__view_id__touch_up_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/extra-views/{view_id}":{"delete":{"tags":["questionnaires"],"summary":"Delete Extra View","description":"Remove an extra view from platform_payload.","operationId":"delete_extra_view_questionnaires_jobs__job_id__extra_views__view_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view_id","in":"path","required":true,"schema":{"type":"string","title":"View Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/finalize-tech-pack":{"post":{"tags":["questionnaires"],"summary":"Finalize Tech Pack Generation","description":"Start workspace finalize (Celery) for non-clothes after construction is approved and workspace step is ready.\n\nClothes use the staged in-app pipeline; this endpoint returns 409 for clothes.","operationId":"finalize_tech_pack_generation_questionnaires_jobs__job_id__finalize_tech_pack_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/feedback":{"post":{"tags":["questionnaires"],"summary":"Submit Job Feedback","description":"Save free-text feedback for either generation phase or final output phase.","operationId":"submit_job_feedback_questionnaires_jobs__job_id__feedback_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitJobFeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/request-manufacturer":{"post":{"tags":["questionnaires"],"summary":"Request Manufacturer Matching","description":"Request manufacturer matching for a completed tech pack.\n\nThis endpoint:\n- Validates the job is completed\n- Sends an email notification with user and conversation details\n- Returns success confirmation","operationId":"request_manufacturer_matching_questionnaires_jobs__job_id__request_manufacturer_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/techpack/generate-pom-table":{"post":{"tags":["questionnaires"],"summary":"Generate Techpack Pom Table","description":"Generate a structured POM JSON for the in-app tech pack table (Gemini Flash),\nusing the same core inputs as the Excel pipeline plus a serialized size-chart block.\nReference renders are optional; any URL that fails to download is skipped.","operationId":"generate_techpack_pom_table_questionnaires_techpack_generate_pom_table_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechpackPomGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechpackPomGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/questionnaires/jobs/{job_id}/regenerate-pom":{"post":{"tags":["questionnaires"],"summary":"Regenerate Pom","description":"Enqueue Celery regeneration of POM callout images and the POM table (multi-size extraction\nfrom approved 2D flats + size guide). Poll ``workspaceAutomationStatus`` on platform state.\n\nRe-runs size-guide extraction from the questionnaire upload every time.","operationId":"regenerate_pom_questionnaires_jobs__job_id__regenerate_pom_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/regenerate-bom":{"post":{"tags":["questionnaires"],"summary":"Regenerate Bom","description":"Enqueue Celery regeneration of the in-app BOM table. Poll ``bomAiStatus`` on platform state.\n\nIgnores ``bomAiCompleted`` so brands can recover when the table is empty or out of sync.","operationId":"regenerate_bom_questionnaires_jobs__job_id__regenerate_bom_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPlatformStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/regenerate-pom-callout-from-2d":{"post":{"tags":["questionnaires"],"summary":"Regenerate Pom Callout From 2D Flats","description":"Enqueue Celery regeneration of POM callout images only from current outer 2D flats.\nPoll ``workspaceAutomationStatus`` on platform state.","operationId":"regenerate_pom_callout_from_2d_flats_questionnaires_jobs__job_id__regenerate_pom_callout_from_2d_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/flat-render-image":{"get":{"tags":["questionnaires"],"summary":"Get Flat Render Image For Touchup","description":"Same-origin proxy for workspace 2D flat touch-up (avoids CORS/tainted canvas in the browser).\n\nServes a front/back flat by default, or a specific extra view's image when ``extra_view_id`` is given.","operationId":"get_flat_render_image_for_touchup_questionnaires_jobs__job_id__flat_render_image_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"side","in":"query","required":false,"schema":{"type":"string","description":"'front' or 'back' (ignored when extra_view_id is set)","default":"front","title":"Side"},"description":"'front' or 'back' (ignored when extra_view_id is set)"},{"name":"extra_view_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"If set, serve this extra view's image instead of the front/back flat","title":"Extra View Id"},"description":"If set, serve this extra view's image instead of the front/back flat"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/accept-manual-2d-touchup":{"post":{"tags":["questionnaires"],"summary":"Accept Manual 2D Touchup","description":"Accept a manual 2D flat touch-up (drawn in the workspace with pencil/cover/eraser).\n\nReplaces ``front_2d_url`` or ``back_2d_url``, clears downstream overlays, and enqueues\nconstruction callout + POM callout regeneration from the updated flat.","operationId":"accept_manual_2d_touchup_questionnaires_jobs__job_id__accept_manual_2d_touchup_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_accept_manual_2d_touchup_questionnaires_jobs__job_id__accept_manual_2d_touchup_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/colourway-1-from-flat":{"post":{"tags":["questionnaires"],"summary":"Colourway 1 From Flat","description":"Save the recoloured 2D flat as Colourway 1's flat (front_2d_url / back_2d_url). Free: no AI,\nno credits. The 3D render is untouched; previous flats stay selectable via select-render-version.","operationId":"colourway_1_from_flat_questionnaires_jobs__job_id__colourway_1_from_flat_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_colourway_1_from_flat_questionnaires_jobs__job_id__colourway_1_from_flat_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/edit-2d-variation":{"post":{"tags":["questionnaires"],"summary":"Edit 2D Variation","description":"Replace an edited 2D design variation's image(s) in place during 2D review.\n\nThe freehand-merged PNG(s) become the variation's new front/back url(s) wherever that\nvariation is stored. Other variations are untouched and no new variation is created.","operationId":"edit_2d_variation_questionnaires_jobs__job_id__edit_2d_variation_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_edit_2d_variation_questionnaires_jobs__job_id__edit_2d_variation_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/edit-3d-variation":{"post":{"tags":["questionnaires"],"summary":"Edit 3D Variation","description":"Replace an edited 3D design variation's image(s) in place during 3D review.\n\nThe freehand-merged PNG(s) become the variation's new front/back url(s) wherever that\nvariation is stored. Other variations are untouched and no new variation is created.","operationId":"edit_3d_variation_questionnaires_jobs__job_id__edit_3d_variation_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_edit_3d_variation_questionnaires_jobs__job_id__edit_3d_variation_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/regenerate-construction-callouts":{"post":{"tags":["questionnaires"],"summary":"Regenerate Construction Callouts","description":"Enqueue Celery regeneration of construction callout PNGs only (front/back) from current outer\n2D flats and the saved construction details/KV.\n\nPoll ``constructionCalloutsStatus`` and URLs on platform state.","operationId":"regenerate_construction_callouts_questionnaires_jobs__job_id__regenerate_construction_callouts_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/techpack/generate-bom-table":{"post":{"tags":["questionnaires"],"summary":"Generate Techpack Bom Table","description":"Generate structured BOM tables for the in-app tech pack editor.","operationId":"generate_techpack_bom_table_questionnaires_techpack_generate_bom_table_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechpackBomGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechpackBomGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/questionnaires/jobs/{job_id}/link-brand":{"post":{"tags":["questionnaires"],"summary":"Link Job To Brand","operationId":"link_job_to_brand_questionnaires_jobs__job_id__link_brand_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackAttributionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["questionnaires"],"summary":"Unlink Job From Brand","operationId":"unlink_job_from_brand_questionnaires_jobs__job_id__link_brand_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackAttributionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/link-manufacturer":{"post":{"tags":["questionnaires"],"summary":"Link Job To Manufacturer","operationId":"link_job_to_manufacturer_questionnaires_jobs__job_id__link_manufacturer_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TechPackLinkManufacturerRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackAttributionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["questionnaires"],"summary":"Unlink Job From Manufacturer","operationId":"unlink_job_from_manufacturer_questionnaires_jobs__job_id__link_manufacturer_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackAttributionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/link-manufacturer/{manufacturer_id}":{"delete":{"tags":["questionnaires"],"summary":"Unlink Job From Specific Manufacturer","operationId":"unlink_job_from_specific_manufacturer_questionnaires_jobs__job_id__link_manufacturer__manufacturer_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"manufacturer_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Manufacturer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackAttributionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/comments":{"post":{"tags":["questionnaires"],"summary":"Create Tech Pack Comment","operationId":"create_tech_pack_comment_questionnaires_jobs__job_id__comments_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackCommentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackCommentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["questionnaires"],"summary":"List Tech Pack Comments","operationId":"list_tech_pack_comments_questionnaires_jobs__job_id__comments_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional page slug filter (e.g. 'cover_page', 'pom'). When omitted, returns all comments on the tech pack.","title":"Page"},"description":"Optional page slug filter (e.g. 'cover_page', 'pom'). When omitted, returns all comments on the tech pack."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Viewer's current locale — substitutes each comment's body with its translation when it differs from the author's source_locale.","title":"Locale"},"description":"Viewer's current locale — substitutes each comment's body with its translation when it differs from the author's source_locale."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackCommentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/comments/mentionable-users":{"get":{"tags":["questionnaires"],"summary":"List Tech Pack Comment Mentionable Users","operationId":"list_tech_pack_comment_mentionable_users_questionnaires_jobs__job_id__comments_mentionable_users_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackCommentMentionableUsersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/comments/{comment_id}":{"patch":{"tags":["questionnaires"],"summary":"Update Tech Pack Comment","operationId":"update_tech_pack_comment_questionnaires_comments__comment_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackCommentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackCommentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["questionnaires"],"summary":"Delete Tech Pack Comment","operationId":"delete_tech_pack_comment_questionnaires_comments__comment_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comment Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/comments/{comment_id}/resolve":{"patch":{"tags":["questionnaires"],"summary":"Resolve Tech Pack Comment","operationId":"resolve_tech_pack_comment_questionnaires_comments__comment_id__resolve_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackCommentResolveUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackCommentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/presence/heartbeat":{"post":{"tags":["questionnaires"],"summary":"Heartbeat Tech Pack Presence","operationId":"heartbeat_tech_pack_presence_questionnaires_jobs__job_id__presence_heartbeat_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPresenceHeartbeat"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPresenceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/presence":{"get":{"tags":["questionnaires"],"summary":"List Tech Pack Presence","operationId":"list_tech_pack_presence_questionnaires_jobs__job_id__presence_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPresenceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/public/techpack/{share_code}/presence/heartbeat":{"post":{"tags":["questionnaires"],"summary":"Heartbeat Public Tech Pack Presence","operationId":"heartbeat_public_tech_pack_presence_questionnaires_public_techpack__share_code__presence_heartbeat_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"share_code","in":"path","required":true,"schema":{"type":"string","title":"Share Code"}},{"name":"x-share-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Share-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPresenceHeartbeat"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPresenceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/public/techpack/{share_code}/presence":{"get":{"tags":["questionnaires"],"summary":"List Public Tech Pack Presence","operationId":"list_public_tech_pack_presence_questionnaires_public_techpack__share_code__presence_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"share_code","in":"path","required":true,"schema":{"type":"string","title":"Share Code"}},{"name":"x-share-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Share-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPresenceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/download":{"get":{"tags":["questionnaires"],"summary":"Download Tech Pack","description":"Proxy download for a generated tech pack, adding a friendly filename.\n\nThis endpoint:\n- Verifies the job belongs to the current user (admins bypass ownership)\n- Deducts 1 credit and records the download (skipped on re-downloads)\n- Fetches the file from Backblaze B2 via the stored result_url\n- Returns the file with Content-Disposition set to\n  \"{ItemName}.xlsx\"\n\n``format`` defaults to \"pdf\" to match every existing caller (none send a\nformat today, and the file served here has always been the xlsx, not a\nPDF — that mismatch predates this gate and is not fixed here). Explicit\n\"excel\"/\"zip\" requests are tier-gated; \"zip\" is not implemented server-side.","operationId":"download_tech_pack_questionnaires_jobs__job_id__download_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(pdf|excel|zip)$","default":"pdf","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/sessions":{"get":{"tags":["questionnaires"],"summary":"List Sessions","description":"List all questionnaire sessions for the current user","operationId":"list_sessions_questionnaires_sessions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListSessionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/{session_id}":{"delete":{"tags":["questionnaires"],"summary":"Delete Session","description":"Delete a questionnaire session and all its data","operationId":"delete_session_questionnaires__session_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/sessions/jobs":{"get":{"tags":["questionnaires"],"summary":"Get Session Jobs Batch","description":"Batch-fetch jobs for up to 50 sessions in a single DB query.\nUsed by the design board to hydrate all project cards on load.\nSessions with no job are omitted. Brand teammates with tech pack view\naccess also receive jobs created by other members of that brand.\n\nThumbnail render URLs come from the newest *ready* version in each job's\nversion family (same rule as opening the tech pack cover page).","operationId":"get_session_jobs_batch_questionnaires_sessions_jobs_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_ids","in":"query","required":true,"schema":{"type":"array","items":{"type":"string","format":"uuid"},"title":"Session Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetJobStatusResponse"},"title":"Response Get Session Jobs Batch Questionnaires Sessions Jobs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/{session_id}/job":{"get":{"tags":["questionnaires"],"summary":"Get Session Job","description":"Get the tech pack generation job for a session (if exists).\n\nThis endpoint allows the frontend to check if a job exists for a session\non page load, enabling recovery from page refreshes.\n\nReturns:\n    - 204 No Content: No job exists for this session yet\n    - 200 OK: Job exists, returns GetJobStatusResponse","operationId":"get_session_job_questionnaires__session_id__job_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/public/techpack/{share_code}":{"get":{"tags":["questionnaires"],"summary":"Get Public Techpack View","operationId":"get_public_techpack_view_questionnaires_public_techpack__share_code__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"share_code","in":"path","required":true,"schema":{"type":"string","title":"Share Code"}},{"name":"x-share-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Share-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTechPackViewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/public/techpack/{share_code}/translate":{"post":{"tags":["questionnaires"],"summary":"Bulk Translate Public Techpack","description":"Public-share equivalent of the authenticated bulk-translate endpoint,\nscoped to exactly this one shared job (no user-owned job list, since an\nanonymous viewer has none). Lets the language switcher on a public share\nlink trigger the same lazy, on-select translation the authenticated flow\ndoes. Idempotent — a locale already fully translated dispatches nothing.","operationId":"bulk_translate_public_techpack_questionnaires_public_techpack__share_code__translate_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"share_code","in":"path","required":true,"schema":{"type":"string","title":"Share Code"}},{"name":"locale","in":"query","required":true,"schema":{"type":"string","title":"Locale"}},{"name":"x-share-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Share-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/public/techpack/{share_code}/claim":{"post":{"tags":["questionnaires"],"summary":"Claim Public Techpack Share","operationId":"claim_public_techpack_share_questionnaires_public_techpack__share_code__claim_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"share_code","in":"path","required":true,"schema":{"type":"string","title":"Share Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTechPackShareClaimResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/public/techpack/{share_code}/comments":{"get":{"tags":["questionnaires"],"summary":"List Public Techpack Comments","operationId":"list_public_techpack_comments_questionnaires_public_techpack__share_code__comments_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"share_code","in":"path","required":true,"schema":{"type":"string","title":"Share Code"}},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Viewer's current locale — substitutes each comment's body with its translation when it differs from the author's source_locale.","title":"Locale"},"description":"Viewer's current locale — substitutes each comment's body with its translation when it differs from the author's source_locale."},{"name":"x-share-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Share-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackCommentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["questionnaires"],"summary":"Create Public Techpack Comment","operationId":"create_public_techpack_comment_questionnaires_public_techpack__share_code__comments_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"share_code","in":"path","required":true,"schema":{"type":"string","title":"Share Code"}},{"name":"x-share-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Share-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTechPackAnonymousCommentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackCommentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/public/techpack/{share_code}/unlock":{"post":{"tags":["questionnaires"],"summary":"Unlock Public Techpack View","description":"Legacy password unlock for older password-protected links.","operationId":"unlock_public_techpack_view_questionnaires_public_techpack__share_code__unlock_post","parameters":[{"name":"share_code","in":"path","required":true,"schema":{"type":"string","title":"Share Code"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTechPackUnlockRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTechPackUnlockResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/public/techpack/share-invitations/{token}":{"get":{"tags":["questionnaires"],"summary":"View Share Invitation","operationId":"view_share_invitation_questionnaires_public_techpack_share_invitations__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTechPackShareInviteDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/public/techpack/share-invitations/{token}/accept":{"post":{"tags":["questionnaires"],"summary":"Accept Share Invitation","operationId":"accept_share_invitation_questionnaires_public_techpack_share_invitations__token__accept_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTechPackShareInviteAcceptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/share":{"get":{"tags":["questionnaires"],"summary":"Get Share Settings","operationId":"get_share_settings_questionnaires_jobs__job_id__share_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/share/mode":{"put":{"tags":["questionnaires"],"summary":"Set Share Mode","operationId":"set_share_mode_questionnaires_jobs__job_id__share_mode_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareModeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/share/public":{"put":{"tags":["questionnaires"],"summary":"Set Public Link","description":"The separate public link: on / off, guest comments, expiry (at least 30 days).","operationId":"set_public_link_questionnaires_jobs__job_id__share_public_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackPublicLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/share/grants":{"post":{"tags":["questionnaires"],"summary":"Add Share Grant","operationId":"add_share_grant_questionnaires_jobs__job_id__share_grants_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareGrantCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/share/grants/{grant_id}":{"patch":{"tags":["questionnaires"],"summary":"Update Share Grant","description":"Change one person's access (view / comment), or their type while they haven't joined.","operationId":"update_share_grant_questionnaires_jobs__job_id__share_grants__grant_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"grant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareGrantUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["questionnaires"],"summary":"Revoke Share Grant","operationId":"revoke_share_grant_questionnaires_jobs__job_id__share_grants__grant_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"grant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackShareSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/delete-render-snapshot":{"post":{"tags":["questionnaires"],"summary":"Delete Render Snapshot","description":"Delete an older render snapshot from `platform_payload.refinementPayload.history`.\n\nPayload:\n- asset: \"2d\" | \"3d\"\n- front_url?: string\n- back_url?: string\n\nNotes:\n- Does NOT delete the active/latest job URLs.\n- Only affects the \"Design variations\" history list.","operationId":"delete_render_snapshot_questionnaires_jobs__job_id__delete_render_snapshot_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/zones-lab":{"get":{"tags":["questionnaires"],"summary":"Get Zones Lab","operationId":"get_zones_lab_questionnaires_jobs__job_id__zones_lab_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view","in":"query","required":false,"schema":{"enum":["front","back"],"type":"string","default":"front","title":"View"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/zones-lab/upload":{"post":{"tags":["questionnaires"],"summary":"Upload Zones Lab Photo","operationId":"upload_zones_lab_photo_questionnaires_jobs__job_id__zones_lab_upload_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view","in":"query","required":false,"schema":{"enum":["front","back"],"type":"string","default":"front","title":"View"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_zones_lab_photo_questionnaires_jobs__job_id__zones_lab_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/zones-lab/load-flat":{"post":{"tags":["questionnaires"],"summary":"Load Zones Lab Flat","operationId":"load_zones_lab_flat_questionnaires_jobs__job_id__zones_lab_load_flat_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view","in":"query","required":false,"schema":{"enum":["front","back"],"type":"string","default":"front","title":"View"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/zones-lab/fabrics":{"post":{"tags":["questionnaires"],"summary":"Upload Zones Lab Fabric","operationId":"upload_zones_lab_fabric_questionnaires_jobs__job_id__zones_lab_fabrics_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view","in":"query","required":false,"schema":{"enum":["front","back"],"type":"string","default":"front","title":"View"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_zones_lab_fabric_questionnaires_jobs__job_id__zones_lab_fabrics_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/zones-lab/fabrics/{fabric_id}":{"delete":{"tags":["questionnaires"],"summary":"Delete Zones Lab Fabric","operationId":"delete_zones_lab_fabric_questionnaires_jobs__job_id__zones_lab_fabrics__fabric_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"fabric_id","in":"path","required":true,"schema":{"type":"string","title":"Fabric Id"}},{"name":"view","in":"query","required":false,"schema":{"enum":["front","back"],"type":"string","default":"front","title":"View"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/zones-lab/find":{"post":{"tags":["questionnaires"],"summary":"Find Zones Lab","operationId":"find_zones_lab_questionnaires_jobs__job_id__zones_lab_find_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view","in":"query","required":false,"schema":{"enum":["front","back"],"type":"string","default":"front","title":"View"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/FindBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/zones-lab/refine":{"post":{"tags":["questionnaires"],"summary":"Refine Zones Lab","operationId":"refine_zones_lab_questionnaires_jobs__job_id__zones_lab_refine_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view","in":"query","required":false,"schema":{"enum":["front","back"],"type":"string","default":"front","title":"View"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefineBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/zones-lab/paint":{"post":{"tags":["questionnaires"],"summary":"Paint Zones Lab","operationId":"paint_zones_lab_questionnaires_jobs__job_id__zones_lab_paint_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view","in":"query","required":false,"schema":{"enum":["front","back"],"type":"string","default":"front","title":"View"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaintBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/zones-lab/assign":{"post":{"tags":["questionnaires"],"summary":"Assign Zones Lab","operationId":"assign_zones_lab_questionnaires_jobs__job_id__zones_lab_assign_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view","in":"query","required":false,"schema":{"enum":["front","back"],"type":"string","default":"front","title":"View"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/zones-lab/undo":{"post":{"tags":["questionnaires"],"summary":"Undo Zones Lab","operationId":"undo_zones_lab_questionnaires_jobs__job_id__zones_lab_undo_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view","in":"query","required":false,"schema":{"enum":["front","back"],"type":"string","default":"front","title":"View"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/questionnaires/jobs/{job_id}/zones-lab/apply":{"post":{"tags":["questionnaires"],"summary":"Apply Zones Lab","operationId":"apply_zones_lab_questionnaires_jobs__job_id__zones_lab_apply_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"view","in":"query","required":false,"schema":{"enum":["front","back"],"type":"string","default":"front","title":"View"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users":{"get":{"tags":["admin"],"summary":"List Users Endpoint","description":"List all users with optional search. Requires admin privileges.","operationId":"list_users_endpoint_admin_users_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUsersListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Create Admin User Endpoint","description":"Create a new admin user. Requires admin privileges.","operationId":"create_admin_user_endpoint_admin_users_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/password":{"patch":{"tags":["admin"],"summary":"Admin Change User Password","description":"Change any user's password. Requires admin privileges.","operationId":"admin_change_user_password_admin_users__user_id__password_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminChangePassword"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/stats":{"get":{"tags":["admin"],"summary":"Get User Stats Overview","description":"Get aggregate user statistics for the admin dashboard.","operationId":"get_user_stats_overview_admin_users_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserStatsOverview"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/users/list":{"get":{"tags":["admin"],"summary":"List All Users","description":"List all users with filtering, sorting, and pagination.","operationId":"list_all_users_admin_users_list_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"subscription_status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"}},{"name":"is_paying","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Paying = active/past-due subscription or a succeeded Stripe payment.","title":"Is Paying"},"description":"Paying = active/past-due subscription or a succeeded Stripe payment."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(active|inactive|deleted)$"},{"type":"null"}],"title":"Status"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Sort By"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/pending":{"get":{"tags":["admin"],"summary":"List Pending Users","description":"List all users awaiting admin approval.","operationId":"list_pending_users_admin_users_pending_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/users/pending/count":{"get":{"tags":["admin"],"summary":"Get Pending User Count","description":"Get the count of users awaiting approval.","operationId":"get_pending_user_count_admin_users_pending_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/users/delete-by-email":{"post":{"tags":["admin"],"summary":"Delete User By Email","description":"Permanently delete a user account by email address.","operationId":"delete_user_by_email_admin_users_delete_by_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminDeleteUserByEmailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/users/bulk-delete":{"post":{"tags":["admin"],"summary":"Bulk Delete Users","description":"Permanently delete multiple user accounts.","operationId":"bulk_delete_users_admin_users_bulk_delete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBulkDeleteUsersRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/users/{user_id}":{"get":{"tags":["admin"],"summary":"Get User Detail","description":"Get detailed information about a specific user.","operationId":"get_user_detail_admin_users__user_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete User","description":"Permanently delete a user account and all related data.","operationId":"delete_user_admin_users__user_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/approve":{"post":{"tags":["admin"],"summary":"Approve User","description":"Approve a pending user account.","operationId":"approve_user_admin_users__user_id__approve_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/reject":{"post":{"tags":["admin"],"summary":"Reject User","description":"Reject a pending user — deletes the account and all related data.","operationId":"reject_user_admin_users__user_id__reject_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/adjust-credits":{"post":{"tags":["admin"],"summary":"Adjust User Credits","description":"Add or deduct credits for a user's organization.","operationId":"adjust_user_credits_admin_users__user_id__adjust_credits_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditAdjustmentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditAdjustmentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/extend-trial":{"post":{"tags":["admin"],"summary":"Extend User Trial","description":"Extend a user's trial by a number of days.","operationId":"extend_user_trial_admin_users__user_id__extend_trial_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrialExtensionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrialExtensionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/trial-enabled":{"patch":{"tags":["admin"],"summary":"Set User Trial Enabled","description":"Enable or disable calendar trial enforcement for a user's organization.","operationId":"set_user_trial_enabled_admin_users__user_id__trial_enabled_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrialEnabledRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrialEnabledResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/toggle-active":{"patch":{"tags":["admin"],"summary":"Toggle User Active","description":"Activate or deactivate a user account.","operationId":"toggle_user_active_admin_users__user_id__toggle_active_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/access-override":{"patch":{"tags":["admin"],"summary":"Set User Access Override","description":"Grant or revoke complimentary tech-pack generation access (bypasses trial lock and quota).","operationId":"set_user_access_override_admin_users__user_id__access_override_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAccessOverrideRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAccessOverrideResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/subscription/end":{"post":{"tags":["admin"],"summary":"End User Subscription","description":"End a user's active/trialing subscription immediately. Requires admin privileges.","operationId":"end_user_subscription_admin_users__user_id__subscription_end_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/granted-tier":{"patch":{"tags":["admin"],"summary":"Set User Granted Tier","description":"Assign or revoke a complimentary plan tier for this user's organization.","operationId":"set_user_granted_tier_admin_users__user_id__granted_tier_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminGrantedTierRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminGrantedTierResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/techpack-allowance":{"patch":{"tags":["admin"],"summary":"Set User Techpack Allowance","description":"Set or reset the monthly tech pack allowance for this user's organization.","operationId":"set_user_techpack_allowance_admin_users__user_id__techpack_allowance_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTechpackAllowanceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTechpackAllowanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/questions/options/upload-image":{"post":{"tags":["admin"],"summary":"Upload Question Option Image","description":"Upload an image for a multiple-choice question option and return its public URL.\n\nThe returned URL is meant to be stored on the option as `image_url` when\nsaving the question template via POST/PATCH /admin/questions.","operationId":"upload_question_option_image_admin_questions_options_upload_image_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_question_option_image_admin_questions_options_upload_image_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":[]}]}},"/admin/questions":{"get":{"tags":["admin"],"summary":"List Questions","description":"List all question templates with filtering, sorting, and pagination.\nRequires admin privileges.\n\nSet limit=None (omit the parameter) to return all questions without pagination.","operationId":"list_questions_admin_questions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"product_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ProductType"},{"type":"null"}],"title":"Product Type"}},{"name":"input_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/InputType"},{"type":"null"}],"title":"Input Type"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Field to sort by","default":"order","title":"Sort By"},"description":"Field to sort by"},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"asc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1000,"minimum":1},{"type":"null"}],"description":"Limit results. Use None to return all questions.","title":"Limit"},"description":"Limit results. Use None to return all questions."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionTemplateListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Create Question","description":"Create a new question template.\nRequires admin privileges.","operationId":"create_question_admin_questions_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionTemplateCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionTemplateSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/questions/{question_id}":{"get":{"tags":["admin"],"summary":"Get Question","description":"Get a single question by ID with its dependent questions.\nRequires admin privileges.","operationId":"get_question_admin_questions__question_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"question_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Question Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionTemplateWithDependents"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin"],"summary":"Update Question Full","description":"Fully update a question template (all fields required).\nRequires admin privileges.","operationId":"update_question_full_admin_questions__question_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"question_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Question Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionTemplateCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionTemplateSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin"],"summary":"Update Question Partial","description":"Partially update a question template (only provided fields updated).\nRequires admin privileges.","operationId":"update_question_partial_admin_questions__question_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"question_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Question Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionTemplateUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionTemplateSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete Question","description":"Delete a question template.\nWill fail if question has dependent questions or is used in sessions unless force=true.\nRequires admin privileges.","operationId":"delete_question_admin_questions__question_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"question_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Question Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","description":"Force delete even if question is used","default":false,"title":"Force"},"description":"Force delete even if question is used"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/questions/{question_id}/duplicate":{"post":{"tags":["admin"],"summary":"Duplicate Question","description":"Duplicate an existing question template.\nOptionally change product type or add prefix to question text.\nRequires admin privileges.","operationId":"duplicate_question_admin_questions__question_id__duplicate_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"question_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Question Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DuplicateQuestionRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionTemplateSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/questions/reorder":{"patch":{"tags":["admin"],"summary":"Reorder Questions","description":"Bulk update question order numbers with automatic normalization.\nRequires admin privileges.","operationId":"reorder_questions_admin_questions_reorder_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionReorderRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/QuestionTemplateSchema"},"type":"array","title":"Response Reorder Questions Admin Questions Reorder Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/questions/{question_id}/dependencies":{"get":{"tags":["admin"],"summary":"Get Question Dependencies","description":"Get all questions that depend on this question.\nRequires admin privileges.","operationId":"get_question_dependencies_admin_questions__question_id__dependencies_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"question_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Question Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/QuestionTemplateSchema"},"title":"Response Get Question Dependencies Admin Questions  Question Id  Dependencies Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/questions/{question_id}/usage":{"get":{"tags":["admin"],"summary":"Get Question Usage","description":"Get usage statistics for a question.\nShows how many sessions and responses use this question.\nRequires admin privileges.","operationId":"get_question_usage_admin_questions__question_id__usage_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"question_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Question Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionUsageStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/questions/normalize-orders":{"post":{"tags":["admin"],"summary":"Normalize Question Orders","description":"Utility endpoint to normalize all question orders in the database.\nRequires admin privileges.","operationId":"normalize_question_orders_admin_questions_normalize_orders_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"product_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ProductType"},{"type":"null"}],"description":"Optional product type filter. If omitted, normalizes all product types.","title":"Product Type"},"description":"Optional product type filter. If omitted, normalizes all product types."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/techpack-fields":{"get":{"tags":["admin"],"summary":"List Techpack Fields","description":"List all techpack fields, optionally filtered by category.","operationId":"list_techpack_fields_admin_techpack_fields_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TechpackFieldSchema"},"title":"Response List Techpack Fields Admin Techpack Fields Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/field-mappings/matrix":{"get":{"tags":["admin"],"summary":"Get Field Mapping Matrix","description":"Get field mapping matrix showing all techpack fields and their mapped questions.","operationId":"get_field_mapping_matrix_admin_field_mappings_matrix_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"product_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ProductType"},{"type":"null"}],"description":"Filter questions by product type","title":"Product Type"},"description":"Filter questions by product type"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FieldMappingMatrixResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/field-mappings/conflicts":{"get":{"tags":["admin"],"summary":"Check Mapping Conflicts","description":"Check if other questions map to the same fields (conflict detection).","operationId":"check_mapping_conflicts_admin_field_mappings_conflicts_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"field_names","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated list of field names to check","title":"Field Names"},"description":"Comma-separated list of field names to check"},{"name":"exclude_question","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Exclude this question from conflict check","title":"Exclude Question"},"description":"Exclude this question from conflict check"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MappingConflictResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/questions/{question_id}/field-mappings":{"get":{"tags":["admin"],"summary":"Get Question Field Mappings","description":"Get all field mappings for a question.","operationId":"get_question_field_mappings_admin_questions__question_id__field_mappings_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"question_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Question Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/QuestionFieldMappingSchema"},"title":"Response Get Question Field Mappings Admin Questions  Question Id  Field Mappings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/field-mappings":{"post":{"tags":["admin"],"summary":"Create Field Mapping","description":"Create a new question field mapping.","operationId":"create_field_mapping_admin_field_mappings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionFieldMappingCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionFieldMappingSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/field-mappings/{mapping_id}":{"patch":{"tags":["admin"],"summary":"Update Field Mapping","description":"Update an existing field mapping.","operationId":"update_field_mapping_admin_field_mappings__mapping_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"mapping_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mapping Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionFieldMappingUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionFieldMappingSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete Field Mapping","description":"Delete a field mapping.","operationId":"delete_field_mapping_admin_field_mappings__mapping_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"mapping_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mapping Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/stats":{"get":{"tags":["admin"],"summary":"Get Dashboard Stats","description":"Get admin dashboard statistics.\nIncludes question counts, session counts, and most used questions.\nRequires admin privileges.","operationId":"get_dashboard_stats_admin_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminDashboardStats"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/sessions/by-code/{share_code}":{"get":{"tags":["admin"],"summary":"Get Session By Share Code","description":"Get a questionnaire session by its tech pack share code.\nAllows admin to view user's answers.\nRequires admin privileges.","operationId":"get_session_by_share_code_admin_sessions_by_code__share_code__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"share_code","in":"path","required":true,"schema":{"type":"string","title":"Share Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetConversationHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sessions/{session_id}":{"get":{"tags":["admin"],"summary":"Get Session Details","description":"Get a questionnaire session by ID with all responses and question details.\nAllows admin to view user's answers and uploaded files.\nRequires admin privileges.","operationId":"get_session_details_admin_sessions__session_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetConversationHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sessions/fork/{share_code}":{"post":{"tags":["admin"],"summary":"Fork Session By Share Code","description":"Fork (copy) a questionnaire session by share code for admin editing.\nCreates a new session owned by admin with all answers copied.\nOriginal user's session remains unchanged.\nRequires admin privileges.","operationId":"fork_session_by_share_code_admin_sessions_fork__share_code__post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"share_code","in":"path","required":true,"schema":{"type":"string","title":"Share Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetConversationHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sessions":{"get":{"tags":["admin"],"summary":"List All Sessions","description":"List all questionnaire sessions with user info, response counts, and tech pack jobs.\nRequires admin privileges.","operationId":"list_all_sessions_admin_sessions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Results per page","default":50,"title":"Limit"},"description":"Results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"product_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ProductType"},{"type":"null"}],"description":"Filter by product type","title":"Product Type"},"description":"Filter by product type"},{"name":"completed","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by completion status","title":"Completed"},"description":"Filter by completion status"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSessionsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/all":{"get":{"tags":["admin"],"summary":"Get All Analytics","description":"Get all platform analytics in a single call.","operationId":"get_all_analytics_admin_analytics_all_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics from this date (inclusive)","title":"Start Date"},"description":"Filter metrics from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics until this date (inclusive)","title":"End Date"},"description":"Filter metrics until this date (inclusive)"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/users":{"get":{"tags":["admin"],"summary":"Get User Analytics","description":"Get user activity and engagement metrics.","operationId":"get_user_analytics_admin_analytics_users_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics from this date (inclusive)","title":"Start Date"},"description":"Filter metrics from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics until this date (inclusive)","title":"End Date"},"description":"Filter metrics until this date (inclusive)"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/onboarding":{"get":{"tags":["admin"],"summary":"Get Onboarding Analytics","description":"Get onboarding funnel metrics.","operationId":"get_onboarding_analytics_admin_analytics_onboarding_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics from this date (inclusive)","title":"Start Date"},"description":"Filter metrics from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics until this date (inclusive)","title":"End Date"},"description":"Filter metrics until this date (inclusive)"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/questionnaires":{"get":{"tags":["admin"],"summary":"Get Questionnaire Analytics","description":"Get questionnaire completion and drop-off metrics.","operationId":"get_questionnaire_analytics_admin_analytics_questionnaires_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics from this date (inclusive)","title":"Start Date"},"description":"Filter metrics from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics until this date (inclusive)","title":"End Date"},"description":"Filter metrics until this date (inclusive)"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/techpacks":{"get":{"tags":["admin"],"summary":"Get Techpack Analytics","description":"Get tech pack generation metrics.","operationId":"get_techpack_analytics_admin_analytics_techpacks_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics from this date (inclusive)","title":"Start Date"},"description":"Filter metrics from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics until this date (inclusive)","title":"End Date"},"description":"Filter metrics until this date (inclusive)"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/tp-regeneration":{"get":{"tags":["admin"],"summary":"Get Tp Regeneration Analytics","description":"Where tech packs are regenerated / refined most (by type + top jobs).","operationId":"get_tp_regeneration_analytics_admin_analytics_tp_regeneration_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter jobs created from this date (inclusive)","title":"Start Date"},"description":"Filter jobs created from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter jobs created until this date (inclusive)","title":"End Date"},"description":"Filter jobs created until this date (inclusive)"},{"name":"top_limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max top jobs to return","default":50,"title":"Top Limit"},"description":"Max top jobs to return"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/downloads":{"get":{"tags":["admin"],"summary":"Get Download Analytics","description":"Get download metrics.","operationId":"get_download_analytics_admin_analytics_downloads_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics from this date (inclusive)","title":"Start Date"},"description":"Filter metrics from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics until this date (inclusive)","title":"End Date"},"description":"Filter metrics until this date (inclusive)"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/org-download-usage":{"get":{"tags":["admin"],"summary":"Get Org Download Usage","description":"Per-organization free download usage tracking.\n\nCounts only the downloads that are part of the \"2 free downloads\" bucket\n(DownloadRecord.is_trial_download=True) and, if configured, only those at/after\nsettings.free_downloads_policy_start_at. This matches the runtime enforcement.","operationId":"get_org_download_usage_admin_analytics_org_download_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OrgDownloadUsage"},"type":"array","title":"Response Get Org Download Usage Admin Analytics Org Download Usage Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/analytics/revenue":{"get":{"tags":["admin"],"summary":"Get Revenue Analytics","description":"Get revenue and billing metrics.","operationId":"get_revenue_analytics_admin_analytics_revenue_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics from this date (inclusive)","title":"Start Date"},"description":"Filter metrics from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics until this date (inclusive)","title":"End Date"},"description":"Filter metrics until this date (inclusive)"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/organizations":{"get":{"tags":["admin"],"summary":"Get Organization Analytics","description":"Get organization and team metrics.","operationId":"get_organization_analytics_admin_analytics_organizations_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics from this date (inclusive)","title":"Start Date"},"description":"Filter metrics from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics until this date (inclusive)","title":"End Date"},"description":"Filter metrics until this date (inclusive)"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/dropoff":{"get":{"tags":["admin"],"summary":"Get Dropoff Analytics","description":"Detailed questionnaire drop-off analysis.","operationId":"get_dropoff_analytics_admin_analytics_dropoff_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"product_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by product type","title":"Product Type"},"description":"Filter by product type"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics from this date (inclusive)","title":"Start Date"},"description":"Filter metrics from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics until this date (inclusive)","title":"End Date"},"description":"Filter metrics until this date (inclusive)"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/techpack-journey":{"get":{"tags":["admin"],"summary":"Get Techpack Journey Analytics","description":"Where each tech pack stopped: stage totals, workspace tab usage and a per-job table.","operationId":"get_techpack_journey_analytics_admin_analytics_techpack_journey_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Tech packs created from this date (inclusive)","title":"Start Date"},"description":"Tech packs created from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Tech packs created until this date (inclusive)","title":"End Date"},"description":"Tech packs created until this date (inclusive)"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"},{"name":"stale_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":7,"title":"Stale Days"}},{"name":"status","in":"query","required":false,"schema":{"enum":["all","dropped","in_progress","finished"],"type":"string","default":"all","title":"Status"}},{"name":"stopped_at","in":"query","required":false,"schema":{"anyOf":[{"enum":["construction_detail","2d","3d","size_chart","workspace","download"],"type":"string"},{"type":"null"}],"title":"Stopped At"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"User name/email or tech pack name","title":"Search"},"description":"User name/email or tech pack name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/techpack-journey/jobs/{job_id}":{"get":{"tags":["admin"],"summary":"Get Techpack Journey Job","description":"Event timeline for one tech pack.","operationId":"get_techpack_journey_job_admin_analytics_techpack_journey_jobs__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/feature-requests":{"get":{"tags":["admin"],"summary":"Get Feature Request Analytics","description":"Get feature request metrics.","operationId":"get_feature_request_analytics_admin_analytics_feature_requests_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics from this date (inclusive)","title":"Start Date"},"description":"Filter metrics from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics until this date (inclusive)","title":"End Date"},"description":"Filter metrics until this date (inclusive)"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/page-views":{"get":{"tags":["admin"],"summary":"Get Page View Analytics","description":"Get page view analytics: most/least visited pages, daily trend, top users.","operationId":"get_page_view_analytics_admin_analytics_page_views_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics from this date (inclusive)","title":"Start Date"},"description":"Filter metrics from this date (inclusive)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter metrics until this date (inclusive)","title":"End Date"},"description":"Filter metrics until this date (inclusive)"},{"name":"audience","in":"query","required":false,"schema":{"enum":["customers","team","all"],"type":"string","description":"customers = exclude internal team; team = internal only; all = everyone","default":"customers","title":"Audience"},"description":"customers = exclude internal team; team = internal only; all = everyone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/track/page-view":{"post":{"tags":["admin"],"summary":"Track Page View","description":"Record a page view. Called by the frontend on every route change.","operationId":"track_page_view_admin_track_page_view_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageViewRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/track/techpack-step":{"post":{"tags":["admin"],"summary":"Track Techpack Step","description":"Record a Visual Studio / workspace step for a tech pack job. Unknown job is ignored.","operationId":"track_techpack_step_admin_track_techpack_step_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechpackStepRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/analytics/cache/invalidate":{"post":{"tags":["admin"],"summary":"Invalidate Analytics Cache","description":"Bust all analytics caches. Returns the number of keys deleted.","operationId":"invalidate_analytics_cache_admin_analytics_cache_invalidate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/feedback":{"get":{"tags":["admin"],"summary":"List Feedback","description":"List feedback entries for admin review.","operationId":"list_feedback_admin_feedback_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/feedback/stats":{"get":{"tags":["admin"],"summary":"Get Feedback Stats","description":"Get aggregate feedback stats for admin dashboard.","operationId":"get_feedback_stats_admin_feedback_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackStatsResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/techpacks/by-code/{share_code}":{"get":{"tags":["admin"],"summary":"Get Techpack By Share Code","description":"Look up a tech pack job and its current brand/manufacturer attribution.","operationId":"get_techpack_by_share_code_admin_techpacks_by_code__share_code__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"share_code","in":"path","required":true,"schema":{"type":"string","title":"Share Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTechPackByCodeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/techpacks/by-code/{share_code}/attribution":{"post":{"tags":["admin"],"summary":"Set Techpack Attribution By Share Code","description":"Platform-admin: attribute a tech pack to a brand and/or manufacturers\nusing its share code.","operationId":"set_techpack_attribution_by_share_code_admin_techpacks_by_code__share_code__attribution_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"share_code","in":"path","required":true,"schema":{"type":"string","title":"Share Code"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTechPackAttributionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackAttributionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/techpacks/sessions/{session_id}/start":{"post":{"tags":["admin"],"summary":"Start Phase1 Generation For Session","description":"Admin-only: Start Phase 1 generation (renders) for a questionnaire session.\n\nThis creates (or reuses) a queued TechPackJob and dispatches Celery `process_job`.","operationId":"start_phase1_generation_for_session_admin_techpacks_sessions__session_id__start_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitQuestionnaireResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/manufacturers":{"get":{"tags":["admin"],"summary":"List Manufacturers","operationId":"list_manufacturers_admin_manufacturers_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"under_review|verified|rejected","title":"Status Filter"},"description":"under_review|verified|rejected"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminManufacturerListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/manufacturers/pending/count":{"get":{"tags":["admin"],"summary":"Get Pending Manufacturer Count","operationId":"get_pending_manufacturer_count_admin_manufacturers_pending_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminManufacturerPendingCountResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/manufacturers/bulk-delete":{"post":{"tags":["admin"],"summary":"Bulk Delete Manufacturers","operationId":"bulk_delete_manufacturers_admin_manufacturers_bulk_delete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminManufacturerBulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminManufacturerBulkDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/manufacturers/{manufacturer_id}":{"get":{"tags":["admin"],"summary":"Get Manufacturer Detail","operationId":"get_manufacturer_detail_admin_manufacturers__manufacturer_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"manufacturer_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Manufacturer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminManufacturerDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete Manufacturer","description":"Permanently delete a manufacturer onboarding record and related documents.","operationId":"delete_manufacturer_admin_manufacturers__manufacturer_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"manufacturer_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Manufacturer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/manufacturers/{manufacturer_id}/verify":{"post":{"tags":["admin"],"summary":"Verify Manufacturer","operationId":"verify_manufacturer_admin_manufacturers__manufacturer_id__verify_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"manufacturer_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Manufacturer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/manufacturers/{manufacturer_id}/reject":{"post":{"tags":["admin"],"summary":"Reject Manufacturer","operationId":"reject_manufacturer_admin_manufacturers__manufacturer_id__reject_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"manufacturer_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Manufacturer Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminManufacturerRejectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/manufacturers/{manufacturer_id}/documents/{document_id}/download":{"get":{"tags":["admin"],"summary":"Admin Download Manufacturer Document","operationId":"admin_download_manufacturer_document_admin_manufacturers__manufacturer_id__documents__document_id__download_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"manufacturer_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Manufacturer Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/manufacturers/{manufacturer_id}/payouts":{"get":{"tags":["admin"],"summary":"Get Manufacturer Payouts","description":"Pending factory payouts and bank details for manual monthly payouts.","operationId":"get_manufacturer_payouts_admin_manufacturers__manufacturer_id__payouts_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"manufacturer_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Manufacturer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminManufacturerPayoutsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/manufacturers/{manufacturer_id}/payouts/mark-paid":{"post":{"tags":["admin"],"summary":"Mark Manufacturer Payouts Paid","description":"Mark pending manufacturer sales as paid after an offline bank transfer.","operationId":"mark_manufacturer_payouts_paid_admin_manufacturers__manufacturer_id__payouts_mark_paid_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"manufacturer_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Manufacturer Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminManufacturerMarkPayoutsPaidRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminManufacturerMarkPayoutsPaidResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/brands/standalone":{"get":{"tags":["admin"],"summary":"List Standalone Brands","description":"Brands with no manufacturer link (Threadchain-only accounts).","operationId":"list_standalone_brands_admin_brands_standalone_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBrandListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/brands/linked":{"get":{"tags":["admin"],"summary":"List Linked Brands","description":"Brands linked to a manufacturer via referral or manual link.","operationId":"list_linked_brands_admin_brands_linked_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"manufacturer_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Manufacturer Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBrandListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/brands/{brand_id}/link-manufacturer":{"post":{"tags":["admin"],"summary":"Link Brand To Manufacturer Admin","description":"Attach a standalone brand to a manufacturer (platform-admin override).\n\nOptionally syncs ``manufacturer_id`` onto tech packs already\nattributed to this brand.","operationId":"link_brand_to_manufacturer_admin_admin_brands__brand_id__link_manufacturer_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBrandLinkManufacturerRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBrandLinkManufacturerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/ai-costs/users":{"get":{"tags":["admin"],"summary":"Admin List User Costs","description":"All users' AI spend aggregated — ordered by total cost DESC.","operationId":"admin_list_user_costs_admin_ai_costs_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserCostListResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/ai-costs/users/{user_id}":{"get":{"tags":["admin"],"summary":"Admin User Cost Summary","description":"Per-tech-pack cost summary for any user.\n\nReturns 200 with empty jobs/zero totals when the user exists but has no\nAI call logs. Returns 404 only when the user_id is unknown.","operationId":"admin_user_cost_summary_admin_ai_costs_users__user_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AICostSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/ai-costs/jobs":{"get":{"tags":["admin"],"summary":"Admin List All Job Costs","description":"Flat list of every tech pack across all users with per-job AI cost split\ninto text and image components. Ordered by last_call_at DESC.","operationId":"admin_list_all_job_costs_admin_ai_costs_jobs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminJobCostListResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/ai-costs/by-feature":{"get":{"tags":["admin"],"summary":"Admin Costs By Feature","description":"AI spend grouped by ai_service (per-feature call-site label).\n\nOmit ``job_id`` for a platform-wide rollup. Pass ``job_id`` for one\ntech pack's pricing-sheet line items (3D front, POM arrows, artwork, …).","operationId":"admin_costs_by_feature_admin_ai_costs_by_feature_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminFeatureCostListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/ai-costs/jobs/{job_id}":{"get":{"tags":["admin"],"summary":"Admin Job Cost Detail","description":"Per-call detail for any user's job — no user filter applied.","operationId":"admin_job_cost_detail_admin_ai_costs_jobs__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AICostJobDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/ai-costs/brands":{"get":{"tags":["admin"],"summary":"Admin List Brand Costs","description":"Paginated Brand assistant spend totals, ordered by cost DESC.","operationId":"admin_list_brand_costs_admin_ai_costs_brands_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBrandCostListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/ai-costs/brands/{brand_id}":{"get":{"tags":["admin"],"summary":"Admin Brand Cost Detail","description":"Usage for one Brand grouped by member, model, and tech-pack job.","operationId":"admin_brand_cost_detail_admin_ai_costs_brands__brand_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBrandUsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/ai-costs/brands/{brand_id}/calls":{"get":{"tags":["admin"],"summary":"Admin Brand Call List","description":"Paginated per-provider-call detail for one Brand — reconciliation view.","operationId":"admin_brand_call_list_admin_ai_costs_brands__brand_id__calls_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBrandCallListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/access/tokens":{"post":{"tags":["admin","admin-access"],"summary":"Admin Create Token","operationId":"admin_create_token_admin_access_tokens_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTechPackTokenRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin","admin-access"],"summary":"Admin List Tokens","operationId":"admin_list_tokens_admin_access_tokens_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TechPackTokenResponse"},"title":"Response Admin List Tokens Admin Access Tokens Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/access/tokens/{token_id}":{"delete":{"tags":["admin","admin-access"],"summary":"Admin Deactivate Token","operationId":"admin_deactivate_token_admin_access_tokens__token_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string","title":"Token Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/access/vouchers":{"post":{"tags":["admin","admin-access"],"summary":"Admin Create Voucher","operationId":"admin_create_voucher_admin_access_vouchers_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccessVoucherRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessVoucherResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin","admin-access"],"summary":"Admin List Vouchers","operationId":"admin_list_vouchers_admin_access_vouchers_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":true,"schema":{"type":"string","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccessVoucherResponse"},"title":"Response Admin List Vouchers Admin Access Vouchers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/access/vouchers/{voucher_id}":{"delete":{"tags":["admin","admin-access"],"summary":"Admin Deactivate Voucher","operationId":"admin_deactivate_voucher_admin_access_vouchers__voucher_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"voucher_id","in":"path","required":true,"schema":{"type":"string","title":"Voucher Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessVoucherResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/assistant/knowledge":{"post":{"tags":["admin","admin-assistant-knowledge"],"summary":"Upload Knowledge Document","description":"Upload a PDF/DOCX/MD/TXT document. Ingestion (chunk + embed) runs\nasynchronously via Celery; poll GET .../{document_id} for status.","operationId":"upload_knowledge_document_admin_assistant_knowledge_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_knowledge_document_admin_assistant_knowledge_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeDocumentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin","admin-assistant-knowledge"],"summary":"List Knowledge Documents","operationId":"list_knowledge_documents_admin_assistant_knowledge_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeDocumentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/assistant/knowledge/{document_id}":{"get":{"tags":["admin","admin-assistant-knowledge"],"summary":"Get Knowledge Document","operationId":"get_knowledge_document_admin_assistant_knowledge__document_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeDocumentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","admin-assistant-knowledge"],"summary":"Delete Knowledge Document","operationId":"delete_knowledge_document_admin_assistant_knowledge__document_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/assistant/knowledge/{document_id}/retry":{"post":{"tags":["admin","admin-assistant-knowledge"],"summary":"Retry Knowledge Document","operationId":"retry_knowledge_document_admin_assistant_knowledge__document_id__retry_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeDocumentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/techpack":{"get":{"tags":["admin"],"summary":"Get Techpack Pricing","operationId":"get_techpack_pricing_admin_pricing_techpack_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformTechpackPricingResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["admin"],"summary":"Put Techpack Pricing","operationId":"put_techpack_pricing_admin_pricing_techpack_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformTechpackPricingUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformTechpackPricingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/pricing/concierge":{"get":{"tags":["admin"],"summary":"Get Concierge Pricing","operationId":"get_concierge_pricing_admin_pricing_concierge_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformTechpackPricingResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["admin"],"summary":"Put Concierge Pricing","operationId":"put_concierge_pricing_admin_pricing_concierge_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformTechpackPricingUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformTechpackPricingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/plans/":{"get":{"tags":["admin"],"summary":"List Admin Payment Plans","description":"List all payment plans for admin management (auto-seeding defaults if empty).","operationId":"list_admin_payment_plans_admin_plans__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PaymentPlanResponse"},"type":"array","title":"Response List Admin Payment Plans Admin Plans  Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/plans":{"get":{"tags":["admin"],"summary":"List Admin Payment Plans","description":"List all payment plans for admin management (auto-seeding defaults if empty).","operationId":"list_admin_payment_plans_admin_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PaymentPlanResponse"},"type":"array","title":"Response List Admin Payment Plans Admin Plans Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/pricing/plans/":{"get":{"tags":["admin"],"summary":"List Admin Payment Plans","description":"List all payment plans for admin management (auto-seeding defaults if empty).","operationId":"list_admin_payment_plans_admin_pricing_plans__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PaymentPlanResponse"},"type":"array","title":"Response List Admin Payment Plans Admin Pricing Plans  Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/pricing/plans":{"get":{"tags":["admin"],"summary":"List Admin Payment Plans","description":"List all payment plans for admin management (auto-seeding defaults if empty).","operationId":"list_admin_payment_plans_admin_pricing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PaymentPlanResponse"},"type":"array","title":"Response List Admin Payment Plans Admin Pricing Plans Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/plans/{plan_id}/":{"put":{"tags":["admin"],"summary":"Update Admin Payment Plan","description":"Update a payment plan's prices, quotas, and active/public status by UUID or slug.","operationId":"update_admin_payment_plan_admin_plans__plan_id___put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPaymentPlanUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentPlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/plans/{plan_id}":{"put":{"tags":["admin"],"summary":"Update Admin Payment Plan","description":"Update a payment plan's prices, quotas, and active/public status by UUID or slug.","operationId":"update_admin_payment_plan_admin_plans__plan_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPaymentPlanUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentPlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/plans/{plan_id}/":{"put":{"tags":["admin"],"summary":"Update Admin Payment Plan","description":"Update a payment plan's prices, quotas, and active/public status by UUID or slug.","operationId":"update_admin_payment_plan_admin_pricing_plans__plan_id___put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPaymentPlanUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentPlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/plans/{plan_id}":{"put":{"tags":["admin"],"summary":"Update Admin Payment Plan","description":"Update a payment plan's prices, quotas, and active/public status by UUID or slug.","operationId":"update_admin_payment_plan_admin_pricing_plans__plan_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPaymentPlanUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentPlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/custom-prices":{"get":{"tags":["admin"],"summary":"List Custom Prices","operationId":"list_custom_prices_admin_custom_prices_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Create Custom Price","operationId":"create_custom_price_admin_custom_prices_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomPriceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/custom-prices/{price_id}":{"get":{"tags":["admin"],"summary":"Get Custom Price","operationId":"get_custom_price_admin_custom_prices__price_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"price_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Price Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin"],"summary":"Update Custom Price","operationId":"update_custom_price_admin_custom_prices__price_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"price_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Price Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomPriceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/custom-prices/{price_id}/archive":{"post":{"tags":["admin"],"summary":"Archive Custom Price","operationId":"archive_custom_price_admin_custom_prices__price_id__archive_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"price_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Price Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/custom-prices/{price_id}/candidates":{"get":{"tags":["admin"],"summary":"List Candidates","operationId":"list_candidates_admin_custom_prices__price_id__candidates_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"price_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Price Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"}},{"name":"currency","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"}},{"name":"subscribed","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Subscribed"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/custom-prices/{price_id}/assignments":{"post":{"tags":["admin"],"summary":"Assign Custom Price","operationId":"assign_custom_price_admin_custom_prices__price_id__assignments_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"price_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Price Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/custom-price-assignments/{assignment_id}":{"patch":{"tags":["admin"],"summary":"Update Assignment End Date","operationId":"update_assignment_end_date_admin_custom_price_assignments__assignment_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"assignment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Assignment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndsAtUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Remove Assignment","operationId":"remove_assignment_admin_custom_price_assignments__assignment_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"assignment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Assignment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/custom-prices":{"get":{"tags":["admin"],"summary":"Get User Custom Prices","operationId":"get_user_custom_prices_admin_users__user_id__custom_prices_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Assign User Custom Price","operationId":"assign_user_custom_price_admin_users__user_id__custom_prices_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAssignRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/blog-studio":{"get":{"tags":["admin"],"summary":"Get Blog Studio Password Status","operationId":"get_blog_studio_password_status_admin_blog_studio_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogStudioPasswordStatus"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["admin"],"summary":"Set Blog Studio Password","operationId":"set_blog_studio_password_admin_blog_studio_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogStudioPasswordUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogStudioPasswordStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/messages/conversations/{conversation_id}/messages":{"get":{"tags":["admin","admin-messaging"],"summary":"Admin Get Conversation Messages","operationId":"admin_get_conversation_messages_admin_messages_conversations__conversation_id__messages_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Before"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/signup-access":{"get":{"tags":["admin","admin-signup-access"],"summary":"Admin List Signup Access","operationId":"admin_list_signup_access_admin_signup_access_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupAccessListOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin","admin-signup-access"],"summary":"Admin Add Signup Access","operationId":"admin_add_signup_access_admin_signup_access_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddSignupAccessIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupAccessGrantOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/signup-access/{grant_id}":{"delete":{"tags":["admin","admin-signup-access"],"summary":"Admin Remove Signup Access","operationId":"admin_remove_signup_access_admin_signup_access__grant_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"grant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/feature-grants/features":{"get":{"tags":["admin","admin-feature-grants"],"summary":"Admin List Grantable Features","operationId":"admin_list_grantable_features_admin_feature_grants_features_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GrantableFeatureOut"},"type":"array","title":"Response Admin List Grantable Features Admin Feature Grants Features Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/feature-grants/users/{user_id}":{"get":{"tags":["admin","admin-feature-grants"],"summary":"Admin List User Feature Grants","description":"This user's own grants plus their company's, newest first.","operationId":"admin_list_user_feature_grants_admin_feature_grants_users__user_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeatureGrantsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/feature-grants":{"post":{"tags":["admin","admin-feature-grants"],"summary":"Admin Create Feature Grants","operationId":"admin_create_feature_grants_admin_feature_grants_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFeatureGrantIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FeatureGrantOut"},"type":"array","title":"Response Admin Create Feature Grants Admin Feature Grants Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/admin/feature-grants/{grant_id}":{"delete":{"tags":["admin","admin-feature-grants"],"summary":"Admin Revoke Feature Grant","operationId":"admin_revoke_feature_grant_admin_feature_grants__grant_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"grant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureGrantOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/health":{"get":{"tags":["admin"],"summary":"Admin Health Check","description":"Admin API health check endpoint","operationId":"admin_health_check_admin_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/orgs/me":{"get":{"tags":["organizations"],"summary":"Get My Organization","description":"Get the current user's primary organization.","operationId":"get_my_organization_orgs_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationDetail"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/orgs/me/permissions":{"get":{"tags":["organizations"],"summary":"Get My Permissions","description":"Resolved effective permissions for the caller's primary org.","operationId":"get_my_permissions_orgs_me_permissions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EffectivePermissionsResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/orgs/{org_id}/members":{"get":{"tags":["organizations"],"summary":"List Members","description":"List all active members of an organization.","operationId":"list_members_orgs__org_id__members_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationMemberDetail"},"title":"Response List Members Orgs  Org Id  Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/members/{user_id}/role":{"patch":{"tags":["organizations"],"summary":"Change Member Role","description":"Update a member's org role. Admins only. Cannot change the organization owner.","operationId":"change_member_role_orgs__org_id__members__user_id__role_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberRoleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/members/{user_id}/access":{"patch":{"tags":["organizations"],"summary":"Update Member Access","description":"Update a member's access profile (owner-controlled permissions).","operationId":"update_member_access_orgs__org_id__members__user_id__access_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberAccessRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationMemberDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/members/{user_id}":{"delete":{"tags":["organizations"],"summary":"Remove Org Member","description":"Remove a member from the organization. Cannot remove the organization owner.\n\nTheir tech packs in this workspace move to the owner, and the brand pays only\nfor the seats still in use from the next renewal (no refund).","operationId":"remove_org_member_orgs__org_id__members__user_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/invite":{"post":{"tags":["organizations"],"summary":"Send Invitation","description":"Send a team invitation to an email address.\nOnly admins can invite new members.","operationId":"send_invitation_orgs__org_id__invite_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/invitations":{"get":{"tags":["organizations"],"summary":"List Invitations","description":"List pending invitations for an organization.","operationId":"list_invitations_orgs__org_id__invitations_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InvitationSchema"},"title":"Response List Invitations Orgs  Org Id  Invitations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/invitations/{invitation_id}":{"delete":{"tags":["organizations"],"summary":"Cancel Invitation","description":"Cancel a pending invitation. Frees the seat it was holding, and (like removing a\nmember) the brand pays only for the seats still in use from the next renewal.","operationId":"cancel_invitation_orgs__org_id__invitations__invitation_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/invitations/{invitation_id}/resend":{"post":{"tags":["organizations"],"summary":"Resend Invitation","description":"Send a pending (or expired) invitation again with a fresh link and expiry.","operationId":"resend_invitation_orgs__org_id__invitations__invitation_id__resend_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/invitations/{token}":{"get":{"tags":["organizations"],"summary":"View Invitation","description":"View invitation details by token. No authentication required\nso the invitee can see what they're being invited to.","operationId":"view_invitation_orgs_invitations__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationDetailSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/invitations/{token}/accept":{"post":{"tags":["organizations"],"summary":"Accept Invite","description":"Accept an invitation. The currently authenticated user is added\nto the organization with the role specified in the invitation.","operationId":"accept_invite_orgs_invitations__token__accept_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationAcceptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/invitations/{token}/decline":{"post":{"tags":["organizations"],"summary":"Decline Invite","description":"Decline an invitation. No authentication required.\nThe invitation is permanently deleted.","operationId":"decline_invite_orgs_invitations__token__decline_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/roles":{"get":{"tags":["roles"],"summary":"List Org Roles","description":"List every role defined on the org, with member counts.","operationId":"list_org_roles_orgs__org_id__roles_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["roles"],"summary":"Create Org Role","operationId":"create_org_role_orgs__org_id__roles_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/roles/{role_id}":{"get":{"tags":["roles"],"summary":"Get Org Role","operationId":"get_org_role_orgs__org_id__roles__role_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["roles"],"summary":"Update Org Role","operationId":"update_org_role_orgs__org_id__roles__role_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["roles"],"summary":"Delete Org Role","operationId":"delete_org_role_orgs__org_id__roles__role_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/roles/{role_id}/enabled":{"patch":{"tags":["roles"],"summary":"Set Org Role Enabled","operationId":"set_org_role_enabled_orgs__org_id__roles__role_id__enabled_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetEnabledRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/staff-roles":{"get":{"tags":["roles"],"summary":"List Staff Roles","operationId":"list_staff_roles_orgs__org_id__staff_roles_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring match on email, first/last name, or role name.","title":"Search"},"description":"Substring match on email, first/last name, or role name."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StaffRoleListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/members/{user_id}/custom-role":{"patch":{"tags":["roles"],"summary":"Assign Member Custom Role","operationId":"assign_member_custom_role_orgs__org_id__members__user_id__custom_role_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignCustomRoleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberWithRoleRow"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["roles"],"summary":"Clear Member Custom Role","operationId":"clear_member_custom_role_orgs__org_id__members__user_id__custom_role_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberWithRoleRow"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/me/roles":{"get":{"tags":["roles"],"summary":"List My Org Roles","operationId":"list_my_org_roles_orgs_me_roles_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["roles"],"summary":"Create My Org Role","operationId":"create_my_org_role_orgs_me_roles_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/me/roles/{role_id}":{"get":{"tags":["roles"],"summary":"Get My Org Role","operationId":"get_my_org_role_orgs_me_roles__role_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["roles"],"summary":"Update My Org Role","operationId":"update_my_org_role_orgs_me_roles__role_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["roles"],"summary":"Delete My Org Role","operationId":"delete_my_org_role_orgs_me_roles__role_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/me/roles/{role_id}/enabled":{"patch":{"tags":["roles"],"summary":"Set My Org Role Enabled","operationId":"set_my_org_role_enabled_orgs_me_roles__role_id__enabled_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetEnabledRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/me/staff-roles":{"get":{"tags":["roles"],"summary":"List My Staff Roles","operationId":"list_my_staff_roles_orgs_me_staff_roles_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StaffRoleListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/plans":{"get":{"tags":["billing"],"summary":"List Payment Plans","description":"List all active, public payment plans. A logged-in brand sees its custom prices.","operationId":"list_payment_plans_billing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListPaymentPlansResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/plans/{plan_id}":{"get":{"tags":["billing"],"summary":"Get Payment Plan","description":"Get details of a specific payment plan.","operationId":"get_payment_plan_billing_plans__plan_id__get","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentPlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/currency":{"get":{"tags":["billing"],"summary":"Get Billing Currency","description":"The currency checkout will charge this user in.\n\nPricing UIs must display this rather than guessing from the browser locale,\notherwise a brand with no country sees GBP prices but is charged USD.","operationId":"get_billing_currency_billing_currency_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingCurrencyResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/techpack-pricing":{"get":{"tags":["billing"],"summary":"Get Public Techpack Pricing","description":"Return the current no-commitment (PAYG) list prices per currency.\n\nThese prices are configured in the admin pricing panel and displayed on the\npublic-facing pricing page as the single tech-pack (no-commitment) amount.","operationId":"get_public_techpack_pricing_billing_techpack_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformTechpackPricingResponse"}}}}}}},"/billing/concierge-pricing":{"get":{"tags":["billing"],"summary":"Get Public Concierge Pricing","description":"Return the current Concierge (white-glove) list prices per currency.","operationId":"get_public_concierge_pricing_billing_concierge_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformTechpackPricingResponse"}}}}}}},"/billing/subscription":{"get":{"tags":["billing"],"summary":"Get Current Subscription","description":"Get current user's active subscription.","operationId":"get_current_subscription_billing_subscription_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/subscription/create":{"post":{"tags":["billing"],"summary":"Create Subscription","description":"Create a new subscription checkout session.\n\nNo pre-existing Stripe Price object is required — the Checkout Session\nis built with inline ``price_data`` (see ``StripeClient.\ncreate_subscription_checkout_session``), the same approach already used\nfor one-time PAYG purchases.\n\nCurrency is resolved SERVER-SIDE from the caller's brand (never from the\nrequest body, which has no currency field at all) so the amount shown on\nthe pricing page and the amount Stripe charges can never diverge.","operationId":"create_subscription_billing_subscription_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/subscription/cancel":{"post":{"tags":["billing"],"summary":"Cancel Subscription","description":"Cancel the current subscription when the org still has tech pack access.","operationId":"cancel_subscription_billing_subscription_cancel_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionRequest"}}},"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":[]}]}},"/billing/subscription/change-plan/preview":{"post":{"tags":["billing"],"summary":"Preview Change Subscription Plan","description":"Preview the proration Stripe would charge for an immediate upgrade.","operationId":"preview_change_subscription_plan_billing_subscription_change_plan_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeSubscriptionPlanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeSubscriptionPlanPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/subscription/change-plan":{"post":{"tags":["billing"],"summary":"Change Subscription Plan","description":"Move an existing Stripe subscription to another plan.\n\n- Higher plan or monthly-to-annual upgrade on the same tier: switches now;\n  Stripe charges the prorated difference.\n- Lower plan or annual-to-monthly cycle change: nothing is charged or\n  refunded. They keep the current plan until the period ends and the new plan\n  (and its price) starts at the renewal (``status=\"scheduled\"``).","operationId":"change_subscription_plan_billing_subscription_change_plan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeSubscriptionPlanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeSubscriptionPlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/subscription/change-plan/scheduled/cancel":{"post":{"tags":["billing"],"summary":"Cancel Scheduled Plan Change","description":"Keep the current plan: drop a downgrade scheduled for the next renewal.","operationId":"cancel_scheduled_plan_change_billing_subscription_change_plan_scheduled_cancel_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeSubscriptionPlanResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/subscription/change-plan/confirm":{"post":{"tags":["billing"],"summary":"Confirm Subscription Plan Change","description":"Finish an upgrade that was waiting for payment. Applies the new plan once\nStripe shows the upgrade invoice as paid; otherwise reports it's still due.","operationId":"confirm_subscription_plan_change_billing_subscription_change_plan_confirm_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeSubscriptionPlanResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/trial/activate":{"post":{"tags":["billing"],"summary":"Activate Trial","description":"Start a Stripe-backed trial for the plan the user chose.\n\nReturns a Checkout URL (mode=\"subscription\", subscription_data.\ntrial_period_days=settings.trial_duration_days, payment_method_collection\n=\"always\") — the card is collected up front and Stripe auto-bills the\nsame plan when the trial ends. The org/Subscription trial fields are set\nby the Stripe webhook once checkout completes, not here.","operationId":"activate_trial_billing_trial_activate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateTrialRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/subscription/seats":{"get":{"tags":["billing"],"summary":"Get Subscription Seats","description":"Seats on the org's subscription: paid for, usable now, and in use.","operationId":"get_subscription_seats_billing_subscription_seats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeatsResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["billing"],"summary":"Update Subscription Seats","description":"Change how many seats the org pays for.\n\n- More seats: Stripe charges now for the rest of the current period\n  (prorated), so every seat renews together.\n- Fewer seats: no refund. The seats already paid for stay usable until the\n  period ends; the lower count is billed from the next renewal.","operationId":"update_subscription_seats_billing_subscription_seats_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSeatsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/subscription/seats/preview":{"get":{"tags":["billing"],"summary":"Preview Subscription Seats","description":"What adding seats would charge now (prorated) and at renewal. Nothing is charged.","operationId":"preview_subscription_seats_billing_subscription_seats_preview_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"seats","in":"query","required":true,"schema":{"type":"integer","title":"Seats"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeatsPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/purchase/tech-pack":{"post":{"tags":["billing"],"summary":"Purchase Tech Pack","description":"Purchase a single tech pack (one-time payment).","operationId":"purchase_tech_pack_billing_purchase_tech_pack_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseTechPackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseTechPackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/access/feature/{feature}":{"get":{"tags":["billing"],"summary":"Check Feature Access","description":"Check if user has access to a specific feature.","operationId":"check_feature_access_billing_access_feature__feature__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"feature","in":"path","required":true,"schema":{"type":"string","title":"Feature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureAccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/access/tech-pack":{"get":{"tags":["billing"],"summary":"Check Tech Pack Access","description":"Check if user can generate a tech pack.","operationId":"check_tech_pack_access_billing_access_tech_pack_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackAccessResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/access/billing-manager":{"get":{"tags":["billing"],"summary":"Get Billing Manager","description":"Whether the caller can manage billing, and who to ask if not.","operationId":"get_billing_manager_billing_access_billing_manager_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingManagerResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/verify-payment":{"post":{"tags":["billing"],"summary":"Verify Payment","description":"Verify payment by querying Stripe and create Payment record only if successful.\nSets verification_level = 1 (manual verification).","operationId":"verify_payment_billing_verify_payment_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyPaymentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyPaymentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/payment/{session_id}/status":{"get":{"tags":["billing"],"summary":"Get Payment Status","description":"Poll for payment verification status.\nUsed by frontend to detect when payment has been verified (via webhook or manual).\nDoes not require authentication since session_id serves as the token.","operationId":"get_payment_status_billing_payment__session_id__status_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"}}}}}}},"/billing/webhook/stripe":{"post":{"tags":["billing"],"summary":"Stripe Webhook","description":"Receive and process Stripe webhook events.\n\nThis endpoint:\n- Verifies webhook signature (production only)\n- Processes checkout.session.completed, payment_intent.succeeded, etc.\n- Updates payment status to 'succeeded' when confirmed\n- Creates subscription and payment records\n\nNote: In development without ngrok, this endpoint won't receive events.\nThe manual verification flow handles payment confirmation instead.","operationId":"stripe_webhook_billing_webhook_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing/trial-status":{"get":{"tags":["billing","billing-credits"],"summary":"Trial Status","description":"Returns the current trial status for the authenticated user's organization.","operationId":"trial_status_billing_trial_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrialStatusResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/credits/balance":{"get":{"tags":["billing","billing-credits"],"summary":"Credit Balance","description":"Returns the current credit balance, period usage, and recent history\nfor the authenticated user's organization. Gated by ``wallet.view`` —\norg-role defaults already grant this to editors and viewers, so\nbehavior is unchanged for members without a custom role.","operationId":"credit_balance_billing_credits_balance_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditBalanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/credits/top-up":{"post":{"tags":["billing","billing-credits"],"summary":"Create Topup Checkout","description":"Create a Stripe Checkout session for the $40 / 3 credits top-up product.\n\nReturns a ``checkout_url`` the client should redirect to.\nOn successful payment, the Stripe webhook handler adds 3 credits\nto the org's ledger automatically.","operationId":"create_topup_checkout_billing_credits_top_up_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopUpCheckoutResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/webhook":{"post":{"tags":["billing","billing-credits"],"summary":"Stripe Webhook","description":"Stripe webhook handler.\n\nHandles:\n- ``checkout.session.completed`` — credit top-ups\n- ``invoice.paid`` — subscription renewals (adds period credits)","operationId":"stripe_webhook_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing/checkout":{"post":{"tags":["billing","billing-checkout"],"summary":"Create Checkout","description":"Create a Stripe Checkout session for any plan type.\n\nCatalog slugs (``payg``, ``sub-1-monthly``, ``sub-2-annual``, …) and\n``payment_plans.id`` UUIDs resolve through the PaymentPlan table with\ninline ``price_data``. Legacy Price-ID slugs stay on ``_PLAN_MAP``.\nEnterprise is not self-serve.\n\nOnly org owners/admins may initiate.  Team members get a 403.","operationId":"create_checkout_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/portal":{"post":{"tags":["billing","billing-checkout"],"summary":"Create Billing Portal","description":"Create a Stripe Customer Portal session.\n\nUsers can manage their subscription, update payment methods,\nview invoices, and cancel — all inside Stripe's hosted UI.\n\nOnly org owners/admins may access.","operationId":"create_billing_portal_billing_portal_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalRequest","default":{}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/invoice/latest":{"get":{"tags":["billing","billing-checkout"],"summary":"Get Latest Invoice","description":"Fetch the latest paid Stripe invoice for the caller's organization.\nReturns invoice PDF and hosted invoice links when available.","operationId":"get_latest_invoice_billing_invoice_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/purchase-single":{"post":{"tags":["billing","billing-checkout"],"summary":"Purchase Single Design","description":"PAYG: one or more tech packs, priced from the ``payg`` ``PaymentPlan`` row\n(the same catalog ``GET /billing/plans`` reads from) rather than a\nhard-coded Stripe Price ID, plus optional add-on line items\n(``STRIPE_PAYG_ADDON_*``, still price-ID based).\n\n``quantity`` is the number of packs. Stripe is charged unit price ×\nquantity and the webhook grants ``quota × quantity`` credits.\n\nAdd-ons are stored in session metadata (``payg_addons``) for auditing.","operationId":"purchase_single_design_billing_purchase_single_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleDesignRequest","default":{"quantity":1,"payg_addons":[]}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/manufacturer-checkout":{"post":{"tags":["billing","billing-manufacturer-checkout"],"summary":"Create Manufacturer Checkout","description":"Create Stripe Checkout for a manufacturer tech pack at the factory's\nlisted price (``techpack_price_cents``).\n\nThreadChain collects the full amount. On successful payment the webhook\nrecords a credit lot with platform fee = max($40, 25% of gross) and the\nmanufacturer's net share. Earnings accrue for monthly factory payout.","operationId":"create_manufacturer_checkout_billing_manufacturer_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/wallet":{"get":{"tags":["billing","billing-topup"],"summary":"Wallet Summary","operationId":"wallet_summary_billing_wallet_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletSummaryResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/top-up":{"post":{"tags":["billing","billing-topup"],"summary":"Create Top Up Checkout","operationId":"create_top_up_checkout_billing_top_up_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackTopUpRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackTopUpResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/billing/redeem-token":{"post":{"tags":["billing","billing-topup"],"summary":"Redeem Token","operationId":"redeem_token_billing_redeem_token_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemTokenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/feedback":{"post":{"tags":["feedback"],"summary":"Submit Feedback","description":"Submit end-user feedback from the app UI.","operationId":"submit_feedback_feedback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackSubmitRequest"}}},"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":[]}]}},"/feedback/client-error":{"post":{"tags":["feedback"],"summary":"Report Client Error","description":"Best-effort browser crash report. Never blocks the customer UI.","operationId":"report_client_error_feedback_client_error_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientErrorReport"}}},"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":[]}]}},"/manufacturer/me":{"get":{"tags":["manufacturer"],"summary":"Get My Manufacturer Profile","operationId":"get_my_manufacturer_profile_manufacturer_me_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["manufacturer"],"summary":"Create My Manufacturer Profile","operationId":"create_my_manufacturer_profile_manufacturer_me_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["manufacturer"],"summary":"Update My Manufacturer Profile","operationId":"update_my_manufacturer_profile_manufacturer_me_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/logo":{"post":{"tags":["manufacturer"],"summary":"Upload My Manufacturer Logo","description":"Upload the manufacturer's business logo. Returns the updated\nprofile so the frontend can re-render without a separate GET.","operationId":"upload_my_manufacturer_logo_manufacturer_me_logo_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_my_manufacturer_logo_manufacturer_me_logo_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["manufacturer"],"summary":"Clear My Manufacturer Logo","operationId":"clear_my_manufacturer_logo_manufacturer_me_logo_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/nda":{"post":{"tags":["manufacturer"],"summary":"Upload My Manufacturer Nda","operationId":"upload_my_manufacturer_nda_manufacturer_me_nda_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_my_manufacturer_nda_manufacturer_me_nda_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["manufacturer"],"summary":"Clear My Manufacturer Nda","description":"Clear the manufacturer's custom NDA. Subsequent GETs return the platform default.","operationId":"clear_my_manufacturer_nda_manufacturer_me_nda_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["manufacturer"],"summary":"Get My Manufacturer Nda","description":"Return the current NDA URL. If the manufacturer has uploaded one,\nthat's returned with ``is_default=false``. Otherwise falls back to\n``settings.default_nda_url`` with ``is_default=true``. 404 when\nneither is set so the frontend can render its inline canned copy.","operationId":"get_my_manufacturer_nda_manufacturer_me_nda_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NdaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/store-slug-availability":{"get":{"tags":["manufacturer"],"summary":"Check Store Slug Availability","description":"Live availability check for the store slug input. Excludes the\ncaller's own current slug from the lookup so re-saving the same\nvalue isn't reported as 'taken'.","operationId":"check_store_slug_availability_manufacturer_me_store_slug_availability_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"slug","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":128,"title":"Slug"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreSlugAvailabilityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/techpack-requirement":{"get":{"tags":["manufacturer"],"summary":"Get My Techpack Requirement","description":"Return the manufacturer's required techpack components (the existing\nonboarding-side ``ManufacturerProfile.techpack_components`` field).","operationId":"get_my_techpack_requirement_manufacturer_me_techpack_requirement_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechpackRequirementResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["manufacturer"],"summary":"Update My Techpack Requirement","operationId":"update_my_techpack_requirement_manufacturer_me_techpack_requirement_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechpackRequirementUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechpackRequirementResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/documents":{"get":{"tags":["manufacturer"],"summary":"List My Manufacturer Documents","operationId":"list_my_manufacturer_documents_manufacturer_me_documents_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerDocumentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["manufacturer"],"summary":"Upload My Manufacturer Documents","description":"Upload Good / Bad sample tech packs. Either file is optional.","operationId":"upload_my_manufacturer_documents_manufacturer_me_documents_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_my_manufacturer_documents_manufacturer_me_documents_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerDocumentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/submit":{"post":{"tags":["manufacturer"],"summary":"Submit Manufacturer Application","description":"Mark manufacturer onboarding as submitted and notify admins internally.","operationId":"submit_manufacturer_application_manufacturer_me_submit_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/techpacks":{"get":{"tags":["manufacturer"],"summary":"List Manufacturer Techpacks","description":"List tech packs that brands have attributed to this manufacturer.\n\nActive and manufacturer-completed packs are shown together by default\nso completed rows can stay under the same customer group. Use\n``status=completed`` to view only packs marked complete.","operationId":"list_manufacturer_techpacks_manufacturer_me_techpacks_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive substring match against brand name, share code, brand contact email, and the submitting user's email.","title":"Search"},"description":"Case-insensitive substring match against brand name, share code, brand contact email, and the submitting user's email."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact JobStatus value. A value outside the set of known JobStatus values returns an empty result set.","title":"Status"},"description":"Exact JobStatus value. A value outside the set of known JobStatus values returns an empty result set."},{"name":"product_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by 'clothes' or 'jewelry'.","title":"Product Type"},"description":"Filter by 'clothes' or 'jewelry'."},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackJobListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/techpacks/stats":{"get":{"tags":["manufacturer"],"summary":"Manufacturer Techpack Stats","description":"Counters for the manufacturer dashboard cards.\n\n``total`` is every tech pack on the list. ``completed`` is the ones\nmarked complete, and ``in_progress`` is the rest.","operationId":"manufacturer_techpack_stats_manufacturer_me_techpacks_stats_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackJobStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/pending-invitations":{"get":{"tags":["manufacturer"],"summary":"List My Pending Techpack Invitations","operationId":"list_my_pending_techpack_invitations_manufacturer_me_pending_invitations_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PendingTechPackInvitationResponse"},"title":"Response List My Pending Techpack Invitations Manufacturer Me Pending Invitations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/pending-invitations/{invitation_id}/accept":{"post":{"tags":["manufacturer"],"summary":"Accept My Pending Techpack Invitation","operationId":"accept_my_pending_techpack_invitation_manufacturer_me_pending_invitations__invitation_id__accept_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingTechPackInvitationAcceptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/pending-invitations/{invitation_id}/decline":{"post":{"tags":["manufacturer"],"summary":"Decline My Pending Techpack Invitation","operationId":"decline_my_pending_techpack_invitation_manufacturer_me_pending_invitations__invitation_id__decline_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingTechPackInvitationDeclineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/techpacks/{job_id}":{"delete":{"tags":["manufacturer"],"summary":"Unlink My Manufacturer Techpack","description":"Remove this manufacturer's attribution from a tech pack, dropping it off their list.","operationId":"unlink_my_manufacturer_techpack_manufacturer_me_techpacks__job_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/techpacks/{job_id}/complete":{"post":{"tags":["manufacturer"],"summary":"Complete My Manufacturer Techpack","description":"Mark a tech pack complete in the manufacturer's workflow.","operationId":"complete_my_manufacturer_techpack_manufacturer_me_techpacks__job_id__complete_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/customers":{"get":{"tags":["manufacturer"],"summary":"List Manufacturer Customers","description":"List brands linked to this manufacturer, with the per-brand\naggregate counters powering the manufacturer-side CRM dashboard.\n\nA brand appears here once ``Brand.manufacturer_id`` is set to this\nmanufacturer (typically via referral signup or\n``POST /brand/me/link``). Each row carries the brand's contact info\nplus the count of tech packs the brand has attributed to this\nmanufacturer.\n\nNote: ``tech_pack_count`` counts every attribution regardless of\nlifecycle state (i.e. mirrors the brand's perspective). It is\n*not* filtered by the ``/me/techpacks`` visibility window — those\ncounts are surfaced on ``/me/techpacks/stats`` instead.","operationId":"list_manufacturer_customers_manufacturer_me_customers_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive substring match against brand name, brand contact email (org owner), and brand location.","title":"Search"},"description":"Case-insensitive substring match against brand name, brand contact email (org owner), and brand location."},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerCustomerListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/customers/stats":{"get":{"tags":["manufacturer"],"summary":"Manufacturer Customer Stats","description":"Counter for the \"Total No. of Customers\" CRM card.","operationId":"manufacturer_customer_stats_manufacturer_me_customers_stats_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerCustomerStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/customers/{brand_id}":{"delete":{"tags":["manufacturer"],"summary":"Unlink Manufacturer Customer","description":"Remove a brand from this manufacturer's CRM by clearing the link\n(``Brand.manufacturer_id`` / ``linked_to_manufacturer_at``).\n\nThis does not delete the brand's account or its tech packs — it\nonly detaches the relationship, mirroring ``DELETE /brand/me/link``\nfrom the brand side.","operationId":"unlink_manufacturer_customer_manufacturer_me_customers__brand_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["manufacturer"],"summary":"Update Manufacturer Customer Price","description":"Set or clear a per-brand tech pack price override.\n\nSend ``techpack_price_cents: null`` (or omit after unset) to revert to\nthe manufacturer's default price from Factory Settings.","operationId":"update_manufacturer_customer_price_manufacturer_me_customers__brand_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerCustomerPriceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerCustomerListItem"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/referral-link":{"get":{"tags":["manufacturer"],"summary":"Get My Referral Link","description":"Return the manufacturer's current referral token (or empty payload).","operationId":"get_my_referral_link_manufacturer_me_referral_link_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["manufacturer"],"summary":"Rotate My Referral Link","description":"Generate (or regenerate) the referral token. Invalidates any previous one.","operationId":"rotate_my_referral_link_manufacturer_me_referral_link_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ReferralLinkCreateRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["manufacturer"],"summary":"Disable My Referral Link","description":"Disable the referral token. Existing in-flight signups stop working.","operationId":"disable_my_referral_link_manufacturer_me_referral_link_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/referral/{token}":{"get":{"tags":["manufacturer"],"summary":"Preview Referral Link","operationId":"preview_referral_link_manufacturer_referral__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/invites":{"get":{"tags":["manufacturer"],"summary":"List My Invites","operationId":"list_my_invites_manufacturer_me_invites_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"include_revoked","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Revoked"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerInviteListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["manufacturer"],"summary":"Create My Invite","operationId":"create_my_invite_manufacturer_me_invites_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerInviteCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerInviteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/invites/{invite_id}":{"delete":{"tags":["manufacturer"],"summary":"Revoke My Invite","operationId":"revoke_my_invite_manufacturer_me_invites__invite_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invite Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerInviteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/size-guide-groups":{"get":{"tags":["manufacturer"],"summary":"List My Size Guide Groups","description":"List all folders for this manufacturer (flat; UI builds the tree).","operationId":"list_my_size_guide_groups_manufacturer_me_size_guide_groups_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizeGuideGroupListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["manufacturer"],"summary":"Create My Size Guide Group","description":"Create a folder. Brands are not required — assign them later.","operationId":"create_my_size_guide_group_manufacturer_me_size_guide_groups_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizeGuideGroupCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizeGuideGroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/size-guide-groups/{group_id}":{"patch":{"tags":["manufacturer"],"summary":"Update My Size Guide Group","operationId":"update_my_size_guide_group_manufacturer_me_size_guide_groups__group_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizeGuideGroupUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizeGuideGroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["manufacturer"],"summary":"Delete My Size Guide Group","description":"Delete an empty folder. Move or delete guides/subfolders first.","operationId":"delete_my_size_guide_group_manufacturer_me_size_guide_groups__group_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/size-guide-groups/{group_id}/brands":{"get":{"tags":["manufacturer"],"summary":"Get My Size Guide Group Brands","operationId":"get_my_size_guide_group_brands_manufacturer_me_size_guide_groups__group_id__brands_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizeGuideGroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["manufacturer"],"summary":"Assign My Size Guide Group Brands","description":"Replace the set of linked brands that can see this folder (+ subtree).","operationId":"assign_my_size_guide_group_brands_manufacturer_me_size_guide_groups__group_id__brands_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizeGuideGroupBrandAssignRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizeGuideGroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/size-guides":{"post":{"tags":["manufacturer"],"summary":"Upload My Size Guide","description":"Upload a size guide; extract the Size Studio table once at upload time.","operationId":"upload_my_size_guide_manufacturer_me_size_guides_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_my_size_guide_manufacturer_me_size_guides_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerSizeGuideResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["manufacturer"],"summary":"List My Size Guides","operationId":"list_my_size_guides_manufacturer_me_size_guides_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"When set, only guides in this folder.","title":"Group Id"},"description":"When set, only guides in this folder."},{"name":"ungrouped","in":"query","required":false,"schema":{"type":"boolean","description":"When true, only guides with no folder (ignores group_id).","default":false,"title":"Ungrouped"},"description":"When true, only guides with no folder (ignores group_id)."},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerSizeGuideListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/size-guides/{guide_id}":{"patch":{"tags":["manufacturer"],"summary":"Update My Size Guide","description":"Move a size guide into a folder (or ungroup with group_id=null).","operationId":"update_my_size_guide_manufacturer_me_size_guides__guide_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"guide_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Guide Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerSizeGuideUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerSizeGuideResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["manufacturer"],"summary":"Delete My Size Guide","operationId":"delete_my_size_guide_manufacturer_me_size_guides__guide_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"guide_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Guide Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/size-guides/{guide_id}/cover-image":{"post":{"tags":["manufacturer"],"summary":"Upload Manufacturer Size Guide Cover Image","description":"Upload a custom cover image for this size guide (shown in the brand picker).","operationId":"upload_manufacturer_size_guide_cover_image_manufacturer_me_size_guides__guide_id__cover_image_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"guide_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Guide Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_manufacturer_size_guide_cover_image_manufacturer_me_size_guides__guide_id__cover_image_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerSizeGuideResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["manufacturer"],"summary":"Delete Manufacturer Size Guide Cover Image","description":"Remove the custom cover image (picker falls back to auto-generated thumbnail).","operationId":"delete_manufacturer_size_guide_cover_image_manufacturer_me_size_guides__guide_id__cover_image_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"guide_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Guide Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerSizeGuideResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/wallet":{"get":{"tags":["manufacturer"],"summary":"Get My Wallet","operationId":"get_my_wallet_manufacturer_me_wallet_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Date window for totals and payment history: all | this_month | last_month","default":"all","title":"Period"},"description":"Date window for totals and payment history: all | this_month | last_month"},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerWalletResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/me/wallet/payout-account":{"put":{"tags":["manufacturer"],"summary":"Upsert My Payout Account","operationId":"upsert_my_payout_account_manufacturer_me_wallet_payout_account_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerPayoutAccountUpsertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerPayoutAccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manufacturer/{manufacturer_id}/techpack-pricing":{"get":{"tags":["manufacturer"],"summary":"Get Manufacturer Techpack Pricing","description":"Public pricing preview for a verified manufacturer with a listed price.","operationId":"get_manufacturer_techpack_pricing_manufacturer__manufacturer_id__techpack_pricing_get","parameters":[{"name":"manufacturer_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Manufacturer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerTechpackPricingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me":{"get":{"tags":["brand"],"summary":"Get My Brand","description":"Return the current org's Brand row plus a summary of any linked manufacturer.","operationId":"get_my_brand_brand_me_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandWithManufacturerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["brand"],"summary":"Update My Brand","description":"Partial update for the brand profile. Mutable fields: ``name``,\n``email``, ``phone``, ``location``, ``team_size``. ``country`` is\nset-once (locks billing currency). Manufacturer linking lives at\n``POST /brand/me/link``. Empty strings are treated as ``None`` so\nthe frontend can clear a field by sending ``\"\"``.\n\n``apply_logo_to_techpacks``: switching it on backfills the brand logo\nonto existing tech packs that have no logo; switching it off only stops\nfuture prefills.","operationId":"update_my_brand_brand_me_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandLogoUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/logo":{"post":{"tags":["brand"],"summary":"Upload My Brand Logo","description":"Upload (or replace) the brand logo. ``apply_to_techpacks`` is the answer\nto \"apply this logo to all tech packs?\": when true the logo is written as\nthe cover logo on existing tech packs that have none — or that still show\nthe previous brand logo — and prefilled on every new tech pack.","operationId":"upload_my_brand_logo_brand_me_logo_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_my_brand_logo_brand_me_logo_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandLogoUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["brand"],"summary":"Delete My Brand Logo","description":"Remove the brand logo and stop prefilling it. Tech packs keep their cover logo.","operationId":"delete_my_brand_logo_brand_me_logo_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandLogoUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/complete-onboarding":{"post":{"tags":["brand"],"summary":"Complete Brand Onboarding","description":"Mark the current user's brand onboarding as finished and, if the\nemail is not yet verified, send the signup OTP.\n\nIdempotent on ``User.onboarding_completed``. Does not require every\nprofile field — the wizard may leave optional fields empty. Billing\ncountry must already be locked (via location → country on PATCH).","operationId":"complete_brand_onboarding_brand_me_complete_onboarding_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandOnboardingCompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/link":{"post":{"tags":["brand"],"summary":"Link My Brand To Manufacturer","description":"Attach this brand to a manufacturer via the manufacturer's referral /\npriced-invite token.\n\n- Unlinked brands: link + apply invite pricing side-effects.\n- Already linked to the same manufacturer: attach a priced invite if\n  one is not already stored (so bundle checkout can resume on designboard).\n- Linked to a different manufacturer: 409.","operationId":"link_my_brand_to_manufacturer_brand_me_link_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandWithManufacturerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["brand"],"summary":"Unlink My Brand From Manufacturer","description":"Detach this brand from its manufacturer. Idempotent — no-op when already unlinked.","operationId":"unlink_my_brand_from_manufacturer_brand_me_link_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/workspaces":{"get":{"tags":["brand"],"summary":"List My Workspaces","description":"Manufacturers this brand works with, for the workspace switcher.","operationId":"list_my_workspaces_brand_me_workspaces_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandWorkspaceResponse"},"title":"Response List My Workspaces Brand Me Workspaces Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/techpacks":{"get":{"tags":["brand"],"summary":"List Brand Techpacks","description":"List tech packs attributed to the caller's brand, regardless of\nlifecycle state. Brand members own this data and see in-progress\ndrafts as well as completed packs.","operationId":"list_brand_techpacks_brand_me_techpacks_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive substring match against brand name, share code, brand contact email, and the submitting user's email.","title":"Search"},"description":"Case-insensitive substring match against brand name, share code, brand contact email, and the submitting user's email."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact JobStatus value, e.g. 'workspace_active'.","title":"Status"},"description":"Exact JobStatus value, e.g. 'workspace_active'."},{"name":"product_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by 'clothes' or 'jewelry'.","title":"Product Type"},"description":"Filter by 'clothes' or 'jewelry'."},{"name":"manufacturer_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Only tech packs attributed to this manufacturer.","title":"Manufacturer Id"},"description":"Only tech packs attributed to this manufacturer."},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackJobListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/techpacks/stats":{"get":{"tags":["brand"],"summary":"Brand Techpack Stats","description":"Counters for the brand dashboard cards: ``total`` (all attributed\ntech packs) and ``in_progress`` (anything not yet completed and not\nfailed).","operationId":"brand_techpack_stats_brand_me_techpacks_stats_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechPackJobStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/techpacks/{job_id}/complete":{"post":{"tags":["brand"],"summary":"Complete My Brand Techpack","description":"Mark a tech pack complete so the linked manufacturer sees it as completed.","operationId":"complete_my_brand_techpack_brand_me_techpacks__job_id__complete_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/manufacturer/size-guides":{"get":{"tags":["brand"],"summary":"List Manufacturer Size Guides","description":"Size charts the brand may pick from in the \"select size chart\" UI —\nguides in folders the manufacturer assigned to this brand (including\nsubfolders of assigned folders). Ungrouped / unassigned guides are hidden.\nReturns an empty list when the brand has no manufacturer link.\n\nGuides still being extracted (or whose extraction failed) are included with their\n``extraction_status`` so the picker can show them disabled — only \"ready\" guides\ncarry a table, and applying one that isn't ready is rejected.","operationId":"list_manufacturer_size_guides_brand_me_manufacturer_size_guides_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizeChartOptionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/size-guide-groups":{"get":{"tags":["brand"],"summary":"List My Brand Size Guide Groups","operationId":"list_my_brand_size_guide_groups_brand_me_size_guide_groups_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeGuideGroupListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["brand"],"summary":"Create My Brand Size Guide Group","operationId":"create_my_brand_size_guide_group_brand_me_size_guide_groups_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeGuideGroupCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeGuideGroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/size-guide-groups/{group_id}":{"patch":{"tags":["brand"],"summary":"Update My Brand Size Guide Group","operationId":"update_my_brand_size_guide_group_brand_me_size_guide_groups__group_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeGuideGroupUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeGuideGroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["brand"],"summary":"Delete My Brand Size Guide Group","operationId":"delete_my_brand_size_guide_group_brand_me_size_guide_groups__group_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/size-guides":{"post":{"tags":["brand"],"summary":"Upload My Brand Size Guide","description":"Upload a brand size guide; extract the Size Studio table in the background.","operationId":"upload_my_brand_size_guide_brand_me_size_guides_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_my_brand_size_guide_brand_me_size_guides_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeGuideResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["brand"],"summary":"List My Brand Size Guides","operationId":"list_my_brand_size_guides_brand_me_size_guides_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"}},{"name":"ungrouped","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Ungrouped"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeGuideListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/size-guides/{guide_id}":{"patch":{"tags":["brand"],"summary":"Update My Brand Size Guide","description":"Rename a guide and/or move it into a folder.","operationId":"update_my_brand_size_guide_brand_me_size_guides__guide_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"guide_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Guide Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeGuideUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeGuideResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["brand"],"summary":"Delete My Brand Size Guide","operationId":"delete_my_brand_size_guide_brand_me_size_guides__guide_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"guide_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Guide Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/size-guides/{guide_id}/file":{"post":{"tags":["brand"],"summary":"Replace My Brand Size Guide File","description":"Replace the file on an existing size guide and re-run extraction.","operationId":"replace_my_brand_size_guide_file_brand_me_size_guides__guide_id__file_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"guide_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Guide Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_replace_my_brand_size_guide_file_brand_me_size_guides__guide_id__file_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeGuideResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/size-guides/{guide_id}/cover-image":{"post":{"tags":["brand"],"summary":"Upload My Brand Size Guide Cover Image","description":"Upload a custom cover image for this brand size guide (shown in the picker).","operationId":"upload_my_brand_size_guide_cover_image_brand_me_size_guides__guide_id__cover_image_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"guide_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Guide Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_my_brand_size_guide_cover_image_brand_me_size_guides__guide_id__cover_image_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeGuideResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["brand"],"summary":"Delete My Brand Size Guide Cover Image","description":"Remove the custom cover image (picker falls back to auto-generated thumbnail).","operationId":"delete_my_brand_size_guide_cover_image_brand_me_size_guides__guide_id__cover_image_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"guide_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Guide Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeGuideResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/me/size-guides/picker":{"get":{"tags":["brand"],"summary":"List My Brand Size Guides For Picker","description":"Brand-private size charts for the Size Studio picker (all ready guides).","operationId":"list_my_brand_size_guides_for_picker_brand_me_size_guides_picker_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSizeChartOptionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/onboarding/manufacturer/options":{"get":{"tags":["onboarding"],"summary":"Get Options","description":"Return all enum options the wizard renders. Cacheable, no auth.","operationId":"get_options_onboarding_manufacturer_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingOptionsOut"}}}}}}},"/onboarding/manufacturer":{"get":{"tags":["onboarding"],"summary":"Get My Profile","description":"Return the current user's manufacturer onboarding state, or 404 if not started.","operationId":"get_my_profile_onboarding_manufacturer_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["onboarding"],"summary":"Start Onboarding","description":"Idempotently create the manufacturer onboarding profile.","operationId":"start_onboarding_onboarding_manufacturer_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/onboarding/manufacturer/setup":{"patch":{"tags":["onboarding"],"summary":"Patch Setup","operationId":"patch_setup_onboarding_manufacturer_setup_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/onboarding/manufacturer/company-profile":{"patch":{"tags":["onboarding"],"summary":"Patch Company Profile","operationId":"patch_company_profile_onboarding_manufacturer_company_profile_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyProfileIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/onboarding/manufacturer/factory-profile":{"patch":{"tags":["onboarding"],"summary":"Patch Factory Profile","operationId":"patch_factory_profile_onboarding_manufacturer_factory_profile_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FactoryProfileIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/onboarding/manufacturer/production-specialty":{"patch":{"tags":["onboarding"],"summary":"Patch Production Specialty","operationId":"patch_production_specialty_onboarding_manufacturer_production_specialty_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductionSpecialtyIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/onboarding/manufacturer/techpack-blueprint":{"patch":{"tags":["onboarding"],"summary":"Patch Techpack Blueprint","operationId":"patch_techpack_blueprint_onboarding_manufacturer_techpack_blueprint_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechpackBlueprintIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/onboarding/manufacturer/benchmark-files":{"post":{"tags":["onboarding"],"summary":"Upload Benchmark File","description":"Upload a Good or Bad example tech pack to B2 and record it on the profile.","operationId":"upload_benchmark_file_onboarding_manufacturer_benchmark_files_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_benchmark_file_onboarding_manufacturer_benchmark_files_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkFileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/onboarding/manufacturer/benchmark-files/{file_id}":{"delete":{"tags":["onboarding"],"summary":"Delete Benchmark File","description":"Delete a benchmark file row. The B2 object is left in place.","operationId":"delete_benchmark_file_onboarding_manufacturer_benchmark_files__file_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/onboarding/manufacturer/complete":{"post":{"tags":["onboarding"],"summary":"Complete","description":"Mark onboarding finished. Idempotent — calling twice is safe and\nkeeps the original ``completed_at``.","operationId":"complete_onboarding_manufacturer_complete_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leads/get-started":{"post":{"tags":["leads"],"summary":"Create Get Started Lead","description":"Public endpoint for landing page Get Started form submissions.","operationId":"create_get_started_lead_leads_get_started_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetStartedLeadCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetStartedLeadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leads/newsletter":{"post":{"tags":["leads"],"summary":"Subscribe Newsletter","description":"Public endpoint for newsletter signups. Repeat emails get the same success reply.","operationId":"subscribe_newsletter_leads_newsletter_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterSubscribeCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterSubscribeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blog/posts":{"get":{"tags":["blog"],"summary":"List Published Posts","operationId":"list_published_posts_blog_posts_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blog/posts/{slug}":{"get":{"tags":["blog"],"summary":"Get Published Post","operationId":"get_published_post_blog_posts__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/BlogPostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blog/posts/{post_id}/engagement":{"get":{"tags":["blog"],"summary":"Get Post Engagement","operationId":"get_post_engagement_blog_posts__post_id__engagement_get","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Post Id"}},{"name":"X-Blog-Visitor-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Blog-Visitor-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogEngagementResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blog/posts/{post_id}/like":{"post":{"tags":["blog"],"summary":"Toggle Post Like","operationId":"toggle_post_like_blog_posts__post_id__like_post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Post Id"}},{"name":"X-Blog-Visitor-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Blog-Visitor-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogLikeToggleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blog/posts/{post_id}/comments":{"post":{"tags":["blog"],"summary":"Add Post Comment","operationId":"add_post_comment_blog_posts__post_id__comments_post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Post Id"}},{"name":"X-Blog-Visitor-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Blog-Visitor-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogCommentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogCommentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blog/posts/{post_id}/comments/{comment_id}":{"delete":{"tags":["blog"],"summary":"Delete Post Comment","operationId":"delete_post_comment_blog_posts__post_id__comments__comment_id__delete","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Post Id"}},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comment Id"}},{"name":"X-Blog-Visitor-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Blog-Visitor-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blog-studio/unlock":{"post":{"tags":["blog-studio"],"summary":"Unlock Blog Studio","operationId":"unlock_blog_studio_blog_studio_unlock_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogStudioUnlockRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogStudioUnlockResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/blog-studio/stats":{"get":{"tags":["blog-studio"],"summary":"Get Blog Stats","operationId":"get_blog_stats_blog_studio_stats_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"X-Blog-Studio-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Blog-Studio-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blog-studio/posts":{"get":{"tags":["blog-studio"],"summary":"List Blog Posts","operationId":"list_blog_posts_blog_studio_posts_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"updated_at","title":"Sort By"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"X-Blog-Studio-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Blog-Studio-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["blog-studio"],"summary":"Create Blog Post","operationId":"create_blog_post_blog_studio_posts_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"X-Blog-Studio-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Blog-Studio-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blog-studio/upload-image":{"post":{"tags":["blog-studio"],"summary":"Upload Blog Image","operationId":"upload_blog_image_blog_studio_upload_image_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"X-Blog-Studio-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Blog-Studio-Token"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_blog_image_blog_studio_upload_image_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogImageUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blog-studio/posts/{post_id}":{"get":{"tags":["blog-studio"],"summary":"Get Blog Post","operationId":"get_blog_post_blog_studio_posts__post_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Post Id"}},{"name":"X-Blog-Studio-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Blog-Studio-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["blog-studio"],"summary":"Update Blog Post","operationId":"update_blog_post_blog_studio_posts__post_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Post Id"}},{"name":"X-Blog-Studio-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Blog-Studio-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["blog-studio"],"summary":"Delete Blog Post","operationId":"delete_blog_post_blog_studio_posts__post_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Post Id"}},{"name":"X-Blog-Studio-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Blog-Studio-Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blog-studio/posts/{post_id}/comments/{comment_id}":{"delete":{"tags":["blog-studio"],"summary":"Studio Delete Blog Comment","operationId":"studio_delete_blog_comment_blog_studio_posts__post_id__comments__comment_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Post Id"}},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comment Id"}},{"name":"X-Blog-Studio-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Blog-Studio-Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/authorize":{"get":{"tags":["integrations"],"summary":"Authorize","operationId":"authorize_integrations_notion_authorize_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotionAuthorizeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/callback":{"get":{"tags":["integrations"],"summary":"Callback","operationId":"callback_integrations_notion_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/status":{"get":{"tags":["integrations"],"summary":"Get Status","operationId":"get_status_integrations_notion_status_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotionStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/disconnect":{"post":{"tags":["integrations"],"summary":"Disconnect","operationId":"disconnect_integrations_notion_disconnect_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/data-sources":{"get":{"tags":["integrations"],"summary":"List Data Sources","operationId":"list_data_sources_integrations_notion_data_sources_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NotionDataSourceOption"},"title":"Response List Data Sources Integrations Notion Data Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/data-source":{"post":{"tags":["integrations"],"summary":"Select Data Source","operationId":"select_data_source_integrations_notion_data_source_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectDataSourceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotionStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/pages":{"get":{"tags":["integrations"],"summary":"List Pages","operationId":"list_pages_integrations_notion_pages_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NotionPageOption"},"title":"Response List Pages Integrations Notion Pages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/create-database":{"post":{"tags":["integrations"],"summary":"Create Database","operationId":"create_database_integrations_notion_create_database_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDatabaseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotionStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/pricing-config":{"get":{"tags":["integrations"],"summary":"Get Pricing Config","operationId":"get_pricing_config_integrations_notion_pricing_config_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["integrations"],"summary":"Put Pricing Config","operationId":"put_pricing_config_integrations_notion_pricing_config_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingConfigRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["integrations"],"summary":"Delete Pricing Config","operationId":"delete_pricing_config_integrations_notion_pricing_config_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/pricing-schema":{"get":{"tags":["integrations"],"summary":"Get Pricing Schema","operationId":"get_pricing_schema_integrations_notion_pricing_schema_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"data_source_id","in":"query","required":true,"schema":{"type":"string","title":"Data Source Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PricingPropertyOption"},"title":"Response Get Pricing Schema Integrations Notion Pricing Schema Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/pricing-categories":{"get":{"tags":["integrations"],"summary":"Get Pricing Categories","operationId":"get_pricing_categories_integrations_notion_pricing_categories_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response Get Pricing Categories Integrations Notion Pricing Categories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/jobs/{job_id}/sync":{"post":{"tags":["integrations"],"summary":"Sync Now","operationId":"sync_now_integrations_notion_jobs__job_id__sync_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/notion/jobs/{job_id}/sync-status":{"get":{"tags":["integrations"],"summary":"Sync Status","description":"Poll the last-known state of a job's sync — the Celery task runs on the\n`default` queue with no other feedback, so the frontend polls this after\ncalling `sync_now` to show synced/error instead of an indefinite spinner.","operationId":"sync_status_integrations_notion_jobs__job_id__sync_status_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications":{"get":{"tags":["notifications"],"summary":"List Notifications","operationId":"list_notifications_notifications_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NotificationItem"},"title":"Response List Notifications Notifications Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["notifications"],"summary":"Clear Notifications","operationId":"clear_notifications_notifications_delete","security":[{"OAuth2PasswordBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClearNotificationsResponse"}}}}}}},"/notifications/unread-count":{"get":{"tags":["notifications"],"summary":"Get Unread Count","operationId":"get_unread_count_notifications_unread_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnreadCountResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/notifications/{notification_id}/read":{"post":{"tags":["notifications"],"summary":"Mark Notification Read","operationId":"mark_notification_read_notifications__notification_id__read_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationItem"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications/read-all":{"post":{"tags":["notifications"],"summary":"Mark All Notifications Read","operationId":"mark_all_notifications_read_notifications_read_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkAllReadResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/notifications/{notification_id}":{"delete":{"tags":["notifications"],"summary":"Delete Notification","operationId":"delete_notification_notifications__notification_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lifecycle/paywall-seen":{"post":{"tags":["lifecycle"],"summary":"Paywall Seen","description":"The app showed an upgrade wall (PDF download, or starting the next tech pack): starts journey C.","operationId":"paywall_seen_lifecycle_paywall_seen_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaywallSeenRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/feature-requests":{"get":{"tags":["feature-requests"],"summary":"List Feature Requests","description":"Every request, most-voted first, with whether the current user has voted.","operationId":"list_feature_requests_feature_requests_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FeatureRequestOut"},"type":"array","title":"Response List Feature Requests Feature Requests Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["feature-requests"],"summary":"Create Feature Request","operationId":"create_feature_request_feature_requests_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureRequestCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureRequestOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/feature-requests/{request_id}/vote":{"post":{"tags":["feature-requests"],"summary":"Vote Feature Request","operationId":"vote_feature_request_feature_requests__request_id__vote_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["feature-requests"],"summary":"Unvote Feature Request","operationId":"unvote_feature_request_feature_requests__request_id__vote_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/i18n/languages":{"get":{"tags":["i18n"],"summary":"List Supported Languages","description":"Every locale this backend can translate into. No auth - the\nmarketing page's language switcher needs this before login.","operationId":"list_supported_languages_i18n_languages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/assistant/sessions/{session_id}/escalate":{"post":{"tags":["assistant"],"summary":"Escalate To Support","description":"Email the configured support address on the user's behalf.\n\nDeliberately a plain endpoint rather than an agent tool: the \"Send a\nRequest for Me\" button must reliably send, not depend on the model\nchoosing to call something. The unified agent has its own equivalent at\nPOST /agent/threads/{id}/escalate; this route stays mounted for any\ncaller still on the /assistant/* surface.","operationId":"escalate_to_support_assistant_sessions__session_id__escalate_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/EscalateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscalateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ideation/generate-2d-flats":{"post":{"tags":["ideation"],"summary":"Generate 2D Flats From Prompt","description":"Enqueue front+back 2D flat generation from a free-text garment prompt.\nPoll GET /ideation/generate-2d-flats/{task_id} until status is completed/failed.","operationId":"generate_2d_flats_from_prompt_ideation_generate_2d_flats_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateFlatsRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateFlatsJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/ideation/generate-2d-flats/{task_id}":{"get":{"tags":["ideation"],"summary":"Get Generate 2D Flats Status","description":"Poll Celery task status for text→flat generation.","operationId":"get_generate_2d_flats_status_ideation_generate_2d_flats__task_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateFlatsStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ideation/upload-flats":{"post":{"tags":["ideation"],"summary":"Upload Ideation Flats","description":"Upload user-owned front (and optional back) flats for the Ideation \"Or upload your own flats\" path.\n\nAlso detects the design format from the images (returned as ``design_format``).","operationId":"upload_ideation_flats_ideation_upload_flats_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_ideation_flats_ideation_upload_flats_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeationFlatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/ideation/seed-session-flats":{"post":{"tags":["ideation"],"summary":"Seed Session Flats","description":"Attach ideation front/back flat URLs (and design format) to an existing questionnaire\nsession so later job extraction sees them as design uploads.","operationId":"seed_session_flats_ideation_seed_session_flats_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedSessionFlatsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedSessionFlatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/messages/stream":{"get":{"tags":["messaging"],"summary":"Stream Messages","description":"Per-user SSE stream: forwards ``user:{id}`` pub/sub events and owns\npresence for the connection's lifetime (Q10/§7.2 — presence, typing and\nviewing endpoints are B4; this only sets/clears the online flag).","operationId":"stream_messages_messages_stream_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/messages/contacts":{"get":{"tags":["messaging"],"summary":"Get Contacts","operationId":"get_contacts_messages_contacts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/messages/conversations":{"get":{"tags":["messaging"],"summary":"Get Conversations","operationId":"get_conversations_messages_conversations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationsResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["messaging"],"summary":"Create Conversation","operationId":"create_conversation_messages_conversations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__messaging__ConversationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/messages/conversations/{conversation_id}":{"get":{"tags":["messaging"],"summary":"Get Conversation Detail Route","operationId":"get_conversation_detail_route_messages_conversations__conversation_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__messaging__ConversationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["messaging"],"summary":"Update Conversation","operationId":"update_conversation_messages_conversations__conversation_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__messaging__ConversationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/conversations/{conversation_id}/members":{"post":{"tags":["messaging"],"summary":"Add Conversation Members","operationId":"add_conversation_members_messages_conversations__conversation_id__members_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembersAdd"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__messaging__ConversationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/conversations/{conversation_id}/members/me":{"delete":{"tags":["messaging"],"summary":"Leave Conversation","operationId":"leave_conversation_messages_conversations__conversation_id__members_me_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/conversations/{conversation_id}/messages":{"get":{"tags":["messaging"],"summary":"Get Messages","operationId":"get_messages_messages_conversations__conversation_id__messages_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Before"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["messaging"],"summary":"Post Message","operationId":"post_message_messages_conversations__conversation_id__messages_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/messages/{message_id}":{"patch":{"tags":["messaging"],"summary":"Patch Message","operationId":"patch_message_messages_messages__message_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["messaging"],"summary":"Remove Message","operationId":"remove_message_messages_messages__message_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/conversations/{conversation_id}/read":{"post":{"tags":["messaging"],"summary":"Mark Conversation Read","operationId":"mark_conversation_read_messages_conversations__conversation_id__read_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadUpdate"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/conversations/{conversation_id}/typing":{"post":{"tags":["messaging"],"summary":"Post Typing","operationId":"post_typing_messages_conversations__conversation_id__typing_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/conversations/{conversation_id}/viewing":{"post":{"tags":["messaging"],"summary":"Post Viewing","operationId":"post_viewing_messages_conversations__conversation_id__viewing_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewingRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/attachments":{"post":{"tags":["messaging"],"summary":"Upload Attachment","operationId":"upload_attachment_messages_attachments_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_attachment_messages_attachments_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/agent/threads":{"post":{"tags":["agent"],"summary":"Create Agent Thread","description":"Mint a new thread id. Neither the Postgres checkpointer nor the\n``agent_threads`` row is created here — both are created lazily on the\nfirst message (see ``ensure_thread`` in ``stream_agent_message``).","operationId":"create_agent_thread_agent_threads_post","security":[{"OAuth2PasswordBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateThreadResponse"}}}}}},"get":{"tags":["agent"],"summary":"List Agent Threads","description":"The caller's past chats, newest first (Phase 5 parity with the ADK\nassistant's ``GET /assistant/sessions``) — threads with no completed\nfirst message are omitted, same as the ADK list.","operationId":"list_agent_threads_agent_threads_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ThreadSummary"},"title":"Response List Agent Threads Agent Threads Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/threads/{thread_id}":{"get":{"tags":["agent"],"summary":"Get Agent Thread","description":"One thread's message history, read off the LangGraph checkpointer's\nown state (Phase 5 parity with the ADK assistant's ``GET\n/assistant/sessions/{id}``).","operationId":"get_agent_thread_agent_threads__thread_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agent"],"summary":"Delete Agent Thread","operationId":"delete_agent_thread_agent_threads__thread_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/threads/{thread_id}/attachments":{"post":{"tags":["agent"],"summary":"Upload Agent Attachment","description":"Store a chat-uploaded file so a later tool call can resolve it by id\n(Phase 5 parity with the ADK assistant's attachment upload — see\napp/models/agent_attachment.py for why this is a Postgres row instead of\nADK session state).","operationId":"upload_agent_attachment_agent_threads__thread_id__attachments_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_agent_attachment_agent_threads__thread_id__attachments_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/threads/{thread_id}/escalate":{"post":{"tags":["agent"],"summary":"Escalate Agent Thread","description":"Email the configured support address on the user's behalf — ported\nas-is from app/api/routers/assistant.py:escalate_to_support (plain\nendpoint, deliberately not a tool, see that function's docstring).\nAvailable to any persona (unlike the ADK version's brand-only gate),\nconsistent with this router's broader-by-design persona handling.","operationId":"escalate_agent_thread_agent_threads__thread_id__escalate_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscalateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscalateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/threads/{thread_id}/messages":{"post":{"tags":["agent"],"summary":"Stream Agent Message","operationId":"stream_agent_message_agent_threads__thread_id__messages_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/threads/{thread_id}/approve":{"post":{"tags":["agent"],"summary":"Approve Agent Tool Call","description":"Resume a paused write/paid tool call (Phase 3, ``approval.required`` event).\n\nOnly the thread's own user may decide (mirrors ``resolve_caller_context()``\ntenant-binding, no cross-user approval) — reuses the same run lock as\n``stream_agent_message`` so a double-click can't double-resume, and streams\nthe rest of the run back through the identical SSE contract.","operationId":"approve_agent_tool_call_agent_threads__thread_id__approve_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveToolCallRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/context":{"get":{"tags":["agent"],"summary":"Get Agent Context","description":"No-LLM context snapshot for the page-context registration call — see\ncontext_provider.py. Read-only, no session object is created.","operationId":"get_agent_context_agent_context_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentContextResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/nudges":{"get":{"tags":["agent"],"summary":"List Agent Nudges","description":"Deterministic, zero-LLM proactive nudges — see nudges.py. Already\nfiltered by cap/dismissal state; the client renders the list as-is.","operationId":"list_agent_nudges_agent_nudges_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NudgeItem"},"title":"Response List Agent Nudges Agent Nudges Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/nudges/{nudge_id}/dismiss":{"post":{"tags":["agent"],"summary":"Dismiss Agent Nudge","operationId":"dismiss_agent_nudge_agent_nudges__nudge_id__dismiss_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"nudge_id","in":"path","required":true,"schema":{"type":"string","title":"Nudge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DismissNudgeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/keys":{"get":{"tags":["agent"],"summary":"List Agent Api Keys","operationId":"list_agent_api_keys_agent_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiKeyResponse"},"type":"array","title":"Response List Agent Api Keys Agent Keys Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["agent"],"summary":"Create Agent Api Key","description":"Mint a new MCP key. The plaintext ``key`` is returned exactly once —\nit is never persisted or logged again (see api_keys.py).","operationId":"create_agent_api_key_agent_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/agent/keys/{key_id}":{"delete":{"tags":["agent"],"summary":"Revoke Agent Api Key","description":"Soft-revoke (never a hard delete — approval rows created under this key\nkeep their audit trail). Idempotent: revoking twice is not an error.","operationId":"revoke_agent_api_key_agent_keys__key_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health Check","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AICostCallDetail":{"properties":{"ai_service":{"type":"string","title":"Ai Service"},"ai_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Model"},"prompt_tokens":{"type":"integer","title":"Prompt Tokens"},"completion_tokens":{"type":"integer","title":"Completion Tokens"},"thinking_tokens":{"type":"integer","title":"Thinking Tokens"},"image_tokens":{"type":"integer","title":"Image Tokens"},"images_generated":{"type":"integer","title":"Images Generated"},"characters_translated":{"type":"integer","title":"Characters Translated"},"estimated_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimated Cost Usd"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["ai_service","ai_model","prompt_tokens","completion_tokens","thinking_tokens","image_tokens","images_generated","characters_translated","estimated_cost_usd","created_at"],"title":"AICostCallDetail"},"AICostJobDetailResponse":{"properties":{"tech_pack_job_id":{"type":"string","format":"uuid","title":"Tech Pack Job Id"},"job_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Name"},"product_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Type"},"calls":{"items":{"$ref":"#/components/schemas/AICostCallDetail"},"type":"array","title":"Calls"}},"type":"object","required":["tech_pack_job_id","job_name","product_type","calls"],"title":"AICostJobDetailResponse"},"AICostJobSummary":{"properties":{"tech_pack_job_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tech Pack Job Id"},"job_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Name"},"product_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Type"},"calls":{"type":"integer","title":"Calls"},"prompt_tokens":{"type":"integer","title":"Prompt Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"image_tokens":{"type":"integer","title":"Image Tokens"},"images_generated":{"type":"integer","title":"Images Generated"},"characters_translated":{"type":"integer","title":"Characters Translated"},"total_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Cost Usd"},"first_call_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Call At"},"last_call_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Call At"}},"type":"object","required":["tech_pack_job_id","job_name","product_type","calls","prompt_tokens","output_tokens","image_tokens","images_generated","characters_translated","total_cost_usd","first_call_at","last_call_at"],"title":"AICostJobSummary"},"AICostSummaryResponse":{"properties":{"total_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Cost Usd"},"total_calls":{"type":"integer","title":"Total Calls"},"jobs":{"items":{"$ref":"#/components/schemas/AICostJobSummary"},"type":"array","title":"Jobs"}},"type":"object","required":["total_cost_usd","total_calls","jobs"],"title":"AICostSummaryResponse"},"AccessVoucherResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"ends_at":{"type":"string","format":"date-time","title":"Ends At"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","org_id","starts_at","ends_at","is_active","created_at"],"title":"AccessVoucherResponse"},"AccountType":{"type":"string","enum":["manufacturer","sourcing_agent"],"title":"AccountType"},"ActivateTrialRequest":{"properties":{"trial_plan_id":{"type":"string","format":"uuid","title":"Trial Plan Id"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url"}},"type":"object","required":["trial_plan_id"],"title":"ActivateTrialRequest","description":"Request to activate a trial subscription"},"AddSignupAccessIn":{"properties":{"value":{"type":"string","maxLength":320,"minLength":3,"title":"Value","description":"An email address or a domain"},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"}},"type":"object","required":["value"],"title":"AddSignupAccessIn"},"AdminAccessOverrideRequest":{"properties":{"admin_access_override":{"type":"boolean","title":"Admin Access Override","description":"When true, user bypasses trial generation lock and subscription quota for tech packs."}},"type":"object","required":["admin_access_override"],"title":"AdminAccessOverrideRequest"},"AdminAccessOverrideResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"user_id":{"type":"string","format":"uuid","title":"User Id"},"admin_access_override":{"type":"boolean","title":"Admin Access Override"}},"type":"object","required":["user_id","admin_access_override"],"title":"AdminAccessOverrideResponse"},"AdminBrandCallDetail":{"properties":{"ai_service":{"type":"string","title":"Ai Service"},"ai_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Model"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"tech_pack_job_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tech Pack Job Id"},"prompt_tokens":{"type":"integer","title":"Prompt Tokens"},"completion_tokens":{"type":"integer","title":"Completion Tokens"},"thinking_tokens":{"type":"integer","title":"Thinking Tokens"},"estimated_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimated Cost Usd"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["ai_service","ai_model","user_id","tech_pack_job_id","prompt_tokens","completion_tokens","thinking_tokens","estimated_cost_usd","created_at"],"title":"AdminBrandCallDetail"},"AdminBrandCallListResponse":{"properties":{"calls":{"items":{"$ref":"#/components/schemas/AdminBrandCallDetail"},"type":"array","title":"Calls"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["calls","total","limit","offset"],"title":"AdminBrandCallListResponse"},"AdminBrandCostListResponse":{"properties":{"brands":{"items":{"$ref":"#/components/schemas/AdminBrandCostSummary"},"type":"array","title":"Brands"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["brands","total","limit","offset"],"title":"AdminBrandCostListResponse"},"AdminBrandCostSummary":{"properties":{"brand_id":{"type":"string","title":"Brand Id"},"brand_name":{"type":"string","title":"Brand Name"},"org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"},"calls":{"type":"integer","title":"Calls"},"prompt_tokens":{"type":"integer","title":"Prompt Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"total_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Cost Usd"},"last_call_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Call At"}},"type":"object","required":["brand_id","brand_name","org_id","calls","prompt_tokens","output_tokens","total_cost_usd","last_call_at"],"title":"AdminBrandCostSummary"},"AdminBrandLinkManufacturerRequest":{"properties":{"manufacturer_id":{"type":"string","format":"uuid","title":"Manufacturer Id"},"sync_packs":{"type":"boolean","title":"Sync Packs","description":"When true, set manufacturer_id on all existing tech packs already attributed to this brand.","default":true}},"type":"object","required":["manufacturer_id"],"title":"AdminBrandLinkManufacturerRequest"},"AdminBrandLinkManufacturerResponse":{"properties":{"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"manufacturer_id":{"type":"string","format":"uuid","title":"Manufacturer Id"},"linked_to_manufacturer_at":{"type":"string","format":"date-time","title":"Linked To Manufacturer At"},"synced_pack_count":{"type":"integer","title":"Synced Pack Count","default":0}},"type":"object","required":["brand_id","manufacturer_id","linked_to_manufacturer_at"],"title":"AdminBrandLinkManufacturerResponse"},"AdminBrandListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"name":{"type":"string","title":"Name"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"team_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Size"},"owner_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner User Id"},"manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Manufacturer Id"},"manufacturer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer Name"},"manufacturer_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer Email"},"linked_to_manufacturer_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Linked To Manufacturer At"},"tech_pack_count":{"type":"integer","title":"Tech Pack Count","default":0},"shared_manufacturers":{"items":{"$ref":"#/components/schemas/AdminBrandSharedManufacturerSummary"},"type":"array","title":"Shared Manufacturers","default":[]},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","org_id","name","created_at"],"title":"AdminBrandListItem"},"AdminBrandListResponse":{"properties":{"brands":{"items":{"$ref":"#/components/schemas/AdminBrandListItem"},"type":"array","title":"Brands"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["brands","total","limit","offset"],"title":"AdminBrandListResponse"},"AdminBrandSharedManufacturerSummary":{"properties":{"manufacturer_id":{"type":"string","format":"uuid","title":"Manufacturer Id"},"manufacturer_name":{"type":"string","title":"Manufacturer Name"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"claimed_pack_count":{"type":"integer","title":"Claimed Pack Count","default":0},"last_shared_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Shared At"}},"type":"object","required":["manufacturer_id","manufacturer_name"],"title":"AdminBrandSharedManufacturerSummary"},"AdminBrandUsageResponse":{"properties":{"brand_id":{"type":"string","title":"Brand Id"},"total_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Cost Usd"},"total_calls":{"type":"integer","title":"Total Calls"},"usage":{"items":{"$ref":"#/components/schemas/AdminBrandUsageRow"},"type":"array","title":"Usage"}},"type":"object","required":["brand_id","total_cost_usd","total_calls","usage"],"title":"AdminBrandUsageResponse"},"AdminBrandUsageRow":{"properties":{"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"ai_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Model"},"tech_pack_job_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tech Pack Job Id"},"calls":{"type":"integer","title":"Calls"},"prompt_tokens":{"type":"integer","title":"Prompt Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"total_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Cost Usd"},"last_call_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Call At"}},"type":"object","required":["user_id","user_email","ai_model","tech_pack_job_id","calls","prompt_tokens","output_tokens","total_cost_usd","last_call_at"],"title":"AdminBrandUsageRow"},"AdminBulkDeleteUsersRequest":{"properties":{"user_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"minItems":1,"title":"User Ids"}},"type":"object","required":["user_ids"],"title":"AdminBulkDeleteUsersRequest"},"AdminChangePassword":{"properties":{"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["new_password"],"title":"AdminChangePassword"},"AdminDashboardStats":{"properties":{"total_questions":{"type":"integer","title":"Total Questions"},"by_product_type":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Product Type"},"by_input_type":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Input Type"},"total_sessions":{"type":"integer","title":"Total Sessions"},"completed_sessions":{"type":"integer","title":"Completed Sessions"},"in_progress_sessions":{"type":"integer","title":"In Progress Sessions"},"questions_with_dependencies":{"type":"integer","title":"Questions With Dependencies"},"most_used_questions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Most Used Questions"}},"type":"object","required":["total_questions","by_product_type","by_input_type","total_sessions","completed_sessions","in_progress_sessions","questions_with_dependencies","most_used_questions"],"title":"AdminDashboardStats"},"AdminDeleteUserByEmailRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"AdminDeleteUserByEmailRequest"},"AdminFeatureCostListResponse":{"properties":{"features":{"items":{"$ref":"#/components/schemas/AdminFeatureCostRow"},"type":"array","title":"Features"},"total_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Cost Usd"},"total_calls":{"type":"integer","title":"Total Calls"}},"type":"object","required":["features","total_cost_usd","total_calls"],"title":"AdminFeatureCostListResponse"},"AdminFeatureCostRow":{"properties":{"ai_service":{"type":"string","title":"Ai Service"},"display_name":{"type":"string","title":"Display Name"},"calls":{"type":"integer","title":"Calls"},"total_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Cost Usd"},"avg_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avg Cost Usd"},"images_generated":{"type":"integer","title":"Images Generated"},"characters_translated":{"type":"integer","title":"Characters Translated"},"first_call_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Call At"},"last_call_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Call At"}},"type":"object","required":["ai_service","display_name","calls","total_cost_usd","avg_cost_usd","images_generated","characters_translated","first_call_at","last_call_at"],"title":"AdminFeatureCostRow"},"AdminGrantedTierRequest":{"properties":{"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier","description":"payg, sub1, sub2, or enterprise. Null/empty revokes the grant."},"expires_in_days":{"anyOf":[{"type":"integer","maximum":3650.0,"minimum":1.0},{"type":"null"}],"title":"Expires In Days","description":"Optional duration. Omit for access until the grant is revoked."},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"}},"type":"object","title":"AdminGrantedTierRequest","description":"Assign or revoke a complimentary entitlement tier for the user's organization."},"AdminGrantedTierResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"user_id":{"type":"string","format":"uuid","title":"User Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"admin_granted_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Granted Tier"},"admin_granted_tier_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Admin Granted Tier Expires At"},"admin_granted_tier_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Granted Tier Note"},"resolved_tier":{"type":"string","title":"Resolved Tier"},"admin_access_override":{"type":"boolean","title":"Admin Access Override","default":false}},"type":"object","required":["user_id","org_id","resolved_tier"],"title":"AdminGrantedTierResponse"},"AdminJobCostListResponse":{"properties":{"jobs":{"items":{"$ref":"#/components/schemas/AdminJobCostRow"},"type":"array","title":"Jobs"},"total_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Cost Usd"},"total_calls":{"type":"integer","title":"Total Calls"}},"type":"object","required":["jobs","total_cost_usd","total_calls"],"title":"AdminJobCostListResponse"},"AdminJobCostRow":{"properties":{"tech_pack_job_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tech Pack Job Id"},"job_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Name"},"product_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Type"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"calls":{"type":"integer","title":"Calls"},"prompt_tokens":{"type":"integer","title":"Prompt Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"image_tokens":{"type":"integer","title":"Image Tokens"},"images_generated":{"type":"integer","title":"Images Generated"},"characters_translated":{"type":"integer","title":"Characters Translated"},"text_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text Cost Usd"},"image_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Cost Usd"},"translation_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translation Cost Usd"},"total_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Cost Usd"},"last_call_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Call At"}},"type":"object","required":["tech_pack_job_id","job_name","product_type","user_id","user_email","calls","prompt_tokens","output_tokens","image_tokens","images_generated","characters_translated","text_cost_usd","image_cost_usd","translation_cost_usd","total_cost_usd","last_call_at"],"title":"AdminJobCostRow"},"AdminManufacturerBulkDeleteRequest":{"properties":{"manufacturer_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"minItems":1,"title":"Manufacturer Ids"}},"type":"object","required":["manufacturer_ids"],"title":"AdminManufacturerBulkDeleteRequest"},"AdminManufacturerBulkDeleteResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"deleted_count":{"type":"integer","title":"Deleted Count"},"deleted_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Deleted Ids"},"not_found_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Not Found Ids"}},"type":"object","required":["success","deleted_count"],"title":"AdminManufacturerBulkDeleteResponse"},"AdminManufacturerConnectionSummary":{"properties":{"manufacturer_id":{"type":"string","format":"uuid","title":"Manufacturer Id"},"manufacturer_name":{"type":"string","title":"Manufacturer Name"},"org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Name"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"connection_type":{"type":"string","title":"Connection Type"},"pack_count":{"type":"integer","title":"Pack Count","default":0},"claimed_pack_count":{"type":"integer","title":"Claimed Pack Count","default":0},"linked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Linked At"},"last_shared_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Shared At"}},"type":"object","required":["manufacturer_id","manufacturer_name","connection_type"],"title":"AdminManufacturerConnectionSummary"},"AdminManufacturerDetailResponse":{"properties":{"manufacturer":{"$ref":"#/components/schemas/ManufacturerProfileResponse"},"documents":{"items":{"$ref":"#/components/schemas/ManufacturerDocumentResponse"},"type":"array","title":"Documents"},"onboarding_benchmark_files":{"items":{"$ref":"#/components/schemas/BenchmarkFileOut"},"type":"array","title":"Onboarding Benchmark Files"}},"type":"object","required":["manufacturer","documents"],"title":"AdminManufacturerDetailResponse"},"AdminManufacturerListResponse":{"properties":{"manufacturers":{"items":{"$ref":"#/components/schemas/ManufacturerProfileResponse"},"type":"array","title":"Manufacturers"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["manufacturers","limit","offset","total"],"title":"AdminManufacturerListResponse"},"AdminManufacturerMarkPayoutsPaidRequest":{"properties":{"sale_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Sale Ids"},"payout_reference":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Payout Reference"}},"type":"object","title":"AdminManufacturerMarkPayoutsPaidRequest","description":"Mark pending factory payouts as paid after an offline transfer."},"AdminManufacturerMarkPayoutsPaidResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"marked_count":{"type":"integer","title":"Marked Count"},"marked_net_cents":{"type":"integer","title":"Marked Net Cents"},"currency":{"type":"string","title":"Currency"},"marked_sale_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Marked Sale Ids"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","marked_count","marked_net_cents","currency","message"],"title":"AdminManufacturerMarkPayoutsPaidResponse"},"AdminManufacturerPayoutAccountDetail":{"properties":{"account_holder_name":{"type":"string","title":"Account Holder Name"},"bank_name":{"type":"string","title":"Bank Name"},"country":{"type":"string","title":"Country"},"currency":{"type":"string","title":"Currency"},"routing_number":{"type":"string","title":"Routing Number"},"account_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Number"},"account_number_last4":{"type":"string","title":"Account Number Last4"}},"type":"object","required":["account_holder_name","bank_name","country","currency","routing_number","account_number_last4"],"title":"AdminManufacturerPayoutAccountDetail","description":"Bank details for admin wire transfers (full numbers, admin-only)."},"AdminManufacturerPayoutSaleItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"gross_cents":{"type":"integer","title":"Gross Cents"},"platform_fee_cents":{"type":"integer","title":"Platform Fee Cents"},"net_cents":{"type":"integer","title":"Net Cents"},"currency":{"type":"string","title":"Currency"},"reporting_currency":{"type":"string","title":"Reporting Currency"},"reporting_net_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reporting Net Cents"},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"payout_status":{"type":"string","title":"Payout Status"},"stripe_session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Session Id"}},"type":"object","required":["id","gross_cents","platform_fee_cents","net_cents","currency","reporting_currency","created_at","payout_status"],"title":"AdminManufacturerPayoutSaleItem"},"AdminManufacturerPayoutsResponse":{"properties":{"manufacturer_id":{"type":"string","format":"uuid","title":"Manufacturer Id"},"currency":{"type":"string","title":"Currency"},"pending_count":{"type":"integer","title":"Pending Count"},"pending_net_cents":{"type":"integer","title":"Pending Net Cents"},"has_payout_account":{"type":"boolean","title":"Has Payout Account"},"payout_account":{"anyOf":[{"$ref":"#/components/schemas/AdminManufacturerPayoutAccountDetail"},{"type":"null"}]},"pending_sales":{"items":{"$ref":"#/components/schemas/AdminManufacturerPayoutSaleItem"},"type":"array","title":"Pending Sales"}},"type":"object","required":["manufacturer_id","currency","pending_count","pending_net_cents","has_payout_account"],"title":"AdminManufacturerPayoutsResponse"},"AdminManufacturerPendingCountResponse":{"properties":{"count":{"type":"integer","title":"Count"}},"type":"object","required":["count"],"title":"AdminManufacturerPendingCountResponse"},"AdminManufacturerRejectRequest":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"AdminManufacturerRejectRequest"},"AdminPaymentPlanUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"price_gbp":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Price Gbp"},"price_usd":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Price Usd"},"price_eur":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Price Eur"},"standard_price_gbp":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Standard Price Gbp"},"standard_price_usd":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Standard Price Usd"},"standard_price_eur":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Standard Price Eur"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"quota_limits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Quota Limits"}},"type":"object","title":"AdminPaymentPlanUpdate"},"AdminSessionResponse":{"properties":{"session_id":{"type":"string","format":"uuid","title":"Session Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_email":{"type":"string","title":"User Email"},"user_name":{"type":"string","title":"User Name"},"product_type":{"type":"string","title":"Product Type"},"completed":{"type":"boolean","title":"Completed"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"response_count":{"type":"integer","title":"Response Count"},"tech_pack_jobs":{"items":{"$ref":"#/components/schemas/AdminTechPackJobInfo"},"type":"array","title":"Tech Pack Jobs","default":[]}},"type":"object","required":["session_id","user_id","user_email","user_name","product_type","completed","created_at","response_count"],"title":"AdminSessionResponse"},"AdminSessionsListResponse":{"properties":{"sessions":{"items":{"$ref":"#/components/schemas/AdminSessionResponse"},"type":"array","title":"Sessions"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["sessions","total","page","limit"],"title":"AdminSessionsListResponse"},"AdminTechPackAttributionRequest":{"properties":{"brand_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"},"manufacturer_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Manufacturer Ids"}},"type":"object","title":"AdminTechPackAttributionRequest"},"AdminTechPackByCodeResponse":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"share_code":{"type":"string","title":"Share Code"},"status":{"type":"string","title":"Status"},"session_id":{"type":"string","format":"uuid","title":"Session Id"},"brand_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"},"manufacturer_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Manufacturer Ids"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"manufacturer_names":{"items":{"type":"string"},"type":"array","title":"Manufacturer Names"}},"type":"object","required":["job_id","share_code","status","session_id"],"title":"AdminTechPackByCodeResponse"},"AdminTechPackJobInfo":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status":{"type":"string","title":"Status"},"progress":{"type":"integer","title":"Progress"},"result_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Url"},"front_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 3D Url"},"back_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 3D Url"},"share_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Code"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"generation_feedback_went_well":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generation Feedback Went Well"},"generation_feedback_could_be_better":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generation Feedback Could Be Better"},"output_feedback_went_well":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Feedback Went Well"},"output_feedback_could_be_better":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Feedback Could Be Better"}},"type":"object","required":["id","status","progress","created_at"],"title":"AdminTechPackJobInfo"},"AdminTechpackAllowanceRequest":{"properties":{"allowance":{"anyOf":[{"type":"integer","minimum":-1.0},{"type":"null"}],"title":"Allowance","description":"Tech packs per month. -1 = unlimited. Null restores the plan default."}},"type":"object","title":"AdminTechpackAllowanceRequest","description":"Set the organization's monthly tech pack allowance."},"AdminTechpackAllowanceResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"user_id":{"type":"string","format":"uuid","title":"User Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"techpack_allowance_override":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Allowance Override"},"techpack_allowance":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Allowance"},"techpacks_used_this_month":{"type":"integer","title":"Techpacks Used This Month","default":0},"resolved_tier":{"type":"string","title":"Resolved Tier"}},"type":"object","required":["user_id","org_id","resolved_tier"],"title":"AdminTechpackAllowanceResponse"},"AdminUserCostListResponse":{"properties":{"users":{"items":{"$ref":"#/components/schemas/AdminUserCostSummary"},"type":"array","title":"Users"}},"type":"object","required":["users"],"title":"AdminUserCostListResponse"},"AdminUserCostSummary":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"total_calls":{"type":"integer","title":"Total Calls"},"total_cost_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Cost Usd"},"images_generated":{"type":"integer","title":"Images Generated"},"characters_translated":{"type":"integer","title":"Characters Translated"},"last_call_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Call At"}},"type":"object","required":["user_id","email","first_name","last_name","total_calls","total_cost_usd","images_generated","characters_translated","last_call_at"],"title":"AdminUserCostSummary"},"AdminUserDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"role":{"type":"string","title":"Role"},"is_active":{"type":"boolean","title":"Is Active"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"status":{"type":"string","title":"Status","default":"active"},"is_admin":{"type":"boolean","title":"Is Admin"},"admin_access_override":{"type":"boolean","title":"Admin Access Override","default":false},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"last_activity":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Activity"},"onboarding_completed":{"type":"boolean","title":"Onboarding Completed","default":false},"org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"},"org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Name"},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"is_paying":{"type":"boolean","title":"Is Paying","default":false},"admin_granted_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Granted Tier"},"admin_granted_tier_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Admin Granted Tier Expires At"},"admin_granted_tier_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Granted Tier Note"},"resolved_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved Tier"},"trial_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Start"},"trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End"},"trial_enabled":{"type":"boolean","title":"Trial Enabled","default":false},"credit_balance":{"type":"integer","title":"Credit Balance","default":0},"tech_packs_generated":{"type":"integer","title":"Tech Packs Generated","default":0},"tech_packs_completed":{"type":"integer","title":"Tech Packs Completed","default":0},"tech_packs_failed":{"type":"integer","title":"Tech Packs Failed","default":0},"total_downloads":{"type":"integer","title":"Total Downloads","default":0},"total_sessions":{"type":"integer","title":"Total Sessions","default":0},"completed_sessions":{"type":"integer","title":"Completed Sessions","default":0},"recent_credit_history":{"items":{"$ref":"#/components/schemas/CreditLedgerEntry"},"type":"array","title":"Recent Credit History","default":[]},"recent_tech_packs":{"items":{"$ref":"#/components/schemas/TechPackSummary"},"type":"array","title":"Recent Tech Packs","default":[]},"recent_downloads":{"items":{"$ref":"#/components/schemas/DownloadRecordSummary"},"type":"array","title":"Recent Downloads","default":[]},"formal_manufacturer_link":{"anyOf":[{"$ref":"#/components/schemas/AdminManufacturerConnectionSummary"},{"type":"null"}]},"shared_manufacturers":{"items":{"$ref":"#/components/schemas/AdminManufacturerConnectionSummary"},"type":"array","title":"Shared Manufacturers","default":[]},"manufacturer_mode_pack_count":{"type":"integer","title":"Manufacturer Mode Pack Count","default":0},"subscription_cancel_at_period_end":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Subscription Cancel At Period End"},"subscription_current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscription Current Period End"},"subscription_payment_plan_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Payment Plan Slug"},"techpack_allowance_override":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Allowance Override"},"techpack_allowance":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Allowance"},"techpacks_used_this_month":{"type":"integer","title":"Techpacks Used This Month","default":0}},"type":"object","required":["id","first_name","last_name","email","role","is_active","is_admin"],"title":"AdminUserDetail"},"AdminUserListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"role":{"type":"string","title":"Role"},"is_active":{"type":"boolean","title":"Is Active"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"status":{"type":"string","title":"Status","default":"active"},"is_admin":{"type":"boolean","title":"Is Admin"},"admin_access_override":{"type":"boolean","title":"Admin Access Override","default":false},"admin_granted_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Granted Tier"},"admin_granted_tier_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Admin Granted Tier Expires At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"last_activity":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Activity"},"org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Name"},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"is_paying":{"type":"boolean","title":"Is Paying","default":false},"credit_balance":{"type":"integer","title":"Credit Balance","default":0},"tech_packs_generated":{"type":"integer","title":"Tech Packs Generated","default":0},"total_downloads":{"type":"integer","title":"Total Downloads","default":0}},"type":"object","required":["id","first_name","last_name","email","role","is_active","is_admin"],"title":"AdminUserListItem"},"AdminUserListResponse":{"properties":{"users":{"items":{"$ref":"#/components/schemas/AdminUserListItem"},"type":"array","title":"Users"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["users","total","page","limit"],"title":"AdminUserListResponse"},"AdminUserStatsOverview":{"properties":{"total_users":{"type":"integer","title":"Total Users"},"active_users":{"type":"integer","title":"Active Users"},"admin_users":{"type":"integer","title":"Admin Users"},"new_users_this_week":{"type":"integer","title":"New Users This Week"},"new_users_this_month":{"type":"integer","title":"New Users This Month"},"total_tech_packs_generated":{"type":"integer","title":"Total Tech Packs Generated"},"total_tech_packs_completed":{"type":"integer","title":"Total Tech Packs Completed"},"total_downloads":{"type":"integer","title":"Total Downloads"},"users_on_trial":{"type":"integer","title":"Users On Trial"},"users_with_active_subscription":{"type":"integer","title":"Users With Active Subscription"},"top_users_by_tech_packs":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Top Users By Tech Packs","default":[]}},"type":"object","required":["total_users","active_users","admin_users","new_users_this_week","new_users_this_month","total_tech_packs_generated","total_tech_packs_completed","total_downloads","users_on_trial","users_with_active_subscription"],"title":"AdminUserStatsOverview"},"AdminUsersListResponse":{"properties":{"users":{"items":{"$ref":"#/components/schemas/User"},"type":"array","title":"Users"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["users","total","page","limit"],"title":"AdminUsersListResponse"},"AgentContextResponse":{"properties":{"persona":{"type":"string","title":"Persona"},"org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Id"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"job":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Job"},"wallet":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Wallet"},"manufacturer":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Manufacturer"}},"type":"object","required":["persona"],"title":"AgentContextResponse"},"AgentMessageRequest":{"properties":{"message":{"type":"string","title":"Message"},"page_context":{"anyOf":[{"$ref":"#/components/schemas/PageContext"},{"type":"null"}]}},"type":"object","required":["message"],"title":"AgentMessageRequest"},"Amounts":{"properties":{"gbp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gbp"},"usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Usd"},"eur":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Eur"}},"type":"object","title":"Amounts"},"Anchor":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"}},"type":"object","required":["x","y"],"title":"Anchor"},"AnchorXY":{"properties":{"x":{"type":"number","maximum":1.0,"minimum":0.0,"title":"X"},"y":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Y"}},"type":"object","required":["x","y"],"title":"AnchorXY"},"ApiKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"daily_cost_cap_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Cost Cap Usd"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","name","key_prefix","scopes"],"title":"ApiKeyResponse"},"ApparelCategory":{"type":"string","enum":["activewear","swimwear","womenswear","menswear","unisex","formalwear","loungewear","streetwear","kidswear","outerwear","intimates","accessories"],"title":"ApparelCategory"},"ApplyBody":{"properties":{"colours":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/FabricFill"},{"$ref":"#/components/schemas/ColourFill"}]},"type":"object","title":"Colours"}},"type":"object","required":["colours"],"title":"ApplyBody"},"ApplyBrandSizeGuideRequest":{"properties":{"size_guide_id":{"type":"string","format":"uuid","title":"Size Guide Id"}},"type":"object","required":["size_guide_id"],"title":"ApplyBrandSizeGuideRequest"},"ApplyManufacturerSizeGuideRequest":{"properties":{"size_guide_id":{"type":"string","format":"uuid","title":"Size Guide Id"}},"type":"object","required":["size_guide_id"],"title":"ApplyManufacturerSizeGuideRequest"},"ApplyTreatmentsBody":{"properties":{"colorway_index":{"type":"integer","maximum":3.0,"minimum":0.0,"title":"Colorway Index","default":0},"treatments":{"items":{"type":"string"},"type":"array","title":"Treatments"},"fabric":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Fabric"}},"type":"object","required":["treatments"],"title":"ApplyTreatmentsBody"},"Approve2DRenderRequest":{"properties":{"front_2d_url":{"type":"string","maxLength":5000,"minLength":1,"title":"Front 2D Url"},"back_2d_url":{"type":"string","maxLength":5000,"minLength":1,"title":"Back 2D Url"},"front_3d_url":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Front 3D Url"},"back_3d_url":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Back 3D Url"},"start_3d_generation":{"type":"boolean","title":"Start 3D Generation","default":false}},"type":"object","required":["front_2d_url","back_2d_url"],"title":"Approve2DRenderRequest","description":"Select the active outer 2D pair before approving 2D review."},"ApproveConstructionWorkspaceRequest":{"properties":{"construction_kv":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Construction Kv"}},"type":"object","title":"ApproveConstructionWorkspaceRequest","description":"Optional last-minute edits when approving construction KV for Phase 2."},"ApproveExtraViewConstructionRequest":{"properties":{"construction_kv":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Construction Kv"}},"type":"object","title":"ApproveExtraViewConstructionRequest","description":"Approve (with optional edits) the construction KV for an extra view, then generate its 2D image."},"ApproveToolCallRequest":{"properties":{"approval_id":{"type":"string","title":"Approval Id"},"approved":{"type":"boolean","title":"Approved"},"edited_args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Edited Args"}},"type":"object","required":["approval_id","approved"],"title":"ApproveToolCallRequest"},"ArtworkLibraryDeleteResponse":{"properties":{"url":{"type":"string","title":"Url"},"deleted":{"type":"boolean","title":"Deleted"}},"type":"object","required":["url","deleted"],"title":"ArtworkLibraryDeleteResponse"},"ArtworkLibraryResponse":{"properties":{"urls":{"items":{"type":"string"},"type":"array","title":"Urls"},"deleted_urls":{"items":{"type":"string"},"type":"array","title":"Deleted Urls","default":[]}},"type":"object","required":["urls"],"title":"ArtworkLibraryResponse"},"ArtworkLibraryUsageResponse":{"properties":{"url":{"type":"string","title":"Url"},"used_in_designs":{"type":"integer","title":"Used In Designs"}},"type":"object","required":["url","used_in_designs"],"title":"ArtworkLibraryUsageResponse"},"AssignBody":{"properties":{"zones":{"items":{"$ref":"#/components/schemas/AssignZone"},"type":"array","maxItems":100,"title":"Zones"}},"type":"object","required":["zones"],"title":"AssignBody"},"AssignCustomRoleRequest":{"properties":{"role_id":{"type":"string","format":"uuid","title":"Role Id"}},"type":"object","required":["role_id"],"title":"AssignCustomRoleRequest"},"AssignRequest":{"properties":{"organization_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Organization Ids"},"select_all":{"type":"boolean","title":"Select All","default":false},"filters":{"anyOf":[{"$ref":"#/components/schemas/CandidateFilters"},{"type":"null"}]},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"}},"type":"object","title":"AssignRequest"},"AssignZone":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"name":{"type":"string","maxLength":60,"title":"Name","default":""},"regionIds":{"items":{"type":"integer"},"type":"array","maxItems":65535,"title":"Regionids"},"hex":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Hex"},"pantoneTcx":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Pantonetcx"},"fill":{"anyOf":[{"$ref":"#/components/schemas/FabricFill"},{"$ref":"#/components/schemas/ColourFill"},{"type":"null"}],"title":"Fill"}},"type":"object","title":"AssignZone"},"AttachmentResponse":{"properties":{"attachment_id":{"type":"string","title":"Attachment Id"},"filename":{"type":"string","title":"Filename"},"kind":{"type":"string","title":"Kind"}},"type":"object","required":["attachment_id","filename","kind"],"title":"AttachmentResponse"},"AttachmentUploadResponse":{"properties":{"url":{"type":"string","title":"Url"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"mime":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size"}},"type":"object","required":["url"],"title":"AttachmentUploadResponse"},"AuthResponse":{"properties":{"access_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"requires_otp":{"type":"boolean","title":"Requires Otp","default":false},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"verification_email_delivered":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Verification Email Delivered"}},"type":"object","title":"AuthResponse","description":"Signup may require OTP; login returns JWT when credentials are valid."},"BenchmarkFileOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"label":{"$ref":"#/components/schemas/BenchmarkLabel"},"file_url":{"type":"string","title":"File Url"},"original_filename":{"type":"string","title":"Original Filename"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"uploaded_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Uploaded By"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","label","file_url","original_filename","created_at"],"title":"BenchmarkFileOut"},"BenchmarkLabel":{"type":"string","enum":["good","bad"],"title":"BenchmarkLabel"},"BillingCurrencyResponse":{"properties":{"currency":{"type":"string","title":"Currency"},"country_required":{"type":"boolean","title":"Country Required","default":false}},"type":"object","required":["currency"],"title":"BillingCurrencyResponse"},"BillingManagerResponse":{"properties":{"can_manage_billing":{"type":"boolean","title":"Can Manage Billing"},"manager_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manager Name"},"manager_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manager Role"}},"type":"object","required":["can_manage_billing"],"title":"BillingManagerResponse"},"BlockSpecRequest":{"properties":{"size_guide_id":{"type":"string","format":"uuid","title":"Size Guide Id"},"selected_size_headers":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Selected Size Headers"},"sample_size":{"type":"string","minLength":1,"title":"Sample Size"},"size_guide_type":{"type":"string","title":"Size Guide Type","default":"body"},"main_fabric":{"type":"string","title":"Main Fabric","default":""},"no_of_samples":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"No Of Samples"}},"type":"object","required":["size_guide_id","selected_size_headers","sample_size"],"title":"BlockSpecRequest"},"BlogCommentCreate":{"properties":{"author":{"type":"string","maxLength":200,"title":"Author","default":""},"body":{"type":"string","maxLength":5000,"minLength":1,"title":"Body"}},"type":"object","required":["body"],"title":"BlogCommentCreate"},"BlogCommentResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"post_id":{"type":"string","format":"uuid","title":"Post Id"},"author":{"type":"string","title":"Author"},"body":{"type":"string","title":"Body"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"is_mine":{"type":"boolean","title":"Is Mine","default":false}},"type":"object","required":["id","post_id","author","body","created_at"],"title":"BlogCommentResponse"},"BlogEngagementResponse":{"properties":{"like_count":{"type":"integer","title":"Like Count"},"liked_by_viewer":{"type":"boolean","title":"Liked By Viewer"},"comments":{"items":{"$ref":"#/components/schemas/BlogCommentResponse"},"type":"array","title":"Comments"}},"type":"object","required":["like_count","liked_by_viewer","comments"],"title":"BlogEngagementResponse"},"BlogImageUploadResponse":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"BlogImageUploadResponse"},"BlogLikeToggleResponse":{"properties":{"liked_by_viewer":{"type":"boolean","title":"Liked By Viewer"},"like_count":{"type":"integer","title":"Like Count"}},"type":"object","required":["liked_by_viewer","like_count"],"title":"BlogLikeToggleResponse"},"BlogPostCreate":{"properties":{"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title"},"slug":{"type":"string","maxLength":200,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","title":"Slug"},"content":{"type":"string","maxLength":200000,"title":"Content","default":""},"author":{"type":"string","maxLength":200,"minLength":1,"title":"Author"},"cover_image_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Cover Image Url"},"status":{"type":"string","enum":["draft","published"],"title":"Status","default":"draft"}},"type":"object","required":["title","slug","author"],"title":"BlogPostCreate"},"BlogPostListResponse":{"properties":{"posts":{"items":{"$ref":"#/components/schemas/BlogPostResponse"},"type":"array","title":"Posts"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["posts","total"],"title":"BlogPostListResponse"},"BlogPostResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"slug":{"type":"string","title":"Slug"},"content":{"type":"string","title":"Content"},"author":{"type":"string","title":"Author"},"cover_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cover Image Url"},"status":{"type":"string","enum":["draft","published"],"title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"}},"type":"object","required":["id","title","slug","content","author","status","created_at","updated_at"],"title":"BlogPostResponse"},"BlogPostStatsResponse":{"properties":{"total":{"type":"integer","title":"Total"},"published":{"type":"integer","title":"Published"},"drafts":{"type":"integer","title":"Drafts"}},"type":"object","required":["total","published","drafts"],"title":"BlogPostStatsResponse"},"BlogPostUpdate":{"properties":{"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title"},"slug":{"type":"string","maxLength":200,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","title":"Slug"},"content":{"type":"string","maxLength":200000,"title":"Content","default":""},"author":{"type":"string","maxLength":200,"minLength":1,"title":"Author"},"cover_image_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Cover Image Url"},"status":{"type":"string","enum":["draft","published"],"title":"Status","default":"draft"}},"type":"object","required":["title","slug","author"],"title":"BlogPostUpdate"},"BlogStudioPasswordStatus":{"properties":{"password_is_set":{"type":"boolean","title":"Password Is Set"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["password_is_set"],"title":"BlogStudioPasswordStatus"},"BlogStudioPasswordUpdate":{"properties":{"password":{"type":"string","maxLength":200,"minLength":1,"title":"Password"}},"type":"object","required":["password"],"title":"BlogStudioPasswordUpdate"},"BlogStudioUnlockRequest":{"properties":{"password":{"type":"string","maxLength":500,"minLength":1,"title":"Password"}},"type":"object","required":["password"],"title":"BlogStudioUnlockRequest"},"BlogStudioUnlockResponse":{"properties":{"token":{"type":"string","title":"Token"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["token","expires_at"],"title":"BlogStudioUnlockResponse"},"Body_accept_manual_2d_touchup_questionnaires_jobs__job_id__accept_manual_2d_touchup_post":{"properties":{"side":{"type":"string","title":"Side","description":"'front' or 'back'"},"image":{"type":"string","contentMediaType":"application/octet-stream","title":"Image","description":"Merged PNG: base flat + pencil/cover/eraser strokes"}},"type":"object","required":["side","image"],"title":"Body_accept_manual_2d_touchup_questionnaires_jobs__job_id__accept_manual_2d_touchup_post"},"Body_add_artwork_to_flat_questionnaires_jobs__job_id__artwork_add_post":{"properties":{"view":{"type":"string","title":"View","description":"'front' or 'back'","default":"front"}},"type":"object","title":"Body_add_artwork_to_flat_questionnaires_jobs__job_id__artwork_add_post"},"Body_cancel_refinement_questionnaires_jobs__job_id__refine_cancel_post":{"properties":{"side":{"type":"string","title":"Side","description":"'front' or 'back'"},"asset":{"type":"string","title":"Asset","description":"'3d' or '2d' — must match the refine being cancelled","default":"3d"}},"type":"object","required":["side"],"title":"Body_cancel_refinement_questionnaires_jobs__job_id__refine_cancel_post"},"Body_colourway_1_from_flat_questionnaires_jobs__job_id__colourway_1_from_flat_post":{"properties":{"front_image":{"type":"string","contentMediaType":"application/octet-stream","title":"Front Image","description":"Recoloured front flat PNG, exactly as previewed"},"back_image":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Back Image","description":"Recoloured back flat PNG"}},"type":"object","required":["front_image"],"title":"Body_colourway_1_from_flat_questionnaires_jobs__job_id__colourway_1_from_flat_post"},"Body_detect_flat_artwork_questionnaires_jobs__job_id__artwork_detect_post":{"properties":{"view":{"type":"string","title":"View","description":"'front' or 'back'","default":"front"}},"type":"object","title":"Body_detect_flat_artwork_questionnaires_jobs__job_id__artwork_detect_post"},"Body_dimension_all_flat_artworks_questionnaires_jobs__job_id__artwork_dimension_all_post":{"properties":{"view":{"type":"string","title":"View","description":"'front' or 'back'","default":"front"}},"type":"object","title":"Body_dimension_all_flat_artworks_questionnaires_jobs__job_id__artwork_dimension_all_post"},"Body_edit_2d_variation_questionnaires_jobs__job_id__edit_2d_variation_post":{"properties":{"front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front Url","description":"Current front 2D url of the edited variation"},"back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back Url","description":"Current back 2D url of the edited variation"},"front_image":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Front Image","description":"Merged PNG: flat + freehand strokes (front)"},"back_image":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Back Image","description":"Merged PNG: flat + freehand strokes (back)"},"variation_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Variation Index","description":"Position of the edited entry in illustrationVariations; omit for legacy URL-matching behaviour"}},"type":"object","title":"Body_edit_2d_variation_questionnaires_jobs__job_id__edit_2d_variation_post"},"Body_edit_3d_variation_questionnaires_jobs__job_id__edit_3d_variation_post":{"properties":{"colorway_index":{"type":"integer","title":"Colorway Index","description":"Colourway slot (0 = Colourway 1)","default":0},"front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front Url","description":"Current front 3D url of the edited variation"},"back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back Url","description":"Current back 3D url of the edited variation"},"front_image":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Front Image","description":"Merged PNG: render + freehand strokes (front)"},"back_image":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Back Image","description":"Merged PNG: render + freehand strokes (back)"},"front_artwork_erased":{"type":"boolean","title":"Front Artwork Erased","description":"Eraser sub-tool was used on the front drawing: prune Artwork Table rows for front.","default":false},"back_artwork_erased":{"type":"boolean","title":"Back Artwork Erased","description":"Eraser sub-tool was used on the back drawing: prune Artwork Table rows for back.","default":false},"variation_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Variation Index","description":"Position of the edited entry in illustration3dVariations; omit for legacy URL-matching behaviour"}},"type":"object","title":"Body_edit_3d_variation_questionnaires_jobs__job_id__edit_3d_variation_post"},"Body_extract_and_dimension_flat_artwork_questionnaires_jobs__job_id__artwork_extract_post":{"properties":{"view":{"type":"string","title":"View","description":"'front' or 'back'","default":"front"}},"type":"object","title":"Body_extract_and_dimension_flat_artwork_questionnaires_jobs__job_id__artwork_extract_post"},"Body_import_agent_turn_questionnaires_jobs__job_id__import_agent_post":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"files":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Files","default":[]}},"type":"object","title":"Body_import_agent_turn_questionnaires_jobs__job_id__import_agent_post"},"Body_import_resolve_gap_questionnaires_jobs__job_id__import_resolve_post":{"properties":{"item_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Key"},"gap_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gap Key"},"action":{"type":"string","title":"Action"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"file":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"File"}},"type":"object","required":["action"],"title":"Body_import_resolve_gap_questionnaires_jobs__job_id__import_resolve_post"},"Body_import_techpack_from_pdf_questionnaires_jobs_import_techpack_post":{"properties":{"files":{"anyOf":[{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array"},{"type":"null"}],"title":"Files"},"file":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"File"}},"type":"object","title":"Body_import_techpack_from_pdf_questionnaires_jobs_import_techpack_post"},"Body_refine_extra_view_questionnaires_jobs__job_id__extra_views__view_id__refine_post":{"properties":{"comment":{"type":"string","title":"Comment","description":"Optional: Refinement instructions/notes","default":""},"annotated_image":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Annotated Image","description":"Optional: Current view with circles/marks showing WHERE to change"},"reference_image":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Reference Image","description":"Optional: Reference image showing WHAT to change to"},"refine_mode":{"type":"string","title":"Refine Mode","description":"Which refine prompt to use: 'oval' (circled regions), 'freehand' (drawn marks), 'reference' (reference image as target), 'text' (notes only).","default":"text"}},"type":"object","title":"Body_refine_extra_view_questionnaires_jobs__job_id__extra_views__view_id__refine_post"},"Body_refine_visuals_questionnaires_jobs__job_id__refine_post":{"properties":{"side":{"type":"string","title":"Side","description":"'front' or 'back'"},"comment":{"type":"string","title":"Comment","description":"Optional: Refinement instructions/notes","default":""},"annotated_image":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Annotated Image","description":"Optional: Original render with circles/marks showing WHERE to change"},"reference_image":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Reference Image","description":"Optional: Reference image showing WHAT to change to"},"reference_images":{"anyOf":[{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array"},{"type":"null"}],"title":"Reference Images","description":"Optional: up to 4 reference images (Prompt Me); the first is the main one"},"asset":{"type":"string","title":"Asset","description":"Which asset to refine: '3d' (review-phase 3D renders) or '2d' (outer technical flats).","default":"3d"},"refine_mode":{"type":"string","title":"Refine Mode","description":"Which refine prompt to use: 'oval' (circled regions), 'freehand' (drawn marks), 'reference' (reference image as target), 'text' (notes only).","default":"text"},"pair_mode":{"type":"string","title":"Pair Mode","description":"Whether to refresh the opposite side for consistency: 'single' (this side only) or 'paired' (multi-turn sync of front/back). Clothing only.","default":"paired"},"from_techpack":{"type":"boolean","title":"From Techpack","description":"Edit 3D from an active tech pack: update 3D renders only; preserve workspace assets.","default":false},"erase_artwork":{"type":"boolean","title":"Erase Artwork","description":"Eraser sub-tool was used to build the mask: prune Artwork Table rows for this side on completion.","default":false}},"type":"object","required":["side"],"title":"Body_refine_visuals_questionnaires_jobs__job_id__refine_post"},"Body_remove_2d_flat_artwork_as_variation_questionnaires_jobs__job_id__artwork_remove_2d_post":{"properties":{"scope":{"type":"string","title":"Scope","description":"'front', 'back' or 'both'","default":"both"}},"type":"object","title":"Body_remove_2d_flat_artwork_as_variation_questionnaires_jobs__job_id__artwork_remove_2d_post"},"Body_remove_3d_render_artwork_questionnaires_jobs__job_id__artwork_remove_3d_post":{"properties":{"colorway_index":{"type":"integer","title":"Colorway Index","description":"Colourway slot index (0-based)","default":0},"scope":{"type":"string","title":"Scope","description":"'front', 'back' or 'both'","default":"both"}},"type":"object","title":"Body_remove_3d_render_artwork_questionnaires_jobs__job_id__artwork_remove_3d_post"},"Body_remove_artwork_background_questionnaires_jobs__job_id__artwork_remove_bg_post":{"properties":{"image_url":{"type":"string","title":"Image Url","description":"URL of the artwork image to cut out"}},"type":"object","required":["image_url"],"title":"Body_remove_artwork_background_questionnaires_jobs__job_id__artwork_remove_bg_post"},"Body_remove_flat_artwork_questionnaires_jobs__job_id__artwork_remove_post":{"properties":{"view":{"type":"string","title":"View","description":"'front' or 'back'","default":"front"}},"type":"object","title":"Body_remove_flat_artwork_questionnaires_jobs__job_id__artwork_remove_post"},"Body_replace_artwork_on_flat_questionnaires_jobs__job_id__artwork_replace_post":{"properties":{"view":{"type":"string","title":"View","description":"'front' or 'back'","default":"front"}},"type":"object","title":"Body_replace_artwork_on_flat_questionnaires_jobs__job_id__artwork_replace_post"},"Body_replace_my_brand_size_guide_file_brand_me_size_guides__guide_id__file_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_replace_my_brand_size_guide_file_brand_me_size_guides__guide_id__file_post"},"Body_send_back_from_illustrator_illustrator_return_post":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"side":{"type":"string","enum":["front","back"],"title":"Side"},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"The edited flat (PNG from the Illustrator panel)"}},"type":"object","required":["job_id","side","file"],"title":"Body_send_back_from_illustrator_illustrator_return_post"},"Body_submit_answer_questionnaires__session_id__answer_post":{"properties":{"question_id":{"type":"string","title":"Question Id"},"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer"},"files":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Files","default":[]}},"type":"object","required":["question_id"],"title":"Body_submit_answer_questionnaires__session_id__answer_post"},"Body_token_auth_token_post":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"^password$"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","format":"password","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"password","title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_token_auth_token_post"},"Body_touch_up_extra_view_questionnaires_jobs__job_id__extra_views__view_id__touch_up_post":{"properties":{"image":{"type":"string","contentMediaType":"application/octet-stream","title":"Image","description":"Merged PNG: extra-view flat + pencil/cover/eraser strokes"}},"type":"object","required":["image"],"title":"Body_touch_up_extra_view_questionnaires_jobs__job_id__extra_views__view_id__touch_up_post"},"Body_upload_agent_attachment_agent_threads__thread_id__attachments_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_agent_attachment_agent_threads__thread_id__attachments_post"},"Body_upload_attachment_messages_attachments_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_attachment_messages_attachments_post"},"Body_upload_benchmark_file_onboarding_manufacturer_benchmark_files_post":{"properties":{"label":{"$ref":"#/components/schemas/BenchmarkLabel"},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["label","file"],"title":"Body_upload_benchmark_file_onboarding_manufacturer_benchmark_files_post"},"Body_upload_blog_image_blog_studio_upload_image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Cover or inline image for a blog post"}},"type":"object","required":["file"],"title":"Body_upload_blog_image_blog_studio_upload_image_post"},"Body_upload_colourway_pattern_questionnaires_jobs__job_id__colourway_pattern_post":{"properties":{"swatch_key":{"type":"string","title":"Swatch Key","description":"UI key e.g. cw0-s0 (colourway index + slot)"},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Pattern image (PNG/JPEG/WebP)"},"type":{"type":"string","title":"Type","description":"'colourway' or 'pattern'","default":"pattern"}},"type":"object","required":["swatch_key","file"],"title":"Body_upload_colourway_pattern_questionnaires_jobs__job_id__colourway_pattern_post"},"Body_upload_colourway_swatch_questionnaires_jobs__job_id__colourway_swatch_post":{"properties":{"swatch_key":{"type":"string","title":"Swatch Key","description":"UI key e.g. 0-17-5104 TCX (colourway index + Pantone code)"},"hex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hex","description":"Picker hex e.g. #2D5A4A — generates a swatch PNG on B2"},"file":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"File","description":"Optional swatch reference image (PNG/JPEG/WebP)"},"type":{"type":"string","title":"Type","description":"'colourway' or 'pattern'","default":"colourway"}},"type":"object","required":["swatch_key"],"title":"Body_upload_colourway_swatch_questionnaires_jobs__job_id__colourway_swatch_post"},"Body_upload_ideation_flats_ideation_upload_flats_post":{"properties":{"front":{"type":"string","contentMediaType":"application/octet-stream","title":"Front"},"back":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Back"}},"type":"object","required":["front"],"title":"Body_upload_ideation_flats_ideation_upload_flats_post"},"Body_upload_illustration_image_questionnaires_jobs__job_id__illustration_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Flattened PNG render of an Illustration Studio view"}},"type":"object","required":["file"],"title":"Body_upload_illustration_image_questionnaires_jobs__job_id__illustration_upload_post"},"Body_upload_knowledge_document_admin_assistant_knowledge_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_knowledge_document_admin_assistant_knowledge_post"},"Body_upload_manufacturer_size_guide_cover_image_manufacturer_me_size_guides__guide_id__cover_image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_manufacturer_size_guide_cover_image_manufacturer_me_size_guides__guide_id__cover_image_post"},"Body_upload_my_brand_logo_brand_me_logo_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"apply_to_techpacks":{"type":"boolean","title":"Apply To Techpacks","default":false}},"type":"object","required":["file"],"title":"Body_upload_my_brand_logo_brand_me_logo_post"},"Body_upload_my_brand_size_guide_brand_me_size_guides_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"name":{"type":"string","title":"Name"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"}},"type":"object","required":["file","name"],"title":"Body_upload_my_brand_size_guide_brand_me_size_guides_post"},"Body_upload_my_brand_size_guide_cover_image_brand_me_size_guides__guide_id__cover_image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_my_brand_size_guide_cover_image_brand_me_size_guides__guide_id__cover_image_post"},"Body_upload_my_manufacturer_documents_manufacturer_me_documents_post":{"properties":{"good_sample":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Good Sample"},"bad_sample":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Bad Sample"}},"type":"object","title":"Body_upload_my_manufacturer_documents_manufacturer_me_documents_post"},"Body_upload_my_manufacturer_logo_manufacturer_me_logo_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Business logo (PNG / JPG / WebP / SVG)"}},"type":"object","required":["file"],"title":"Body_upload_my_manufacturer_logo_manufacturer_me_logo_post"},"Body_upload_my_manufacturer_nda_manufacturer_me_nda_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"NDA document (PDF / DOC / DOCX)"}},"type":"object","required":["file"],"title":"Body_upload_my_manufacturer_nda_manufacturer_me_nda_post"},"Body_upload_my_size_guide_manufacturer_me_size_guides_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"name":{"type":"string","title":"Name"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"}},"type":"object","required":["file","name"],"title":"Body_upload_my_size_guide_manufacturer_me_size_guides_post"},"Body_upload_question_option_image_admin_questions_options_upload_image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Image file to attach to a multiple-choice option"}},"type":"object","required":["file"],"title":"Body_upload_question_option_image_admin_questions_options_upload_image_post"},"Body_upload_size_guide_for_size_studio_questionnaires_jobs__job_id__size_guide_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_size_guide_for_size_studio_questionnaires_jobs__job_id__size_guide_upload_post"},"Body_upload_techpack_3d_render_questionnaires_jobs__job_id__upload_3d_render_post":{"properties":{"side":{"type":"string","title":"Side","description":"front or back"},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Front or back 3D render (PNG/JPEG/WebP)"},"colorway_index":{"type":"integer","title":"Colorway Index","description":"Which colourway slot to replace (0 = cover page / colourway 1)","default":0},"from_flat":{"type":"boolean","title":"From Flat","description":"True when the image is a coloured flat saved from Colour Studio: skips the AI colour read","default":false}},"type":"object","required":["side","file"],"title":"Body_upload_techpack_3d_render_questionnaires_jobs__job_id__upload_3d_render_post"},"Body_upload_visual_studio_image_questionnaires_jobs__job_id__visual_studio_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"PNG/JPEG/WebP for Visual Studio (colour, artwork, or pattern)"}},"type":"object","required":["file"],"title":"Body_upload_visual_studio_image_questionnaires_jobs__job_id__visual_studio_upload_post"},"Body_upload_zones_lab_fabric_questionnaires_jobs__job_id__zones_lab_fabrics_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"PNG/JPEG/WebP fabric image, max 15 MB"}},"type":"object","required":["file"],"title":"Body_upload_zones_lab_fabric_questionnaires_jobs__job_id__zones_lab_fabrics_post"},"Body_upload_zones_lab_photo_questionnaires_jobs__job_id__zones_lab_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"PNG/JPEG/WebP garment photo, max 15 MB"}},"type":"object","required":["file"],"title":"Body_upload_zones_lab_photo_questionnaires_jobs__job_id__zones_lab_upload_post"},"BrandLinkRequest":{"properties":{"referral_token":{"type":"string","maxLength":128,"minLength":1,"title":"Referral Token"}},"type":"object","required":["referral_token"],"title":"BrandLinkRequest","description":"Manually attach the current brand to a manufacturer via referral token."},"BrandLogoUpdateResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"name":{"type":"string","title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"team_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Size"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"billing_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Currency"},"manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Manufacturer Id"},"linked_to_manufacturer_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Linked To Manufacturer At"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"apply_logo_to_techpacks":{"type":"boolean","title":"Apply Logo To Techpacks","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"linked_manufacturer":{"anyOf":[{"$ref":"#/components/schemas/LinkedManufacturerSummary"},{"type":"null"}]},"techpacks_updated":{"type":"integer","title":"Techpacks Updated","default":0}},"type":"object","required":["id","org_id","name","created_at","updated_at"],"title":"BrandLogoUpdateResponse","description":"Returned by the brand logo endpoints and ``PATCH /brand/me``.\n\n``techpacks_updated`` counts existing tech packs that just received the\nbrand logo on their cover (0 when nothing was applied)."},"BrandOnboardingCompleteResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"name":{"type":"string","title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"team_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Size"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"billing_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Currency"},"manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Manufacturer Id"},"linked_to_manufacturer_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Linked To Manufacturer At"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"apply_logo_to_techpacks":{"type":"boolean","title":"Apply Logo To Techpacks","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"linked_manufacturer":{"anyOf":[{"$ref":"#/components/schemas/LinkedManufacturerSummary"},{"type":"null"}]},"requires_otp":{"type":"boolean","title":"Requires Otp","default":false},"otp_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Otp Email"},"verification_email_delivered":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Verification Email Delivered"}},"type":"object","required":["id","org_id","name","created_at","updated_at"],"title":"BrandOnboardingCompleteResponse","description":"Returned by ``POST /brand/me/complete-onboarding``.\n\nWhen the user's email is not yet verified, the server sends the signup\nOTP and sets ``requires_otp`` so the client can show verification UI."},"BrandResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"name":{"type":"string","title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"team_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Size"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"billing_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Currency"},"manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Manufacturer Id"},"linked_to_manufacturer_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Linked To Manufacturer At"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"apply_logo_to_techpacks":{"type":"boolean","title":"Apply Logo To Techpacks","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","org_id","name","created_at","updated_at"],"title":"BrandResponse"},"BrandSizeChartOptionListResponse":{"properties":{"options":{"items":{"$ref":"#/components/schemas/BrandSizeChartOptionResponse"},"type":"array","title":"Options"}},"type":"object","required":["options"],"title":"BrandSizeChartOptionListResponse"},"BrandSizeChartOptionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"image_url":{"type":"string","title":"Image Url"},"extraction_status":{"type":"string","title":"Extraction Status","default":"ready"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"},"group_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Name"}},"type":"object","required":["id","name","image_url"],"title":"BrandSizeChartOptionResponse","description":"One selectable brand-owned chart shown in the picker."},"BrandSizeGuideGroupCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"}},"type":"object","required":["name"],"title":"BrandSizeGuideGroupCreateRequest"},"BrandSizeGuideGroupListResponse":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/BrandSizeGuideGroupResponse"},"type":"array","title":"Groups"},"max_depth":{"type":"integer","title":"Max Depth"},"ungrouped_guide_count":{"type":"integer","title":"Ungrouped Guide Count","default":0}},"type":"object","required":["groups","max_depth"],"title":"BrandSizeGuideGroupListResponse"},"BrandSizeGuideGroupResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"depth":{"type":"integer","title":"Depth"},"guide_count":{"type":"integer","title":"Guide Count","default":0},"child_count":{"type":"integer","title":"Child Count","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","depth","created_at","updated_at"],"title":"BrandSizeGuideGroupResponse"},"BrandSizeGuideGroupUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"}},"type":"object","title":"BrandSizeGuideGroupUpdateRequest"},"BrandSizeGuideListResponse":{"properties":{"size_guides":{"items":{"$ref":"#/components/schemas/BrandSizeGuideResponse"},"type":"array","title":"Size Guides"}},"type":"object","required":["size_guides"],"title":"BrandSizeGuideListResponse"},"BrandSizeGuideResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"file_url":{"type":"string","title":"File Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"cover_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cover Image Url"},"measurement_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measurement Unit"},"extraction_status":{"type":"string","title":"Extraction Status","default":"ready"},"extraction_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extraction Error"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","file_url","created_at"],"title":"BrandSizeGuideResponse"},"BrandSizeGuideUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"}},"type":"object","title":"BrandSizeGuideUpdateRequest","description":"Rename a guide and/or move it into a folder (null clears the folder)."},"BrandUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string","maxLength":255,"format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"location":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Location"},"team_size":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Team Size"},"country":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Country"},"apply_logo_to_techpacks":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Apply Logo To Techpacks"}},"type":"object","title":"BrandUpdateRequest","description":"Partial-update payload for ``PATCH /brand/me``.\n\nAll fields are optional; only keys actually sent are applied via\n``model_dump(exclude_unset=True)``. ``name`` is the brand's display\nname (separate from ``Organization.name``). Used by the brand\nonboarding wizard (company profile + brand details).\n\n``country`` is set-once (billing currency lock) via\n``apply_brand_billing_country`` — typically from the location picker\nduring onboarding. ``billing_currency`` is never writable here."},"BrandWithManufacturerResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"name":{"type":"string","title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"team_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Size"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"billing_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Currency"},"manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Manufacturer Id"},"linked_to_manufacturer_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Linked To Manufacturer At"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"apply_logo_to_techpacks":{"type":"boolean","title":"Apply Logo To Techpacks","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"linked_manufacturer":{"anyOf":[{"$ref":"#/components/schemas/LinkedManufacturerSummary"},{"type":"null"}]}},"type":"object","required":["id","org_id","name","created_at","updated_at"],"title":"BrandWithManufacturerResponse","description":"Brand plus a lightweight summary of the linked manufacturer."},"BrandWorkspaceResponse":{"properties":{"manufacturer_id":{"type":"string","format":"uuid","title":"Manufacturer Id"},"company_name":{"type":"string","title":"Company Name"}},"type":"object","required":["manufacturer_id","company_name"],"title":"BrandWorkspaceResponse"},"Callout":{"properties":{"id":{"type":"string","title":"Id"},"label_key":{"type":"string","title":"Label Key"},"label":{"type":"string","title":"Label"},"label_i18n":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Label I18N"},"type":{"type":"string","title":"Type"},"anchor_xy":{"$ref":"#/components/schemas/AnchorXY"}},"type":"object","required":["id","label_key","label","type","anchor_xy"],"title":"Callout"},"CalloutScene":{"properties":{"version":{"type":"string","title":"Version","default":"1.0"},"view":{"type":"string","enum":["front","back","extra"],"title":"View"},"image_url":{"type":"string","title":"Image Url"},"image_width":{"type":"integer","exclusiveMinimum":0.0,"title":"Image Width"},"image_height":{"type":"integer","exclusiveMinimum":0.0,"title":"Image Height"},"callouts":{"items":{"$ref":"#/components/schemas/Callout"},"type":"array","title":"Callouts"},"metadata":{"anyOf":[{"$ref":"#/components/schemas/SceneMetadata"},{"type":"null"}]}},"type":"object","required":["view","image_url","image_width","image_height","callouts"],"title":"CalloutScene"},"CancelImportTechpackResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"revoked_task_ids":{"items":{"type":"string"},"type":"array","title":"Revoked Task Ids"},"job_id":{"type":"string","title":"Job Id"}},"type":"object","required":["success","message","job_id"],"title":"CancelImportTechpackResponse"},"CancelSubscriptionRequest":{"properties":{"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End","default":true}},"type":"object","title":"CancelSubscriptionRequest","description":"Request to cancel a subscription"},"CandidateFilters":{"properties":{"search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"subscribed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Subscribed"}},"type":"object","title":"CandidateFilters"},"CategoryPerms":{"properties":{"view":{"type":"boolean","title":"View","default":false},"comment":{"type":"boolean","title":"Comment","default":false},"create":{"type":"boolean","title":"Create","default":false},"edit":{"type":"boolean","title":"Edit","default":false},"delete":{"type":"boolean","title":"Delete","default":false}},"additionalProperties":false,"type":"object","title":"CategoryPerms","description":"Permission booleans for one category (``comment`` is used on techpacks)."},"ChangeSubscriptionPlanPreviewResponse":{"properties":{"currency":{"type":"string","title":"Currency"},"current_plan_id":{"type":"string","format":"uuid","title":"Current Plan Id"},"current_plan_name":{"type":"string","title":"Current Plan Name"},"new_plan_id":{"type":"string","format":"uuid","title":"New Plan Id"},"new_plan_name":{"type":"string","title":"New Plan Name"},"credit_amount":{"type":"integer","title":"Credit Amount"},"charge_amount":{"type":"integer","title":"Charge Amount"},"amount_due_now":{"type":"integer","title":"Amount Due Now"},"amount_due_now_display":{"type":"string","title":"Amount Due Now Display"},"days_left":{"type":"integer","title":"Days Left","default":0},"days_in_period":{"type":"integer","title":"Days In Period","default":0},"next_billing_date":{"type":"string","format":"date-time","title":"Next Billing Date"},"next_billing_amount":{"type":"integer","title":"Next Billing Amount"},"next_billing_amount_display":{"type":"string","title":"Next Billing Amount Display"},"card_brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Brand"},"card_last4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Last4"},"scheduled":{"type":"boolean","title":"Scheduled","default":false},"seats":{"type":"integer","title":"Seats","default":1}},"type":"object","required":["currency","current_plan_id","current_plan_name","new_plan_id","new_plan_name","credit_amount","charge_amount","amount_due_now","amount_due_now_display","next_billing_date","next_billing_amount","next_billing_amount_display"],"title":"ChangeSubscriptionPlanPreviewResponse","description":"Preview of the proration Stripe would charge for a plan change"},"ChangeSubscriptionPlanRequest":{"properties":{"new_payment_plan_id":{"type":"string","format":"uuid","title":"New Payment Plan Id"},"prorate":{"type":"boolean","title":"Prorate","default":true}},"type":"object","required":["new_payment_plan_id"],"title":"ChangeSubscriptionPlanRequest","description":"Request to move an existing subscription to a different plan"},"ChangeSubscriptionPlanResponse":{"properties":{"status":{"type":"string","title":"Status"},"effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective At"},"payment_plan_id":{"type":"string","format":"uuid","title":"Payment Plan Id"},"checkout_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checkout Url"},"invoice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Id"},"amount_paid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Paid"},"amount_due":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Due"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"hosted_invoice_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hosted Invoice Url"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status","payment_plan_id"],"title":"ChangeSubscriptionPlanResponse","description":"Response after changing a subscription's plan in-place"},"CheckoutRequest":{"properties":{"plan_type":{"type":"string","title":"Plan Type","description":"Catalog slug (payg, sub-1-monthly, sub-2-annual, …), a payment_plan UUID, or a legacy Price-ID slug (startup-monthly, solo-monthly, credit-topup)."},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url"}},"type":"object","required":["plan_type"],"title":"CheckoutRequest","description":"Universal checkout request."},"CheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["checkout_url","session_id"],"title":"CheckoutResponse"},"ClearNotificationsResponse":{"properties":{"count":{"type":"integer","title":"Count"}},"type":"object","required":["count"],"title":"ClearNotificationsResponse"},"ClientErrorReport":{"properties":{"error_type":{"type":"string","maxLength":80,"title":"Error Type","default":"uncaught"},"message":{"type":"string","maxLength":2000,"minLength":1,"title":"Message"},"page_url":{"type":"string","maxLength":2000,"title":"Page Url","default":""},"client_user_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Client User Id"},"client_user_email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"Client User Email"},"client_user_name":{"anyOf":[{"type":"string","maxLength":400},{"type":"null"}],"title":"Client User Name"}},"type":"object","required":["message"],"title":"ClientErrorReport"},"ColourFill":{"properties":{"type":{"type":"string","const":"colour","title":"Type","default":"colour"},"hex":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Hex"},"pantoneTcx":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Pantonetcx"}},"type":"object","title":"ColourFill"},"ColourwaySourceBody":{"properties":{"source":{"type":"string","enum":["upload","generate"],"title":"Source"}},"type":"object","required":["source"],"title":"ColourwaySourceBody"},"CompanyProfileIn":{"properties":{"company_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company Name"},"company_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Company Email"},"company_whatsapp":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Company Whatsapp"}},"type":"object","title":"CompanyProfileIn"},"CompleteProfileRequest":{"properties":{"brand_name":{"type":"string","title":"Brand Name"},"role":{"type":"string","title":"Role"},"whatsapp":{"type":"string","title":"Whatsapp"}},"type":"object","required":["brand_name","role","whatsapp"],"title":"CompleteProfileRequest","description":"PATCH /auth/me/complete-profile — same rules as signup for these fields."},"CompleteSizeStudioRequest":{"properties":{"selected_size_headers":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Selected Size Headers"},"sample_size":{"type":"string","minLength":1,"title":"Sample Size"},"measurement_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measurement Unit","description":"cm or inches"},"size_guide_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Size Guide Type","description":"body (wearer dimensions) or garment (finished garment specs)","default":"body"},"approved_size_guide_table":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Approved Size Guide Table"}},"type":"object","required":["selected_size_headers","sample_size"],"title":"CompleteSizeStudioRequest"},"ConfirmBulkCreateRequest":{"properties":{"folder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder Name"},"garments":{"items":{"$ref":"#/components/schemas/_ConfirmGarment"},"type":"array","title":"Garments"}},"type":"object","required":["garments"],"title":"ConfirmBulkCreateRequest"},"ConfirmImportTechpackRequest":{"properties":{"page_roles":{"additionalProperties":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]},"type":"object","title":"Page Roles"},"column_mappings":{"additionalProperties":{"additionalProperties":{"type":"string"},"type":"object"},"type":"object","title":"Column Mappings"}},"type":"object","title":"ConfirmImportTechpackRequest"},"ConstructionScenePatchRequest":{"properties":{"view":{"type":"string","pattern":"^(front|back|extra)$","title":"View"},"scene":{"$ref":"#/components/schemas/CalloutScene"},"extra_view_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extra View Id"}},"type":"object","required":["view","scene"],"title":"ConstructionScenePatchRequest"},"ContactOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Name"},"account_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Type"},"online":{"type":"boolean","title":"Online","default":false}},"type":"object","required":["id"],"title":"ContactOut"},"ContactsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ContactOut"},"type":"array","title":"Items"}},"type":"object","title":"ContactsResponse"},"ConversationCreate":{"properties":{"type":{"type":"string","title":"Type","description":"'dm' | 'group'"},"member_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Member Ids"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"tech_pack_job_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tech Pack Job Id"}},"type":"object","required":["type"],"title":"ConversationCreate"},"ConversationCreateRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","default":"New conversation"},"product_type":{"$ref":"#/components/schemas/ProductType"}},"type":"object","required":["product_type"],"title":"ConversationCreateRequest"},"ConversationListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"last_message_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Message At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id"},"product_type":{"anyOf":[{"$ref":"#/components/schemas/ProductType"},{"type":"null"}]},"is_archived":{"type":"boolean","title":"Is Archived","default":false},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"}},"type":"object","required":["id","title"],"title":"ConversationListItem"},"ConversationResponse":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"session_id":{"type":"string","format":"uuid","title":"Session Id"},"product_type":{"$ref":"#/components/schemas/ProductType"},"question":{"$ref":"#/components/schemas/QuestionTemplateSchema"},"progress":{"additionalProperties":{"type":"integer"},"type":"object","title":"Progress","description":"Progress info with current and total questions","example":{"current":1,"total":10}}},"type":"object","required":["conversation_id","session_id","product_type","question","progress"],"title":"ConversationResponse"},"ConversationSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"type":{"type":"string","title":"Type"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"tech_pack_job_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tech Pack Job Id"},"last_message_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Message At"},"last_message":{"anyOf":[{"$ref":"#/components/schemas/MessageOut"},{"type":"null"}]},"unread_count":{"type":"integer","title":"Unread Count","default":0}},"type":"object","required":["id","type"],"title":"ConversationSummary"},"ConversationTechPackJobSummary":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"progress":{"type":"integer","title":"Progress"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"generation_feedback_went_well":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generation Feedback Went Well"},"generation_feedback_could_be_better":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generation Feedback Could Be Better"},"output_feedback_went_well":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Feedback Went Well"},"output_feedback_could_be_better":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Feedback Could Be Better"},"size_studio_completed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Size Studio Completed"},"size_studio_sample_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Size Studio Sample Size"},"size_studio_selected_sizes":{"items":{"type":"string"},"type":"array","title":"Size Studio Selected Sizes"},"size_studio_measurement_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Size Studio Measurement Unit"},"size_studio_upload_urls":{"items":{"type":"string"},"type":"array","title":"Size Studio Upload Urls"}},"type":"object","required":["id","status","progress"],"title":"ConversationTechPackJobSummary","description":"Per-job snapshot for admin session detail (feedback + Size Studio)."},"ConversationUpdate":{"properties":{"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"}},"type":"object","required":["title"],"title":"ConversationUpdate"},"ConversationUpdateRequest":{"properties":{"title":{"type":"string","title":"Title"}},"type":"object","required":["title"],"title":"ConversationUpdateRequest"},"ConversationsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ConversationSummary"},"type":"array","title":"Items"}},"type":"object","title":"ConversationsResponse"},"CookieConsent":{"properties":{"functional":{"type":"boolean","title":"Functional","default":false},"analytics":{"type":"boolean","title":"Analytics","default":false},"version":{"type":"string","title":"Version","default":"1.0.0"},"timestamp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timestamp"}},"type":"object","title":"CookieConsent","description":"Cookie banner choice. Essential cookies are always on, so they aren't stored."},"CreateAccessVoucherRequest":{"properties":{"org_id":{"type":"string","format":"uuid","title":"Org Id"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"ends_at":{"type":"string","format":"date-time","title":"Ends At"},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"}},"type":"object","required":["org_id","starts_at","ends_at"],"title":"CreateAccessVoucherRequest"},"CreateApiKeyRequest":{"properties":{"name":{"type":"string","title":"Name"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"daily_cost_cap_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Cost Cap Usd"}},"type":"object","required":["name","scopes"],"title":"CreateApiKeyRequest"},"CreateApiKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"daily_cost_cap_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Cost Cap Usd"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"key":{"type":"string","title":"Key"}},"type":"object","required":["id","name","key_prefix","scopes","key"],"title":"CreateApiKeyResponse"},"CreateBlockRequest":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"job_ids":{"items":{"type":"string","format":"uuid"},"type":"array","minItems":1,"title":"Job Ids"}},"type":"object","required":["name","job_ids"],"title":"CreateBlockRequest"},"CreateDatabaseRequest":{"properties":{"page_id":{"type":"string","title":"Page Id"},"title":{"type":"string","title":"Title"}},"type":"object","required":["page_id","title"],"title":"CreateDatabaseRequest"},"CreateExtraViewRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"type":"string","maxLength":4000,"title":"Description","default":""},"reference_image_url":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Reference Image Url"}},"type":"object","required":["name"],"title":"CreateExtraViewRequest","description":"Add a named extra 2D view of the garment (Visual Studio '+' button)."},"CreateFeatureGrantIn":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"scope":{"type":"string","enum":["user","company"],"title":"Scope"},"features":{"items":{"type":"string"},"type":"array","maxItems":13,"minItems":1,"title":"Features"},"days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Days"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"}},"type":"object","required":["user_id","scope","features"],"title":"CreateFeatureGrantIn"},"CreateSubscriptionRequest":{"properties":{"payment_plan_id":{"type":"string","format":"uuid","title":"Payment Plan Id"},"success_url":{"type":"string","title":"Success Url"},"cancel_url":{"type":"string","title":"Cancel Url"},"seats":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Seats","default":1}},"type":"object","required":["payment_plan_id","success_url","cancel_url"],"title":"CreateSubscriptionRequest","description":"Request to create a subscription"},"CreateSubscriptionResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["checkout_url","session_id"],"title":"CreateSubscriptionResponse","description":"Response after creating subscription checkout session"},"CreateTechPackTokenRequest":{"properties":{"tech_pack_count":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Tech Pack Count"},"max_redemptions":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Max Redemptions","default":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"},"code":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Code"}},"type":"object","required":["tech_pack_count"],"title":"CreateTechPackTokenRequest"},"CreateThreadResponse":{"properties":{"thread_id":{"type":"string","title":"Thread Id"}},"type":"object","required":["thread_id"],"title":"CreateThreadResponse"},"CreditAdjustmentRequest":{"properties":{"amount":{"type":"integer","title":"Amount","description":"Positive to add credits, negative to deduct"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Admin note for this adjustment"}},"type":"object","required":["amount"],"title":"CreditAdjustmentRequest"},"CreditAdjustmentResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"new_balance":{"type":"integer","title":"New Balance"},"change_amount":{"type":"integer","title":"Change Amount"},"reason":{"type":"string","title":"Reason"},"ledger_entry_id":{"type":"string","format":"uuid","title":"Ledger Entry Id"}},"type":"object","required":["new_balance","change_amount","reason","ledger_entry_id"],"title":"CreditAdjustmentResponse"},"CreditBalanceResponse":{"properties":{"current_balance":{"type":"integer","title":"Current Balance"},"credits_used_this_period":{"type":"integer","title":"Credits Used This Period"},"credits_remaining":{"type":"integer","title":"Credits Remaining"},"can_download":{"type":"boolean","title":"Can Download"},"can_generate":{"type":"boolean","title":"Can Generate","default":true},"generation_block_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generation Block Reason"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"recent_usage":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Recent Usage"},"free_tech_pack_policy_active":{"type":"boolean","title":"Free Tech Pack Policy Active","default":false},"free_tech_pack_policy_start_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Free Tech Pack Policy Start At"},"free_generation_available":{"type":"boolean","title":"Free Generation Available","default":false},"can_access_designboard":{"type":"boolean","title":"Can Access Designboard","default":true},"designboard_block_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Designboard Block Reason"},"billing_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Mode"},"unit_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Price Cents"},"active_voucher_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Active Voucher Ends At"}},"type":"object","required":["current_balance","credits_used_this_period","credits_remaining","can_download","recent_usage"],"title":"CreditBalanceResponse"},"CreditLedgerEntry":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"change_amount":{"type":"integer","title":"Change Amount"},"balance_after":{"type":"integer","title":"Balance After"},"reason":{"type":"string","title":"Reason"},"reference_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","change_amount","balance_after","reason"],"title":"CreditLedgerEntry"},"CustomPriceCreate":{"properties":{"name":{"type":"string","title":"Name","default":""},"base_tier":{"type":"string","title":"Base Tier","default":""},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"monthly":{"$ref":"#/components/schemas/Amounts","default":{}},"annual":{"$ref":"#/components/schemas/Amounts","default":{}}},"type":"object","title":"CustomPriceCreate"},"CustomPriceUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"base_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Tier"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"monthly":{"anyOf":[{"$ref":"#/components/schemas/Amounts"},{"type":"null"}]},"annual":{"anyOf":[{"$ref":"#/components/schemas/Amounts"},{"type":"null"}]}},"type":"object","title":"CustomPriceUpdate"},"CustomRoleSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"is_enabled":{"type":"boolean","title":"Is Enabled"}},"type":"object","required":["id","name","is_enabled"],"title":"CustomRoleSummary","description":"Compact role reference for embedding alongside member rows."},"DesignboardFolderAddProjectRequest":{"properties":{"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"conversation_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Conversation Ids"}},"type":"object","title":"DesignboardFolderAddProjectRequest","description":"One id or a list. `conversation_ids` wins when both are sent."},"DesignboardFolderCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"}},"type":"object","required":["name"],"title":"DesignboardFolderCreateRequest"},"DesignboardFolderListResponse":{"properties":{"folders":{"items":{"$ref":"#/components/schemas/DesignboardFolderResponse"},"type":"array","title":"Folders"},"max_depth":{"type":"integer","title":"Max Depth"}},"type":"object","required":["folders","max_depth"],"title":"DesignboardFolderListResponse"},"DesignboardFolderRemoveProjectsRequest":{"properties":{"conversation_ids":{"items":{"type":"string","format":"uuid"},"type":"array","minItems":1,"title":"Conversation Ids"}},"type":"object","required":["conversation_ids"],"title":"DesignboardFolderRemoveProjectsRequest"},"DesignboardFolderResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"name":{"type":"string","title":"Name"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"project_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Project Ids"},"project_count":{"type":"integer","title":"Project Count","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","created_at","updated_at"],"title":"DesignboardFolderResponse"},"DesignboardFolderUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"}},"type":"object","title":"DesignboardFolderUpdateRequest"},"DeviceApproveRequest":{"properties":{"user_code":{"type":"string","title":"User Code"},"approve":{"type":"boolean","title":"Approve"}},"type":"object","required":["user_code","approve"],"title":"DeviceApproveRequest"},"DeviceTokenRequest":{"properties":{"device_code":{"type":"string","title":"Device Code"}},"type":"object","required":["device_code"],"title":"DeviceTokenRequest"},"DismissNudgeResponse":{"properties":{"dismissed":{"type":"boolean","title":"Dismissed"}},"type":"object","required":["dismissed"],"title":"DismissNudgeResponse"},"DownloadRecordSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tech_pack_job_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tech Pack Job Id"},"downloaded_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Downloaded At"},"is_trial_download":{"type":"boolean","title":"Is Trial Download","default":false}},"type":"object","required":["id"],"title":"DownloadRecordSummary"},"DuplicateQuestionRequest":{"properties":{"new_product_type":{"anyOf":[{"$ref":"#/components/schemas/ProductType"},{"type":"null"}]},"prefix_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prefix Text","description":"Add prefix to question text"}},"type":"object","title":"DuplicateQuestionRequest"},"EffectivePermissionsResponse":{"properties":{"permissions":{"$ref":"#/components/schemas/PermissionMap"},"is_org_admin":{"type":"boolean","title":"Is Org Admin","default":false}},"type":"object","required":["permissions"],"title":"EffectivePermissionsResponse"},"EndsAtUpdate":{"properties":{"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"}},"type":"object","title":"EndsAtUpdate"},"EnumOption":{"properties":{"value":{"type":"string","title":"Value"},"label":{"type":"string","title":"Label"}},"type":"object","required":["value","label"],"title":"EnumOption"},"EscalateRequest":{"properties":{"message":{"type":"string","title":"Message"},"page_context":{"anyOf":[{"$ref":"#/components/schemas/PageContext"},{"type":"null"}]}},"type":"object","required":["message"],"title":"EscalateRequest"},"EscalateResponse":{"properties":{"sent":{"type":"boolean","title":"Sent"},"support_email":{"type":"string","title":"Support Email"}},"type":"object","required":["sent","support_email"],"title":"EscalateResponse"},"Fabric":{"type":"string","enum":["cotton","silk","wool","linen","polyester","nylon","spandex","waterproof","recycled","technical_mesh"],"title":"Fabric"},"FabricFill":{"properties":{"type":{"type":"string","const":"fabric","title":"Type"},"fabricId":{"type":"string","maxLength":40,"title":"Fabricid"},"scale":{"type":"number","maximum":5.0,"minimum":0.1,"title":"Scale","default":1.0},"rotation":{"type":"number","maximum":360.0,"minimum":-360.0,"title":"Rotation","default":0.0},"offsetX":{"type":"number","maximum":20000.0,"minimum":-20000.0,"title":"Offsetx","default":0.0},"offsetY":{"type":"number","maximum":20000.0,"minimum":-20000.0,"title":"Offsety","default":0.0}},"type":"object","required":["type","fabricId"],"title":"FabricFill"},"FabricGroup":{"type":"string","enum":["natural","synthetics","performance"],"title":"FabricGroup","description":"Frontend grouping for the fabric picker — not stored on the row."},"FabricGroupOptions":{"properties":{"group":{"$ref":"#/components/schemas/FabricGroup"},"label":{"type":"string","title":"Label"},"fabrics":{"items":{"$ref":"#/components/schemas/EnumOption"},"type":"array","title":"Fabrics"}},"type":"object","required":["group","label","fabrics"],"title":"FabricGroupOptions"},"FactoryProfileIn":{"properties":{"factory_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Factory Name"},"factory_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/FactoryType"},"type":"array"},{"type":"null"}],"title":"Factory Types"},"moq":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Moq"},"lead_time_weeks":{"anyOf":[{"type":"integer","maximum":52.0,"minimum":1.0},{"type":"null"}],"title":"Lead Time Weeks"},"location":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Location"},"years_of_experience":{"anyOf":[{"$ref":"#/components/schemas/YearsOfExperience"},{"type":"null"}]},"team_size":{"anyOf":[{"$ref":"#/components/schemas/TeamSize"},{"type":"null"}]}},"type":"object","title":"FactoryProfileIn"},"FactoryType":{"type":"string","enum":["cmt","fpp","oem","odm"],"title":"FactoryType"},"FeatureAccessResponse":{"properties":{"has_access":{"type":"boolean","title":"Has Access"},"reason":{"type":"string","title":"Reason"},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"quota_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quota Remaining"}},"type":"object","required":["has_access","reason","subscription_status","quota_remaining"],"title":"FeatureAccessResponse","description":"Response for feature access check"},"FeatureGrantOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"feature":{"type":"string","title":"Feature"},"label":{"type":"string","title":"Label"},"scope":{"type":"string","enum":["user","company"],"title":"Scope"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"active":{"type":"boolean","title":"Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","feature","label","scope","starts_at","expires_at","active","created_at"],"title":"FeatureGrantOut"},"FeatureRequestCreate":{"properties":{"title":{"type":"string","maxLength":100,"minLength":1,"title":"Title"},"description":{"type":"string","maxLength":500,"minLength":1,"title":"Description"}},"type":"object","required":["title","description"],"title":"FeatureRequestCreate"},"FeatureRequestOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"vote_count":{"type":"integer","title":"Vote Count"},"has_voted":{"type":"boolean","title":"Has Voted"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"author_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Name"}},"type":"object","required":["id","title","status","vote_count","has_voted","created_at"],"title":"FeatureRequestOut"},"FeedbackEntryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_name":{"type":"string","title":"User Name"},"what_went_well":{"type":"string","title":"What Went Well"},"what_could_be_better":{"type":"string","title":"What Could Be Better"},"rating":{"type":"integer","title":"Rating"},"category":{"type":"string","enum":["Performance","Design","Accuracy","Other","UI/UX","Feature Request","Bug"],"title":"Category"},"comment":{"type":"string","title":"Comment"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","user_name","what_went_well","what_could_be_better","rating","category","comment","created_at"],"title":"FeedbackEntryResponse"},"FeedbackListResponse":{"properties":{"feedback":{"items":{"$ref":"#/components/schemas/FeedbackEntryResponse"},"type":"array","title":"Feedback"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["feedback","total"],"title":"FeedbackListResponse"},"FeedbackStatsResponse":{"properties":{"overall_satisfaction":{"type":"number","title":"Overall Satisfaction"},"total_submissions":{"type":"integer","title":"Total Submissions"},"nps_score":{"type":"integer","title":"Nps Score"},"went_well_count":{"type":"integer","title":"Went Well Count"},"could_be_better_count":{"type":"integer","title":"Could Be Better Count"},"category_distribution":{"additionalProperties":{"type":"integer"},"propertyNames":{"enum":["Performance","Design","Accuracy","Other","UI/UX","Feature Request","Bug"]},"type":"object","title":"Category Distribution"}},"type":"object","required":["overall_satisfaction","total_submissions","nps_score","went_well_count","could_be_better_count","category_distribution"],"title":"FeedbackStatsResponse"},"FeedbackSubmitRequest":{"properties":{"what_went_well":{"type":"string","maxLength":2000,"title":"What Went Well","default":""},"what_could_be_better":{"type":"string","maxLength":2000,"title":"What Could Be Better","default":""}},"type":"object","title":"FeedbackSubmitRequest"},"FieldMappingMatrixItem":{"properties":{"field_name":{"type":"string","title":"Field Name"},"field_type":{"type":"string","title":"Field Type"},"display_name":{"type":"string","title":"Display Name"},"excel_sheet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Excel Sheet"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"mapped_questions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Mapped Questions","default":[]}},"type":"object","required":["field_name","field_type","display_name"],"title":"FieldMappingMatrixItem"},"FieldMappingMatrixResponse":{"properties":{"fields":{"items":{"$ref":"#/components/schemas/FieldMappingMatrixItem"},"type":"array","title":"Fields"},"total_fields":{"type":"integer","title":"Total Fields"},"mapped_fields_count":{"type":"integer","title":"Mapped Fields Count"},"unmapped_fields_count":{"type":"integer","title":"Unmapped Fields Count"}},"type":"object","required":["fields","total_fields","mapped_fields_count","unmapped_fields_count"],"title":"FieldMappingMatrixResponse"},"FindBody":{"properties":{"rows":{"anyOf":[{"items":{"$ref":"#/components/schemas/GroupRow"},"type":"array","maxItems":40},{"type":"null"}],"title":"Rows"}},"type":"object","title":"FindBody"},"GarmentBounds":{"properties":{"x_min":{"type":"number","maximum":1.0,"minimum":0.0,"title":"X Min"},"y_min":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Y Min"},"x_max":{"type":"number","maximum":1.0,"minimum":0.0,"title":"X Max"},"y_max":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Y Max"}},"type":"object","required":["x_min","y_min","x_max","y_max"],"title":"GarmentBounds"},"GenerateColorwayBody":{"properties":{"colorway_index":{"type":"integer","title":"Colorway Index"}},"type":"object","required":["colorway_index"],"title":"GenerateColorwayBody"},"GenerateFlatsJobResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"type":"string","title":"Status","default":"queued"}},"type":"object","required":["task_id"],"title":"GenerateFlatsJobResponse"},"GenerateFlatsRequest":{"properties":{"prompt":{"type":"string","maxLength":4000,"minLength":1,"title":"Prompt"}},"type":"object","required":["prompt"],"title":"GenerateFlatsRequest"},"GenerateFlatsStatusResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"type":"string","title":"Status"},"front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front Url"},"back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back Url"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["task_id","status"],"title":"GenerateFlatsStatusResponse"},"GetConversationHistoryResponse":{"properties":{"session_id":{"type":"string","format":"uuid","title":"Session Id"},"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"product_type":{"$ref":"#/components/schemas/ProductType"},"conversation":{"items":{"$ref":"#/components/schemas/QuestionResponseWithTemplate"},"type":"array","title":"Conversation"},"total_questions":{"type":"integer","title":"Total Questions"},"answered_questions":{"type":"integer","title":"Answered Questions"},"tech_pack_jobs":{"items":{"$ref":"#/components/schemas/ConversationTechPackJobSummary"},"type":"array","title":"Tech Pack Jobs"}},"type":"object","required":["session_id","conversation_id","product_type","conversation","total_questions","answered_questions"],"title":"GetConversationHistoryResponse"},"GetCurrentQuestionResponse":{"properties":{"session_id":{"type":"string","format":"uuid","title":"Session Id"},"current_question":{"anyOf":[{"$ref":"#/components/schemas/QuestionTemplateSchema"},{"type":"null"}]},"is_complete":{"type":"boolean","title":"Is Complete"},"progress":{"additionalProperties":{"type":"integer"},"type":"object","title":"Progress"},"responses":{"items":{"$ref":"#/components/schemas/QuestionResponseWithTemplate"},"type":"array","title":"Responses"}},"type":"object","required":["session_id","is_complete","progress","responses"],"title":"GetCurrentQuestionResponse"},"GetJobStatusResponse":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"session_id":{"type":"string","format":"uuid","title":"Session Id"},"status":{"$ref":"#/components/schemas/JobStatus"},"progress":{"type":"integer","title":"Progress"},"brand_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"},"manufacturer_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Manufacturer Ids"},"brand":{"anyOf":[{"$ref":"#/components/schemas/TechPackBrandSummary"},{"type":"null"}]},"manufacturers":{"items":{"$ref":"#/components/schemas/TechPackManufacturerSummary"},"type":"array","title":"Manufacturers"},"result_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Url"},"preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Url"},"front_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 3D Url"},"back_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 3D Url"},"left_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Left 3D Url"},"right_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Right 3D Url"},"front_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 2D Url"},"back_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 2D Url"},"left_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Left 2D Url"},"right_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Right 2D Url"},"inner_front_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inner Front 2D Url"},"inner_back_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inner Back 2D Url"},"pom_overlay_outer_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pom Overlay Outer Front Url"},"pom_overlay_outer_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pom Overlay Outer Back Url"},"pom_overlay_inner_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pom Overlay Inner Front Url"},"pom_overlay_inner_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pom Overlay Inner Back Url"},"bom_callout_giq_outer_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Giq Outer Front Url"},"bom_callout_giq_outer_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Giq Outer Back Url"},"bom_callout_giq_inner_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Giq Inner Front Url"},"bom_callout_giq_inner_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Giq Inner Back Url"},"bom_callout_nogiq_outer_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Nogiq Outer Front Url"},"bom_callout_nogiq_outer_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Nogiq Outer Back Url"},"bom_callout_nogiq_inner_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Nogiq Inner Front Url"},"bom_callout_nogiq_inner_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Nogiq Inner Back Url"},"refinement_count_front":{"type":"integer","title":"Refinement Count Front","default":0},"refinement_count_back":{"type":"integer","title":"Refinement Count Back","default":0},"refinement_count_left":{"type":"integer","title":"Refinement Count Left","default":0},"refinement_count_right":{"type":"integer","title":"Refinement Count Right","default":0},"refinement_count_2d_front":{"type":"integer","title":"Refinement Count 2D Front","default":0},"refinement_count_2d_back":{"type":"integer","title":"Refinement Count 2D Back","default":0},"refinement_count_2d_left":{"type":"integer","title":"Refinement Count 2D Left","default":0},"refinement_count_2d_right":{"type":"integer","title":"Refinement Count 2D Right","default":0},"share_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Code"},"public_share_view_count":{"type":"integer","title":"Public Share View Count","default":0},"last_public_share_view_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Public Share View At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"released_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Released At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"manufacturer_completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Manufacturer Completed At"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"},"refinement_payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Refinement Payload"},"flat2d_regenerate_count":{"type":"integer","title":"Flat2D Regenerate Count","default":0},"flat2d_regenerate_payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Flat2D Regenerate Payload"},"techpack_import_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Techpack Import Status"},"techpack_import_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Techpack Import Step"},"generation_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generation Step"},"techpack_import_incomplete":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Techpack Import Incomplete"},"techpack_import_unresolved_required":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Import Unresolved Required"},"techpack_import_draft_acknowledged":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Techpack Import Draft Acknowledged"},"entitlements":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Entitlements"}},"type":"object","required":["job_id","session_id","status","progress","created_at"],"title":"GetJobStatusResponse"},"GetStartedLeadCreate":{"properties":{"first_name":{"type":"string","maxLength":100,"minLength":1,"title":"First Name"},"last_name":{"type":"string","maxLength":100,"minLength":1,"title":"Last Name"},"work_email":{"type":"string","format":"email","title":"Work Email"},"phone_number":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone Number"},"company_name":{"type":"string","maxLength":200,"minLength":1,"title":"Company Name"},"website_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Website Url"},"how_did_you_hear":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"How Did You Hear"},"goals":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Goals"},"account_type":{"type":"string","enum":["brand","manufacturer"],"title":"Account Type"}},"type":"object","required":["first_name","last_name","work_email","company_name","account_type"],"title":"GetStartedLeadCreate"},"GetStartedLeadResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","created_at"],"title":"GetStartedLeadResponse"},"GoogleLoginRequest":{"properties":{"id_token":{"type":"string","title":"Id Token"},"account_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Type"},"referral_token":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Referral Token"},"country":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Country"}},"type":"object","required":["id_token"],"title":"GoogleLoginRequest"},"GrantableFeatureOut":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"}},"type":"object","required":["key","label"],"title":"GrantableFeatureOut"},"GroupRow":{"properties":{"name":{"type":"string","maxLength":60,"title":"Name"},"view":{"type":"string","enum":["front","back","both"],"title":"View","default":"both"},"anchorFront":{"anyOf":[{"$ref":"#/components/schemas/Anchor"},{"type":"null"}]},"anchorBack":{"anyOf":[{"$ref":"#/components/schemas/Anchor"},{"type":"null"}]}},"type":"object","required":["name"],"title":"GroupRow"},"GuideSeenRequest":{"properties":{"guide":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,80}$","title":"Guide"}},"type":"object","required":["guide"],"title":"GuideSeenRequest","description":"POST /auth/me/guides-seen — a walkthrough / help guide the user has now seen."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IdeationFlatsResponse":{"properties":{"front_url":{"type":"string","title":"Front Url"},"back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back Url"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"design_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Design Format"}},"type":"object","required":["front_url"],"title":"IdeationFlatsResponse"},"ImportAcknowledgeResponse":{"properties":{"acknowledged":{"type":"boolean","title":"Acknowledged","default":true}},"type":"object","title":"ImportAcknowledgeResponse"},"ImportAgentRunResponse":{"properties":{"run":{"additionalProperties":true,"type":"object","title":"Run"},"messages":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Messages"},"readiness":{"additionalProperties":true,"type":"object","title":"Readiness"}},"type":"object","required":["run","messages","readiness"],"title":"ImportAgentRunResponse"},"ImportAgentStartResponse":{"properties":{"run_id":{"type":"string","title":"Run Id"}},"type":"object","required":["run_id"],"title":"ImportAgentStartResponse"},"ImportReadinessRecomputeResponse":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"readiness":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Readiness"},"capabilities":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Capabilities"}},"type":"object","required":["job_id"],"title":"ImportReadinessRecomputeResponse"},"ImportResolveResponse":{"properties":{"readiness":{"additionalProperties":true,"type":"object","title":"Readiness"}},"type":"object","required":["readiness"],"title":"ImportResolveResponse"},"ImportTechpackResponse":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","status"],"title":"ImportTechpackResponse"},"InboxAckRequest":{"properties":{"ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"minItems":1,"title":"Ids"}},"type":"object","required":["ids"],"title":"InboxAckRequest"},"InboxImage":{"properties":{"label":{"type":"string","maxLength":255,"minLength":1,"title":"Label"},"url":{"type":"string","maxLength":2048,"minLength":1,"title":"Url"},"side":{"anyOf":[{"type":"string","enum":["front","back"]},{"type":"null"}],"title":"Side"}},"type":"object","required":["label","url"],"title":"InboxImage"},"InboxSendRequest":{"properties":{"job_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Job Id"},"job_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Job Name"},"images":{"items":{"$ref":"#/components/schemas/InboxImage"},"type":"array","maxItems":20,"minItems":1,"title":"Images"}},"type":"object","required":["images"],"title":"InboxSendRequest"},"InferArtworkLogoDimensionsResponse":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"prefill":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Prefill"},"saved":{"additionalProperties":true,"type":"object","title":"Saved"},"merged":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Merged"},"job_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Status"},"job_renders":{"anyOf":[{"$ref":"#/components/schemas/TechPackJobRendersPayload"},{"type":"null"}]},"share_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Code"},"entitlements":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Entitlements"},"infer_updated":{"type":"boolean","title":"Infer Updated","default":false},"infer_skipped":{"type":"boolean","title":"Infer Skipped","default":false},"infer_skip_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Infer Skip Reason"},"infer_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Infer Error"},"diagram_updated":{"type":"boolean","title":"Diagram Updated","default":false},"diagram_skipped":{"type":"boolean","title":"Diagram Skipped","default":true},"diagram_skip_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Diagram Skip Reason"},"diagram_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Diagram Error"}},"type":"object","required":["job_id","saved"],"title":"InferArtworkLogoDimensionsResponse","description":"Platform state after POST …/infer-artwork-logo-dimensions (includes inference + diagram status)."},"InputType":{"type":"string","enum":["text","yes_no","multiple_choice","file_upload","number","textarea","checkbox"],"title":"InputType"},"InvitationAcceptResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"org_id":{"type":"string","title":"Org Id"},"role":{"type":"string","title":"Role"},"account_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Type"},"redirect_path":{"type":"string","title":"Redirect Path"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","org_id","role","redirect_path","message"],"title":"InvitationAcceptResponse"},"InvitationCreateRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"type":"string","pattern":"^(admin|user|viewer|editor)$","title":"Role","default":"user"},"access_profile":{"anyOf":[{"$ref":"#/components/schemas/MemberAccessProfile"},{"type":"null"}]}},"type":"object","required":["email"],"title":"InvitationCreateRequest"},"InvitationDetailSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"accepted":{"type":"boolean","title":"Accepted"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Name"},"access_profile":{"anyOf":[{"$ref":"#/components/schemas/MemberAccessProfile"},{"type":"null"}]},"inviter_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inviter Name"},"account_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Type"}},"type":"object","required":["id","org_id","email","role","expires_at","accepted","created_at"],"title":"InvitationDetailSchema","description":"What the invitee sees when viewing an invitation."},"InvitationSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"accepted":{"type":"boolean","title":"Accepted"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Name"},"access_profile":{"anyOf":[{"$ref":"#/components/schemas/MemberAccessProfile"},{"type":"null"}]}},"type":"object","required":["id","org_id","email","role","expires_at","accepted","created_at"],"title":"InvitationSchema"},"InvoiceResponse":{"properties":{"invoice_id":{"type":"string","title":"Invoice Id"},"invoice_pdf_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Pdf Url"},"hosted_invoice_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hosted Invoice Url"}},"type":"object","required":["invoice_id"],"title":"InvoiceResponse"},"JobStatus":{"type":"string","enum":["queued","processing","awaiting_size_studio","awaiting_review","awaiting_3d_start","awaiting_3d_review","awaiting_construction","workspace_active","completed","failed"],"title":"JobStatus"},"KnowledgeDocumentListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/KnowledgeDocumentResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"KnowledgeDocumentListResponse"},"KnowledgeDocumentResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"original_filename":{"type":"string","title":"Original Filename"},"file_type":{"type":"string","title":"File Type"},"status":{"type":"string","title":"Status"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"chunk_count":{"type":"integer","title":"Chunk Count"},"uploaded_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Uploaded By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","title","original_filename","file_type","status","chunk_count","created_at","updated_at"],"title":"KnowledgeDocumentResponse"},"LabPoint":{"properties":{"x":{"type":"integer","title":"X"},"y":{"type":"integer","title":"Y"},"label":{"type":"integer","enum":[0,1],"title":"Label"}},"type":"object","required":["x","y","label"],"title":"LabPoint"},"LearningModeRequest":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"LearningModeRequest","description":"PUT /auth/me/learning-mode — the 3D Visual Studio tour starts every visit while on."},"LinkedManufacturerSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"factory_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Factory Name"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"status":{"type":"string","enum":["under_review","verified","rejected"],"title":"Status"},"techpack_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Price Cents"},"store_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Slug"}},"type":"object","required":["id","status"],"title":"LinkedManufacturerSummary"},"ListConversationsResponse":{"properties":{"conversations":{"items":{"$ref":"#/components/schemas/ConversationListItem"},"type":"array","title":"Conversations"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["conversations","total","limit","offset"],"title":"ListConversationsResponse"},"ListPaymentPlansResponse":{"properties":{"plans":{"items":{"$ref":"#/components/schemas/PaymentPlanResponse"},"type":"array","title":"Plans"}},"type":"object","required":["plans"],"title":"ListPaymentPlansResponse","description":"Response schema for list of payment plans"},"ListSessionsResponse":{"properties":{"sessions":{"items":{"$ref":"#/components/schemas/QuestionnaireSession"},"type":"array","title":"Sessions"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["sessions","total"],"title":"ListSessionsResponse"},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"keep_logged_in":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Keep Logged In","default":false},"client":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"ManufacturerCheckoutRequest":{"properties":{"manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Manufacturer Id"},"store_slug":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Store Slug"},"quantity":{"type":"integer","maximum":50000.0,"minimum":1.0,"title":"Quantity","default":1},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url"}},"type":"object","title":"ManufacturerCheckoutRequest","description":"Start Stripe Checkout for manufacturer tech pack credits."},"ManufacturerCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"},"amount_cents":{"type":"integer","title":"Amount Cents"},"platform_fee_cents":{"type":"integer","title":"Platform Fee Cents"},"manufacturer_net_cents":{"type":"integer","title":"Manufacturer Net Cents"},"quantity":{"type":"integer","title":"Quantity","default":1},"currency":{"type":"string","title":"Currency","default":"usd"}},"type":"object","required":["checkout_url","session_id","amount_cents","platform_fee_cents","manufacturer_net_cents"],"title":"ManufacturerCheckoutResponse"},"ManufacturerCustomerListItem":{"properties":{"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"name":{"type":"string","title":"Name"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"team_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Size"},"tech_pack_count":{"type":"integer","title":"Tech Pack Count"},"linked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Linked At"},"techpack_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Price Cents"},"default_techpack_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Techpack Price Cents"},"effective_techpack_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Effective Techpack Price Cents"}},"type":"object","required":["brand_id","name","tech_pack_count"],"title":"ManufacturerCustomerListItem","description":"One row on the manufacturer-side CRM dashboard (\"customers\" = brands)."},"ManufacturerCustomerListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ManufacturerCustomerListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"ManufacturerCustomerListResponse"},"ManufacturerCustomerPriceUpdate":{"properties":{"techpack_price_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Techpack Price Cents"}},"type":"object","title":"ManufacturerCustomerPriceUpdate","description":"Set or clear a per-brand tech pack price override (cents)."},"ManufacturerCustomerStatsResponse":{"properties":{"total":{"type":"integer","title":"Total"}},"type":"object","required":["total"],"title":"ManufacturerCustomerStatsResponse","description":"Counter for the \"Total No. of Customers\" card."},"ManufacturerDocumentResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"manufacturer_id":{"type":"string","format":"uuid","title":"Manufacturer Id"},"kind":{"type":"string","enum":["good_sample","bad_sample"],"title":"Kind"},"file_name":{"type":"string","title":"File Name"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"storage_url":{"type":"string","title":"Storage Url"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","manufacturer_id","kind","file_name","storage_url","created_at"],"title":"ManufacturerDocumentResponse"},"ManufacturerDocumentsResponse":{"properties":{"documents":{"items":{"$ref":"#/components/schemas/ManufacturerDocumentResponse"},"type":"array","title":"Documents"}},"type":"object","required":["documents"],"title":"ManufacturerDocumentsResponse"},"ManufacturerInviteCreateRequest":{"properties":{"invite_type":{"type":"string","enum":["per_pack","bundle"],"title":"Invite Type"},"techpack_price_cents":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Techpack Price Cents"},"techpack_price_usd_cents":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Techpack Price Usd Cents"},"techpack_price_gbp_cents":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Techpack Price Gbp Cents"},"techpack_price_eur_cents":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Techpack Price Eur Cents"},"bundle_total_cents":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Bundle Total Cents"},"bundle_total_usd_cents":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Bundle Total Usd Cents"},"bundle_total_gbp_cents":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Bundle Total Gbp Cents"},"bundle_total_eur_cents":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Bundle Total Eur Cents"},"bundle_quantity":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Bundle Quantity"},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["invite_type"],"title":"ManufacturerInviteCreateRequest"},"ManufacturerInviteListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ManufacturerInviteResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"ManufacturerInviteListResponse"},"ManufacturerInviteResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"invite_type":{"type":"string","enum":["per_pack","bundle"],"title":"Invite Type"},"token":{"type":"string","title":"Token"},"signup_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signup Url"},"techpack_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Price Cents"},"techpack_price_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Price Usd Cents"},"techpack_price_gbp_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Price Gbp Cents"},"techpack_price_eur_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Price Eur Cents"},"bundle_total_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bundle Total Cents"},"bundle_total_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bundle Total Usd Cents"},"bundle_total_gbp_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bundle Total Gbp Cents"},"bundle_total_eur_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bundle Total Eur Cents"},"bundle_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bundle Quantity"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","invite_type","token","created_at"],"title":"ManufacturerInviteResponse"},"ManufacturerPayoutAccountResponse":{"properties":{"account_holder_name":{"type":"string","title":"Account Holder Name"},"bank_name":{"type":"string","title":"Bank Name"},"country":{"type":"string","title":"Country"},"currency":{"type":"string","title":"Currency"},"routing_number_last4":{"type":"string","title":"Routing Number Last4"},"account_number_last4":{"type":"string","title":"Account Number Last4"}},"type":"object","required":["account_holder_name","bank_name","country","currency","routing_number_last4","account_number_last4"],"title":"ManufacturerPayoutAccountResponse"},"ManufacturerPayoutAccountUpsertRequest":{"properties":{"account_holder_name":{"type":"string","maxLength":255,"minLength":1,"title":"Account Holder Name"},"bank_name":{"type":"string","maxLength":255,"minLength":1,"title":"Bank Name"},"country":{"type":"string","maxLength":2,"minLength":2,"title":"Country","default":"US"},"routing_number":{"type":"string","maxLength":9,"minLength":9,"title":"Routing Number"},"account_number":{"type":"string","maxLength":17,"minLength":4,"title":"Account Number"}},"type":"object","required":["account_holder_name","bank_name","routing_number","account_number"],"title":"ManufacturerPayoutAccountUpsertRequest"},"ManufacturerProfileCreate":{"properties":{"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"factory_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Factory Name"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"experience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Experience"},"team_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Size"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"services":{"items":{"type":"string"},"type":"array","title":"Services"},"fabrics":{"items":{"type":"string"},"type":"array","title":"Fabrics"},"required_components":{"items":{"type":"string"},"type":"array","title":"Required Components"},"file_formats":{"items":{"type":"string"},"type":"array","title":"File Formats"},"moq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Moq"},"lead_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lead Time"}},"type":"object","title":"ManufacturerProfileCreate"},"ManufacturerProfileOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"manufacturer_id":{"type":"string","format":"uuid","title":"Manufacturer Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"account_type":{"anyOf":[{"$ref":"#/components/schemas/AccountType"},{"type":"null"}]},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"company_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Company Email"},"company_whatsapp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Whatsapp"},"factory_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Factory Name"},"factory_types":{"items":{"$ref":"#/components/schemas/FactoryType"},"type":"array","title":"Factory Types"},"moq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Moq"},"lead_time_weeks":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lead Time Weeks"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"years_of_experience":{"anyOf":[{"$ref":"#/components/schemas/YearsOfExperience"},{"type":"null"}]},"team_size":{"anyOf":[{"$ref":"#/components/schemas/TeamSize"},{"type":"null"}]},"apparel_categories":{"items":{"$ref":"#/components/schemas/ApparelCategory"},"type":"array","title":"Apparel Categories"},"fabrics_worked_with":{"items":{"$ref":"#/components/schemas/Fabric"},"type":"array","title":"Fabrics Worked With"},"fabrics_never_worked_with":{"items":{"$ref":"#/components/schemas/Fabric"},"type":"array","title":"Fabrics Never Worked With"},"techpack_components":{"items":{"$ref":"#/components/schemas/TechPackComponent"},"type":"array","title":"Techpack Components"},"current_step":{"$ref":"#/components/schemas/OnboardingStep"},"completed_steps":{"items":{"$ref":"#/components/schemas/OnboardingStep"},"type":"array","title":"Completed Steps"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"benchmark_files":{"items":{"$ref":"#/components/schemas/BenchmarkFileOut"},"type":"array","title":"Benchmark Files"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","manufacturer_id","org_id","current_step","created_at","updated_at"],"title":"ManufacturerProfileOut"},"ManufacturerProfileResponse":{"properties":{"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"factory_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Factory Name"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"experience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Experience"},"team_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Size"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"services":{"items":{"type":"string"},"type":"array","title":"Services"},"fabrics":{"items":{"type":"string"},"type":"array","title":"Fabrics"},"required_components":{"items":{"type":"string"},"type":"array","title":"Required Components"},"file_formats":{"items":{"type":"string"},"type":"array","title":"File Formats"},"moq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Moq"},"lead_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lead Time"},"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"status":{"type":"string","enum":["under_review","verified","rejected"],"title":"Status"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"store_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Slug"},"nda_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nda Url"},"nda_enabled":{"type":"boolean","title":"Nda Enabled","default":false},"techpack_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Price Cents"},"techpack_price_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Price Usd Cents"},"techpack_price_gbp_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Price Gbp Cents"},"techpack_price_eur_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Price Eur Cents"},"reporting_currency":{"type":"string","title":"Reporting Currency","default":"usd"},"verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verified At"},"verified_by_admin_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Verified By Admin Id"},"rejected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Rejected At"},"rejected_by_admin_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Rejected By Admin Id"},"rejection_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rejection Reason"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","org_id","status","created_at","updated_at"],"title":"ManufacturerProfileResponse"},"ManufacturerProfileUpdate":{"properties":{"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"factory_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Factory Name"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"experience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Experience"},"team_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Size"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"services":{"items":{"type":"string"},"type":"array","title":"Services"},"fabrics":{"items":{"type":"string"},"type":"array","title":"Fabrics"},"required_components":{"items":{"type":"string"},"type":"array","title":"Required Components"},"file_formats":{"items":{"type":"string"},"type":"array","title":"File Formats"},"moq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Moq"},"lead_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lead Time"},"logo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Logo Url"},"store_slug":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Store Slug"},"nda_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Nda Url"},"nda_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Nda Enabled"},"techpack_price_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Techpack Price Cents"},"techpack_price_usd_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Techpack Price Usd Cents"},"techpack_price_gbp_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Techpack Price Gbp Cents"},"techpack_price_eur_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Techpack Price Eur Cents"},"reporting_currency":{"anyOf":[{"type":"string","enum":["usd","gbp","eur"]},{"type":"null"}],"title":"Reporting Currency"}},"type":"object","title":"ManufacturerProfileUpdate","description":"PATCH /manufacturer/me payload. ``store_slug`` /\n``techpack_price_cents`` are validated in\n``factory_settings_service`` (slug uniqueness + reserved words,\npricing floor) — Pydantic only enforces type and basic length.\nLogo / NDA URLs are typically set through the multipart endpoints,\nbut the keys are accepted here too for power-user / test paths."},"ManufacturerSizeGuideListResponse":{"properties":{"size_guides":{"items":{"$ref":"#/components/schemas/ManufacturerSizeGuideResponse"},"type":"array","title":"Size Guides"}},"type":"object","required":["size_guides"],"title":"ManufacturerSizeGuideListResponse"},"ManufacturerSizeGuideResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"name_i18n":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Name I18N"},"file_url":{"type":"string","title":"File Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"cover_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cover Image Url"},"measurement_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measurement Unit"},"extraction_status":{"type":"string","title":"Extraction Status","default":"ready"},"extraction_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extraction Error"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","file_url","created_at"],"title":"ManufacturerSizeGuideResponse"},"ManufacturerSizeGuideUpdateRequest":{"properties":{"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"}},"type":"object","title":"ManufacturerSizeGuideUpdateRequest","description":"Move a guide into a folder (or clear folder with null)."},"ManufacturerTechpackPricingResponse":{"properties":{"manufacturer_id":{"type":"string","format":"uuid","title":"Manufacturer Id"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"factory_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Factory Name"},"techpack_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Price Cents"},"platform_fee_cents":{"type":"integer","title":"Platform Fee Cents"},"manufacturer_net_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Manufacturer Net Cents"},"currency":{"type":"string","title":"Currency","default":"usd"},"checkout_available":{"type":"boolean","title":"Checkout Available"},"unavailable_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unavailable Reason"}},"type":"object","required":["manufacturer_id","platform_fee_cents","checkout_available"],"title":"ManufacturerTechpackPricingResponse"},"ManufacturerWalletPaymentItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"source":{"type":"string","title":"Source","default":"credit_lot"},"invoice_number":{"type":"string","title":"Invoice Number"},"brand_name":{"type":"string","title":"Brand Name"},"payment_type":{"type":"string","title":"Payment Type"},"status":{"type":"string","title":"Status"},"amount_cents":{"type":"integer","title":"Amount Cents"},"gross_cents":{"type":"integer","title":"Gross Cents"},"platform_fee_cents":{"type":"integer","title":"Platform Fee Cents"},"quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity"},"quantity_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity Remaining"},"payment_status":{"type":"string","title":"Payment Status"},"payout_status":{"type":"string","title":"Payout Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid At"},"payout_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Payout At"},"refunded_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Refunded At"}},"type":"object","required":["id","invoice_number","brand_name","payment_type","status","amount_cents","gross_cents","platform_fee_cents","payment_status","payout_status","created_at"],"title":"ManufacturerWalletPaymentItem"},"ManufacturerWalletResponse":{"properties":{"available_cents":{"type":"integer","title":"Available Cents"},"total_cents":{"type":"integer","title":"Total Cents"},"paid_out_cents":{"type":"integer","title":"Paid Out Cents"},"gross_cents":{"type":"integer","title":"Gross Cents","default":0},"platform_fee_cents":{"type":"integer","title":"Platform Fee Cents","default":0},"manufacturer_net_cents":{"type":"integer","title":"Manufacturer Net Cents","default":0},"period":{"type":"string","title":"Period","default":"all"},"period_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period From"},"period_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period To"},"currency":{"type":"string","title":"Currency","default":"usd"},"has_payout_account":{"type":"boolean","title":"Has Payout Account"},"payout_account":{"anyOf":[{"$ref":"#/components/schemas/ManufacturerPayoutAccountResponse"},{"type":"null"}]},"payments":{"items":{"$ref":"#/components/schemas/ManufacturerWalletPaymentItem"},"type":"array","title":"Payments"},"payments_total":{"type":"integer","title":"Payments Total","default":0}},"type":"object","required":["available_cents","total_cents","paid_out_cents","has_payout_account"],"title":"ManufacturerWalletResponse"},"MappingConflictItem":{"properties":{"field_name":{"type":"string","title":"Field Name"},"conflicting_questions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Conflicting Questions"},"conflict_count":{"type":"integer","title":"Conflict Count"}},"type":"object","required":["field_name","conflicting_questions","conflict_count"],"title":"MappingConflictItem"},"MappingConflictResponse":{"properties":{"has_conflicts":{"type":"boolean","title":"Has Conflicts"},"conflicts":{"items":{"$ref":"#/components/schemas/MappingConflictItem"},"type":"array","title":"Conflicts"}},"type":"object","required":["has_conflicts","conflicts"],"title":"MappingConflictResponse"},"MarkAllReadResponse":{"properties":{"count":{"type":"integer","title":"Count"}},"type":"object","required":["count"],"title":"MarkAllReadResponse"},"MemberAccessProfile":{"properties":{"techpacks":{"$ref":"#/components/schemas/TechpackAccessLevel","default":"comment"},"wallet":{"$ref":"#/components/schemas/SecondaryAccessLevel","default":"none"},"org_settings":{"$ref":"#/components/schemas/SecondaryAccessLevel","default":"none"},"crm":{"$ref":"#/components/schemas/SecondaryAccessLevel","default":"none"},"profile_settings":{"$ref":"#/components/schemas/SecondaryAccessLevel","default":"manage"}},"type":"object","title":"MemberAccessProfile","description":"What the owner picks when inviting or editing a team member."},"MemberWithRoleRow":{"properties":{"member_id":{"type":"string","format":"uuid","title":"Member Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"user_first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User First Name"},"user_last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Last Name"},"org_role":{"type":"string","title":"Org Role"},"custom_role":{"anyOf":[{"$ref":"#/components/schemas/CustomRoleSummary"},{"type":"null"}]}},"type":"object","required":["member_id","user_id","org_role"],"title":"MemberWithRoleRow","description":"One row on the figma \"Role\" assignments page."},"MembersAdd":{"properties":{"member_ids":{"items":{"type":"string","format":"uuid"},"type":"array","minItems":1,"title":"Member Ids"}},"type":"object","required":["member_ids"],"title":"MembersAdd"},"MessageAttachment":{"properties":{"url":{"type":"string","title":"Url"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"mime":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size"}},"type":"object","required":["url"],"title":"MessageAttachment"},"MessageCreate":{"properties":{"body":{"type":"string","title":"Body","default":""},"reply_to_message_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Reply To Message Id"},"mentioned_user_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Mentioned User Ids"},"attachments":{"anyOf":[{"items":{"$ref":"#/components/schemas/MessageAttachment"},"type":"array"},{"type":"null"}],"title":"Attachments"}},"type":"object","title":"MessageCreate"},"MessageListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MessageOut"},"type":"array","title":"Items"},"has_more":{"type":"boolean","title":"Has More","default":false}},"type":"object","title":"MessageListResponse"},"MessageOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"sender":{"anyOf":[{"$ref":"#/components/schemas/MessagingUserSummary"},{"type":"null"}]},"body":{"type":"string","title":"Body"},"reply_to":{"anyOf":[{"$ref":"#/components/schemas/MessageReplyPreview"},{"type":"null"}]},"mentioned_user_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Mentioned User Ids"},"attachments":{"items":{"$ref":"#/components/schemas/MessageAttachment"},"type":"array","title":"Attachments"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"edited_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Edited At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"}},"type":"object","required":["id","conversation_id","body","created_at"],"title":"MessageOut"},"MessageReplyPreview":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"sender":{"anyOf":[{"$ref":"#/components/schemas/MessagingUserSummary"},{"type":"null"}]},"body":{"type":"string","title":"Body"}},"type":"object","required":["id","body"],"title":"MessageReplyPreview"},"MessageUpdate":{"properties":{"body":{"type":"string","minLength":1,"title":"Body"},"mentioned_user_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Mentioned User Ids"}},"type":"object","required":["body"],"title":"MessageUpdate"},"MessagingUserSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"}},"type":"object","required":["id"],"title":"MessagingUserSummary"},"NdaResponse":{"properties":{"url":{"type":"string","title":"Url"},"is_default":{"type":"boolean","title":"Is Default"}},"type":"object","required":["url","is_default"],"title":"NdaResponse"},"NewsletterSubscribeCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"consent":{"type":"boolean","title":"Consent"},"source":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Source"}},"type":"object","required":["email","consent"],"title":"NewsletterSubscribeCreate"},"NewsletterSubscribeResponse":{"properties":{"subscribed":{"type":"boolean","title":"Subscribed","default":true}},"type":"object","title":"NewsletterSubscribeResponse"},"NotificationItem":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"userImage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userimage"},"read":{"type":"boolean","title":"Read"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["id","type","title","description","read","timestamp"],"title":"NotificationItem"},"NotionAuthorizeResponse":{"properties":{"authorize_url":{"type":"string","title":"Authorize Url"}},"type":"object","required":["authorize_url"],"title":"NotionAuthorizeResponse"},"NotionDataSourceOption":{"properties":{"database_id":{"type":"string","title":"Database Id"},"database_title":{"type":"string","title":"Database Title"},"data_source_id":{"type":"string","title":"Data Source Id"},"data_source_name":{"type":"string","title":"Data Source Name"}},"type":"object","required":["database_id","database_title","data_source_id","data_source_name"],"title":"NotionDataSourceOption"},"NotionPageOption":{"properties":{"page_id":{"type":"string","title":"Page Id"},"title":{"type":"string","title":"Title"}},"type":"object","required":["page_id","title"],"title":"NotionPageOption"},"NotionStatusResponse":{"properties":{"connected":{"type":"boolean","title":"Connected"},"workspace_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Name"},"workspace_icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Icon"},"data_source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Source Id"},"data_source_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Source Name"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["connected"],"title":"NotionStatusResponse"},"NudgeItem":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","title":"Kind"},"text":{"type":"string","title":"Text"},"cta":{"type":"string","title":"Cta"},"job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"},"dismissed":{"type":"boolean","title":"Dismissed","default":false}},"type":"object","required":["id","kind","text","cta"],"title":"NudgeItem"},"OnboardingOptionsOut":{"properties":{"account_types":{"items":{"$ref":"#/components/schemas/EnumOption"},"type":"array","title":"Account Types"},"factory_types":{"items":{"$ref":"#/components/schemas/EnumOption"},"type":"array","title":"Factory Types"},"apparel_categories":{"items":{"$ref":"#/components/schemas/EnumOption"},"type":"array","title":"Apparel Categories"},"fabric_groups":{"items":{"$ref":"#/components/schemas/FabricGroupOptions"},"type":"array","title":"Fabric Groups"},"techpack_component_groups":{"items":{"$ref":"#/components/schemas/TechPackComponentGroupOptions"},"type":"array","title":"Techpack Component Groups"},"team_sizes":{"items":{"$ref":"#/components/schemas/EnumOption"},"type":"array","title":"Team Sizes"},"years_of_experience":{"items":{"$ref":"#/components/schemas/EnumOption"},"type":"array","title":"Years Of Experience"},"benchmark_labels":{"items":{"$ref":"#/components/schemas/EnumOption"},"type":"array","title":"Benchmark Labels"},"onboarding_steps":{"items":{"$ref":"#/components/schemas/EnumOption"},"type":"array","title":"Onboarding Steps"}},"type":"object","required":["account_types","factory_types","apparel_categories","fabric_groups","techpack_component_groups","team_sizes","years_of_experience","benchmark_labels","onboarding_steps"],"title":"OnboardingOptionsOut"},"OnboardingStep":{"type":"string","enum":["setup","company_profile","factory_profile","production_specialty","techpack_blueprint","benchmark_files"],"title":"OnboardingStep"},"OrgDownloadUsage":{"properties":{"org_id":{"type":"string","title":"Org Id"},"org_name":{"type":"string","title":"Org Name"},"subscription_status":{"type":"string","title":"Subscription Status"},"free_downloads_used":{"type":"integer","title":"Free Downloads Used"},"free_downloads_remaining":{"type":"integer","title":"Free Downloads Remaining"},"window_start_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Window Start At"}},"type":"object","required":["org_id","org_name","subscription_status","free_downloads_used","free_downloads_remaining"],"title":"OrgDownloadUsage"},"OrganizationDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"owner_id":{"type":"string","format":"uuid","title":"Owner Id"},"subscription_status":{"type":"string","title":"Subscription Status"},"trial_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Start"},"trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"member_count":{"type":"integer","title":"Member Count","default":0},"current_user_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current User Role"}},"type":"object","required":["id","name","owner_id","subscription_status","created_at"],"title":"OrganizationDetail","description":"Organization with member count and current user's role."},"OrganizationMemberDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"role":{"type":"string","title":"Role"},"invited_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Invited At"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"},"status":{"type":"string","title":"Status"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"user_first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User First Name"},"user_last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Last Name"},"access_profile":{"anyOf":[{"$ref":"#/components/schemas/MemberAccessProfile"},{"type":"null"}]},"is_owner":{"type":"boolean","title":"Is Owner","default":false}},"type":"object","required":["id","org_id","user_id","role","status"],"title":"OrganizationMemberDetail","description":"Member with user info and resolved access profile."},"PageContext":{"properties":{"route":{"type":"string","title":"Route"},"page_type":{"type":"string","enum":["dashboard","techpacks","techpack_detail","manufacturer","size_guides","wallet","profile","unknown"],"title":"Page Type","default":"unknown"},"tech_pack_job_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tech Pack Job Id"},"tech_pack_section":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tech Pack Section"},"trigger":{"anyOf":[{"type":"string","enum":["manual","job_error","repeated_validation","operation_timeout"]},{"type":"null"}],"title":"Trigger"},"attachments":{"items":{"type":"string"},"type":"array","title":"Attachments","default":[]},"nudge_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nudge Id"},"automation_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Automation Error"}},"type":"object","required":["route"],"title":"PageContext"},"PageViewRequest":{"properties":{"path":{"type":"string","title":"Path"},"referrer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referrer"}},"type":"object","required":["path"],"title":"PageViewRequest"},"PaintBody":{"properties":{"zoneId":{"type":"integer","title":"Zoneid"},"radius":{"type":"integer","maximum":300.0,"minimum":1.0,"title":"Radius"},"strokes":{"items":{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},"type":"array","maxItems":200,"minItems":1,"title":"Strokes"},"erase":{"type":"boolean","title":"Erase","default":false}},"type":"object","required":["zoneId","radius","strokes"],"title":"PaintBody"},"ParticipantOut":{"properties":{"user":{"$ref":"#/components/schemas/MessagingUserSummary"},"role":{"type":"string","title":"Role"},"account_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Type"},"joined_at":{"type":"string","format":"date-time","title":"Joined At"},"left_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Left At"},"online":{"type":"boolean","title":"Online","default":false}},"type":"object","required":["user","role","joined_at"],"title":"ParticipantOut"},"PaymentPlanResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"price_gbp":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Price Gbp"},"price_usd":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Price Usd"},"price_eur":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Price Eur"},"standard_price_gbp":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Standard Price Gbp"},"standard_price_usd":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Standard Price Usd"},"standard_price_eur":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Standard Price Eur"},"currency":{"type":"string","title":"Currency"},"billing_period":{"type":"string","title":"Billing Period"},"features":{"items":{"type":"string"},"type":"array","title":"Features"},"tech_pack_quota":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tech Pack Quota"},"additional_tech_pack_price":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Additional Tech Pack Price"},"image_credits_per_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Image Credits Per Month"},"quota_limits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Quota Limits"},"is_active":{"type":"boolean","title":"Is Active"},"is_public":{"type":"boolean","title":"Is Public"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"feature_flags":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Feature Flags"},"is_recommended":{"type":"boolean","title":"Is Recommended","default":false},"savings_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Savings Percent"},"trial_duration_days":{"type":"integer","title":"Trial Duration Days","default":0},"seats_max":{"type":"integer","title":"Seats Max","default":1}},"type":"object","required":["id","name","slug","description","price_gbp","currency","billing_period","features","tech_pack_quota","additional_tech_pack_price","image_credits_per_month","is_active","is_public","created_at"],"title":"PaymentPlanResponse","description":"Response schema for payment plan details"},"PaywallSeenRequest":{"properties":{"wall":{"type":"string","enum":["download","next_pack"],"title":"Wall"}},"type":"object","required":["wall"],"title":"PaywallSeenRequest"},"PendingTechPackInvitationAcceptResponse":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"redirect_path":{"type":"string","title":"Redirect Path"}},"type":"object","required":["job_id","redirect_path"],"title":"PendingTechPackInvitationAcceptResponse"},"PendingTechPackInvitationDeclineResponse":{"properties":{"success":{"type":"boolean","title":"Success"}},"type":"object","required":["success"],"title":"PendingTechPackInvitationDeclineResponse"},"PendingTechPackInvitationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tech_pack_job_id":{"type":"string","format":"uuid","title":"Tech Pack Job Id"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"permission":{"type":"string","title":"Permission"},"invited_by_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invited By Email"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","tech_pack_job_id","permission","expires_at","created_at"],"title":"PendingTechPackInvitationResponse"},"PermissionMap":{"properties":{"techpacks":{"$ref":"#/components/schemas/CategoryPerms"},"crm":{"$ref":"#/components/schemas/CategoryPerms"},"wallet":{"$ref":"#/components/schemas/CategoryPerms"},"roles":{"$ref":"#/components/schemas/CategoryPerms"},"org_settings":{"$ref":"#/components/schemas/CategoryPerms"},"profile_settings":{"$ref":"#/components/schemas/CategoryPerms"}},"additionalProperties":false,"type":"object","title":"PermissionMap","description":"The closed JSON permissions object stored on each Role."},"PhaseStructure":{"properties":{"name":{"type":"string","title":"Name"},"order":{"type":"integer","title":"Order"},"question_count":{"type":"integer","title":"Question Count"},"question_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Question Ids"},"answered_questions":{"type":"integer","title":"Answered Questions","default":0},"is_complete":{"type":"boolean","title":"Is Complete","default":false},"is_current":{"type":"boolean","title":"Is Current","default":false},"questions":{"items":{"$ref":"#/components/schemas/QuestionStructure"},"type":"array","title":"Questions","default":[]}},"type":"object","required":["name","order","question_count","question_ids"],"title":"PhaseStructure"},"PlatformTechpackPricingResponse":{"properties":{"usd_cents":{"type":"integer","title":"Usd Cents"},"gbp_cents":{"type":"integer","title":"Gbp Cents"},"eur_cents":{"type":"integer","title":"Eur Cents"}},"type":"object","required":["usd_cents","gbp_cents","eur_cents"],"title":"PlatformTechpackPricingResponse"},"PlatformTechpackPricingUpdate":{"properties":{"usd_cents":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Usd Cents"},"gbp_cents":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Gbp Cents"},"eur_cents":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Eur Cents"}},"type":"object","title":"PlatformTechpackPricingUpdate"},"PomMeasurement":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"label":{"type":"string","title":"Label"},"label_i18n":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Label I18N"},"anchor_start":{"$ref":"#/components/schemas/AnchorXY"},"anchor_end":{"$ref":"#/components/schemas/AnchorXY"},"label_box_xy":{"anyOf":[{"$ref":"#/components/schemas/AnchorXY"},{"type":"null"}]},"source":{"type":"string","enum":["inferred","user"],"title":"Source","default":"user"}},"type":"object","required":["id","name","label","anchor_start","anchor_end"],"title":"PomMeasurement"},"PomScene":{"properties":{"version":{"type":"string","title":"Version","default":"1.0"},"view":{"type":"string","enum":["front","back","extra"],"title":"View"},"image_url":{"type":"string","title":"Image Url"},"image_width":{"type":"integer","exclusiveMinimum":0.0,"title":"Image Width"},"image_height":{"type":"integer","exclusiveMinimum":0.0,"title":"Image Height"},"measurements":{"items":{"$ref":"#/components/schemas/PomMeasurement"},"type":"array","title":"Measurements"},"metadata":{"anyOf":[{"$ref":"#/components/schemas/SceneMetadata"},{"type":"null"}]}},"type":"object","required":["view","image_url","image_width","image_height","measurements"],"title":"PomScene"},"PomScenePatchRequest":{"properties":{"view":{"type":"string","pattern":"^(front|back|extra)$","title":"View"},"scene":{"$ref":"#/components/schemas/PomScene"},"extra_view_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extra View Id"},"deleted_measurement_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Deleted Measurement Ids"}},"type":"object","required":["view","scene"],"title":"PomScenePatchRequest"},"PortalRequest":{"properties":{"return_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return Url"}},"type":"object","title":"PortalRequest"},"PortalResponse":{"properties":{"portal_url":{"type":"string","title":"Portal Url"}},"type":"object","required":["portal_url"],"title":"PortalResponse"},"PricingColumnMap":{"properties":{"category":{"type":"string","title":"Category"},"process_columns":{"items":{"type":"string"},"type":"array","title":"Process Columns","default":[]},"output_columns":{"items":{"type":"string"},"type":"array","title":"Output Columns"},"output_roles":{"anyOf":[{"additionalProperties":{"type":"string","enum":["price","informational"]},"type":"object"},{"type":"null"}],"title":"Output Roles"},"total_preference":{"anyOf":[{"$ref":"#/components/schemas/TotalPreference"},{"type":"null"}]}},"type":"object","required":["category","output_columns"],"title":"PricingColumnMap"},"PricingConfigRequest":{"properties":{"pricing_data_source_id":{"type":"string","title":"Pricing Data Source Id"},"pricing_data_source_name":{"type":"string","title":"Pricing Data Source Name"},"column_map":{"$ref":"#/components/schemas/PricingColumnMap"},"enabled":{"type":"boolean","title":"Enabled","default":true}},"type":"object","required":["pricing_data_source_id","pricing_data_source_name","column_map"],"title":"PricingConfigRequest"},"PricingConfigResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"pricing_data_source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Data Source Id"},"pricing_data_source_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Data Source Name"},"column_map":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Column Map"},"configured":{"type":"boolean","title":"Configured","default":false}},"type":"object","required":["enabled"],"title":"PricingConfigResponse"},"PricingPropertyOption":{"properties":{"name":{"type":"string","title":"Name"},"key":{"type":"string","title":"Key"},"type":{"type":"string","title":"Type"}},"type":"object","required":["name","key","type"],"title":"PricingPropertyOption"},"ProductType":{"type":"string","enum":["jewelry","clothes"],"title":"ProductType"},"ProductionSpecialtyIn":{"properties":{"apparel_categories":{"anyOf":[{"items":{"$ref":"#/components/schemas/ApparelCategory"},"type":"array"},{"type":"null"}],"title":"Apparel Categories"},"fabrics_worked_with":{"anyOf":[{"items":{"$ref":"#/components/schemas/Fabric"},"type":"array"},{"type":"null"}],"title":"Fabrics Worked With"},"fabrics_never_worked_with":{"anyOf":[{"items":{"$ref":"#/components/schemas/Fabric"},"type":"array"},{"type":"null"}],"title":"Fabrics Never Worked With"}},"type":"object","title":"ProductionSpecialtyIn"},"PublicTechPackAnonymousCommentCreate":{"properties":{"guest_name":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Guest Name"},"page":{"type":"string","maxLength":50,"title":"Page","default":""},"body":{"type":"string","minLength":1,"title":"Body"},"x_percent":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"X Percent"},"y_percent":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Y Percent"},"asset_key":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Asset Key"},"parent_comment_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Comment Id","description":"Reply to this thread root comment (replies are not pinned)."},"locale":{"type":"string","maxLength":10,"title":"Locale","description":"Locale the author was writing in (defaults to 'en' for older frontend builds).","default":"en"}},"type":"object","required":["body"],"title":"PublicTechPackAnonymousCommentCreate"},"PublicTechPackShareClaimResponse":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"share_code":{"type":"string","title":"Share Code"},"share_mode":{"type":"string","title":"Share Mode"},"redirect_path":{"type":"string","title":"Redirect Path"}},"type":"object","required":["job_id","share_code","share_mode","redirect_path"],"title":"PublicTechPackShareClaimResponse"},"PublicTechPackShareInviteAcceptResponse":{"properties":{"token":{"type":"string","title":"Token"},"token_expires_at":{"type":"string","format":"date-time","title":"Token Expires At"},"share_code":{"type":"string","title":"Share Code"},"permission":{"type":"string","title":"Permission"}},"type":"object","required":["token","token_expires_at","share_code","permission"],"title":"PublicTechPackShareInviteAcceptResponse"},"PublicTechPackShareInviteDetailResponse":{"properties":{"email":{"type":"string","title":"Email"},"permission":{"type":"string","title":"Permission"},"share_code":{"type":"string","title":"Share Code"},"share_mode":{"type":"string","title":"Share Mode","default":"private"},"required_account_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Required Account Type"},"expired":{"type":"boolean","title":"Expired"},"accepted":{"type":"boolean","title":"Accepted"}},"type":"object","required":["email","permission","share_code","expired","accepted"],"title":"PublicTechPackShareInviteDetailResponse"},"PublicTechPackUnlockRequest":{"properties":{"password":{"type":"string","maxLength":128,"minLength":1,"title":"Password"}},"type":"object","required":["password"],"title":"PublicTechPackUnlockRequest"},"PublicTechPackUnlockResponse":{"properties":{"token":{"type":"string","title":"Token"},"token_expires_at":{"type":"string","format":"date-time","title":"Token Expires At"}},"type":"object","required":["token","token_expires_at"],"title":"PublicTechPackUnlockResponse"},"PublicTechPackViewResponse":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"share_code":{"type":"string","title":"Share Code"},"share_mode":{"type":"string","title":"Share Mode","default":"off"},"allows_anonymous_comments":{"type":"boolean","title":"Allows Anonymous Comments","default":false},"can_comment":{"type":"boolean","title":"Can Comment","default":false},"can_read_comments":{"type":"boolean","title":"Can Read Comments","default":true},"needs_claim":{"type":"boolean","title":"Needs Claim","default":false},"status":{"$ref":"#/components/schemas/JobStatus"},"progress":{"type":"integer","title":"Progress"},"front_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 3D Url"},"back_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 3D Url"},"left_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Left 3D Url"},"right_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Right 3D Url"},"front_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 2D Url"},"back_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 2D Url"},"left_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Left 2D Url"},"right_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Right 2D Url"},"inner_front_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inner Front 2D Url"},"inner_back_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inner Back 2D Url"},"pom_overlay_outer_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pom Overlay Outer Front Url"},"pom_overlay_outer_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pom Overlay Outer Back Url"},"pom_overlay_inner_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pom Overlay Inner Front Url"},"pom_overlay_inner_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pom Overlay Inner Back Url"},"bom_callout_giq_outer_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Giq Outer Front Url"},"bom_callout_giq_outer_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Giq Outer Back Url"},"bom_callout_giq_inner_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Giq Inner Front Url"},"bom_callout_giq_inner_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Giq Inner Back Url"},"bom_callout_nogiq_outer_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Nogiq Outer Front Url"},"bom_callout_nogiq_outer_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Nogiq Outer Back Url"},"bom_callout_nogiq_inner_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Nogiq Inner Front Url"},"bom_callout_nogiq_inner_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Nogiq Inner Back Url"},"visual_studio":{"additionalProperties":true,"type":"object","title":"Visual Studio"},"merged":{"additionalProperties":true,"type":"object","title":"Merged"},"construction_details":{"type":"string","title":"Construction Details","default":""},"bom_table_rows":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Bom Table Rows"},"pom_table_measurements":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Pom Table Measurements"},"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":["job_id","share_code","status","progress","created_at"],"title":"PublicTechPackViewResponse","description":"Read-only, anonymous-safe snapshot for shared in-app tech pack viewing."},"PurchaseTechPackRequest":{"properties":{"success_url":{"type":"string","title":"Success Url"},"cancel_url":{"type":"string","title":"Cancel Url"},"selected_services":{"items":{"type":"string"},"type":"array","title":"Selected Services"},"payg_addons":{"items":{"type":"string"},"type":"array","title":"Payg Addons","description":"Optional PAYG add-ons for Stripe checkout: colourway, edits, factory_collab"}},"type":"object","required":["success_url","cancel_url"],"title":"PurchaseTechPackRequest","description":"Request to purchase a one-time tech pack (legacy / alternate routers)."},"PurchaseTechPackResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["checkout_url","session_id"],"title":"PurchaseTechPackResponse","description":"Response after creating checkout session for one-time tech pack"},"QuestionFieldMappingCreate":{"properties":{"question_id":{"type":"string","format":"uuid","title":"Question Id"},"field_name":{"type":"string","title":"Field Name"},"priority":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Priority","default":1},"is_active":{"type":"boolean","title":"Is Active","default":true},"value_transform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Transform","description":"Optional transform: 'uppercase', 'trim', 'extract_number'"}},"type":"object","required":["question_id","field_name"],"title":"QuestionFieldMappingCreate"},"QuestionFieldMappingSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"question_id":{"type":"string","format":"uuid","title":"Question Id"},"field_name":{"type":"string","title":"Field Name"},"priority":{"type":"integer","title":"Priority","default":1},"is_active":{"type":"boolean","title":"Is Active","default":true},"value_transform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Transform"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["id","question_id","field_name","created_at","updated_at"],"title":"QuestionFieldMappingSchema"},"QuestionFieldMappingUpdate":{"properties":{"priority":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Priority"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"value_transform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Transform"}},"type":"object","title":"QuestionFieldMappingUpdate"},"QuestionOption":{"properties":{"label":{"type":"string","title":"Label"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["label"],"title":"QuestionOption"},"QuestionReorderItem":{"properties":{"question_id":{"type":"string","format":"uuid","title":"Question Id"},"new_order":{"type":"integer","title":"New Order"}},"type":"object","required":["question_id","new_order"],"title":"QuestionReorderItem"},"QuestionReorderRequest":{"properties":{"reorders":{"items":{"$ref":"#/components/schemas/QuestionReorderItem"},"type":"array","title":"Reorders"},"product_type":{"$ref":"#/components/schemas/ProductType"},"phase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phase","description":"Optional phase filter. If provided, only questions in this phase are normalized."}},"type":"object","required":["reorders","product_type"],"title":"QuestionReorderRequest"},"QuestionResponseWithTemplate":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"session_id":{"type":"string","format":"uuid","title":"Session Id"},"question_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Question Id"},"answer":{"title":"Answer"},"file_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"File Urls"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"question":{"anyOf":[{"$ref":"#/components/schemas/QuestionTemplateSchema"},{"type":"null"}]}},"type":"object","required":["id","session_id","answer","created_at","updated_at"],"title":"QuestionResponseWithTemplate"},"QuestionStructure":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"text":{"type":"string","title":"Text"},"input_type":{"type":"string","title":"Input Type"},"order":{"type":"integer","title":"Order"}},"type":"object","required":["id","text","input_type","order"],"title":"QuestionStructure"},"QuestionTemplateCreate":{"properties":{"product_type":{"$ref":"#/components/schemas/ProductType","example":"clothes"},"phase":{"type":"string","title":"Phase"},"question_text":{"type":"string","title":"Question Text","example":"What size do you need?"},"input_type":{"$ref":"#/components/schemas/InputType","example":"text"},"options":{"anyOf":[{"items":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/QuestionOption"}]},"type":"array"},{"type":"null"}],"title":"Options"},"validation_rules":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Validation Rules"},"order":{"type":"integer","title":"Order"},"depends_on_question_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Depends On Question Id"},"depends_on_answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Depends On Answer"},"placeholder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Placeholder"},"help_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Help Text"},"help_display":{"type":"string","enum":["link","inline"],"title":"Help Display","default":"link"},"i18n":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"I18N"}},"type":"object","required":["product_type","phase","question_text","input_type","order"],"title":"QuestionTemplateCreate"},"QuestionTemplateDependentInfo":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"question_text":{"type":"string","title":"Question Text"},"order":{"type":"integer","title":"Order"}},"type":"object","required":["id","question_text","order"],"title":"QuestionTemplateDependentInfo"},"QuestionTemplateListResponse":{"properties":{"questions":{"items":{"$ref":"#/components/schemas/QuestionTemplateSchema"},"type":"array","title":"Questions"},"total":{"type":"integer","title":"Total"},"product_type_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Product Type Counts"},"page":{"type":"integer","title":"Page"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["questions","total","product_type_counts","page","limit"],"title":"QuestionTemplateListResponse"},"QuestionTemplateSchema":{"properties":{"product_type":{"$ref":"#/components/schemas/ProductType","example":"clothes"},"phase":{"type":"string","title":"Phase"},"question_text":{"type":"string","title":"Question Text","example":"What size do you need?"},"input_type":{"$ref":"#/components/schemas/InputType","example":"text"},"options":{"anyOf":[{"items":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/QuestionOption"}]},"type":"array"},{"type":"null"}],"title":"Options"},"validation_rules":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Validation Rules"},"order":{"type":"integer","title":"Order"},"depends_on_question_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Depends On Question Id"},"depends_on_answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Depends On Answer"},"placeholder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Placeholder"},"help_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Help Text"},"help_display":{"type":"string","enum":["link","inline"],"title":"Help Display","default":"link"},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["product_type","phase","question_text","input_type","order","id","created_at"],"title":"QuestionTemplateSchema"},"QuestionTemplateUpdate":{"properties":{"product_type":{"anyOf":[{"$ref":"#/components/schemas/ProductType"},{"type":"null"}]},"phase":{"type":"string","title":"Phase"},"question_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Text"},"input_type":{"anyOf":[{"$ref":"#/components/schemas/InputType"},{"type":"null"}]},"options":{"anyOf":[{"items":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/QuestionOption"}]},"type":"array"},{"type":"null"}],"title":"Options"},"validation_rules":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Validation Rules"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"depends_on_question_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Depends On Question Id"},"depends_on_answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Depends On Answer"},"placeholder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Placeholder"},"help_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Help Text"},"help_display":{"anyOf":[{"type":"string","enum":["link","inline"]},{"type":"null"}],"title":"Help Display"}},"type":"object","required":["phase"],"title":"QuestionTemplateUpdate"},"QuestionTemplateWithDependents":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"product_type":{"$ref":"#/components/schemas/ProductType"},"phase":{"type":"string","title":"Phase"},"question_text":{"type":"string","title":"Question Text"},"input_type":{"$ref":"#/components/schemas/InputType"},"options":{"anyOf":[{"items":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/QuestionOption"}]},"type":"array"},{"type":"null"}],"title":"Options"},"validation_rules":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Validation Rules"},"order":{"type":"integer","title":"Order"},"depends_on_question_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Depends On Question Id"},"depends_on_answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Depends On Answer"},"placeholder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Placeholder"},"help_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Help Text"},"help_display":{"type":"string","enum":["link","inline"],"title":"Help Display","default":"link"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"dependent_questions":{"items":{"$ref":"#/components/schemas/QuestionTemplateDependentInfo"},"type":"array","title":"Dependent Questions","default":[]}},"type":"object","required":["id","product_type","phase","question_text","input_type","order","created_at"],"title":"QuestionTemplateWithDependents"},"QuestionUsageStats":{"properties":{"question_id":{"type":"string","format":"uuid","title":"Question Id"},"total_sessions":{"type":"integer","title":"Total Sessions"},"completed_sessions":{"type":"integer","title":"Completed Sessions"},"in_progress_sessions":{"type":"integer","title":"In Progress Sessions"},"total_responses":{"type":"integer","title":"Total Responses"},"can_delete":{"type":"boolean","title":"Can Delete"},"dependent_question_count":{"type":"integer","title":"Dependent Question Count"}},"type":"object","required":["question_id","total_sessions","completed_sessions","in_progress_sessions","total_responses","can_delete","dependent_question_count"],"title":"QuestionUsageStats"},"QuestionnaireSession":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"product_type":{"$ref":"#/components/schemas/ProductType"},"current_question_index":{"type":"integer","title":"Current Question Index"},"completed":{"type":"boolean","title":"Completed"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","user_id","product_type","current_question_index","completed","created_at","updated_at"],"title":"QuestionnaireSession"},"QuestionnaireStructureResponse":{"properties":{"phases":{"items":{"$ref":"#/components/schemas/PhaseStructure"},"type":"array","title":"Phases"}},"type":"object","required":["phases"],"title":"QuestionnaireStructureResponse"},"ReadUpdate":{"properties":{"last_read_message_id":{"type":"string","format":"uuid","title":"Last Read Message Id"}},"type":"object","required":["last_read_message_id"],"title":"ReadUpdate"},"RedeemTokenRequest":{"properties":{"code":{"type":"string","maxLength":64,"minLength":4,"title":"Code"}},"type":"object","required":["code"],"title":"RedeemTokenRequest"},"RedeemTokenResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"credits_granted":{"type":"integer","title":"Credits Granted"},"new_balance":{"type":"integer","title":"New Balance"}},"type":"object","required":["success","credits_granted","new_balance"],"title":"RedeemTokenResponse"},"ReferralLinkCreateRequest":{"properties":{"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","title":"ReferralLinkCreateRequest"},"ReferralLinkResponse":{"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"signup_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signup Url"}},"type":"object","title":"ReferralLinkResponse","description":"Manufacturer's brand-signup referral token."},"ReferralPreviewResponse":{"properties":{"manufacturer_id":{"type":"string","format":"uuid","title":"Manufacturer Id"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"factory_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Factory Name"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"nda_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nda Url"},"nda_enabled":{"type":"boolean","title":"Nda Enabled","default":false},"techpack_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Techpack Price Cents"},"store_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Slug"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"invite_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invite Token"},"invite_type":{"anyOf":[{"type":"string","enum":["per_pack","bundle"]},{"type":"null"}],"title":"Invite Type"},"bundle_total_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bundle Total Cents"},"bundle_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bundle Quantity"},"invite_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invite Label"}},"type":"object","required":["manufacturer_id"],"title":"ReferralPreviewResponse","description":"Public preview of a referral / priced invite link."},"RefineBody":{"properties":{"zoneId":{"type":"integer","title":"Zoneid"},"points":{"items":{"$ref":"#/components/schemas/LabPoint"},"type":"array","maxItems":50,"minItems":1,"title":"Points"}},"type":"object","required":["zoneId","points"],"title":"RefineBody"},"Regenerate3dBody":{"properties":{"colorway_index":{"type":"integer","maximum":3.0,"minimum":0.0,"title":"Colorway Index"},"from_techpack":{"type":"boolean","title":"From Techpack","default":false},"match_2d":{"type":"boolean","title":"Match 2D","default":false}},"type":"object","required":["colorway_index"],"title":"Regenerate3dBody"},"ResendSignupOtpRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ResendSignupOtpRequest"},"RoleCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"permissions":{"$ref":"#/components/schemas/PermissionMap"},"is_enabled":{"type":"boolean","title":"Is Enabled","default":true}},"type":"object","required":["name"],"title":"RoleCreate"},"RoleListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RoleResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"RoleListResponse"},"RoleResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"permissions":{"$ref":"#/components/schemas/PermissionMap"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"member_count":{"type":"integer","title":"Member Count","default":0},"is_system_role":{"type":"boolean","title":"Is System Role","default":false},"member_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Member User Id"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","org_id","name","permissions","is_enabled","created_at","updated_at"],"title":"RoleResponse"},"RoleUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"permissions":{"anyOf":[{"$ref":"#/components/schemas/PermissionMap"},{"type":"null"}]},"is_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Enabled"}},"type":"object","title":"RoleUpdate","description":"Partial update. ``permissions``, if present, must be a complete map."},"SaveBrandSizeGuideFromJobRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"}},"type":"object","required":["name"],"title":"SaveBrandSizeGuideFromJobRequest"},"SceneMetadata":{"properties":{"garment_bounds":{"anyOf":[{"$ref":"#/components/schemas/GarmentBounds"},{"type":"null"}]},"baked_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Baked Labels"},"render_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Render Mode"},"line_scale":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.5},{"type":"null"}],"title":"Line Scale"}},"type":"object","title":"SceneMetadata"},"SeatsPreviewResponse":{"properties":{"seats":{"type":"integer","title":"Seats"},"extra_seats":{"type":"integer","title":"Extra Seats"},"currency":{"type":"string","title":"Currency"},"interval":{"type":"string","title":"Interval"},"price_per_seat":{"type":"integer","title":"Price Per Seat"},"amount_due_now":{"type":"integer","title":"Amount Due Now"},"renewal_amount":{"type":"integer","title":"Renewal Amount"},"price_per_seat_display":{"type":"string","title":"Price Per Seat Display"},"amount_due_now_display":{"type":"string","title":"Amount Due Now Display"},"renewal_amount_display":{"type":"string","title":"Renewal Amount Display"},"current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period End"}},"type":"object","required":["seats","extra_seats","currency","interval","price_per_seat","amount_due_now","renewal_amount","price_per_seat_display","amount_due_now_display","renewal_amount_display"],"title":"SeatsPreviewResponse"},"SeatsResponse":{"properties":{"seats":{"type":"integer","title":"Seats"},"seats_available":{"type":"integer","title":"Seats Available"},"seats_used":{"type":"integer","title":"Seats Used"},"max_seats":{"type":"integer","title":"Max Seats"},"current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period End"},"charged_now":{"type":"boolean","title":"Charged Now","default":false}},"type":"object","required":["seats","seats_available","seats_used","max_seats"],"title":"SeatsResponse"},"SecondaryAccessLevel":{"type":"string","enum":["none","view","manage"],"title":"SecondaryAccessLevel"},"SeedSessionFlatsRequest":{"properties":{"session_id":{"type":"string","format":"uuid","title":"Session Id"},"front_url":{"type":"string","minLength":1,"title":"Front Url"},"back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back Url"},"prompt":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Prompt"},"design_format":{"type":"string","maxLength":80,"title":"Design Format","default":"2D Sketch"},"item_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Item Name"}},"type":"object","required":["session_id","front_url"],"title":"SeedSessionFlatsRequest"},"SeedSessionFlatsResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"seeded_front":{"type":"boolean","title":"Seeded Front"},"seeded_back":{"type":"boolean","title":"Seeded Back"},"seeded_design_format":{"type":"boolean","title":"Seeded Design Format"},"seeded_description":{"type":"boolean","title":"Seeded Description","default":false},"seeded_item_name":{"type":"boolean","title":"Seeded Item Name","default":false}},"type":"object","required":["success","seeded_front","seeded_back","seeded_design_format"],"title":"SeedSessionFlatsResponse"},"SelectDataSourceRequest":{"properties":{"data_source_id":{"type":"string","title":"Data Source Id"},"data_source_name":{"type":"string","title":"Data Source Name"}},"type":"object","required":["data_source_id","data_source_name"],"title":"SelectDataSourceRequest"},"SelectRenderVersionRequest":{"properties":{"colorway_index":{"type":"integer","maximum":3.0,"minimum":0.0,"title":"Colorway Index","description":"Colourway slot index (0-3). 0 selects job-level (Colourway 1); 1+ selects platform_payload.colorways[i].","default":0},"front_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 3D Url"},"back_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 3D Url"},"front_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 2D Url"},"back_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 2D Url"}},"type":"object","title":"SelectRenderVersionRequest","description":"Select previously generated render version(s) as active."},"SetEnabledRequest":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"SetEnabledRequest"},"SetupIn":{"properties":{"account_type":{"$ref":"#/components/schemas/AccountType"}},"type":"object","required":["account_type"],"title":"SetupIn"},"SignupAccessGrantOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"value":{"type":"string","title":"Value"},"kind":{"type":"string","title":"Kind"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","value","kind","created_at"],"title":"SignupAccessGrantOut"},"SignupAccessListOut":{"properties":{"require_company_email":{"type":"boolean","title":"Require Company Email"},"grants":{"items":{"$ref":"#/components/schemas/SignupAccessGrantOut"},"type":"array","title":"Grants"}},"type":"object","required":["require_company_email","grants"],"title":"SignupAccessListOut"},"SingleDesignRequest":{"properties":{"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url"},"quantity":{"type":"integer","maximum":50000.0,"minimum":1.0,"title":"Quantity","description":"Number of PAYG tech packs to purchase","default":1},"payg_addons":{"items":{"type":"string"},"type":"array","title":"Payg Addons","description":"Optional PAYG add-ons (one-time), each must be one of: 'colourway', 'edits', 'factory_collab'"}},"type":"object","title":"SingleDesignRequest"},"SizeChartOptionListResponse":{"properties":{"options":{"items":{"$ref":"#/components/schemas/SizeChartOptionResponse"},"type":"array","title":"Options"}},"type":"object","required":["options"],"title":"SizeChartOptionListResponse"},"SizeChartOptionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"name_i18n":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Name I18N"},"image_url":{"type":"string","title":"Image Url"},"extraction_status":{"type":"string","title":"Extraction Status","default":"ready"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"},"group_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Name"}},"type":"object","required":["id","name","image_url"],"title":"SizeChartOptionResponse","description":"One selectable size chart shown to a brand in the picker."},"SizeGuideGroupBrandAssignRequest":{"properties":{"brand_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Brand Ids"}},"type":"object","title":"SizeGuideGroupBrandAssignRequest"},"SizeGuideGroupCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"}},"type":"object","required":["name"],"title":"SizeGuideGroupCreateRequest"},"SizeGuideGroupListResponse":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/SizeGuideGroupResponse"},"type":"array","title":"Groups"},"max_depth":{"type":"integer","title":"Max Depth"},"ungrouped_guide_count":{"type":"integer","title":"Ungrouped Guide Count","default":0}},"type":"object","required":["groups","max_depth"],"title":"SizeGuideGroupListResponse"},"SizeGuideGroupResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"depth":{"type":"integer","title":"Depth"},"guide_count":{"type":"integer","title":"Guide Count","default":0},"child_count":{"type":"integer","title":"Child Count","default":0},"assigned_brand_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Assigned Brand Ids"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","depth","created_at","updated_at"],"title":"SizeGuideGroupResponse"},"SizeGuideGroupUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"}},"type":"object","title":"SizeGuideGroupUpdateRequest"},"SizeStudioClarifyRequest":{"properties":{"answers":{"additionalProperties":{"type":"string"},"type":"object","minProperties":1,"title":"Answers"}},"type":"object","required":["answers"],"title":"SizeStudioClarifyRequest"},"StaffRoleListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MemberWithRoleRow"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"StaffRoleListResponse"},"StoreSlugAvailabilityResponse":{"properties":{"slug":{"type":"string","title":"Slug"},"available":{"type":"boolean","title":"Available"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["slug","available"],"title":"StoreSlugAvailabilityResponse"},"SubmitAnswerResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"next_question":{"anyOf":[{"$ref":"#/components/schemas/QuestionTemplateSchema"},{"type":"null"}]},"next_phase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Phase"},"is_complete":{"type":"boolean","title":"Is Complete"},"progress":{"additionalProperties":{"type":"integer"},"type":"object","title":"Progress"},"file_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"File Urls"},"conversation_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Title"}},"type":"object","required":["success","is_complete","progress"],"title":"SubmitAnswerResponse"},"SubmitJobFeedbackRequest":{"properties":{"phase":{"type":"string","enum":["generation","output"],"title":"Phase"},"went_well":{"type":"string","maxLength":4000,"title":"Went Well","default":""},"could_be_better":{"type":"string","maxLength":4000,"title":"Could Be Better","default":""}},"type":"object","required":["phase"],"title":"SubmitJobFeedbackRequest"},"SubmitQuestionnaireResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"job_id":{"type":"string","format":"uuid","title":"Job Id"}},"type":"object","required":["success","message","job_id"],"title":"SubmitQuestionnaireResponse"},"SubscriptionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"payment_plan_id":{"type":"string","format":"uuid","title":"Payment Plan Id"},"status":{"type":"string","title":"Status"},"current_period_start":{"type":"string","format":"date-time","title":"Current Period Start"},"current_period_end":{"type":"string","format":"date-time","title":"Current Period End"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End"},"cancelled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancelled At"},"tech_packs_used_this_period":{"type":"integer","title":"Tech Packs Used This Period"},"image_credits_used_this_period":{"type":"integer","title":"Image Credits Used This Period"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"payment_plan":{"anyOf":[{"$ref":"#/components/schemas/PaymentPlanResponse"},{"type":"null"}]},"is_trial_eligible":{"type":"boolean","title":"Is Trial Eligible","default":false},"next_invoice_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Next Invoice Amount"},"next_invoice_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Invoice Currency"},"seats_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seats Max"},"scheduled_plan_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Scheduled Plan Id"},"scheduled_plan_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled Plan Slug"},"scheduled_plan_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled Plan Name"},"scheduled_change_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled Change At"}},"type":"object","required":["id","user_id","payment_plan_id","status","current_period_start","current_period_end","cancel_at_period_end","cancelled_at","tech_packs_used_this_period","image_credits_used_this_period","stripe_subscription_id","created_at","payment_plan"],"title":"SubscriptionResponse","description":"Response schema for subscription details"},"SuccessResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"type":"string","title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","required":["message"],"title":"SuccessResponse"},"SyncResultResponse":{"properties":{"status":{"type":"string","title":"Status"},"page_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Id"}},"type":"object","required":["status"],"title":"SyncResultResponse"},"SyncStageInfo":{"properties":{"key":{"type":"string","title":"Key"},"status":{"type":"string","title":"Status"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["key","status"],"title":"SyncStageInfo"},"SyncStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"last_attempted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Attempted At"},"last_synced_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Synced At"},"page_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Id"},"pricing_result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pricing Result"},"pricing_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Error"},"stages":{"items":{"$ref":"#/components/schemas/SyncStageInfo"},"type":"array","title":"Stages","default":[]}},"type":"object","required":["status"],"title":"SyncStatusResponse"},"TeamSize":{"type":"string","enum":["1-10","11-50","51-200","201-500","500+"],"title":"TeamSize"},"TechPackAccessResponse":{"properties":{"can_generate":{"type":"boolean","title":"Can Generate"},"reason":{"type":"string","title":"Reason"},"access_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Type"},"quota_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quota Remaining"},"payment_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Payment Id"}},"type":"object","required":["can_generate","reason","access_type","quota_remaining","payment_id"],"title":"TechPackAccessResponse","description":"Response for tech pack generation access check"},"TechPackAttributionResponse":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"brand_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"},"manufacturer_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Manufacturer Ids"},"brand":{"anyOf":[{"$ref":"#/components/schemas/TechPackBrandSummary"},{"type":"null"}]},"manufacturers":{"items":{"$ref":"#/components/schemas/TechPackManufacturerSummary"},"type":"array","title":"Manufacturers"}},"type":"object","required":["job_id"],"title":"TechPackAttributionResponse","description":"Returned by the brand/manufacturer link/unlink endpoints."},"TechPackBrandSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Manufacturer Id"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email","description":"Brand org owner's email; surfaced for manufacturer-side dashboards."}},"type":"object","required":["id","name"],"title":"TechPackBrandSummary","description":"Compact brand reference returned alongside a tech pack."},"TechPackCommentAuthor":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"role":{"type":"string","title":"Role","default":"User"},"is_guest":{"type":"boolean","title":"Is Guest","default":false},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"}},"type":"object","title":"TechPackCommentAuthor","description":"Comment author summary, including a derived role label."},"TechPackCommentCreate":{"properties":{"page":{"type":"string","maxLength":50,"minLength":1,"title":"Page","description":"Tech pack editor page slug, e.g. 'cover', 'pom', 'bom'."},"body":{"type":"string","minLength":1,"title":"Body"},"x_percent":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"X Percent","description":"Horizontal pin position as % of content width."},"y_percent":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Y Percent","description":"Vertical pin position as % of content height."},"asset_key":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Asset Key","description":"Visual target within the page (e.g. 'main')."},"mentioned_user_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Mentioned User Ids","description":"Users @mentioned in this comment (notified by email)."},"parent_comment_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Comment Id","description":"Reply to this thread root comment (replies are not pinned)."},"locale":{"type":"string","maxLength":10,"title":"Locale","description":"Locale the author was writing in (defaults to 'en' for older frontend builds).","default":"en"},"page_label":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Page Label","description":"Human-readable page name for the group-chat copy (e.g. 'Colourways')."},"chat_attachments":{"items":{"$ref":"#/components/schemas/MessageAttachment"},"type":"array","maxItems":5,"title":"Chat Attachments","description":"Attachments (e.g. pin snapshot) for the group-chat copy only."}},"type":"object","required":["page","body"],"title":"TechPackCommentCreate"},"TechPackCommentListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TechPackCommentResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"TechPackCommentListResponse"},"TechPackCommentMentionableUser":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"display_name":{"type":"string","title":"Display Name"},"role":{"type":"string","title":"Role","default":"User"}},"type":"object","required":["id","display_name"],"title":"TechPackCommentMentionableUser"},"TechPackCommentMentionableUsersResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TechPackCommentMentionableUser"},"type":"array","title":"Items"}},"type":"object","title":"TechPackCommentMentionableUsersResponse"},"TechPackCommentResolveUpdate":{"properties":{"resolved":{"type":"boolean","title":"Resolved","description":"True to mark resolved/closed; false to reopen."}},"type":"object","required":["resolved"],"title":"TechPackCommentResolveUpdate"},"TechPackCommentResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tech_pack_job_id":{"type":"string","format":"uuid","title":"Tech Pack Job Id"},"page":{"type":"string","title":"Page"},"body":{"type":"string","title":"Body"},"x_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"X Percent"},"y_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Y Percent"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"parent_comment_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Comment Id"},"author":{"$ref":"#/components/schemas/TechPackCommentAuthor"},"mentioned_users":{"items":{"$ref":"#/components/schemas/TechPackCommentAuthor"},"type":"array","title":"Mentioned Users"},"replies":{"items":{"$ref":"#/components/schemas/TechPackCommentResponse"},"type":"array","title":"Replies"},"is_resolved":{"type":"boolean","title":"Is Resolved","default":false},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"resolved_by":{"anyOf":[{"$ref":"#/components/schemas/TechPackCommentAuthor"},{"type":"null"}]},"source_locale":{"type":"string","title":"Source Locale","default":"en"},"content_i18n":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Content I18N"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tech_pack_job_id","page","body","author","created_at","updated_at"],"title":"TechPackCommentResponse"},"TechPackCommentUpdate":{"properties":{"body":{"type":"string","minLength":1,"title":"Body"},"mentioned_user_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Mentioned User Ids","description":"Replace mention list when editing a comment."}},"type":"object","required":["body"],"title":"TechPackCommentUpdate"},"TechPackComponent":{"type":"string","enum":["render_2d","render_3d","label_images","label_dimensions","label_text","packaging_images","packaging_dimensions","packaging_text","pantone_colours","colour_sheet","fabric_swatch","artwork","reference_image","pom","bom","size_guide","construction_details"],"title":"TechPackComponent"},"TechPackComponentGroup":{"type":"string","enum":["render","label","packaging","colour","fabric_artwork","reference","pom_bom","size_construction"],"title":"TechPackComponentGroup"},"TechPackComponentGroupOptions":{"properties":{"group":{"$ref":"#/components/schemas/TechPackComponentGroup"},"label":{"type":"string","title":"Label"},"components":{"items":{"$ref":"#/components/schemas/EnumOption"},"type":"array","title":"Components"}},"type":"object","required":["group","label","components"],"title":"TechPackComponentGroupOptions"},"TechPackJobListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"session_id":{"type":"string","format":"uuid","title":"Session Id"},"status":{"$ref":"#/components/schemas/JobStatus"},"progress":{"type":"integer","title":"Progress"},"product_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Type"},"style_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style Name"},"share_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Code"},"preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Url"},"result_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Url"},"brand_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"},"manufacturer_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Manufacturer Ids"},"brand":{"anyOf":[{"$ref":"#/components/schemas/TechPackBrandSummary"},{"type":"null"}]},"manufacturers":{"items":{"$ref":"#/components/schemas/TechPackManufacturerSummary"},"type":"array","title":"Manufacturers"},"owner":{"anyOf":[{"$ref":"#/components/schemas/TechPackJobOwnerSummary"},{"type":"null"}]},"latest_comment":{"anyOf":[{"$ref":"#/components/schemas/TechPackLatestComment"},{"type":"null"}]},"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"},"released_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Released At"},"manufacturer_completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Manufacturer Completed At"}},"type":"object","required":["id","session_id","status","progress","created_at"],"title":"TechPackJobListItem","description":"List-row shape for /brand/me/techpacks and /manufacturer/me/techpacks."},"TechPackJobListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TechPackJobListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"TechPackJobListResponse"},"TechPackJobOwnerSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"}},"type":"object","required":["id"],"title":"TechPackJobOwnerSummary","description":"Compact view of the user who submitted a tech pack."},"TechPackJobRendersPayload":{"properties":{"front_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 3D Url"},"back_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 3D Url"},"left_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Left 3D Url"},"right_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Right 3D Url"},"front_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 2D Url"},"back_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 2D Url"},"left_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Left 2D Url"},"right_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Right 2D Url"},"inner_front_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inner Front 2D Url"},"inner_back_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inner Back 2D Url"},"callout_pom_front":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callout Pom Front"},"callout_pom_back":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callout Pom Back"},"pom_overlay_outer_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pom Overlay Outer Front Url"},"pom_overlay_outer_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pom Overlay Outer Back Url"},"pom_overlay_inner_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pom Overlay Inner Front Url"},"pom_overlay_inner_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pom Overlay Inner Back Url"},"bom_callout_giq_outer_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Giq Outer Front Url"},"bom_callout_giq_outer_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Giq Outer Back Url"},"bom_callout_giq_inner_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Giq Inner Front Url"},"bom_callout_giq_inner_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Giq Inner Back Url"},"bom_callout_nogiq_outer_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Nogiq Outer Front Url"},"bom_callout_nogiq_outer_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Nogiq Outer Back Url"},"bom_callout_nogiq_inner_front_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Nogiq Inner Front Url"},"bom_callout_nogiq_inner_back_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bom Callout Nogiq Inner Back Url"},"preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Url"}},"type":"object","title":"TechPackJobRendersPayload","description":"Latest render assets from `tech_pack_jobs` (read-only for the editor UI)."},"TechPackJobStatsResponse":{"properties":{"total":{"type":"integer","title":"Total"},"in_progress":{"type":"integer","title":"In Progress"},"completed":{"type":"integer","title":"Completed","default":0}},"type":"object","required":["total","in_progress"],"title":"TechPackJobStatsResponse","description":"Lightweight counters powering the dashboard stat cards."},"TechPackLatestComment":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"page":{"type":"string","title":"Page"},"body":{"type":"string","title":"Body"},"author":{"$ref":"#/components/schemas/TechPackCommentAuthor"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","page","body","author","created_at"],"title":"TechPackLatestComment","description":"Compact \"latest comment\" shown on the list view."},"TechPackLinkManufacturerRequest":{"properties":{"manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Manufacturer Id"}},"type":"object","title":"TechPackLinkManufacturerRequest","description":"Optional body for adding a specific manufacturer attribution."},"TechPackManufacturerSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"factory_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Factory Name"}},"type":"object","required":["id"],"title":"TechPackManufacturerSummary","description":"Compact manufacturer reference returned alongside a tech pack."},"TechPackPlatformStateResponse":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"prefill":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Prefill"},"saved":{"additionalProperties":true,"type":"object","title":"Saved"},"merged":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Merged"},"job_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Status"},"job_renders":{"anyOf":[{"$ref":"#/components/schemas/TechPackJobRendersPayload"},{"type":"null"}]},"share_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Code"},"entitlements":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Entitlements"}},"type":"object","required":["job_id","saved"],"title":"TechPackPlatformStateResponse","description":"Prefill from questionnaire + saved overrides for the in-app tech pack editor."},"TechPackPresenceHeartbeat":{"properties":{"session_id":{"type":"string","maxLength":64,"minLength":8,"title":"Session Id"},"page":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Page","description":"Active tech pack tab slug, e.g. 'cover', 'pom'."},"guest_name":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Guest Name","description":"Display label for anonymous public viewers without an account."}},"type":"object","required":["session_id"],"title":"TechPackPresenceHeartbeat"},"TechPackPresenceListResponse":{"properties":{"viewers":{"items":{"$ref":"#/components/schemas/TechPackPresenceViewer"},"type":"array","title":"Viewers"}},"type":"object","title":"TechPackPresenceListResponse"},"TechPackPresenceViewer":{"properties":{"session_id":{"type":"string","title":"Session Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"initials":{"type":"string","title":"Initials"},"display_name":{"type":"string","title":"Display Name"},"page":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page"}},"type":"object","required":["session_id","initials","display_name"],"title":"TechPackPresenceViewer"},"TechPackPublicLinkRequest":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"allows_anonymous_comments":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allows Anonymous Comments"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["enabled"],"title":"TechPackPublicLinkRequest"},"TechPackShareExpiryRequest":{"properties":{"expires_in_days":{"type":"integer","maximum":3650.0,"minimum":30.0,"title":"Expires In Days"}},"type":"object","required":["expires_in_days"],"title":"TechPackShareExpiryRequest"},"TechPackShareGrantCreateRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"permission":{"type":"string","pattern":"^(view|comment)$","title":"Permission","default":"comment"},"account_type":{"anyOf":[{"type":"string","pattern":"^(brand|manufacturer)$"},{"type":"null"}],"title":"Account Type"}},"type":"object","required":["email"],"title":"TechPackShareGrantCreateRequest"},"TechPackShareGrantResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"principal_type":{"type":"string","title":"Principal Type"},"principal_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Principal Email"},"principal_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Principal User Id"},"principal_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Principal Org Id"},"permission":{"type":"string","title":"Permission"},"created_at":{"type":"string","title":"Created At"},"account_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Type"},"has_account":{"type":"boolean","title":"Has Account","default":false},"joined":{"type":"boolean","title":"Joined","default":false}},"type":"object","required":["id","principal_type","permission","created_at"],"title":"TechPackShareGrantResponse"},"TechPackShareGrantUpdateRequest":{"properties":{"permission":{"anyOf":[{"type":"string","pattern":"^(view|comment)$"},{"type":"null"}],"title":"Permission"},"account_type":{"anyOf":[{"type":"string","pattern":"^(brand|manufacturer)$"},{"type":"null"}],"title":"Account Type"}},"type":"object","title":"TechPackShareGrantUpdateRequest"},"TechPackShareInvitationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"permission":{"type":"string","title":"Permission"},"expires_at":{"type":"string","title":"Expires At"},"accepted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accepted At"}},"type":"object","required":["id","email","permission","expires_at"],"title":"TechPackShareInvitationResponse"},"TechPackShareModeRequest":{"properties":{"mode":{"type":"string","pattern":"^(public|restricted|brand|manufacturer|private|off)$","title":"Mode"},"allows_anonymous_comments":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allows Anonymous Comments"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["mode"],"title":"TechPackShareModeRequest"},"TechPackShareProtectionRequest":{"properties":{"password":{"type":"string","maxLength":128,"minLength":6,"title":"Password"},"expires_in_days":{"type":"integer","maximum":3650.0,"minimum":30.0,"title":"Expires In Days"}},"type":"object","required":["password","expires_in_days"],"title":"TechPackShareProtectionRequest"},"TechPackShareProtectionResponse":{"properties":{"share_code":{"type":"string","title":"Share Code"},"share_url":{"type":"string","title":"Share Url"},"share_mode":{"type":"string","title":"Share Mode","default":"off"},"is_protected":{"type":"boolean","title":"Is Protected"},"protected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Protected At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"public_share_view_count":{"type":"integer","title":"Public Share View Count","default":0},"last_public_share_view_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Public Share View At"},"allows_anonymous_comments":{"type":"boolean","title":"Allows Anonymous Comments","default":false},"public_enabled":{"type":"boolean","title":"Public Enabled","default":false},"public_share_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Share Code"},"public_share_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Share Url"},"public_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Public Expires At"}},"type":"object","required":["share_code","share_url","is_protected"],"title":"TechPackShareProtectionResponse"},"TechPackShareSettingsResponse":{"properties":{"share_code":{"type":"string","title":"Share Code"},"share_url":{"type":"string","title":"Share Url"},"share_mode":{"type":"string","title":"Share Mode","default":"off"},"is_protected":{"type":"boolean","title":"Is Protected"},"protected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Protected At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"public_share_view_count":{"type":"integer","title":"Public Share View Count","default":0},"last_public_share_view_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Public Share View At"},"allows_anonymous_comments":{"type":"boolean","title":"Allows Anonymous Comments","default":false},"public_enabled":{"type":"boolean","title":"Public Enabled","default":false},"public_share_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Share Code"},"public_share_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Share Url"},"public_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Public Expires At"},"grants":{"items":{"$ref":"#/components/schemas/TechPackShareGrantResponse"},"type":"array","title":"Grants"},"invitations":{"items":{"$ref":"#/components/schemas/TechPackShareInvitationResponse"},"type":"array","title":"Invitations"}},"type":"object","required":["share_code","share_url","is_protected"],"title":"TechPackShareSettingsResponse"},"TechPackSharedManufacturerSummary":{"properties":{"manufacturer_id":{"type":"string","format":"uuid","title":"Manufacturer Id"},"manufacturer_name":{"type":"string","title":"Manufacturer Name"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"}},"type":"object","required":["manufacturer_id","manufacturer_name"],"title":"TechPackSharedManufacturerSummary"},"TechPackSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"session_id":{"type":"string","format":"uuid","title":"Session Id"},"status":{"type":"string","title":"Status"},"progress":{"type":"integer","title":"Progress","default":0},"result_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Url"},"share_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Code"},"share_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Mode"},"shared_with_manufacturers":{"items":{"$ref":"#/components/schemas/TechPackSharedManufacturerSummary"},"type":"array","title":"Shared With Manufacturers","default":[]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["id","session_id","status"],"title":"TechPackSummary"},"TechPackTokenResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"code":{"type":"string","title":"Code"},"tech_pack_count":{"type":"integer","title":"Tech Pack Count"},"max_redemptions":{"type":"integer","title":"Max Redemptions"},"redemption_count":{"type":"integer","title":"Redemption Count"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"is_active":{"type":"boolean","title":"Is Active"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","code","tech_pack_count","max_redemptions","redemption_count","is_active","created_at"],"title":"TechPackTokenResponse"},"TechPackTopUpRequest":{"properties":{"quantity":{"type":"integer","maximum":50000.0,"minimum":1.0,"title":"Quantity","default":1},"manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Manufacturer Id"},"invite_token":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Invite Token"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url"}},"type":"object","title":"TechPackTopUpRequest"},"TechPackTopUpResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"},"billing_mode":{"type":"string","enum":["manufacturer","direct"],"title":"Billing Mode"},"quantity":{"type":"integer","title":"Quantity"},"unit_price_cents":{"type":"integer","title":"Unit Price Cents"},"total_cents":{"type":"integer","title":"Total Cents"},"platform_fee_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Platform Fee Cents"},"currency":{"type":"string","title":"Currency","default":"usd"}},"type":"object","required":["checkout_url","session_id","billing_mode","quantity","unit_price_cents","total_cents"],"title":"TechPackTopUpResponse"},"TechpackAccessLevel":{"type":"string","enum":["none","view","comment","edit","full"],"title":"TechpackAccessLevel"},"TechpackAccessResponse":{"properties":{"can_view":{"type":"boolean","title":"Can View"},"can_comment":{"type":"boolean","title":"Can Comment"},"can_edit":{"type":"boolean","title":"Can Edit"},"is_owner":{"type":"boolean","title":"Is Owner"}},"type":"object","required":["can_view","can_comment","can_edit","is_owner"],"title":"TechpackAccessResponse"},"TechpackBlueprintIn":{"properties":{"techpack_components":{"anyOf":[{"items":{"$ref":"#/components/schemas/TechPackComponent"},"type":"array"},{"type":"null"}],"title":"Techpack Components"}},"type":"object","title":"TechpackBlueprintIn"},"TechpackBomGenerateRequest":{"properties":{"pantone_colour_name_tcx":{"type":"string","maxLength":200,"title":"Pantone Colour Name Tcx","default":""},"fabric_composition":{"type":"string","maxLength":8000,"title":"Fabric Composition","default":""},"fabric_gsm":{"type":"string","maxLength":200,"title":"Fabric Gsm","default":""},"garment_pantone_colourway_2":{"type":"string","maxLength":200,"title":"Garment Pantone Colourway 2","default":""},"garment_pantone_colourway_3":{"type":"string","maxLength":200,"title":"Garment Pantone Colourway 3","default":""},"logo_pantone_colours":{"type":"string","maxLength":400,"title":"Logo Pantone Colours","default":""},"logo_label_composition":{"type":"string","maxLength":500,"title":"Logo Label Composition","default":""},"logo_label_gsm":{"type":"string","maxLength":200,"title":"Logo Label Gsm","default":""},"care_label_composition":{"type":"string","maxLength":500,"title":"Care Label Composition","default":""},"care_label_gsm":{"type":"string","maxLength":200,"title":"Care Label Gsm","default":""},"hang_tag_composition":{"type":"string","maxLength":500,"title":"Hang Tag Composition","default":""},"hang_tag_gsm":{"type":"string","maxLength":200,"title":"Hang Tag Gsm","default":""},"colourways_quantity":{"type":"string","maxLength":50,"title":"Colourways Quantity","default":"1"},"logo_placement":{"type":"string","maxLength":800,"title":"Logo Placement","default":""},"care_label_placement":{"type":"string","maxLength":800,"title":"Care Label Placement","default":""},"hang_tag_placement":{"type":"string","maxLength":800,"title":"Hang Tag Placement","default":""},"front_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 3D Url"},"back_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 3D Url"},"front_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 2D Url"},"back_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 2D Url"},"inner_front_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inner Front 2D Url"},"inner_back_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inner Back 2D Url"}},"type":"object","title":"TechpackBomGenerateRequest"},"TechpackBomGenerateResponse":{"properties":{"style_info":{"items":{"$ref":"#/components/schemas/TechpackBomStyleItem"},"type":"array","title":"Style Info"},"trims_info":{"items":{"$ref":"#/components/schemas/TechpackBomTrimItem"},"type":"array","title":"Trims Info"},"raw_text":{"type":"string","title":"Raw Text","default":""}},"type":"object","title":"TechpackBomGenerateResponse"},"TechpackBomStyleItem":{"properties":{"component":{"type":"string","title":"Component","default":""},"description":{"type":"string","title":"Description","default":""},"placement":{"type":"string","title":"Placement","default":""},"fabric_composition":{"type":"string","title":"Fabric Composition","default":""},"weight_width_size":{"type":"string","title":"Weight Width Size","default":""},"colour":{"type":"string","title":"Colour","default":""},"supplier":{"type":"string","title":"Supplier","default":""}},"type":"object","title":"TechpackBomStyleItem"},"TechpackBomTrimItem":{"properties":{"trim":{"type":"string","title":"Trim","default":""},"placement":{"type":"string","title":"Placement","default":""},"material_composition":{"type":"string","title":"Material Composition","default":""},"weight_width_size":{"type":"string","title":"Weight Width Size","default":""},"colour":{"type":"string","title":"Colour","default":""},"quantity":{"type":"string","title":"Quantity","default":""},"supplier":{"type":"string","title":"Supplier","default":""}},"type":"object","title":"TechpackBomTrimItem"},"TechpackCreatePermissionResponse":{"properties":{"can_create":{"type":"boolean","title":"Can Create"}},"type":"object","required":["can_create"],"title":"TechpackCreatePermissionResponse"},"TechpackFieldSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"field_name":{"type":"string","title":"Field Name"},"field_type":{"type":"string","title":"Field Type"},"display_name":{"type":"string","title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"excel_sheet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Excel Sheet"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"required_for_techpack":{"type":"boolean","title":"Required For Techpack","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","field_name","field_type","display_name","created_at"],"title":"TechpackFieldSchema"},"TechpackPomGenerateRequest":{"properties":{"item_description_text":{"type":"string","minLength":1,"title":"Item Description Text"},"sample_sizes_clothing":{"type":"string","minLength":1,"title":"Sample Sizes Clothing"},"sizing_reference_brand":{"type":"string","maxLength":120,"title":"Sizing Reference Brand","default":"US"},"item_fit_coverage_text":{"type":"string","maxLength":8000,"title":"Item Fit Coverage Text","default":""},"construction_details":{"type":"string","maxLength":32000,"title":"Construction Details","default":""},"gender":{"type":"string","maxLength":64,"title":"Gender","default":"unisex"},"size_guide_text":{"type":"string","maxLength":32000,"minLength":1,"title":"Size Guide Text","description":"Serialized size grid (filled XXS–6XL letter columns only) from the in-app editor."},"size_guide_measurement_unit":{"type":"string","maxLength":120,"title":"Size Guide Measurement Unit","description":"User-declared linear unit for size-chart numbers (e.g. inches, cm). Skips unit-token heuristic when set.","default":""},"front_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 3D Url"},"back_3d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 3D Url"},"front_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Front 2D Url"},"back_2d_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Back 2D Url"}},"type":"object","required":["item_description_text","sample_sizes_clothing","size_guide_text"],"title":"TechpackPomGenerateRequest","description":"Inputs aligned with server-side Excel POM generation, plus the in-app size-chart block."},"TechpackPomGenerateResponse":{"properties":{"measurements":{"items":{"$ref":"#/components/schemas/TechpackPomMeasurementItem"},"type":"array","title":"Measurements"},"raw_text":{"type":"string","title":"Raw Text","default":""}},"type":"object","title":"TechpackPomGenerateResponse"},"TechpackPomMeasurementItem":{"properties":{"id":{"type":"string","title":"Id","default":""},"section":{"type":"string","title":"Section","default":""},"name":{"type":"string","title":"Name","default":""},"size_inches":{"type":"string","title":"Size Inches","default":""},"tolerance":{"type":"string","title":"Tolerance","default":""},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","title":"TechpackPomMeasurementItem"},"TechpackRequirementResponse":{"properties":{"components":{"items":{"type":"string"},"type":"array","title":"Components"}},"type":"object","title":"TechpackRequirementResponse"},"TechpackRequirementUpdate":{"properties":{"components":{"items":{"type":"string"},"type":"array","title":"Components"}},"type":"object","required":["components"],"title":"TechpackRequirementUpdate"},"TechpackStepRequest":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"area":{"type":"string","enum":["visual_studio","workspace"],"title":"Area"},"step":{"type":"string","enum":["construction_detail","2d","3d","size_chart","cover","construction","pom","pom-table","size-guide","bom","artwork","label","packaging","colourways","download"],"title":"Step"},"action":{"type":"string","enum":["viewed","started","completed"],"title":"Action"}},"type":"object","required":["job_id","area","step","action"],"title":"TechpackStepRequest"},"ThreadSummary":{"properties":{"thread_id":{"type":"string","title":"Thread Id"},"title":{"type":"string","title":"Title"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["thread_id","title","created_at","updated_at"],"title":"ThreadSummary"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type"}},"type":"object","required":["access_token","token_type"],"title":"Token"},"TopUpCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["checkout_url","session_id"],"title":"TopUpCheckoutResponse"},"TotalPreference":{"properties":{"base_columns":{"items":{"type":"string"},"type":"array","title":"Base Columns","default":[]},"include_processes":{"type":"boolean","title":"Include Processes","default":true}},"type":"object","title":"TotalPreference","description":"Which output columns are MOQ base prices for computed overall totals."},"TouchUpVersionRequest":{"properties":{"use_illustrator_return":{"type":"boolean","title":"Use Illustrator Return","description":"Make the version from the flats sent back from Illustrator after Approve 2D (platform_payload.illustratorRoundTrip.pendingReturn); a side not sent back keeps the source's flat.","default":false},"touch_up_3d_intent":{"type":"string","enum":["regenerate","retain"],"title":"Touch Up 3D Intent","description":"After 2D touch-up is approved: regenerate 3D from updated flats, or retain 3D from the source tech pack.","default":"regenerate"},"touch_up_bom_intent":{"type":"string","enum":["keep","regenerate"],"title":"Touch Up Bom Intent","description":"Keep the source BOM (including edits) or regenerate it after approval.","default":"keep"},"touch_up_labels_intent":{"type":"string","enum":["keep","fresh"],"title":"Touch Up Labels Intent","description":"Keep the source label, packaging and care label notes, or start them fresh.","default":"keep"},"touch_up_artwork_intent":{"type":"string","enum":["keep","fresh"],"title":"Touch Up Artwork Intent","description":"Keep the source artwork files and placement rows, or start without artwork.","default":"keep"}},"type":"object","title":"TouchUpVersionRequest","description":"Create a touch-up version (V1.1, V1.2, …) from a workspace tech pack."},"TrialEnabledRequest":{"properties":{"trial_enabled":{"type":"boolean","title":"Trial Enabled","description":"When true, calendar trial rules apply; enabling grants a trial window and welcome credits if not already granted."},"grant_welcome_credits":{"type":"boolean","title":"Grant Welcome Credits","description":"When enabling trial, grant 2 welcome credits if this org has not received a trial_grant before.","default":true}},"type":"object","required":["trial_enabled"],"title":"TrialEnabledRequest"},"TrialEnabledResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"user_id":{"type":"string","format":"uuid","title":"User Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"trial_enabled":{"type":"boolean","title":"Trial Enabled"},"trial_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Start"},"trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End"},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"credits_granted":{"type":"integer","title":"Credits Granted","default":0},"credit_balance":{"type":"integer","title":"Credit Balance","default":0}},"type":"object","required":["user_id","org_id","trial_enabled"],"title":"TrialEnabledResponse"},"TrialExtensionRequest":{"properties":{"days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Days","description":"Number of days to extend trial by"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Admin note for audit/logging"}},"type":"object","required":["days"],"title":"TrialExtensionRequest"},"TrialExtensionResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"user_id":{"type":"string","format":"uuid","title":"User Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"days_added":{"type":"integer","title":"Days Added"},"previous_trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Previous Trial End"},"new_trial_end":{"type":"string","format":"date-time","title":"New Trial End"},"subscription_status":{"type":"string","title":"Subscription Status"},"trial_enabled":{"type":"boolean","title":"Trial Enabled","default":false},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["user_id","org_id","days_added","new_trial_end","subscription_status","reason"],"title":"TrialExtensionResponse"},"TrialStatusResponse":{"properties":{"is_trialing":{"type":"boolean","title":"Is Trialing"},"is_expired":{"type":"boolean","title":"Is Expired"},"is_unlimited_trial":{"type":"boolean","title":"Is Unlimited Trial","default":false},"is_unlimited_downloads":{"type":"boolean","title":"Is Unlimited Downloads","default":false},"trial_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Start"},"trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End"},"days_remaining":{"type":"integer","title":"Days Remaining"},"downloads_used":{"type":"integer","title":"Downloads Used"},"downloads_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Downloads Remaining"},"credit_balance":{"type":"integer","title":"Credit Balance"},"has_active_subscription":{"type":"boolean","title":"Has Active Subscription"},"free_tech_pack_policy_active":{"type":"boolean","title":"Free Tech Pack Policy Active","default":false},"free_tech_pack_policy_start_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Free Tech Pack Policy Start At"},"free_generation_available":{"type":"boolean","title":"Free Generation Available","default":false}},"type":"object","required":["is_trialing","is_expired","days_remaining","downloads_used","credit_balance","has_active_subscription"],"title":"TrialStatusResponse"},"UnreadCountResponse":{"properties":{"count":{"type":"integer","title":"Count"}},"type":"object","required":["count"],"title":"UnreadCountResponse"},"UpdateMemberAccessRequest":{"properties":{"access_profile":{"$ref":"#/components/schemas/MemberAccessProfile"}},"type":"object","required":["access_profile"],"title":"UpdateMemberAccessRequest"},"UpdateMemberRoleRequest":{"properties":{"role":{"type":"string","pattern":"^(admin|user|viewer|editor)$","title":"Role"}},"type":"object","required":["role"],"title":"UpdateMemberRoleRequest"},"UpdateSeatsRequest":{"properties":{"seats":{"type":"integer","title":"Seats"}},"type":"object","required":["seats"],"title":"UpdateSeatsRequest"},"User":{"properties":{"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"role":{"type":"string","title":"Role"},"whatsapp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Whatsapp"},"email":{"type":"string","format":"email","title":"Email"},"id":{"type":"string","format":"uuid","title":"Id"},"is_active":{"type":"boolean","title":"Is Active"},"is_admin":{"type":"boolean","title":"Is Admin"},"is_approved":{"type":"boolean","title":"Is Approved","default":false},"email_notifications_consent":{"type":"boolean","title":"Email Notifications Consent","default":false},"email_verified":{"type":"boolean","title":"Email Verified","default":false},"onboarding_completed":{"type":"boolean","title":"Onboarding Completed"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["first_name","last_name","role","email","id","is_active","is_admin","onboarding_completed","created_at","updated_at"],"title":"User"},"UserAssignRequest":{"properties":{"custom_price_id":{"type":"string","format":"uuid","title":"Custom Price Id"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"}},"type":"object","required":["custom_price_id"],"title":"UserAssignRequest"},"UserCreate":{"properties":{"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"role":{"type":"string","title":"Role"},"whatsapp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Whatsapp"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"},"organization_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Name"},"email_notifications_consent":{"type":"boolean","title":"Email Notifications Consent","default":false},"account_type":{"anyOf":[{"type":"string","enum":["manufacturer","brand"]},{"type":"null"}],"title":"Account Type"},"referral_token":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Referral Token"},"invitation_token":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Invitation Token"},"country":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Country"}},"type":"object","required":["first_name","last_name","role","email","password"],"title":"UserCreate"},"UserFeatureGrantsOut":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"},"org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Name"},"grants":{"items":{"$ref":"#/components/schemas/FeatureGrantOut"},"type":"array","title":"Grants"}},"type":"object","required":["user_id","grants"],"title":"UserFeatureGrantsOut"},"UserUpdate":{"properties":{"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"whatsapp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Whatsapp"},"cookie_consent":{"anyOf":[{"$ref":"#/components/schemas/CookieConsent"},{"type":"null"}]}},"type":"object","title":"UserUpdate","description":"PATCH /auth/me — partial update of mutable profile fields. Email is not editable here."},"UserWithOrgContext":{"properties":{"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"role":{"type":"string","title":"Role"},"whatsapp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Whatsapp"},"email":{"type":"string","format":"email","title":"Email"},"id":{"type":"string","format":"uuid","title":"Id"},"is_active":{"type":"boolean","title":"Is Active"},"is_admin":{"type":"boolean","title":"Is Admin"},"is_approved":{"type":"boolean","title":"Is Approved","default":false},"email_notifications_consent":{"type":"boolean","title":"Email Notifications Consent","default":false},"email_verified":{"type":"boolean","title":"Email Verified","default":false},"onboarding_completed":{"type":"boolean","title":"Onboarding Completed"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"cookie_consent":{"anyOf":[{"$ref":"#/components/schemas/CookieConsent"},{"type":"null"}]},"welcome_seen":{"type":"boolean","title":"Welcome Seen","default":false},"guides_seen":{"items":{"type":"string"},"type":"array","title":"Guides Seen","default":[]},"learning_mode":{"type":"boolean","title":"Learning Mode","default":true},"org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"},"org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Name"},"org_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Role"},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"credit_balance":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credit Balance"},"trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End"},"is_trial":{"type":"boolean","title":"Is Trial","default":false},"is_unlimited_trial":{"type":"boolean","title":"Is Unlimited Trial","default":false},"needs_profile_completion":{"type":"boolean","title":"Needs Profile Completion","default":false},"needs_location":{"type":"boolean","title":"Needs Location","default":false},"account_type":{"anyOf":[{"type":"string","enum":["manufacturer","brand"]},{"type":"null"}],"title":"Account Type"},"manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Manufacturer Id"},"brand_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"},"linked_manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Linked Manufacturer Id"},"permissions":{"anyOf":[{"$ref":"#/components/schemas/PermissionMap"},{"type":"null"}]},"entitlements":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Entitlements"}},"type":"object","required":["first_name","last_name","role","email","id","is_active","is_admin","onboarding_completed","created_at","updated_at"],"title":"UserWithOrgContext","description":"Extended user schema returned by get_current_user with org context."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyOtpRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"code":{"type":"string","maxLength":6,"minLength":6,"title":"Code"},"invitation_token":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Invitation Token"}},"type":"object","required":["email","code"],"title":"VerifyOtpRequest"},"VerifyPaymentRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["session_id"],"title":"VerifyPaymentRequest","description":"Request to verify a payment transaction"},"VerifyPaymentResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"payment_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Payment Id"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"},"amount_paid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Paid"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"}},"type":"object","required":["success","status","message"],"title":"VerifyPaymentResponse","description":"Response after verifying a payment"},"ViewingRequest":{"properties":{"viewing":{"type":"boolean","title":"Viewing"}},"type":"object","required":["viewing"],"title":"ViewingRequest"},"WalletSummaryResponse":{"properties":{"credit_balance":{"type":"integer","title":"Credit Balance"},"can_access_designboard":{"type":"boolean","title":"Can Access Designboard"},"designboard_block_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Designboard Block Reason"},"billing_mode":{"type":"string","enum":["manufacturer","direct"],"title":"Billing Mode"},"unit_price_cents":{"type":"integer","title":"Unit Price Cents"},"currency":{"type":"string","title":"Currency","default":"usd"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"platform_fee_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Platform Fee Cents"},"linked_manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Linked Manufacturer Id"},"linked_manufacturer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linked Manufacturer Name"},"active_voucher_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Active Voucher Ends At"},"can_generate":{"type":"boolean","title":"Can Generate"},"generation_block_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generation Block Reason"},"max_topup_quantity":{"type":"integer","title":"Max Topup Quantity","default":50000},"has_active_subscription":{"type":"boolean","title":"Has Active Subscription","default":false},"can_cancel_subscription":{"type":"boolean","title":"Can Cancel Subscription","default":false},"subscription_cancel_at_period_end":{"type":"boolean","title":"Subscription Cancel At Period End","default":false},"topup_available":{"type":"boolean","title":"Topup Available","default":true},"topup_block_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topup Block Reason"},"pending_invite_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pending Invite Token"},"pending_invite_type":{"anyOf":[{"type":"string","enum":["per_pack","bundle"]},{"type":"null"}],"title":"Pending Invite Type"},"pending_bundle_total_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pending Bundle Total Cents"},"pending_bundle_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pending Bundle Quantity"},"pending_invite_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pending Invite Label"}},"type":"object","required":["credit_balance","can_access_designboard","billing_mode","unit_price_cents","can_generate"],"title":"WalletSummaryResponse"},"YearsOfExperience":{"type":"string","enum":["<1","1-3","3-5","5-10",">10"],"title":"YearsOfExperience"},"_ConfirmGarment":{"properties":{"name":{"type":"string","title":"Name"},"front":{"anyOf":[{"$ref":"#/components/schemas/_ConfirmView"},{"type":"null"}]},"back":{"anyOf":[{"$ref":"#/components/schemas/_ConfirmView"},{"type":"null"}]},"artworks":{"items":{"$ref":"#/components/schemas/_ConfirmView"},"type":"array","title":"Artworks"}},"type":"object","required":["name"],"title":"_ConfirmGarment"},"_ConfirmView":{"properties":{"artboardIndex":{"type":"integer","title":"Artboardindex"},"box":{"additionalProperties":{"type":"number"},"type":"object","title":"Box"}},"type":"object","required":["artboardIndex","box"],"title":"_ConfirmView"},"app__schemas__conversation__ConversationDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"last_message_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Message At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id"},"product_type":{"anyOf":[{"$ref":"#/components/schemas/ProductType"},{"type":"null"}]},"is_archived":{"type":"boolean","title":"Is Archived","default":false},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"}},"type":"object","required":["id","title","id"],"title":"ConversationDetail"},"app__schemas__messaging__ConversationDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"type":{"type":"string","title":"Type"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"tech_pack_job_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tech Pack Job Id"},"last_message_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Message At"},"last_message":{"anyOf":[{"$ref":"#/components/schemas/MessageOut"},{"type":"null"}]},"unread_count":{"type":"integer","title":"Unread Count","default":0},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"participants":{"items":{"$ref":"#/components/schemas/ParticipantOut"},"type":"array","title":"Participants"}},"type":"object","required":["id","type","created_at"],"title":"ConversationDetail"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"auth/token"}}}}}}