{
  "openapi": "3.1.0",
  "info": { "title": "IndeXpense Integration API", "version": "1.0.0", "description": "API de solo lectura para rendiciones aprobadas y resultados de integración." },
  "servers": [{ "url": "https://api.indexpense.com/api/public/v1" }],
  "security": [{ "bearerAuth": [] }],
  "paths": {
    "/me": { "get": { "summary": "Identificar token y empresa", "responses": { "200": { "description": "Identidad" }, "401": { "$ref": "#/components/responses/Unauthorized" } } } },
    "/expenses": { "get": { "summary": "Listar gastos aprobados", "parameters": [{ "name": "limit", "in": "query", "schema": { "type": "integer", "minimum": 1, "maximum": 200, "default": 100 } }, { "name": "cursor", "in": "query", "schema": { "type": "string" } }], "responses": { "200": { "description": "Página de gastos" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "429": { "$ref": "#/components/responses/RateLimited" } } } },
    "/expenses/{id}": { "get": { "summary": "Obtener gasto", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "responses": { "200": { "description": "Gasto" }, "404": { "description": "No encontrado" } } } },
    "/exports": { "get": { "summary": "Listar paquetes contables", "responses": { "200": { "description": "Paquetes" } } } },
    "/exports/{id}": { "get": { "summary": "Obtener paquete y documentos", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "responses": { "200": { "description": "Paquete" } } } },
    "/changes": { "get": { "summary": "Leer cambios incrementales", "parameters": [{ "name": "cursor", "in": "query", "schema": { "type": "string" } }, { "name": "limit", "in": "query", "schema": { "type": "integer", "maximum": 200 } }], "responses": { "200": { "description": "Página de eventos" } } } },
    "/integration-results/{exportId}": { "get": { "summary": "Consultar resultados ERP", "parameters": [{ "name": "exportId", "in": "path", "required": true, "schema": { "type": "string" } }], "responses": { "200": { "description": "Resultados" } } } }
  },
  "components": {
    "securitySchemes": { "bearerAuth": { "type": "http", "scheme": "bearer" } },
    "responses": { "Unauthorized": { "description": "Token inválido, vencido o sin permiso" }, "RateLimited": { "description": "Límite de solicitudes excedido" } }
  }
}
