{"openapi":"3.1.0","info":{"title":"API Tributaria","version":"0.1.0","description":"SaaS independiente. Un entorno SII por despliegue. Firma PEM solo en memoria, enviada en cada etapa de CAF. Cuotas por empresa y clave; cada RUT de un lote consume una consulta."},"servers":[{"url":"/"}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer"}},"schemas":{"Firma":{"type":"object","required":["cert","priv_key"],"properties":{"cert":{"type":"string","description":"Certificado X.509 PEM vigente"},"priv_key":{"type":"string","description":"Clave RSA PEM. No se almacena."}}},"CafRequest":{"type":"object","required":["etapa","firma_electronica"],"properties":{"etapa":{"type":"string","enum":["conectar","listar","disponibles","confirmar","obtener","archivo","reob_conectar","reob_listar","reob_disponibles","reob_confirmar","reob_obtener","reob_archivo","an_conectar","an_listar","an_disponibles","an_confirmar","an_motivo"]},"firma_electronica":{"$ref":"#/components/schemas/Firma"},"rut":{"type":"string"},"entorno":{"enum":["certificacion","produccion"]},"request_id":{"type":"string","minLength":16,"description":"Obligatorio al conectar o enviar Idempotency-Key. Se reutiliza para recuperar la misma petición."},"id_peticion":{"type":"integer"},"cod_docto":{"type":"integer"},"cant_doctos":{"type":"integer"},"form_name":{"type":"string"},"folio_ini_a":{"type":"integer"},"folio_fin_a":{"type":"integer"},"motivo":{"type":"string"}}},"CompanyRequest":{"type":"object","properties":{"rut":{"type":"string"},"ruts":{"oneOf":[{"type":"array","maxItems":100,"items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"object"}}]},"firma_electronica":{"$ref":"#/components/schemas/Firma"},"version":{"type":["number","string"]},"check_ruts":{"type":"boolean"}}}}},"security":[{"apiKey":[]}],"paths":{"/api/caf":{"post":{"summary":"CAF compatible con el asistente Odoo, por etapas","description":"Scopes caf:issue, caf:read o caf:annul según la operación. Conectar exige RUT idéntico al de la empresa. Confirmar prepara; obtener ejecuta una sola vez. Ante resultado incierto usar reob_*; nunca repetir la emisión.","parameters":[{"name":"Idempotency-Key","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CafRequest"}}}},"responses":{"200":{"description":"Etapa siguiente, capacidad, lista de rangos o archivo_caf base64"},"409":{"description":"Estado, entorno o emisión pendiente incompatible"},"429":{"description":"Cuota excedida"}}}},"/api/company_info":{"post":{"summary":"Consulta SRE individual o hasta 100 RUTs","description":"Scope company:read. Devuelve datos tributarios, dirección principal, comuna, ciudad, región, direcciones y sucursales. Los campos no disponibles quedan vacíos o null. La firma opcional permite consulta autenticada y no se conserva.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyRequest"}}}},"responses":{"200":{"description":"Objeto plano para rut, diccionario por RUT para ruts"}}},"get":{"summary":"Compatibilidad SRE GET","parameters":[{"name":"rut","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Objeto plano con result=true y consultas_restantes"}}},"put":{"summary":"Captura deshabilitada; no persiste datos de contactos","responses":{"200":{"description":"Mensaje informativo"}}}},"/v1/company/addresses":{"post":{"summary":"Direcciones y sucursales oficiales","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["rut"],"properties":{"rut":{"type":"string"}}}}}},"responses":{"200":{"description":"Listado, vigencia y fecha de sincronización"},"503":{"description":"Directorio aún no sincronizado"}}}},"/health/ready":{"get":{"security":[],"summary":"Verificación de aplicación y PostgreSQL","responses":{"200":{"description":"Disponible"}}}}}}