{"openapi":"3.1.0","info":{"title":"Site Preproject AI Artifact Backend","description":"Artifact backend для n8n: импорт кейса, сохранение json/html/docx, скачивание файлов","version":"0.2.0"},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"boolean"}]},"type":"object","title":"Response Health Health Get"}}}}}}},"/n8n/import-case":{"post":{"tags":["n8n"],"summary":"Import Case From N8N","operationId":"import_case_from_n8n_n8n_import_case_post","requestBody":{"content":{"application/json":{"schema":{"title":"Raw Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Import Case From N8N N8N Import Case Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases":{"get":{"tags":["cases"],"summary":"List Cases","operationId":"list_cases_cases_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CaseSummary"},"type":"array","title":"Response List Cases Cases Get"}}}}}},"post":{"tags":["cases"],"summary":"Create Case","operationId":"create_case_cases_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseIntake"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseRecord"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}":{"get":{"tags":["cases"],"summary":"Get Case","operationId":"get_case_cases__case_id__get","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseRecord"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/from-form":{"post":{"tags":["cases"],"summary":"Create Case From Form","operationId":"create_case_from_form_cases_from_form_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_case_from_form_cases_from_form_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseRecord"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/json/download":{"get":{"tags":["exports"],"summary":"Download Case Json","operationId":"download_case_json_cases__case_id__json_download_get","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/export/docx":{"post":{"tags":["exports"],"summary":"Export Case Docx","operationId":"export_case_docx_cases__case_id__export_docx_post","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Export Case Docx Cases  Case Id  Export Docx Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/export/docx/download":{"get":{"tags":["exports"],"summary":"Download Case Docx","operationId":"download_case_docx_cases__case_id__export_docx_download_get","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/export/html":{"post":{"tags":["exports"],"summary":"Export Case Html","operationId":"export_case_html_cases__case_id__export_html_post","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Export Case Html Cases  Case Id  Export Html Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/preview/html":{"get":{"tags":["exports"],"summary":"Preview Case Html","operationId":"preview_case_html_cases__case_id__preview_html_get","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/export/html/download":{"get":{"tags":["exports"],"summary":"Download Case Html","operationId":"download_case_html_cases__case_id__export_html_download_get","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/download/html":{"get":{"tags":["exports"],"summary":"Legacy Download Case Html","operationId":"legacy_download_case_html_cases__case_id__download_html_get","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/download/docx":{"get":{"tags":["exports"],"summary":"Legacy Download Case Docx","operationId":"legacy_download_case_docx_cases__case_id__download_docx_get","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/download/json":{"get":{"tags":["exports"],"summary":"Legacy Download Case Json","operationId":"legacy_download_case_json_cases__case_id__download_json_get","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AnalysisMeta":{"properties":{"mode":{"type":"string","title":"Mode","default":"fallback"},"llm_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Error"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"run_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Mode"},"project_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Mode"},"route":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route"},"skip_html_prototype":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Skip Html Prototype"},"manager_report_schema_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manager Report Schema Version"},"manager_report_ready_for_export":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Manager Report Ready For Export"},"backend_request_contract_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backend Request Contract Version"}},"additionalProperties":true,"type":"object","title":"AnalysisMeta"},"BlockDraft":{"properties":{"block_id":{"type":"string","title":"Block Id"},"title":{"type":"string","title":"Title"},"purpose":{"type":"string","title":"Purpose"},"draft_text":{"type":"string","title":"Draft Text"},"cta":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cta"},"needed_materials":{"items":{"type":"string"},"type":"array","title":"Needed Materials"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"layout_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layout Type"},"visual_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Visual Hint"},"emphasis":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emphasis"},"section_style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Section Style"},"has_image_placeholder":{"type":"boolean","title":"Has Image Placeholder","default":false},"image_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Note"}},"type":"object","required":["block_id","title","purpose","draft_text"],"title":"BlockDraft"},"Body_create_case_from_form_cases_from_form_post":{"properties":{"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"},"raw_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Text"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"links_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Links Json"},"files":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Files","default":[]}},"type":"object","title":"Body_create_case_from_form_cases_from_form_post"},"CaseIntake":{"properties":{"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"},"raw_text":{"type":"string","minLength":1,"title":"Raw Text"},"links":{"items":{"$ref":"#/components/schemas/InputLink"},"type":"array","title":"Links","default":[]},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["raw_text"],"title":"CaseIntake"},"CaseRecord":{"properties":{"case_id":{"type":"string","title":"Case Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"intake":{"$ref":"#/components/schemas/CaseIntake"},"extracted":{"$ref":"#/components/schemas/ExtractedFactsResult"},"research":{"$ref":"#/components/schemas/ResearchResult"},"site_skeleton":{"$ref":"#/components/schemas/SiteSkeleton"},"research_report":{"additionalProperties":true,"type":"object","title":"Research Report"},"manager_report":{"additionalProperties":true,"type":"object","title":"Manager Report"},"semantic_validation":{"additionalProperties":true,"type":"object","title":"Semantic Validation"},"context":{"additionalProperties":true,"type":"object","title":"Context"},"output_policy":{"additionalProperties":true,"type":"object","title":"Output Policy"},"artifacts":{"additionalProperties":true,"type":"object","title":"Artifacts"},"html_meta":{"additionalProperties":true,"type":"object","title":"Html Meta"},"html_quality":{"additionalProperties":true,"type":"object","title":"Html Quality"},"meta":{"$ref":"#/components/schemas/AnalysisMeta"}},"type":"object","required":["case_id","intake","extracted"],"title":"CaseRecord","description":"Сохранённый кейс.\n\nManager Report V5.3 и его служебные данные хранятся отдельно от\nResearchResult. Это не даёт Pydantic потерять новые поля при валидации\nстарой схемой research.py и сохраняет полный отчёт в case.json."},"CaseSummary":{"properties":{"case_id":{"type":"string","title":"Case Id"},"project_name":{"type":"string","title":"Project Name"},"site_type":{"type":"string","title":"Site Type"},"mode":{"type":"string","title":"Mode"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"has_docx":{"type":"boolean","title":"Has Docx","default":false},"has_html":{"type":"boolean","title":"Has Html","default":false}},"type":"object","required":["case_id","project_name","site_type","mode"],"title":"CaseSummary"},"ExtractedFactsResult":{"properties":{"facts":{"items":{"$ref":"#/components/schemas/FactItem"},"type":"array","title":"Facts","default":[]},"gaps":{"items":{"$ref":"#/components/schemas/GapItem"},"type":"array","title":"Gaps","default":[]},"contradictions":{"items":{"type":"string"},"type":"array","title":"Contradictions","default":[]}},"type":"object","title":"ExtractedFactsResult"},"FactItem":{"properties":{"field_name":{"type":"string","title":"Field Name","description":"Например: company_name, geography, services"},"value":{"type":"string","title":"Value"},"status":{"$ref":"#/components/schemas/FactStatus"},"source":{"anyOf":[{"$ref":"#/components/schemas/SourceRef"},{"type":"null"}]},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},"type":"object","required":["field_name","value","status"],"title":"FactItem"},"FactStatus":{"type":"string","enum":["client_confirmed","open_source","inferred","hypothesis"],"title":"FactStatus"},"GapItem":{"properties":{"field_name":{"type":"string","title":"Field Name","description":"Какое поле отсутствует или заполнено слабо"},"reason":{"type":"string","title":"Reason","description":"Почему это важно"},"question_to_client":{"type":"string","title":"Question To Client","description":"Как это уточнить у клиента"}},"type":"object","required":["field_name","reason","question_to_client"],"title":"GapItem"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InputLink":{"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"}},"type":"object","required":["url"],"title":"InputLink"},"PageDraft":{"properties":{"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"purpose":{"type":"string","title":"Purpose"},"blocks":{"items":{"$ref":"#/components/schemas/BlockDraft"},"type":"array","title":"Blocks"}},"type":"object","required":["slug","title","purpose"],"title":"PageDraft"},"ResearchResult":{"properties":{"official_site_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Official Site Url"},"discovered_business_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovered Business Hint"},"niche_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Niche Summary"},"discovered_navigation":{"items":{},"type":"array","title":"Discovered Navigation"},"discovered_primary_entities":{"items":{},"type":"array","title":"Discovered Primary Entities"},"competitor_references":{"items":{},"type":"array","title":"Competitor References"},"typical_blocks":{"items":{},"type":"array","title":"Typical Blocks"},"faq_topics":{"items":{},"type":"array","title":"Faq Topics"},"sources":{"items":{},"type":"array","title":"Sources"},"confirmed_web_facts":{"items":{},"type":"array","title":"Confirmed Web Facts"},"niche_observations":{"items":{},"type":"array","title":"Niche Observations"},"competitor_or_reference_observations":{"items":{},"type":"array","title":"Competitor Or Reference Observations"},"content_opportunities":{"items":{},"type":"array","title":"Content Opportunities"},"recommended_sections":{"items":{},"type":"array","title":"Recommended Sections"},"advantages_patterns":{"items":{},"type":"array","title":"Advantages Patterns"},"visual_direction_hints":{"items":{},"type":"array","title":"Visual Direction Hints"},"risks_and_limits":{"items":{},"type":"array","title":"Risks And Limits"},"missing_materials":{"items":{},"type":"array","title":"Missing Materials"},"redesign_notes":{"items":{},"type":"array","title":"Redesign Notes"},"source_summary":{"items":{},"type":"array","title":"Source Summary"},"existing_site_observations":{"additionalProperties":true,"type":"object","title":"Existing Site Observations"},"brief_sections":{"additionalProperties":true,"type":"object","title":"Brief Sections"},"task_interpretation":{"additionalProperties":true,"type":"object","title":"Task Interpretation"},"research_plan":{"additionalProperties":true,"type":"object","title":"Research Plan"},"web_research_raw":{"additionalProperties":true,"type":"object","title":"Web Research Raw"}},"additionalProperties":true,"type":"object","title":"ResearchResult","description":"Гибкая research-схема для Beta-2.\n\nПочему так свободно:\n- 03 теперь может отдавать не только list[str], но и объекты;\n- web-search может приносить sources, brief_sections, redesign_notes;\n- DOCX/HTML сами разберут структуру мягко."},"SiteSkeleton":{"properties":{"site_type":{"type":"string","title":"Site Type"},"site_map":{"items":{"type":"string"},"type":"array","title":"Site Map"},"pages":{"items":{"$ref":"#/components/schemas/PageDraft"},"type":"array","title":"Pages"},"missing_materials":{"items":{"type":"string"},"type":"array","title":"Missing Materials"}},"type":"object","required":["site_type"],"title":"SiteSkeleton"},"SourceRef":{"properties":{"source_type":{"$ref":"#/components/schemas/SourceType"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["source_type"],"title":"SourceRef"},"SourceType":{"type":"string","enum":["client_dialog","client_message","official_site","social","directory","reference_site","article","other"],"title":"SourceType"},"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"}}}}