{"openapi":"3.1.0","info":{"title":"HomeDecor API","description":"AI-powered home decor generation API","version":"1.0.0"},"paths":{"/api/v1/analytics/meta/lead":{"post":{"tags":["Analytics"],"summary":"Track Meta Lead","description":"Track a 'Lead' event (e.g. clicking 'Download' or 'Go to App' from landing page).\nSends the event directly to Meta Conversions API via BackgroundTasks.","operationId":"track_meta_lead_api_v1_analytics_meta_lead_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackLeadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackLeadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth":{"post":{"tags":["Authentication"],"summary":"Create User","description":"Create a new user with username.\n\nThis is an authentication endpoint - it handles the initial sign-up.\nThe token is verified as part of the authentication process, not via dependency.\nProvider is determined from X-Provider-Id header (firebase, google, apple).\nAutomatically determines the Firebase service (yzfoto/avukatim) from the token.","operationId":"create_user_api_v1_auth_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Provider-Id","in":"header","required":false,"schema":{"$ref":"#/components/schemas/AUTH_PROVIDER"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Authentication"],"summary":"Signin User","description":"Sign in user and get user information.\n\nThis is an authentication endpoint. Returns user profile from Firestore.\nProvider is determined from X-Provider-Id header (firebase, google, apple).\nAutomatically determines the Firebase service (yzfoto/avukatim) from the token.","operationId":"signin_user_api_v1_auth_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"serverAuthCode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serverauthcode"}},{"name":"firebaseUserId","in":"query","required":true,"schema":{"type":"string","title":"Firebaseuserid"}},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},{"name":"familyName","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Familyname"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"$ref":"#/components/schemas/AUTH_PROVIDER"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeDecorUserWrapperResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Authentication"],"summary":"Delete User","description":"Delete user account.\n\nThis is an authentication endpoint. Deletes user from Firestore.\nProvider is determined from X-Provider-Id header (firebase, google, apple).\nAutomatically determines the Firebase service (yzfoto/avukatim) from the token.\n\nFor Apple: Also attempts to revoke Apple refresh token.\nFor Firebase: Deletes from both Firebase Auth and Firestore.\nFor Google: Deletes from Firestore only (does not revoke Google OAuth tokens).","operationId":"delete_user_api_v1_auth_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Authentication"],"summary":"Update User Profile","description":"Update current user's profile information.\n\nSupports updating profile fields like `isFirstVisit`.\nAutomatically determines the Firebase service (yzfoto/avukatim) from the token.\nWorks with all authentication providers (Firebase, Google, Apple).\n\n**Authorization:** User can only update their own profile.","operationId":"update_user_profile_api_v1_auth_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/purchase/google/billing-identity":{"get":{"tags":["Purchase"],"summary":"Get Google Play Billing Identity","description":"Return the authenticated user's opaque Google Play account identifier.","operationId":"get_google_play_billing_identity_api_v1_purchase_google_billing_identity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GooglePlayBillingIdentityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/purchase":{"post":{"tags":["Purchase"],"summary":"Handle Purchase","description":"Process an in-app purchase from Google Play Store or Apple App Store.\n\nValidates the purchase token/receipt and processes the purchase for the authenticated user.\n\nArgs:\n    request: Purchase request with OS, product ID, and token/receipt\n    auth: Authenticated user context\n    service: App-specific purchase service (injected)\n\nReturns:\n    PurchaseResponse with success status and subscription details","operationId":"handle_purchase_api_v1_purchase_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Purchase"],"summary":"Get Purchase Info","description":"Get available in-app purchase products.\nAlso sets up freemium credits for the user (authenticated or device-based).\n\nArgs:\n    service: App-specific purchase service (injected)\n    auth: Authentication context (optional)\n\nReturns:\n    InfoResponse with subscribable_skus and consumable_skus products","operationId":"get_purchase_info_api_v1_purchase_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/purchase/":{"post":{"tags":["Purchase"],"summary":"Handle Purchase","description":"Process an in-app purchase from Google Play Store or Apple App Store.\n\nValidates the purchase token/receipt and processes the purchase for the authenticated user.\n\nArgs:\n    request: Purchase request with OS, product ID, and token/receipt\n    auth: Authenticated user context\n    service: App-specific purchase service (injected)\n\nReturns:\n    PurchaseResponse with success status and subscription details","operationId":"handle_purchase_api_v1_purchase__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/purchase/info":{"get":{"tags":["Purchase"],"summary":"Get Purchase Info","description":"Get available in-app purchase products.\nAlso sets up freemium credits for the user (authenticated or device-based).\n\nArgs:\n    service: App-specific purchase service (injected)\n    auth: Authentication context (optional)\n\nReturns:\n    InfoResponse with subscribable_skus and consumable_skus products","operationId":"get_purchase_info_api_v1_purchase_info_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/purchase/subscription-status":{"get":{"tags":["Purchase"],"summary":"Get Subscription Status","description":"Get the user's current subscription status.\n\nArgs:\n    auth: Authenticated user context\n    service: App-specific purchase service (injected)\n\nReturns:\n    PurchaseResponse with subscription status","operationId":"get_subscription_status_api_v1_purchase_subscription_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/purchase/webhook/apple":{"post":{"tags":["Purchase"],"summary":"Handle Apple Webhook","description":"Handle Apple App Store Server Notifications (V2).","operationId":"handle_apple_webhook_api_v1_purchase_webhook_apple_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"}}}}}}},"/api/v1/purchase/referral/redeem":{"post":{"tags":["Purchase"],"summary":"Redeem Referral","description":"Validate a referral code and return the appropriate master offer code or token.","operationId":"redeem_referral_api_v1_purchase_referral_redeem_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralRedeemRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralRedeemResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/purchase/webhook/google":{"post":{"tags":["Purchase"],"summary":"Handle Google Webhook","description":"Handle Google Play Real-Time Developer Notifications.","operationId":"handle_google_webhook_api_v1_purchase_webhook_google_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"}}}}}}},"/api/v1/purchase/config":{"get":{"tags":["Purchase"],"summary":"Get Subscription Config","description":"Get generic subscription config until HomeDecor products are added.","operationId":"get_subscription_config_api_v1_purchase_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaywallConfigResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"},"example":{"error":"Authentication failed","error_code":"unauthorized"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"},"example":{"error":"Internal server error","error_code":"internal_error"}}}}}}},"/api/v1/generate":{"post":{"tags":["Generation"],"summary":"Create Generation","description":"Queue a new HomeDecor image generation request.","operationId":"create_generation_api_v1_generate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationCreateRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationCreateResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"example":{"error":"Authentication failed","error_code":"unauthorized"},"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"example":{"error":"Internal server error","error_code":"internal_error"},"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/generate/cost":{"get":{"tags":["Generation"],"summary":"Get Generation Cost","description":"Return estimated generation cost for quality tiers.","operationId":"get_generation_cost_api_v1_generate_cost_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationCostResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"example":{"error":"Authentication failed","error_code":"unauthorized"},"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"example":{"error":"Internal server error","error_code":"internal_error"},"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/generate/style-catalog":{"get":{"tags":["Generation"],"summary":"Get Style Catalog","description":"Return style catalog metadata without prompt content.","operationId":"get_style_catalog_api_v1_generate_style_catalog_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StyleCatalogResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"example":{"error":"Authentication failed","error_code":"unauthorized"},"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"example":{"error":"Internal server error","error_code":"internal_error"},"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/segmentation":{"post":{"tags":["Segmentation"],"summary":"Submit image for dreamhome segmentation","operationId":"submit_segmentation_api_v1_segmentation_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_submit_segmentation_api_v1_segmentation_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SegmentationStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/segmentation/{job_id}/result":{"get":{"tags":["Segmentation"],"summary":"Get segmentation result","operationId":"get_segmentation_result_api_v1_segmentation__job_id__result_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","description":"Segmentation job id","title":"Job Id"},"description":"Segmentation job id"},{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SegmentationServiceResponseSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/segmentation/cancel":{"post":{"tags":["Segmentation"],"summary":"Cancel segmentation job","operationId":"cancel_segmentation_api_v1_segmentation_cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCancelRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/types/types":{"get":{"tags":["Types"],"summary":" Dreamhome Types","operationId":"_dreamhome_types_api_v1_types_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DreamhomeTypesResponse"}}}}}}},"/api/v1/mcp/api-keys":{"post":{"tags":["MCP Keys"],"summary":"Create Api Key","description":"Creates a new MCP API key for the authenticated user.","operationId":"create_api_key_api_v1_mcp_api_keys_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"example":{"error":"Authentication failed","error_code":"unauthorized"},"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"example":{"error":"Internal server error","error_code":"internal_error"},"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["MCP Keys"],"summary":"List Api Keys","description":"Lists all active MCP API keys for the authenticated user.","operationId":"list_api_keys_api_v1_mcp_api_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyResponse"},"title":"Response List Api Keys Api V1 Mcp Api Keys Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"example":{"error":"Authentication failed","error_code":"unauthorized"},"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"example":{"error":"Internal server error","error_code":"internal_error"},"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/api-keys/{key_id}":{"delete":{"tags":["MCP Keys"],"summary":"Revoke Api Key","description":"Revokes an MCP API key for the authenticated user.","operationId":"revoke_api_key_api_v1_mcp_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"ProviderId","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"Providerid"}},{"name":"X-Provider-Id","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AUTH_PROVIDER"},{"type":"null"}],"title":"X-Provider-Id"}},{"name":"X-Device-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized","content":{"application/json":{"example":{"error":"Authentication failed","error_code":"unauthorized"},"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"example":{"error":"Internal server error","error_code":"internal_error"},"schema":{"$ref":"#/components/schemas/ErrorResponseSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hot-update/update.json":{"get":{"tags":["Hot Update"],"summary":"Serve Update Json","description":"Serve the OTA update manifest file.\n\nReturns update.json for React Native CodePush/hot updates.\nContains version info and URLs for platform-specific bundles.\n\nReturns:\n    JSON response with update manifest","operationId":"serve_update_json_api_v1_hot_update_update_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/hot-update/bundle-ios.zip":{"get":{"tags":["Hot Update"],"summary":"Serve Ios Bundle","description":"Serve iOS OTA update bundle.\n\nReturns the iOS JavaScript bundle for hot updates.\n\nReturns:\n    ZIP file containing iOS bundle","operationId":"serve_ios_bundle_api_v1_hot_update_bundle_ios_zip_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/hot-update/bundle-android.zip":{"get":{"tags":["Hot Update"],"summary":"Serve Android Bundle","description":"Serve Android OTA update bundle.\n\nReturns the Android JavaScript bundle for hot updates.\n\nReturns:\n    ZIP file containing Android bundle","operationId":"serve_android_bundle_api_v1_hot_update_bundle_android_zip_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/hot-update/channels/{channel}/runtimes/{runtime_version}/update.json":{"get":{"tags":["Hot Update"],"summary":"Serve Runtime Update Json","description":"Serve a manifest isolated to one native runtime and release channel.","operationId":"serve_runtime_update_json_api_v1_hot_update_channels__channel__runtimes__runtime_version__update_json_get","parameters":[{"name":"channel","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]+$","title":"Channel"}},{"name":"runtime_version","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]+$","title":"Runtime Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hot-update/channels/{channel}/runtimes/{runtime_version}/bundle-ios.zip":{"get":{"tags":["Hot Update"],"summary":"Serve Runtime Ios Bundle","description":"Serve an iOS bundle isolated to one native runtime and channel.","operationId":"serve_runtime_ios_bundle_api_v1_hot_update_channels__channel__runtimes__runtime_version__bundle_ios_zip_get","parameters":[{"name":"channel","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]+$","title":"Channel"}},{"name":"runtime_version","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]+$","title":"Runtime Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hot-update/channels/{channel}/runtimes/{runtime_version}/bundle-android.zip":{"get":{"tags":["Hot Update"],"summary":"Serve Runtime Android Bundle","description":"Serve an Android bundle isolated to one native runtime and channel.","operationId":"serve_runtime_android_bundle_api_v1_hot_update_channels__channel__runtimes__runtime_version__bundle_android_zip_get","parameters":[{"name":"channel","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]+$","title":"Channel"}},{"name":"runtime_version","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]+$","title":"Runtime Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AUTH_PROVIDER":{"type":"string","enum":["firebase","google","apple"],"title":"AUTH_PROVIDER"},"ApiKeyCreateRequest":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name","description":"A friendly name for the API key"}},"type":"object","required":["name"],"title":"ApiKeyCreateRequest"},"ApiKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"key":{"type":"string","title":"Key","description":"The actual API key. Usually only shown once."},"name":{"type":"string","title":"Name"},"userId":{"type":"string","title":"Userid"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"isActive":{"type":"boolean","title":"Isactive"}},"type":"object","required":["id","key","name","userId","createdAt","isActive"],"title":"ApiKeyResponse"},"AuthCreateRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"User's first name"},"familyName":{"type":"string","maxLength":100,"minLength":1,"title":"Familyname","description":"User's last name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender","description":"User's gender"}},"type":"object","required":["name","familyName"],"title":"AuthCreateRequest","description":"Request schema for creating user with Firebase/Apple auth.","example":{"displayName":"John Doe","email":"john@example.com","serverAuthCode":"optional_auth_code"}},"Body_submit_segmentation_api_v1_segmentation_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Image file to segment"}},"type":"object","required":["file"],"title":"Body_submit_segmentation_api_v1_segmentation_post"},"CatalogCategorySchema":{"properties":{"categoryId":{"$ref":"#/components/schemas/HomeDecorCategory"}},"type":"object","required":["categoryId"],"title":"CatalogCategorySchema"},"CatalogPaletteSchema":{"properties":{"paletteId":{"anyOf":[{"$ref":"#/components/schemas/MagicStyle"},{"$ref":"#/components/schemas/ColorPalette"}],"title":"Paletteid"}},"type":"object","required":["paletteId"],"title":"CatalogPaletteSchema"},"CatalogStyleSchema":{"properties":{"categoryId":{"$ref":"#/components/schemas/HomeDecorCategory"},"styleId":{"anyOf":[{"$ref":"#/components/schemas/MagicStyle"},{"$ref":"#/components/schemas/InteriorStyle"},{"$ref":"#/components/schemas/ExteriorStyle"},{"$ref":"#/components/schemas/GardenStyle"},{"$ref":"#/components/schemas/FloorStyle"}],"title":"Styleid"}},"type":"object","required":["categoryId","styleId"],"title":"CatalogStyleSchema"},"ColorPalette":{"type":"string","enum":["amethyst_dream","antique_sage","arctic_frost","arctic_lavender","autumn_harvest","azure_mirage","blush_and_brass","bohemian_rhapsody","candy_shop","coastal_breeze","cyberpunk_city","desert_oasis","desert_sand","earthy_harmony","earthy_hues","emerald","emerald_city","fairy_tale","forest","forest_retreat","french_country","fuschia","gothic_romance","industrial_chic","jewel_tones","lavender_fields","lilac_love","mid_century_modern","midnight_velvet","millennial_gray","minimalist_white","monochrome_noir","moody_blues","neon","ocean_depths","ocean_mist","pastel","pastel_dream","peach","retro_diner","royal_elegance","rustic_cabin","safari_adventure","sakura_bloom","scandinavian_minimal","space_odyssey","spring_awakening","steampunk_workshop","summer_fiesta","sunset_boulevard","terracotta","tropical_paradise","turquoise_lagoon","tuscan_sun","twilight_blues","urban_jungle","velvet_dusk","vintage_charm","warm_neutrals","whimsical_wish","winter_wonderland","zen_garden","paint-suggestion-1","paint-suggestion-2","paint-suggestion-3","paint-suggestion-4","paint-suggestion-5","paint-suggestion-6","paint-suggestion-7","paint-suggestion-8","paint-suggestion-9","paint-suggestion-10"],"title":"ColorPalette"},"CreditKey":{"type":"string","enum":["image"],"title":"CreditKey"},"DreamhomeTypesResponse":{"properties":{"credit_key":{"anyOf":[{"$ref":"#/components/schemas/CreditKey"},{"type":"null"}]}},"type":"object","title":"DreamhomeTypesResponse"},"ErrorResponseSchema":{"properties":{"error":{"type":"string","title":"Error","description":"Human-readable error message"},"error_code":{"type":"string","enum":["internal_error","unauthorized","forbidden","authentication_failed","access_denied","not_found","conflict","job_in_progress","rate_limit_exceeded","validation_error","quota_exceeded","premium_required","insufficient_balance","timeout","service_unavailable","external_service_error","auth_required","invalid_token","auth_failed","auth_or_device_required","verification_failed","signature_content_mismatch","cancelled","email_not_verified"],"title":"Error Code","description":"Machine-readable error code"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details","description":"Additional error details"}},"type":"object","required":["error","error_code"],"title":"ErrorResponseSchema","description":"Standard error response schema for OpenAPI documentation"},"ExteriorStyle":{"type":"string","enum":["art-deco","brutalist","chinese","cottage","farm-house","french","gothic","italianate","japanese","mediterranean","midcentury","middle-eastern","minimalistic","modern","moroccan","ski-chalet","spanish","exterior-suggestion-1","exterior-suggestion-10"],"title":"ExteriorStyle"},"FloorStyle":{"type":"string","enum":["carpet","epoxy","hard-wood","laminate","marble","natural-stone","persian-rug","polished-concrete","scandinavian","solid-wood","terrazzo","tile","tile-2","vinyl-plank","floor-suggestion-1","floor-suggestion-2","floor-suggestion-3","floor-suggestion-4","floor-suggestion-5","floor-suggestion-6","floor-suggestion-7"],"title":"FloorStyle"},"GardenStyle":{"type":"string","enum":["cottage","english","french-formal","japanese","mediterranean","minimalist","xeriscape","garden-suggestion-1","garden-suggestion-2","garden-suggestion-3","garden-suggestion-4","garden-suggestion-5","garden-suggestion-6","garden-suggestion-7","garden-suggestion-8","garden-suggestion-9","garden-suggestion-10"],"title":"GardenStyle"},"Gender":{"type":"string","enum":["male","female"],"title":"Gender","description":"Gender values."},"GenerationCostResponse":{"properties":{"cheap":{"type":"number","title":"Cheap"},"fast":{"type":"number","title":"Fast"},"best":{"type":"number","title":"Best"}},"type":"object","required":["cheap","fast","best"],"title":"GenerationCostResponse","description":"Estimated generation costs by quality tier."},"GenerationCreateRequest":{"properties":{"categoryId":{"$ref":"#/components/schemas/HomeDecorCategory","description":"The category ID (interior, exterior, garden, floor, paint)"},"generationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generationid","description":"Existing generation ID to retry in-place. Allowed only when retrying a failed generation."},"originalImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Originalimageurl","description":"URL of the uploaded image"},"originalAssetId":{"anyOf":[{"$ref":"#/components/schemas/MagicStyle"},{"$ref":"#/components/schemas/InteriorStyle"},{"$ref":"#/components/schemas/ExteriorStyle"},{"$ref":"#/components/schemas/GardenStyle"},{"$ref":"#/components/schemas/FloorStyle"},{"$ref":"#/components/schemas/ColorPalette"},{"type":"null"}],"title":"Originalassetid","description":"ID of the selected example asset"},"referenceImageUrls":{"items":{"type":"string"},"type":"array","title":"Referenceimageurls","description":"Reference image URL list"},"referenceAssetIds":{"items":{"anyOf":[{"$ref":"#/components/schemas/MagicStyle"},{"$ref":"#/components/schemas/InteriorStyle"},{"$ref":"#/components/schemas/ExteriorStyle"},{"$ref":"#/components/schemas/GardenStyle"},{"$ref":"#/components/schemas/FloorStyle"},{"$ref":"#/components/schemas/ColorPalette"}]},"type":"array","title":"Referenceassetids","description":"Reference asset ID list"},"styleIds":{"items":{"anyOf":[{"$ref":"#/components/schemas/MagicStyle"},{"$ref":"#/components/schemas/InteriorStyle"},{"$ref":"#/components/schemas/ExteriorStyle"},{"$ref":"#/components/schemas/GardenStyle"},{"$ref":"#/components/schemas/FloorStyle"}]},"type":"array","title":"Styleids","description":"Style ID list for the selected category."},"selectedSegments":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Selectedsegments","description":"List of selected segment IDs"},"segmentationJobId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Segmentationjobid","description":"The job ID of the segmentation"},"segmentationResultUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Segmentationresulturl","description":"Direct URL for segmentation result payload (preferred over segmentationJobId when provided)"},"paletteId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paletteid","description":"Palette ID. Ignored for garden category."},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt","description":"User's AI instruction text"},"qualityTier":{"$ref":"#/components/schemas/QualityTier","description":"Quality tier label: cheap|fast|best","default":"cheap"}},"type":"object","required":["categoryId"],"title":"GenerationCreateRequest","description":"Request schema for creating a new generation."},"GenerationCreateResponse":{"properties":{"generationId":{"type":"string","title":"Generationid"},"status":{"type":"string","title":"Status"}},"type":"object","required":["generationId","status"],"title":"GenerationCreateResponse","description":"Response schema returned after queueing a generation."},"GooglePlayBillingIdentityResponse":{"properties":{"obfuscatedAccountId":{"type":"string","maxLength":64,"minLength":1,"title":"Obfuscatedaccountid"}},"type":"object","required":["obfuscatedAccountId"],"title":"GooglePlayBillingIdentityResponse","description":"Opaque account identifier supplied to Google Play Billing."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HomeDecorCategory":{"type":"string","enum":["interior","exterior","garden","floor","paint"],"title":"HomeDecorCategory"},"HomeDecorUserResponse":{"properties":{"providerId":{"$ref":"#/components/schemas/AUTH_PROVIDER","description":"Auth provider (firebase, google, apple)"},"uid":{"type":"string","title":"Uid","description":"Firebase user ID"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"User email address"},"emailVerified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Emailverified","description":"Indicates if the user's email is verified"},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayname","description":"User display name"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"User's name"},"familyName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Familyname","description":"User's last name"},"profilePhoto":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profilephoto","description":"Profile photo URL"},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar","description":"Avatar seed or string identifier"},"fcmToken":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fcmtoken","description":"FCM token for push notifications"},"phoneNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phonenumber","description":"User's phone number"},"credits":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"number"}]},"propertyNames":{"$ref":"#/components/schemas/CreditKey"},"type":"object"},{"type":"null"}],"title":"Credits","description":"User credits balance keyed by HomeDecor credit keys"},"settings":{"anyOf":[{},{"type":"null"}],"title":"Settings"},"privacy":{"anyOf":[{},{"type":"null"}],"title":"Privacy"},"notifications":{"anyOf":[{},{"type":"null"}],"title":"Notifications"},"verification":{"anyOf":[{},{"type":"null"}],"title":"Verification"},"gender":{"anyOf":[{"$ref":"#/components/schemas/Gender"},{"type":"null"}]},"subscriptions":{"items":{"$ref":"#/components/schemas/UserSubscriptionSchema"},"type":"array","title":"Subscriptions","description":"User's subscriptions"},"activeSubscriptions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Activesubscriptions","description":"List of active subscription product IDs (computed field, not stored in DB)"},"isPremium":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ispremium","description":"Indicates if the user has any active subscriptions (computed field, not stored in DB)"},"hasTriggeredSalesNotification":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hastriggeredsalesnotification","description":"Whether the user has triggered a sales notification on first launch","default":false},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat","description":"Timestamp when the user was created"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedat","description":"Timestamp when the user was last updated"}},"type":"object","required":["providerId","uid"],"title":"HomeDecorUserResponse","description":"HomeDecor-specific user response schema."},"HomeDecorUserWrapperResponse":{"properties":{"user":{"$ref":"#/components/schemas/HomeDecorUserResponse"}},"type":"object","required":["user"],"title":"HomeDecorUserWrapperResponse","description":"Wrapper response containing HomeDecor user data."},"InteriorStyle":{"type":"string","enum":["80s-style","ancient-egyptian","baroque","biophilic","bohemian","cartoon","chocolate","christmas","coastal","cottagecore","cozy","creepy","cyberpunk","gamer","gothic","japandi","luxury","medieval","mediterranean","minimalistic","modern","rainbow","rustic","ski-chalet","soho-style","tropical","vintage","wood","interior-suggestion-1","interior-suggestion-2","interior-suggestion-3","interior-suggestion-4","interior-suggestion-5","interior-suggestion-6","interior-suggestion-7","interior-suggestion-8"],"title":"InteriorStyle"},"JobCancelRequest":{"properties":{"job_id":{"type":"string","title":"Job Id"}},"type":"object","required":["job_id"],"title":"JobCancelRequest"},"MagicStyle":{"type":"string","enum":["surprise_me"],"title":"MagicStyle"},"PaywallConfigResponse":{"properties":{"subscriptions":{"additionalProperties":true,"type":"object","title":"Subscriptions","default":{}},"products":{"additionalProperties":true,"type":"object","title":"Products","default":{}}},"type":"object","title":"PaywallConfigResponse"},"PurchaseInfo":{"properties":{"subscribable_skus":{"items":{"type":"string"},"type":"array","title":"Subscribable Skus"},"consumable_skus":{"items":{"type":"string"},"type":"array","title":"Consumable Skus"},"non_consumable_skus":{"items":{"type":"string"},"type":"array","title":"Non Consumable Skus"}},"type":"object","required":["subscribable_skus","consumable_skus"],"title":"PurchaseInfo","description":"Purchase information with SKUs."},"PurchaseRequest":{"properties":{"os":{"type":"string","title":"Os","description":"Operating system: 'ios' or 'android'"},"productId":{"type":"string","title":"Productid","description":"Product/subscription ID"},"purchaseToken":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purchasetoken","description":"Google Play purchase token"},"transactionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transactionid","description":"Transaction ID"},"originalTransactionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Originaltransactionid","description":"Original transaction ID"},"promoCode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promocode","description":"Optional promo code for bonuses"}},"type":"object","required":["os","productId"],"title":"PurchaseRequest","description":"Request schema for processing a purchase."},"PurchaseResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"subscription_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Subscription Active"},"expiry_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiry Date"}},"type":"object","required":["success","message"],"title":"PurchaseResponse","description":"Response schema for purchase processing."},"QualityTier":{"type":"string","enum":["cheap","fast","best"],"title":"QualityTier"},"ReferralRedeemRequest":{"properties":{"referral_code":{"type":"string","title":"Referral Code"},"os":{"type":"string","title":"Os"}},"type":"object","required":["referral_code","os"],"title":"ReferralRedeemRequest","description":"Request schema for redeeming a referral code."},"ReferralRedeemResponse":{"properties":{"type":{"type":"string","title":"Type"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"codes":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Codes"},"offerToken":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Offertoken"}},"type":"object","required":["type"],"title":"ReferralRedeemResponse","description":"Response schema for redeeming a referral code."},"SegmentationServiceResponseSchema":{"properties":{"segmentPredictions":{"title":"Segmentpredictions"},"segmentInfo":{"title":"Segmentinfo"},"jobId":{"type":"string","title":"Jobid"}},"type":"object","required":["jobId"],"title":"SegmentationServiceResponseSchema"},"SegmentationStartResponse":{"properties":{"jobId":{"type":"string","title":"Jobid","description":"ID of the submitted formatting job"},"status":{"type":"string","title":"Status","description":"Status of the job"}},"type":"object","required":["jobId","status"],"title":"SegmentationStartResponse"},"StyleCatalogResponse":{"properties":{"categories":{"items":{"$ref":"#/components/schemas/CatalogCategorySchema"},"type":"array","title":"Categories"},"styles":{"items":{"$ref":"#/components/schemas/CatalogStyleSchema"},"type":"array","title":"Styles"},"palettes":{"items":{"$ref":"#/components/schemas/CatalogPaletteSchema"},"type":"array","title":"Palettes"}},"type":"object","required":["categories","styles","palettes"],"title":"StyleCatalogResponse"},"SubscriptionDetails":{"properties":{"productId":{"type":"string","title":"Productid"},"isActive":{"type":"boolean","title":"Isactive"},"platform":{"type":"string","title":"Platform","default":"unknown"},"expiresAt":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expiresat"},"isRefunded":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Isrefunded","default":false}},"type":"object","required":["productId","isActive"],"title":"SubscriptionDetails","description":"Individual subscription details."},"SubscriptionStatus":{"properties":{"hasActiveSubscription":{"type":"boolean","title":"Hasactivesubscription"},"subscriptions":{"items":{"$ref":"#/components/schemas/SubscriptionDetails"},"type":"array","title":"Subscriptions"}},"type":"object","required":["hasActiveSubscription","subscriptions"],"title":"SubscriptionStatus","description":"User's subscription status."},"TrackLeadRequest":{"properties":{"action_source":{"type":"string","title":"Action Source","description":"Where the action occurred (e.g. 'website')","default":"website"},"event_source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Source Url","description":"The URL the user was on"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Optional email if they provided one"},"fbc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbc","description":"Facebook Click ID cookie (_fbc)"},"fbp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbp","description":"Facebook Browser ID cookie (_fbp)"},"event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Id","description":"Event ID generated on frontend for CAPI deduplication"},"fbclid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbclid","description":"Raw Facebook Click ID from URL"}},"type":"object","title":"TrackLeadRequest","description":"Request payload from the Landing Page when a user clicks 'Download' or 'Go to App'."},"TrackLeadResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"TrackLeadResponse"},"UserSubscriptionSchema":{"properties":{"isActive":{"type":"boolean","title":"Isactive"},"expiresAt":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiresat"},"productId":{"type":"string","title":"Productid"},"transactionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transactionid"},"createdAt":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdat"},"updatedAt":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updatedat"}},"type":"object","required":["isActive","productId"],"title":"UserSubscriptionSchema","description":"Schema for current and legacy user subscription objects in Firestore."},"UserUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name","description":"User's first name"},"familyName":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Familyname","description":"User's last name"},"profilePhoto":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Profilephoto","description":"URL of the user's profile photo"},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar","description":"Avatar seed or string identifier"},"fcmToken":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fcmtoken","description":"FCM token for push notifications"},"gender":{"anyOf":[{"$ref":"#/components/schemas/Gender"},{"type":"null"}],"description":"User's gender"}},"type":"object","title":"UserUpdateRequest","description":"Request schema for updating user profile information."},"UserUpdateResponse":{"properties":{"message":{"type":"string","title":"Message","description":"Status message"}},"type":"object","required":["message"],"title":"UserUpdateResponse","description":"Response schema for user update operation.","example":{"message":"User profile updated successfully"}},"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"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}},"servers":[{"url":"/dreamhome"}]}