{"openapi":"3.1.0","info":{"title":"Condition Report","version":"1.0.0"},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/og-image.png":{"get":{"summary":"Og Image","description":"Generate OG image for social/iMessage link previews.","operationId":"og_image_og_image_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/robots.txt":{"get":{"summary":"Robots Txt","operationId":"robots_txt_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/llms.txt":{"get":{"summary":"Llms Txt","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/llms-full.txt":{"get":{"summary":"Llms Full Txt","operationId":"llms_full_txt_llms_full_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/agent-offer.json":{"get":{"summary":"Agent Offer","operationId":"agent_offer__well_known_agent_offer_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/ai-plugin.json":{"get":{"summary":"Ai Plugin","operationId":"ai_plugin__well_known_ai_plugin_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/mcp/tools":{"get":{"summary":"Mcp Tools","operationId":"mcp_tools_v1_mcp_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap Xml","operationId":"sitemap_xml_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/indexnow-key.txt":{"get":{"summary":"Indexnow Key File","operationId":"indexnow_key_file_indexnow_key_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/{indexnow_key}.txt":{"get":{"summary":"Indexnow Key Alias","operationId":"indexnow_key_alias__indexnow_key__txt_get","parameters":[{"name":"indexnow_key","in":"path","required":true,"schema":{"type":"string","title":"Indexnow Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/app":{"get":{"summary":"App Alias","operationId":"app_alias_app_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/internachi":{"get":{"summary":"Internachi Landing","operationId":"internachi_landing_internachi_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/ashi":{"get":{"summary":"Ashi Landing","operationId":"ashi_landing_ashi_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/terms":{"get":{"summary":"Terms Page","description":"Serve Terms of Service page.","operationId":"terms_page_terms_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/privacy":{"get":{"summary":"Privacy Page","description":"Serve Privacy Policy page.","operationId":"privacy_page_privacy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/user/status":{"get":{"summary":"User Status","description":"Get user's current status — reports used, access level.","operationId":"user_status_api_user_status_get","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/attribution/touch":{"post":{"summary":"Attribution Touch","operationId":"attribution_touch_api_attribution_touch_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/upload-photos":{"post":{"summary":"Upload Photos","description":"Upload photos and assign room names. Returns photo IDs for analysis.","operationId":"upload_photos_api_upload_photos_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_photos_api_upload_photos_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analyze":{"post":{"summary":"Analyze Report","description":"Analyze uploaded photos and generate condition descriptions.","operationId":"analyze_report_api_analyze_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/report/{report_id}/pdf":{"get":{"summary":"Download Report Pdf","description":"Download the generated PDF report.","operationId":"download_report_pdf_api_report__report_id__pdf_get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"fp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fp"}},{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/report/{report_id}/signature":{"post":{"summary":"Add Signature","description":"Save a signature image and regenerate the PDF with it embedded.","operationId":"add_signature_api_report__report_id__signature_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/report/{report_id}":{"get":{"summary":"Get Report","description":"Get report data (without PDF).","operationId":"get_report_api_report__report_id__get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/checkout/single":{"post":{"summary":"Checkout Single","description":"Create Stripe checkout for a single report.","operationId":"checkout_single_api_checkout_single_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/validate-partner-code":{"post":{"summary":"Api Validate Partner Code","operationId":"api_validate_partner_code_api_validate_partner_code_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/partner-codes/add":{"post":{"summary":"Add Partner Code","operationId":"add_partner_code_api_partner_codes_add_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/partner-codes/stats":{"get":{"summary":"Partner Code Stats","operationId":"partner_code_stats_api_partner_codes_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/verify-payment":{"post":{"summary":"Verify Payment","description":"Verify a Stripe checkout session and credit user immediately (no webhook wait).","operationId":"verify_payment_api_verify_payment_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/report/{report_id}/share":{"post":{"summary":"Create Share Link","description":"Generate a shareable link for the report PDF (valid 7 days).","operationId":"create_share_link_api_report__report_id__share_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}":{"get":{"summary":"Download Shared Report","description":"Download a shared report PDF via token (no auth needed).","operationId":"download_shared_report_share__token__get","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"}}}}}}},"/api/checkout/pro":{"post":{"summary":"Checkout Pro","description":"Create Stripe checkout for Pro subscription.","operationId":"checkout_pro_api_checkout_pro_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/checkout/enterprise":{"post":{"summary":"Checkout Enterprise","description":"Create Stripe checkout for Enterprise subscription.","operationId":"checkout_enterprise_api_checkout_enterprise_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/email-report":{"post":{"summary":"Email Report","description":"Email a PDF report to the specified address.","operationId":"email_report_api_email_report_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhook":{"post":{"summary":"Stripe Webhook","description":"Handle Stripe webhook events.","operationId":"stripe_webhook_api_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/account/signup":{"post":{"summary":"Account Signup","description":"Create account with email + password. Links fingerprint to email.","operationId":"account_signup_api_account_signup_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/login":{"post":{"summary":"Account Login","description":"Login with email + password. Returns account info and links fingerprint.","operationId":"account_login_api_account_login_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/profile":{"get":{"summary":"Account Profile","description":"Get account profile for logged-in user (by fingerprint -> email lookup).","operationId":"account_profile_api_account_profile_get","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/update":{"post":{"summary":"Account Update","description":"Update account name/company.","operationId":"account_update_api_account_update_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/verify-email":{"get":{"summary":"Verify Email","description":"Verify email address via token link.","operationId":"verify_email_api_account_verify_email_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/resend-verification":{"post":{"summary":"Resend Verification","description":"Resend verification email for logged-in user.","operationId":"resend_verification_api_account_resend_verification_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/request-reset":{"post":{"summary":"Request Password Reset","description":"Send password reset email. Always returns success (no email enumeration).","operationId":"request_password_reset_api_account_request_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/account/request-password-reset":{"post":{"summary":"Request Password Reset Alias","description":"Compatibility alias for password reset request endpoint.","operationId":"request_password_reset_alias_api_account_request_password_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/account/reset-password":{"post":{"summary":"Reset Password","description":"Reset password using token from email.","operationId":"reset_password_api_account_reset_password_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/account/request-email-verification":{"post":{"summary":"Request Email Verification Alias","description":"Compatibility alias for resend verification endpoint.","operationId":"request_email_verification_alias_api_account_request_email_verification_post","parameters":[{"name":"x-fingerprint","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_upload_photos_api_upload_photos_post":{"properties":{"photos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Photos"},"room_names":{"type":"string","title":"Room Names"}},"type":"object","required":["photos","room_names"],"title":"Body_upload_photos_api_upload_photos_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}