{"openapi":"3.1.0","info":{"title":"Contract AI MVP API","version":"0.1.0"},"paths":{"/v1/templates":{"get":{"tags":["v1"],"summary":"List Templates","operationId":"list_templates_v1_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Templates V1 Templates Get"}}}}},"security":[{"APIKeyHeader":[]}]},"post":{"tags":["v1"],"summary":"Create Template","operationId":"create_template_v1_templates_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1TemplateCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Template V1 Templates Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/templates/{template_id}":{"get":{"tags":["v1"],"summary":"Get Template","operationId":"get_template_v1_templates__template_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Template V1 Templates  Template Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/templates/{template_id}/versions":{"post":{"tags":["v1"],"summary":"New Template Version","operationId":"new_template_version_v1_templates__template_id__versions_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1TemplateVersion"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response New Template Version V1 Templates  Template Id  Versions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts":{"post":{"tags":["v1"],"summary":"Create Contract","operationId":"create_contract_v1_contracts_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1ContractCreate"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Contract V1 Contracts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["v1"],"summary":"List Contracts","operationId":"list_contracts_v1_contracts_get","security":[{"APIKeyHeader":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Contracts V1 Contracts Get"}}}}}}},"/v1/contracts/{case_id}/signature-requests":{"post":{"tags":["v1"],"summary":"Request Signature","operationId":"request_signature_v1_contracts__case_id__signature_requests_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Request Signature V1 Contracts  Case Id  Signature Requests Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/{case_id}/signature":{"get":{"tags":["v1"],"summary":"Signature Status","operationId":"signature_status_v1_contracts__case_id__signature_get","security":[{"APIKeyHeader":[]}],"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":true,"title":"Response Signature Status V1 Contracts  Case Id  Signature Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/embed-sessions":{"post":{"tags":["v1"],"summary":"Create Embed Session","operationId":"create_embed_session_v1_embed_sessions_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Embed Session V1 Embed Sessions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/branding":{"put":{"tags":["v1"],"summary":"Set Branding","operationId":"set_branding_v1_branding_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Set Branding V1 Branding Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/usage":{"get":{"tags":["v1"],"summary":"Usage","operationId":"usage_v1_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Usage V1 Usage Get"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/account/capabilities":{"get":{"tags":["v1"],"summary":"Account Capabilities","description":"O que esta conta pode fazer. Mesma função de serviço da tool MCP\nget_account_capabilities (public.capacidades) — Decisão Fechada: tool MCP =\nendpoint /v1 = mesma função de serviço.","operationId":"account_capabilities_v1_account_capabilities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Account Capabilities V1 Account Capabilities Get"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/contracts/{case_id}":{"get":{"tags":["v1"],"summary":"Get Contract","operationId":"get_contract_v1_contracts__case_id__get","security":[{"APIKeyHeader":[]}],"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":true,"title":"Response Get Contract V1 Contracts  Case Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/{case_id}/outputs/{filename}":{"get":{"tags":["v1"],"summary":"Download Output","operationId":"download_output_v1_contracts__case_id__outputs__filename__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/{case_id}/versions":{"get":{"tags":["v1"],"summary":"List Versions V1","description":"D2 — histórico de versões (sem o texto das cláusulas: só a contagem).","operationId":"list_versions_v1_v1_contracts__case_id__versions_get","security":[{"APIKeyHeader":[]}],"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":true,"title":"Response List Versions V1 V1 Contracts  Case Id  Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/{case_id}/versions/diff":{"get":{"tags":["v1"],"summary":"Diff Versions V1","description":"D2 — o que mudou entre duas versões (padrão: as duas últimas), por cláusula:\nalteradas, novas e removidas, com a leitura de risco vigente. MESMA função de\nserviço da tool MCP ``compare_versions``.","operationId":"diff_versions_v1_v1_contracts__case_id__versions_diff_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"base","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Base"}},{"name":"new","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"New"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Diff Versions V1 V1 Contracts  Case Id  Versions Diff Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/{case_id}/attachments":{"post":{"tags":["v1"],"summary":"Add Attachment V1","description":"F15/D4 — documento de apoio pelo tenant. Mesma função de serviço do /cases e\nda tool MCP ``add_attachment``: extrai o texto, registra e entrega ao agente como\nTURNO (o documento é DADO, nunca comando).","operationId":"add_attachment_v1_v1_contracts__case_id__attachments_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_add_attachment_v1_v1_contracts__case_id__attachments_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Add Attachment V1 V1 Contracts  Case Id  Attachments Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/{case_id}/answers":{"post":{"tags":["v1"],"summary":"Answer Contract","operationId":"answer_contract_v1_contracts__case_id__answers_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Answer Contract V1 Contracts  Case Id  Answers Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/embed/{token}":{"get":{"tags":["embed"],"summary":"Context","operationId":"context_embed__token__get","security":[{"APIKeyHeader":[]}],"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"}}}}}}},"/embed/{token}/answers":{"post":{"tags":["embed"],"summary":"Answers","operationId":"answers_embed__token__answers_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/account/mcp-key":{"get":{"tags":["account"],"summary":"Get Key","description":"Estado da chave pessoal (NUNCA o segredo — só prefixo e último uso).","operationId":"get_key_account_mcp_key_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Key Account Mcp Key Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["account"],"summary":"Rotate Key","description":"Emite uma chave pessoal nova e REVOGA a anterior (uma ativa por conta).","operationId":"rotate_key_account_mcp_key_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rotate Key Account Mcp Key Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/cases":{"get":{"summary":"List Cases","operationId":"list_cases_cases_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Cases Cases Get"}}}}},"security":[{"APIKeyHeader":[]}]},"post":{"summary":"Create Case","description":"Open a creation case from free text + the open `fields` map.\n\n`fields.base_case_id` (optional) makes the draft START from an existing case's\nclauses instead of from scratch: the base is copied deterministically into the new\ncase and reaches ONLY the drafter's prompt (see agent/base_contract.py). NOTE: this\nsurface has a single global API key and does not know who owns a case, so the base\ncase is validated for existence, never for ownership - the caller (the View proxy)\nmust confirm the base case belongs to the logged-in user before forwarding.","operationId":"create_case_cases_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCaseRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseAcceptedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/cases/analyze":{"post":{"summary":"Analyze Case","description":"Open a case from an uploaded contract of ANY type (not just service): several\nimages (photographed pages), or a single PDF/DOCX/TXT. Images and scanned PDFs are\nOCR'd server-side. user_party_index (which extracted party is the user) is the primary\nside signal; user_role is the open, human-readable label.","operationId":"analyze_case_cases_analyze_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_analyze_case_cases_analyze_post"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseAcceptedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/cases/extract-parties":{"post":{"summary":"Extract Parties Case","description":"Lightweight, synchronous side-confirmation step: extract ONLY the document's\nparties (one cheap call; OCRs just the first page when needed). Does NOT run the\nanalysis and does NOT fire the completion webhook (it must not count as an analysis).\nThe frontend confirms the user_role, then runs the analysis via POST /cases/{id}/reanalyze.","operationId":"extract_parties_case_cases_extract_parties_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_extract_parties_case_cases_extract_parties_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartiesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/cases/{case_id}/chat":{"post":{"summary":"Chat Turn","description":"Synchronous conversational turn: awaits the async turn (non-blocking) and\nreturns the assistant reply immediately. Fires the completion webhook in the\nbackground (after the response) so an on-demand turn ('aprofundar':\nreview_risk/explain_clauses + clauses.json signal backfill) persists like the\nasync jobs, without delaying the synchronous reply.","operationId":"chat_turn_cases__case_id__chat_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Chat Turn Cases  Case Id  Chat Post","$ref":"#/components/schemas/CaseState"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/ask":{"post":{"summary":"Ask Case","description":"O turno do painel de chat (O6): leitura, explicacao e PROPOSTA, nunca escrita.\n\nO /chat roda o driver completo, com draft_contract no catalogo, entao uma\npergunta no painel podia sobrescrever draft.json sem versionar. Este caminho\nnasce sem tool nenhuma: uma chamada estruturada com contexto montado por codigo\n(push minimo + retrieval deterministico), citacao conferida verbatim e mudanca\nso como proposta, que o dono aplica pelo caminho versionado.","operationId":"ask_case_cases__case_id__ask_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ask Case Cases  Case Id  Ask Post"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/messages":{"post":{"summary":"Add Message","operationId":"add_message_cases__case_id__messages_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseAcceptedResponse"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/uploads":{"post":{"summary":"Upload To Case","description":"Re-upload with the same rules as /analyze: several images (photographed pages)\nOR one PDF/DOCX/TXT, page-capped and size-capped.","operationId":"upload_to_case_cases__case_id__uploads_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_to_case_cases__case_id__uploads_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseAcceptedResponse"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/reanalyze":{"post":{"summary":"Reanalyze Case","description":"Re-analyze the SAME uploaded document under another side (no new upload).","operationId":"reanalyze_case_cases__case_id__reanalyze_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReanalyzeRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseAcceptedResponse"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/attachments":{"post":{"summary":"Add Attachment","description":"F15 — documento de APOIO (proposta, orçamento, escopo): extrai o texto (mesmo\npipeline/OCR do upload) e entrega ao agente como TURNO, para ele preencher o que\nfaltava citando a origem. O arquivo NÃO substitui o contrato do caso.","operationId":"add_attachment_cases__case_id__attachments_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_add_attachment_cases__case_id__attachments_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Add Attachment Cases  Case Id  Attachments Post"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Attachments","description":"Documentos de apoio já anexados a este caso.","operationId":"list_attachments_cases__case_id__attachments_get","security":[{"APIKeyHeader":[]}],"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":true,"title":"Response List Attachments Cases  Case Id  Attachments Get","$ref":"#/components/schemas/CaseState"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/risk-refresh":{"post":{"summary":"Risk Refresh","description":"D3 — versão nova do contrato: re-analisa SÓ as cláusulas que mudaram e\nreaproveita o risco das demais (cache por texto). Busca a versão vigente da\nnegociação no banco; sem versão nova, é no-op explícito.","operationId":"risk_refresh_cases__case_id__risk_refresh_post","security":[{"APIKeyHeader":[]}],"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":true,"title":"Response Risk Refresh Cases  Case Id  Risk Refresh Post"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/risk-decision":{"post":{"summary":"Risk Decision","description":"Record the user's risk decision and fire the persist-case webhook in the\nbackground, so the saved case is enriched with the on-demand risk artifacts\n(risk.json/explanations.json) that the early review.json webhook could not carry.","operationId":"risk_decision_cases__case_id__risk_decision_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskDecisionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Risk Decision Cases  Case Id  Risk Decision Post","$ref":"#/components/schemas/CaseState"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}":{"get":{"summary":"Get Case","operationId":"get_case_cases__case_id__get","security":[{"APIKeyHeader":[]}],"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":true,"title":"Response Get Case Cases  Case Id  Get","$ref":"#/components/schemas/CaseState"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/document":{"post":{"summary":"Build Document","description":"Gera o CONTRATO (PDF e DOCX) do caso, com as edições do usuário aplicadas.\n\nExiste porque um contrato RECEBIDO não tem `draft.json`: só a segmentação em\n`clauses.json`. Sem esta rota, \"baixar o contrato com as minhas alterações\" não\nexistia, cada superfície da View gerava um documento com uma cara diferente, e a\nselagem da assinatura copiava um `draft.pdf` que nunca fora gerado.\n\n`edits`: {clause_id: texto reescrito}. O que não vier sai verbatim.\n`clausulas`: a lista INTEIRA, quando quem chama já é dono da verdade (a selagem\nmanda as cláusulas da versão assinada, que podem incluir cláusulas acrescentadas\ndepois da análise, e que o disco do caso não conhece).\n`branding`: identidade do documento (marca, testemunhas, rubrica, tipografia).\n`partes`: as N partes com papel que a plataforma conhece\n(`[{nome, documento?, papel?, assina?, role?, side?}]`, na ordem de exibição).\nQuem tem `papel: \"testemunha\"` assina no bloco de testemunhas COM NOME, em vez\nda linha em branco que saía antes; as demais qualificam o preâmbulo e assinam.\nSem `partes`, o documento sai exatamente como saía.\n`assinaturas`: `{selo: {...}, partes: [{nome, documento?, email?, assinado_em,\nip?, metodo?, papel?}]}` — a selagem manda quem JÁ assinou. Com isso o documento\ndeixa de sair com linhas em branco e ganha a página de conferência. Sem isso, o\ndocumento continua sendo o de antes de assinar, que é o certo enquanto não foi.","operationId":"build_document_cases__case_id__document_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Build Document Cases  Case Id  Document Post"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/artifacts":{"get":{"summary":"List Artifacts","description":"O que este caso tem, o que falta, e o que cada coisa que falta ainda precisa.\n\nArtefato nasce ao longo do tempo: a balanca e o parecer nao existiam ha duas\nsemanas, entao todo contrato analisado antes disso esta sem eles. Sem esta lista,\na unica forma de descobrir era abrir a tela e reparar na ausencia.","operationId":"list_artifacts_cases__case_id__artifacts_get","security":[{"APIKeyHeader":[]}],"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":true,"title":"Response List Artifacts Cases  Case Id  Artifacts Get"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/artifacts/{nome}":{"post":{"summary":"Regenerate Artifact","description":"Gera o artefato pedido, e o que ele exige, so quando pedido.\n\nNao regera a analise inteira de proposito: reescrever o que ja esta certo custa\ntoken e muda um texto que o usuario pode ja ter lido. Mas se o artefato pedido\ndepende de outro DERIVADO que nao existe, esse nasce junto: amarracao entre\nartefatos nossos e problema nosso, nao do usuario.\n\n`review.json` e `clauses.json` sao a leitura-base e nao entram aqui: refaze-los e\nreanalisar, e para isso existe /reanalyze, que passa pelo gate de cota.","operationId":"regenerate_artifact_cases__case_id__artifacts__nome__post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"nome","in":"path","required":true,"schema":{"type":"string","title":"Nome"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/derivar":{"post":{"summary":"Derivar Versao","description":"Gera o TERMO ADITIVO ou o DISTRATO deste contrato (F11, lifecycle).\n\nO caminho e o mesmo do contrato importado de outra plataforma: o cliente analisa o\nque ja assinou e entao pede o que muda (`aditivo`) ou o encerramento (`distrato`).\nO instrumento sai como artefato JSON tipado (`aditivo.json`/`distrato.json`) e como\ndocumento (`.pdf` e `.docx`) pelo gerador unico, com nomes proprios para nao\nsobrescrever o contrato de origem no mesmo caso.\n\n`clausulas` (opcional) e a versao VIGENTE que a plataforma conhece: quando vem, ela\nmanda sobre o disco do caso. `instrucao` e o que o cliente quer, em portugues.\n\nA resposta devolve as clausulas geradas prontas para a RPC `derivar_versao` da\nplataforma; a rota nao grava versao nenhuma (quem grava e a plataforma), e por isso\nnao dispara o webhook de conclusao - a exemplo de POST /cases/{id}/document.\n\nO nome em portugues acompanha o vocabulario juridico brasileiro que o corpo ja usa\n(`aditivo`, `distrato`, `clausulas`, como em /document) e a RPC `derivar_versao`.","operationId":"derivar_versao_cases__case_id__derivar_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Derivar Versao Cases  Case Id  Derivar Post"}}}},"404":{"description":"Case not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/outputs":{"get":{"summary":"List Outputs","operationId":"list_outputs_cases__case_id__outputs_get","security":[{"APIKeyHeader":[]}],"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":true,"title":"Response List Outputs Cases  Case Id  Outputs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cases/{case_id}/outputs/{filename}":{"get":{"summary":"Download Output","operationId":"download_output_cases__case_id__outputs__filename__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AskRequest":{"properties":{"message":{"type":"string","minLength":1,"title":"Message"},"clause_id":{"type":"string","title":"Clause Id","default":""},"trecho":{"type":"string","title":"Trecho","default":""}},"type":"object","required":["message"],"title":"AskRequest","description":"Turno do painel de chat (O6): pergunta + ancora opcional (clausula/trecho)."},"Body_add_attachment_cases__case_id__attachments_post":{"properties":{"attachment":{"type":"string","contentMediaType":"application/octet-stream","title":"Attachment"}},"type":"object","required":["attachment"],"title":"Body_add_attachment_cases__case_id__attachments_post"},"Body_add_attachment_v1_v1_contracts__case_id__attachments_post":{"properties":{"attachment":{"type":"string","contentMediaType":"application/octet-stream","title":"Attachment"}},"type":"object","required":["attachment"],"title":"Body_add_attachment_v1_v1_contracts__case_id__attachments_post"},"Body_analyze_case_cases_analyze_post":{"properties":{"contract_file":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Contract File"},"user_role":{"type":"string","title":"User Role","description":"Open, human-readable side label (prestador, locatario, ...).","default":""},"user_party_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Party Index","description":"Which extracted party is the user (PRIMARY side signal)."},"user_goal":{"type":"string","title":"User Goal","description":"Free-text user intent; NOT a place for structured account context (use `fields`).","default":"Quero saber se posso assinar ou o que pedir para mudar."},"fields":{"type":"string","title":"Fields","description":"The open `fields` object, JSON-SERIALIZED into a string (multipart cannot nest objects). Example: '{\"cenario_atraso\": \"multa 2%\", \"valor\": \"R$ 8.000\"}'. Parsed server-side; invalid JSON -> 400. On JSON endpoints (POST /cases) `fields` is a real object, not a string.","default":""},"client_dispatch_id":{"type":"string","title":"Client Dispatch Id","description":"Idempotency key (client-generated UUID): a retry with the SAME id reuses the existing case instead of opening a duplicate. Safe to pair with a dispatch gate.","default":""}},"type":"object","required":["contract_file"],"title":"Body_analyze_case_cases_analyze_post"},"Body_extract_parties_case_cases_extract_parties_post":{"properties":{"contract_file":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Contract File"},"client_dispatch_id":{"type":"string","title":"Client Dispatch Id","description":"Idempotency key: a retry with the same id reuses the case.","default":""}},"type":"object","required":["contract_file"],"title":"Body_extract_parties_case_cases_extract_parties_post"},"Body_upload_to_case_cases__case_id__uploads_post":{"properties":{"contract_file":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Contract File"}},"type":"object","required":["contract_file"],"title":"Body_upload_to_case_cases__case_id__uploads_post"},"CaseAcceptedResponse":{"properties":{"case_id":{"type":"string","title":"Case Id"},"status":{"type":"string","title":"Status"},"status_url":{"type":"string","title":"Status Url"},"outputs_url":{"type":"string","title":"Outputs Url"}},"type":"object","required":["case_id","status","status_url","outputs_url"],"title":"CaseAcceptedResponse"},"CaseState":{"properties":{"case_id":{"type":"string","title":"Case Id"},"mode":{"type":"string","enum":["create","analyze"],"title":"Mode"},"status":{"type":"string","enum":["queued","coletando","redigindo","revisando","pronto","bloqueado","concluido","aguardando_usuario"],"title":"Status"},"block_reason":{"type":"string","enum":["","atividade_criminal","intencao_maliciosa","tema_sensivel","abuso_do_assistente","fora_do_escopo","parado_usuario","escalado_advogado"],"title":"Block Reason","default":""},"phase":{"type":"string","enum":["essenciais","blindagem","revisao"],"title":"Phase","default":"essenciais"},"coverage":{"type":"integer","title":"Coverage","default":0},"risk_level":{"type":"string","enum":["","baixo","medio","alto"],"title":"Risk Level","default":""},"low_confidence":{"type":"boolean","title":"Low Confidence","default":false},"reply":{"type":"string","title":"Reply","default":""},"questions":{"items":{"$ref":"#/components/schemas/QuestionShape"},"type":"array","title":"Questions"},"outputs":{"items":{"type":"string"},"type":"array","title":"Outputs"},"artifact_hashes":{"additionalProperties":{"type":"string"},"type":"object","title":"Artifact Hashes"},"user_decisions":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"User Decisions"},"memory_snapshot":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Memory Snapshot"},"progress":{"anyOf":[{"$ref":"#/components/schemas/ProgressInfo"},{"type":"null"}]},"job":{"anyOf":[{"$ref":"#/components/schemas/JobInfo"},{"type":"null"}]}},"additionalProperties":true,"type":"object","required":["case_id","mode","status"],"title":"CaseState","description":"CANONICAL turn envelope / case state — the contract the frontend consumes.\n\nThis model is documentation + contract-test truth (attached to the OpenAPI spec via\n``responses=``, NOT as a runtime ``response_model``, so the payload bytes never change).\nEvolution policy (docs/contract-policy.md): fields are ADDITIVE-ONLY — never rename or\nremove without a deprecation alias and a frontend migration window. The closed\nvocabularies (status/mode/block_reason/phase/risk_level) are append-only."},"CreateCaseRequest":{"properties":{"user_profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Profile","default":"dev_freelancer"},"user_role":{"type":"string","title":"User Role","default":""},"free_text":{"type":"string","title":"Free Text","default":""},"fields":{"additionalProperties":true,"type":"object","title":"Fields"},"template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Id"},"variables":{"additionalProperties":true,"type":"object","title":"Variables"},"client_dispatch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Dispatch Id","description":"Idempotency key (client-generated UUID): a retry with the SAME id reuses the existing case instead of opening a duplicate job. Pairs with a client-side dispatch gate."}},"type":"object","title":"CreateCaseRequest"},"DeriveRequest":{"properties":{"kind":{"type":"string","enum":["aditivo","distrato"],"title":"Kind"},"clausulas":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Clausulas"},"instrucao":{"type":"string","title":"Instrucao","default":""}},"type":"object","required":["kind"],"title":"DeriveRequest","description":"POST /cases/{id}/derivar - gerar o instrumento DERIVADO deste contrato (F11).\n\n`kind` espelha `contract_versions.kind` da plataforma: `aditivo` (o que muda) ou\n`distrato` (o encerramento). `clausulas` e a versao VIGENTE que a plataforma conhece\ne, quando enviada, manda sobre os artefatos em disco do caso (o disco pode estar numa\nsegmentacao anterior a ultima versao salva). `instrucao` e o pedido do cliente em\nportugues (\"aumentar o valor para R$ 12.000 a partir de marco\")."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status"},"crewai_version":{"type":"string","title":"Crewai Version"},"openai_api_key_present":{"type":"boolean","title":"Openai Api Key Present"},"memory_db_path":{"type":"string","title":"Memory Db Path"}},"type":"object","required":["status","crewai_version","openai_api_key_present","memory_db_path"],"title":"HealthResponse"},"JobInfo":{"properties":{"status":{"type":"string","enum":["queued","running","done","failed"],"title":"Status"},"submitted_at":{"type":"string","title":"Submitted At"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["status","submitted_at"],"title":"JobInfo","description":"CANONICAL async-job status block (GET /cases/{id}.job) — the frontend's polling key."},"MessageRequest":{"properties":{"message":{"type":"string","minLength":1,"title":"Message"},"fields":{"additionalProperties":true,"type":"object","title":"Fields"}},"type":"object","required":["message"],"title":"MessageRequest"},"PartiesResponse":{"properties":{"case_id":{"type":"string","title":"Case Id"},"parties":{"items":{"$ref":"#/components/schemas/Party"},"type":"array","title":"Parties"}},"type":"object","required":["case_id"],"title":"PartiesResponse","description":"Lightweight extract-parties result: the document's parties for the side-confirmation\nstep (no analysis run). parties is empty when none could be detected."},"Party":{"properties":{"role":{"type":"string","title":"Role","default":""},"name":{"type":"string","title":"Name","default":""},"document":{"type":"string","title":"Document","default":""},"kind":{"type":"string","enum":["PJ","PF","unknown"],"title":"Kind","default":"unknown"},"email":{"type":"string","title":"Email","default":""},"telefone":{"type":"string","title":"Telefone","default":""},"address":{"$ref":"#/components/schemas/PartyAddress"},"nacionalidade":{"type":"string","title":"Nacionalidade","default":""},"estado_civil":{"type":"string","title":"Estado Civil","default":""},"profissao":{"type":"string","title":"Profissao","default":""},"representative":{"$ref":"#/components/schemas/Representative"}},"type":"object","title":"Party","description":"Uma parte do contrato (formaliza o antigo parties: list[str]).\n\nOs campos de qualificacao sao ADITIVOS e opcionais: um contrato so precisa deles\npara sair formal, e a analise de um documento recebido nem sempre os extrai."},"PartyAddress":{"properties":{"logradouro":{"type":"string","title":"Logradouro","default":""},"numero":{"type":"string","title":"Numero","default":""},"complemento":{"type":"string","title":"Complemento","default":""},"bairro":{"type":"string","title":"Bairro","default":""},"cidade":{"type":"string","title":"Cidade","default":""},"uf":{"type":"string","title":"Uf","default":""},"cep":{"type":"string","title":"Cep","default":""}},"type":"object","title":"PartyAddress","description":"Endereco da parte. Entra na qualificacao do preambulo, que e o que faz o\ndocumento parecer um contrato e nao uma lista de clausulas."},"ProgressInfo":{"properties":{"agent_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Role"},"current_tool":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Tool"},"tool_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Label"},"phase":{"type":"string","enum":["thinking","tool_call"],"title":"Phase"},"updated_at":{"type":"string","title":"Updated At"},"stage":{"anyOf":[{"type":"string","enum":["lendo","partes","clausulas","riscos","parecer","pronto"]},{"type":"null"}],"title":"Stage"},"stages_done":{"items":{"type":"string","enum":["lendo","partes","clausulas","riscos","parecer","pronto"]},"type":"array","title":"Stages Done"}},"type":"object","required":["phase","updated_at"],"title":"ProgressInfo","description":"CANONICAL live-progress block (GET /cases/{id}.progress) — the running-agent ticker.\n\n``phase`` here is the EXECUTION phase (thinking vs a tool call), distinct from the\nenvelope-level interview ``phase`` (essenciais/blindagem/revisao).\n\n``stage``/``stages_done`` are the DETERMINISTIC pipeline steps, written by the analysis\nitself when each step actually happens. Prefer them for progress UI: agent_role/\ncurrent_tool come from the CrewAI event bus and are overwritten on every LLM call, so\npolling rarely catches a useful window."},"QuestionShape":{"properties":{"campo":{"type":"string","title":"Campo"},"pergunta":{"type":"string","title":"Pergunta"},"tipo":{"type":"string","enum":["partes","dados_pessoais","objeto","pagamento","prazo","obrigacoes","entregas","rescisao","confidencialidade","propriedade_intelectual","foro","assinatura","outro"],"title":"Tipo"},"opcoes":{"items":{"type":"string"},"type":"array","title":"Opcoes"},"why_it_matters":{"type":"string","title":"Why It Matters","default":""},"suggested":{"type":"string","title":"Suggested","default":""},"examples":{"items":{"type":"string"},"type":"array","title":"Examples"},"risk":{"type":"string","enum":["","baixo","medio","alto"],"title":"Risk","default":""},"scenario":{"type":"string","title":"Scenario","default":""},"optional":{"type":"boolean","title":"Optional","default":false}},"type":"object","required":["campo","pergunta","tipo"],"title":"QuestionShape","description":"CANONICAL question item of the turn envelope (docs contract; serialized questions\nomit the optional metadata keys when empty instead of sending them as ''/false).\n\nA question whose ``campo`` starts with ``cenario_`` (and carries a ``scenario`` tag)\nis a blindagem (failure-scenario) card; there is NO separate top-level ``scenarios``\nfield — the shielding UI is driven entirely by these tagged items."},"ReanalyzeRequest":{"properties":{"user_party_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Party Index"},"user_role":{"type":"string","title":"User Role","default":""},"user_goal":{"type":"string","title":"User Goal","default":""},"fields":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Fields"}},"type":"object","title":"ReanalyzeRequest"},"Representative":{"properties":{"name":{"type":"string","title":"Name","default":""},"document":{"type":"string","title":"Document","default":""},"role":{"type":"string","title":"Role","default":""}},"type":"object","title":"Representative","description":"Quem assina POR uma pessoa juridica. Sem isso o bloco de assinatura de uma PJ\nfica sem nome, e a qualificacao perde o \"neste ato representada por\"."},"RiskDecisionRequest":{"properties":{"outcome":{"type":"string","enum":["approved","needs_revision","accept_risk","escalate_lawyer","stop"],"title":"Outcome"},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","required":["outcome"],"title":"RiskDecisionRequest"},"V1ContractCreate":{"properties":{"free_text":{"type":"string","title":"Free Text","default":""},"user_profile":{"type":"string","title":"User Profile","default":"empresa_br"},"user_role":{"type":"string","title":"User Role","default":""},"fields":{"additionalProperties":true,"type":"object","title":"Fields"},"template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Id"},"variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Variables"},"mode":{"type":"string","title":"Mode","default":""},"parties":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Parties"},"context":{"additionalProperties":true,"type":"object","title":"Context"}},"type":"object","title":"V1ContractCreate","description":"Forma enterprise (E2): template + modo no espectro automacao-IA."},"V1TemplateCreate":{"properties":{"name":{"type":"string","title":"Name"},"contract_type":{"type":"string","title":"Contract Type","default":""},"body":{"additionalProperties":true,"type":"object","title":"Body"},"variables":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Variables"},"min_clauses":{"items":{"type":"string"},"type":"array","title":"Min Clauses"},"question_policy":{"additionalProperties":true,"type":"object","title":"Question Policy"}},"type":"object","required":["name","body"],"title":"V1TemplateCreate"},"V1TemplateVersion":{"properties":{"body":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Body"},"variables":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Variables"},"min_clauses":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Min Clauses"},"question_policy":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Question Policy"}},"type":"object","title":"V1TemplateVersion"},"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":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}