RAVEN DTE · SaaS
API REST y webhooks
Referencia para emitir, firmar y transmitir documentos tributarios electrónicos desde el sistema de la empresa, y para recibir el resultado por webhook.
Actualizado el 23 de octubre de 2026
Introducción
RAVEN DTE emite el documento, lo firma con JWS RS512 y lo transmite al Ministerio de Hacienda de El Salvador bajo la Normativa 2.0. Esta página cubre la superficie de integración de la empresa: facturación, compras, sucursales, reportes y webhooks. Quedan fuera las rutas internas de operación de la plataforma.
Los ejemplos usan personas y sellos ficticios. <API_KEY>, <ACCESS_TOKEN>, <WEBHOOK_SECRET> y <UUID_V4> son marcadores: reemplazalos con los valores de tu cuenta. No pegues una clave real en un repositorio.
OpenAPI 3.0 se sirve en el host de la API, no en este sitio: https://api.raventech.com.sv/docs y https://api.raventech.com.sv/openapi.json. También responden /api/docs y /api/openapi.json.
Entornos y URL base
La base canónica es https://api.raventech.com.sv/v1. El inventario nombra las rutas con el prefijo /api/v1, que el servidor sigue aceptando. En la URL canónica no se repite /api.
| Forma | Ejemplo |
|---|---|
| Canónica | POST https://api.raventech.com.sv/v1/dtes |
| Alias /api/v1 | POST https://api.raventech.com.sv/api/v1/dtes |
| Alias del router | POST https://api.raventech.com.sv/v1/dte |
Usá HTTPS en cuanto haya credenciales, claves o datos fiscales. El prefijo /v1 es de esta API. Las direcciones del Ministerio de Hacienda son otro servicio.
| Código | Uso |
|---|---|
| 00 | Sandbox. Pruebas de integración, sin validez legal. |
| 01 | Producción. El sello tiene efecto tributario. |
Rutas de servicio
Declaradas junto a la API, fuera de las 249 rutas de negocio.
| Método | Ruta | Para qué |
|---|---|---|
| GET | /health y /v1/health | Estado del servicio. |
| GET | /docs y /openapi.json | OpenAPI interactivo y JSON. Alias: /api/docs y /api/openapi.json. |
| GET | /api/v1/public/founder-spots | Cupos públicos de la promoción de fundadores. La variante autenticada está en promociones. |
Guía rápida
- Obtené una API key (
POST /api/v1/apikeys, Plan Pro) o un token conPOST /api/v1/auth/login. - Enviá
POST /api/v1/dtescontipoDte, receptor, ítems yX-Idempotency-Key. - Leé
estado,selloRecibidoyurls. - Descargá el JSON o el PDF público si el documento fue aceptado.
- Registrá un webhook para
dte.acceptedy verificáX-Webhook-Signature.
Autenticación
Las rutas protegidas aceptan una de estas cabeceras:
| Cabecera | Cuándo usarla |
|---|---|
| X-API-Key: <API_KEY> | Integración de sistema. La clave representa a la empresa y trae sus propios permisos. Formato documentado: raven_live_… o raven_test_… |
| Authorization: Bearer <ACCESS_TOKEN> | Sesión de una persona. El token sale de POST /api/v1/auth/login. |
Pasar la autenticación no autoriza todas las operaciones. Algunas rutas exigen rol, permiso, sucursal o plan. En el contexto de un contador verificado, X-Accountant-Tenant-Id consulta una empresa autorizada; ese middleware no habilita la emisión.
La emisión en POST /api/v1/dtes usa middleware de idempotencia. Enviá X-Idempotency-Key con un UUID v4 para que un reintento de red no timbre dos veces. Cabeceras opcionales de la emisión: X-Branch-Id y X-Pos-Id, cada una con un UUID, si la operación corresponde a una sucursal o a una caja.
El ciclo de sesión está en el catálogo de autenticación: registro, login, verificación MFA, refresh, verificación de correo, olvido y cambio de contraseña, perfil, 2FA, exportación y desactivación de cuenta, y cierre de sesión.
Solicitud de asesoría
POST /api/v1/auth/contact-request es público y tiene límite de tasa. Sirve para dejar un prospecto desde un formulario.
| Campo | Regla |
|---|---|
| nombre | Texto, opcional. |
| empresa | Texto, requerido. |
| Texto, requerido. | |
| telefono | Texto, opcional. |
| origen | Texto. Si no se envía, el valor es login_modal. |
La respuesta 201 trae status, lead, message y whatsappUrl. El equipo comercial recibe el aviso en info@raventech.com.sv.
Errores y límites
La respuesta de error suele incluir error y code. No todos los módulos comparten el mismo esquema.
| Código | Significado |
|---|---|
| 400 | Validación del cuerpo o del esquema. |
| 401 | Credencial ausente o inválida. |
| 403 | Autenticado, sin permiso para la operación. |
| 404 | El recurso no existe o no es de esta empresa. |
| 429 | Límite de tasa. |
| Superficie | Límite | Respaldo |
|---|---|---|
| Descargas públicas /json, /pdf y /ticket | 10 peticiones por minuto, por IP | Verificado en la guía, con cabeceras RateLimit. |
| Rutas autenticadas generales | 100 peticiones por minuto, por usuario | Indicado en la especificación del portal. |
| API keys | Hasta 500 peticiones por hora, ajustable por plan | Indicado en la especificación del portal. |
Tipos de DTE
OpenAPI refleja estos 11 tipos. El cuerpo válido de uno no sirve para otro: tipoDte, receptor e ítems tienen que cumplir la validación del servicio y el esquema de Hacienda que corresponda.
| Código | Documento |
|---|---|
| 01 | Factura electrónica, consumidor final. |
| 03 | Comprobante de crédito fiscal. |
| 04 | Nota de remisión. |
| 05 | Nota de crédito electrónica. |
| 06 | Nota de débito electrónica. |
| 07 | Comprobante de retención electrónico. |
| 08 | Comprobante de liquidación. |
| 09 | Documento contable de liquidación. |
| 11 | Factura de exportación. |
| 14 | Factura de sujeto excluido. |
| 15 | Comprobante de donación. |
Departamentos, municipios, actividades y tributos salen de GET /api/v1/catalogs/{type}.
Emitir un DTE
POST /api/v1/dtes. Alias equivalente: POST /api/v1/dte. Autenticación con API key o Bearer. Cabeceras: Content-Type: application/json, X-Idempotency-Key recomendada, y de forma opcional X-Branch-Id y X-Pos-Id.
cURL
curl -X POST "https://api.raventech.com.sv/v1/dtes" \
-H "X-API-Key: <API_KEY>" \
-H "Content-Type: application/json" \
-H "X-Idempotency-Key: <UUID_V4>" \
-d '{
"tipoDte": "01",
"receptor": {
"tipoDocumento": "13",
"numDocumento": "01234567-8",
"nrc": null,
"nombre": "JUAN PÉREZ GARCÍA",
"codActividad": null,
"descActividad": null,
"direccion": {
"departamento": "05",
"municipio": "23",
"complemento": "Colonia Escalón, Calle 2, San Salvador"
},
"telefono": "78901234",
"correo": "juan.perez@example.com"
},
"cuerpoDocumento": [
{
"numItem": 1,
"tipoItem": 1,
"cantidad": 2,
"codigo": "SERV-001",
"descripcion": "Desarrollo y Consultoría de Software",
"precioUni": 50.0,
"montoDescu": 0.0,
"ventaNoSuj": 0.0,
"ventaExenta": 0.0,
"ventaGravada": 100.0,
"tributos": null
}
],
"extension": null,
"apendice": null
}'Respuesta ilustrativa de éxito (201 o 200):
JSON
{
"success": true,
"estado": "ACCEPTED",
"codigoGeneracion": "6C8D7614-2D99-4A1B-87A3-20F3E6BA109B",
"numeroControl": "DTE-01-M001P001-000000000000042",
"selloRecibido": "2026B1E63C4040F595305141011A8DFD0C475D0D",
"fhProcesamiento": "2026-10-18T10:15:30-06:00",
"clasificaMsg": "10",
"descripcionMsg": "RECIBIDO Y PROCESADO SATISFACTORIAMENTE",
"urls": {
"json": "https://api.raventech.com.sv/v1/dtes/6C8D7614-2D99-4A1B-87A3-20F3E6BA109B/json",
"pdf": "https://api.raventech.com.sv/v1/dtes/6C8D7614-2D99-4A1B-87A3-20F3E6BA109B/pdf",
"ticket": "https://api.raventech.com.sv/v1/dtes/6C8D7614-2D99-4A1B-87A3-20F3E6BA109B/ticket"
}
}Respuesta ilustrativa de validación (400):
JSON
{
"success": false,
"error": "Error de validación contra esquema DGII",
"code": "SCHEMA_VALIDATION_ERROR",
"detalles": [
{
"campo": "receptor.numDocumento",
"mensaje": "El número de documento no cumple con el formato oficial para el tipo 13 (DUI)"
}
]
}Un borrador guardado responde 201 con success, estado: PENDING y codigoGeneracion, sin correlativo definitivo ni transmisión.
Borradores y transmisión
| Acción | Ruta | Regla |
|---|---|---|
| Guardar borrador | POST /api/v1/dtes/borrador | Queda en PENDING. Sirve para pausar una venta y retomarla. |
| Transmitir | POST /api/v1/dtes/{codigoGeneracion}/transmitir | Asigna correlativo, firma en JWS RS512 y transmite un DTE que está en PENDING. |
| Descartar | DELETE /api/v1/dtes/{codigoGeneracion} | Solo un PENDING. Un ACCEPTED ya sellado se liquida con el evento de invalidación. |
Las mismas rutas existen bajo /api/v1/dte. El listado completo está en DTE y alias /dte.
Consultar y listar
GET /api/v1/dtes/{codigoGeneracion} acepta el UUID, el número de control o el ID numérico. El listado es GET /api/v1/dtes.
| Parámetro | Uso |
|---|---|
| tipoDte | Código de dos caracteres, por ejemplo 01 o 03. |
| estado | ACCEPTED, REJECTED, CANCELLED, CONTINGENCY o PENDING. |
| fechaDesde, fechaHasta | Rango de emisión, formato YYYY-MM-DD. |
| search | Texto por cliente, NRC o número de control. |
| branch_id, pos_id | Sucursal o caja. |
| page, limit | Paginación. El ejemplo de la guía usa page=1 y limit=20. |
Ejemplo: /api/v1/dtes?tipoDte=01&estado=ACCEPTED&fechaDesde=2026-10-01&fechaHasta=2026-10-31&page=1&limit=20
Notas y comprobantes comerciales
Rutas dedicadas, además de la emisión genérica:
POST /api/v1/dtes/nota-creditoynota-debitoPOST /api/v1/dtes/comprobante-retencionyfactura-exportacionGET /api/v1/dtes/sugerencia-dclsuma las ventas aceptadas del período emitidas por cuenta del afiliado.
Los comprobantes comerciales (COM-01, COM-03, COM-11) son emisión no tributaria para una empresa sin certificado activo en Hacienda. Tienen PDF privado y una conversión transaccional a DTE fiscal con la fecha actual, en /api/v1/commercial-documents. Un reintento de esa conversión reutiliza el mismo intento fiscal firmado.
Descargas públicas
Pensadas para el QR del documento o el correo del receptor. No llevan API key. El límite verificado es 10 peticiones por minuto por IP, con cabeceras RateLimit y Content-Disposition.
| Ruta | Respuesta |
|---|---|
| GET /api/v1/dtes/{codigoGeneracion}/json | JSON sellado y firmado con JWS RS512. |
| GET …/pdf | PDF tamaño carta. El inventario documenta ?format=ticket o carta. La especificación también documenta ?download=true para forzar la descarga. |
| GET …/ticket | Tirilla térmica de 80 mm o 58 mm. |
| GET …/ticket-print | HTML que dispara la impresión sin abrir otra pestaña. |
cURL
curl -L "https://api.raventech.com.sv/v1/dtes/<CODIGO_GENERACION>/pdf" -o dte.pdfEventos fiscales
La invalidación es POST /api/v1/dtes/anular. El plazo es el del Código Tributario según el tipo de DTE. Ejemplo de cuerpo:
JSON
{
"codigoGeneracion": "6C8D7614-2D99-4A1B-87A3-20F3E6BA109B",
"motivo": {
"tipoAnulacion": 2,
"motivoAnulacion": "Rescisión total de la operación comercial por acuerdo entre las partes",
"nombreResponsable": "CARLOS MENDOZA",
"tipDocResponsable": "13",
"numDocResponsable": "02345678-9",
"nombreSolicita": "JUAN PÉREZ GARCÍA",
"tipDocSolicita": "13",
"numDocSolicita": "01234567-8"
}
}| Evento | Transmisión | Descarga pública |
|---|---|---|
| Invalidación | POST /api/v1/dtes/anular | GET …/invalidacion/json y …/invalidacion/pdf |
| Retorno de bienes, tipo 18 | POST /api/v1/dtes/eventos/retorno | GET …/retorno/json y …/retorno/pdf. Aplica a documentos 01, 11 o 14. |
| Operaciones especiales, tipo 17 | POST /api/v1/dtes/eventos/operaciones-especiales | GET …/operaciones-especiales/json y …/operaciones-especiales/pdf |
GET /api/v1/dtes/events/{codigoGeneracion}/pdf devuelve la carta del evento 17 o 18 según lo almacenado. El historial auditable es GET /api/v1/dtes/eventos/historial.
Contingencia
Cuando no hay internet o Hacienda no responde, los comprobantes quedan pendientes de lote. POST /api/v1/contingency/transmit-batch arma el lote: máximo 50 comprobantes. GET /api/v1/contingency/pending lista lo pendiente, GET /api/v1/contingency/events el historial y GET /api/v1/contingency/stats las cifras de la empresa. Tabla en contingencia.
Webhooks
Todas estas rutas exigen autenticación y quedan filtradas por empresa. Si omitís secret, el servidor genera 32 bytes aleatorios en hexadecimal y te lo devuelve. Guardalo: la consulta también lo incluye. headers se agregan a la petición saliente, pero el servicio descarta las cabeceras reservadas y conserva las de firma e identificación. La URL debe apuntar a un destino público; acepta http o https, aunque conviene usar HTTPS.
HTTP
POST /api/v1/webhooks HTTP/1.1
Authorization: Bearer <ACCESS_TOKEN>
Content-Type: application/json
{
"url": "https://cliente.example/webhooks/raven",
"eventos": ["dte.accepted", "dte.rejected"],
"secret": "<WEBHOOK_SECRET>"
}| Método | Ruta | Resultado |
|---|---|---|
| POST | /api/v1/webhooks | Registra url y eventos. secret y headers son opcionales. Responde 201. |
| GET | /api/v1/webhooks | Devuelve { webhooks: [...] }. |
| GET | /api/v1/webhooks/eventos | Devuelve { eventos: [...] }. |
| GET | /api/v1/webhooks/{id} | 404 si no existe o es de otra empresa. |
| PUT | /api/v1/webhooks/{id} | Campos opcionales: url, eventos, secret, headers, activo. |
| DELETE | /api/v1/webhooks/{id} | Elimina la suscripción. |
| GET | /api/v1/webhooks/{id}/logs?limit=50 | Historial. limit es opcional y la ruta no le pone tope. |
| POST | /api/v1/webhooks/{id}/test | Encola un evento test. |
| POST | /api/v1/webhooks/{id}/deliveries/{jobId}/replay | Reencola una entrega fallida con el mismo id y timestamp. |
Eventos de webhook
GET /api/v1/webhooks/eventos publica los eventos que se pueden registrar. Eso no significa que todos se disparen hoy.
| Evento | Descripción | Disparo observado |
|---|---|---|
| dte.created | DTE creado. | Sí. |
| dte.accepted | DTE aceptado por Hacienda. | Sí. |
| dte.rejected | DTE rechazado. | Sí. |
| dte.cancelled | DTE invalidado o cancelado, según el flujo que lo emita. | No conectado en la revisión. |
| certificate.uploaded | Certificado cargado. | No conectado en la revisión. |
| certificate.expired | Certificado vencido. | No conectado en la revisión. |
| contingency.activated | Contingencia activada. | No conectado en la revisión. |
| contingency.deactivated | Contingencia desactivada. | No conectado en la revisión. |
| dte.contingency | Nombre usado por el disparo de contingencia. | Sí; también es registrable. |
| test | Lo envía POST …/test. | Sí, sin estar en la lista. |
Ejemplo ilustrativo de dte.accepted. El contrato mínimo es id, evento, timestamp y data. El id identifica el evento para deduplicar entregas.
JSON
{
"id": "c5efed03-0dc5-4ba5-81f2-080543b539d4",
"evento": "dte.accepted",
"timestamp": "2026-10-18T10:15:32.450Z",
"data": {
"codigoGeneracion": "6C8D7614-2D99-4A1B-87A3-20F3E6BA109B",
"numeroControl": "DTE-01-M001P001-000000000000042",
"selloRecibido": "2026B1E63C4040F595305141011A8DFD0C475D0D",
"tipoDte": "01",
"totalPagar": 100.0,
"receptor": {
"nombre": "JUAN PÉREZ GARCÍA",
"numDocumento": "01234567-8"
},
"urls": {
"pdf": "https://api.raventech.com.sv/v1/dtes/6C8D7614-2D99-4A1B-87A3-20F3E6BA109B/pdf",
"json": "https://api.raventech.com.sv/v1/dtes/6C8D7614-2D99-4A1B-87A3-20F3E6BA109B/json"
}
}
}Cabeceras de cada entrega:
Content-Type: application/jsonUser-Agent: FEL-Webhook/1.0X-Webhook-Eventcon el nombre del eventoX-Webhook-Idcon el mismo id del cuerpoX-Webhook-Signaturecon 64 caracteres hexadecimales
Firma HMAC-SHA256
X-Webhook-Signature es el hexadecimal de HMAC-SHA256 sobre los bytes de JSON.stringify de { id, evento, timestamp, data }, con el secreto compartido. Verificá el cuerpo crudo, sin reordenar propiedades ni volver a serializar.
Node.js
const crypto = require("crypto");
const express = require("express");
const app = express();
function validarWebhook(rawBody, signature, secret) {
if (!/^[0-9a-f]{64}$/i.test(signature || "")) return false;
const expected = crypto.createHmac("sha256", secret).update(rawBody).digest();
return crypto.timingSafeEqual(expected, Buffer.from(signature, "hex"));
}
// Registrar esta ruta antes de app.use(express.json()).
app.post("/mi-webhook-dte", express.raw({ type: "application/json" }), (req, res) => {
const firma = req.headers["x-webhook-signature"];
const ok = validarWebhook(req.body, firma, process.env.RAVEN_WEBHOOK_SECRET);
if (!ok) return res.sendStatus(401);
const payload = JSON.parse(req.body.toString("utf8"));
// Procesar payload.evento de forma idempotente.
return res.sendStatus(200);
});El ejemplo de Node compara el digest en binario y acepta el hex en mayúsculas o minúsculas. PHP y Python, tal como están arriba, comparan el texto hexadecimal: la diferencia de mayúsculas no coincide.
API keys, usuarios y roles
POST /api/v1/apikeys está habilitado en Plan Pro y devuelve la clave en claro una sola vez. GET lista las claves enmascaradas. DELETE /api/v1/apikeys/{id} revoca de inmediato.
POST /api/v1/users, PUT /api/v1/users/{id} y el listado aceptan chg_password para obligar el cambio de clave en el próximo inicio de sesión. El alta, la edición, el estado y la baja lógica están en usuarios. Los roles y el catálogo de permisos están en roles.
Libros de IVA
Libros de compras y ventas, anexos F-07 v14 y F-14, y cierre mensual con una foto inmutable. El CSV del anexo va delimitado por punto y coma y codificado en windows-1252, listo para la carga en Hacienda. El período se escribe YYYY-MM. Reabrir un período cerrado pide justificación y queda en auditoría. Rutas en libros de IVA, incluida la compra extemporánea.
Compras e inventario
POST /api/v1/purchases/import recibe el JSON de un DTE de compra. Desde ahí se puede sectorizar la compra para el F-07 v14, emitir el comprobante de retención del 1% (CRE 07) y cargar el kardex. La retención de renta del art. 156 del Código Tributario es un registro aparte, independiente del CRE 07, con anulación y PDF. El detalle está en compras y el catálogo de productos en productos e inventario.
Sucursales, cajas y turnos
Establecimientos y puntos de emisión, con casa matriz, stock por sucursal, transferencias y bloqueo de emisión por empresa, sucursal o caja. Los turnos cubren apertura, turno activo, resumen para el arqueo, cierre y el ticket térmico de corte en 58 mm o 80 mm. Tablas: sucursales y turnos de caja.
Cotizaciones y facturación recurrente
Una cotización se crea, se edita, se manda por correo y se descarga en PDF. PATCH /api/v1/quotes/{id}/status cambia el estado (aceptar, rechazar o facturar). La facturación recurrente registra el programa, lo pausa, dispara una emisión inmediata o lo cancela. Rutas en cotizaciones y facturación recurrente.
Cuentas por cobrar
Cartera de documentos a crédito, abonos, reversa del abono y ticket térmico del pago. POST /api/v1/accounts-receivable/sync incorpora DTE a crédito que hayan quedado pendientes. Tabla en cuentas por cobrar.
Portal del contador
El contador consulta su panel multiempresa, actualiza el perfil con inscripción y declaración, y acepta o rechaza invitaciones. La empresa invita, ajusta alcances y puede revocar el acceso con efecto inmediato. El comprobante interno no fiscal usa la serie propia del contador (la especificación de producto indica CI-000001 a CI-000100); se anula sin perder el correlativo y se imprime en carta. La descarga masiva pide un ZIP en segundo plano. Todo el módulo está en portal del contador.
Certificación en sandbox
En ambiente 00 se consulta el avance, se inicia una corrida de los 11 tipos de DTE y los 4 eventos, y esa corrida se puede pausar, reanudar o detener. GET /api/v1/certification/evidence/zip baja el paquete con los JSON sellados y el manifiesto SHA-256. Rutas en certificación.
Reportes
GET /api/v1/reports/tenant calcula sobre el universo filtrado, no sobre una página truncada. Códigos: ventas T-01, DTE transmitidos T-02, anulaciones T-03, compras T-04, cuentas por cobrar T-05, inventario T-06 y turnos T-07. La paginación informa total_records y has_more.
| Parámetro | Uso |
|---|---|
| codes | Uno o varios códigos T-01 a T-07. |
| fecha_desde, fecha_hasta | Rango del reporte. |
| branch_id, pos_id | Sucursal o caja. |
| ambiente | 00 o 01. |
| limit, page | Paginación del JSON. |
GET /api/v1/reports/export entrega Excel (format=xlsx, una hoja por reporte) o PDF apaisado (format=pdf). Usá codes o single_code. El tope documentado del archivo es 10 000 registros, con totales agregados.
Modo simulación
La demo corre aislada y no escribe la operación fiscal. POST /api/v1/simulation/start abre la sesión con nombre, correo obligatorio y teléfono opcional, y devuelve un JWT temporal. POST /api/v1/simulation/end la cierra y calcula la duración. El mismo módulo puede renderizar PDF de demostración y exponer metadatos comerciales públicos, sin sello fiscal. Rutas en simulación.
Planes y promociones
La empresa consulta el plan, la cuota, la configuración del programa y los planes disponibles. Puede subir de NEST a WING y de WING a FLIGHT, pedir el enlace de pago, activar DTE adicionales o pasar a modo solo consulta. El adicional documentado es $0.03 + IVA por DTE, y $0.0255 + IVA cuando lo activa el contador.
El perfil de facturación permite consultar o actualizar el comprobante preferido, los datos fiscales y el cobro automático. El historial de facturas recibidas incluye enlaces a los PDF y JSON oficiales. Estas tres rutas están en el catálogo de planes.
Las promociones validan un código, lo aplican antes del primer pago confirmado y muestran el panel «Recomendá RAVEN DTE» y «Mi descuento». Los cupos públicos de fundadores también están en GET /api/v1/promotions/public/founder-spots. Tablas: planes y promociones.
Empresa, clientes y catálogos
La empresa lee y actualiza su ficha, el logo, el certificado, las credenciales de la API de Hacienda y las 11 secuencias por ambiente y año. El checklist de pase de ambiente 00 a 01 está en las rutas de production-readiness y production-transition. Hay vista previa del PDF carta.
Clientes, certificados de la cuenta (el activo se consulta sin las llaves) y catálogos oficiales están en empresa, clientes, certificados y catálogos de Hacienda.
Correo y notificaciones
La plantilla de correo de la empresa se consulta, se edita y se previsualiza con datos de ejemplo. Se puede reenviar el DTE a una dirección y ver el historial de envíos. Las notificaciones de la persona autenticada se listan, se marcan una a una o todas. Tablas: correo y notificaciones.
Catálogo completo
249 declaraciones de integración. El alias /api/v1/dte repite el router de /api/v1/dtes y se cuenta aparte, igual que en el inventario. La búsqueda de esta página filtra estas tablas.
Autenticación (16)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| POST | /api/v1/auth/register | Según el middleware | Registrar nuevo usuario y tenant |
| POST | /api/v1/auth/login | Según el middleware | Iniciar sesión |
| POST | /api/v1/auth/mfa/verify | Según el middleware | Verificar desafío MFA TOTP de segundo factor durante inicio de sesión |
| POST | /api/v1/auth/refresh | Según el middleware | Renovar token de acceso JWT utilizando refresh token activo |
| GET | /api/v1/auth/verify-email/{token} | Según el middleware | Verificar email con token |
| POST | /api/v1/auth/forgot-password | Según el middleware | Solicitar reset de password |
| POST | /api/v1/auth/reset-password | Según el middleware | Resetear password con token |
| POST | /api/v1/auth/change-password | JWT o API key | Cambiar password (usuario autenticado) |
| GET | /api/v1/auth/me | JWT o API key | Obtener información del usuario autenticado |
| PUT | /api/v1/auth/profile | JWT o API key | Actualizar nombre de usuario, teléfono y DUI del usuario autenticado |
| PUT | /api/v1/auth/2fa | JWT o API key | Configurar autenticación TOTP con contraseña actual y prueba del segundo factor |
| GET | /api/v1/auth/export-data | JWT o API key | Cumplimiento normativo de portabilidad y acceso de datos (ACE / GDPR Art. 20) |
| POST | /api/v1/auth/deactivate-account | JWT o API key | Cumplimiento del derecho de supresión y rectificación (ACE / GDPR art. 17 / art. 147 del Código Tributario). |
| POST | /api/v1/auth/force-change-password | JWT o API key | Cambio de contraseña forzado cuando chg_password es verdadero. |
| POST | /api/v1/auth/logout | JWT o API key | Cerrar sesión y revocar refresh token |
| POST | /api/v1/auth/contact-request | Según el middleware | Registrar solicitud de asesoría comercial / prospecto (Lead) desde el login o modal público |
DTE (27)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/dtes/{codigoGeneracion}/invalidacion/json | Público | JSON oficial del Evento de Invalidación v3 |
| GET | /api/v1/dtes/{codigoGeneracion}/invalidacion/pdf | Público | Representación gráfica del Evento de Invalidación |
| GET | /api/v1/dtes/{codigoGeneracion}/retorno/json | Público | JSON oficial del Evento de Retorno de Bienes (Tipo 18) |
| GET | /api/v1/dtes/{codigoGeneracion}/retorno/pdf | Público | Representación gráfica del Evento de Retorno de Bienes (Tipo 18) |
| GET | /api/v1/dtes/{codigoGeneracion}/operaciones-especiales/json | Público | JSON oficial del Evento de Operaciones Especiales (Tipo 17) |
| GET | /api/v1/dtes/{codigoGeneracion}/operaciones-especiales/pdf | Público | Representación gráfica del Evento de Operaciones Especiales (Tipo 17) |
| GET | /api/v1/dtes/events/{codigoGeneracion}/pdf | Público | Carta del evento 17 o 18 según el tipo almacenado. |
| GET | /api/v1/dtes/{codigoGeneracion}/json | Público | Descargar DTE en formato JSON (PÚBLICO) |
| GET | /api/v1/dtes/{codigoGeneracion}/pdf | Público | Descargar PDF del DTE (PÚBLICO) - Soporta ?format=ticket o carta estándar |
| GET | /api/v1/dtes/{codigoGeneracion}/ticket | Público | Emitir e imprimir comprobante en formato Ticket Térmico (80mm o 58mm) |
| GET | /api/v1/dtes/{codigoGeneracion}/ticket-print | Público | Dispara window.print() directamente sin abrir pestañas ni desfasar márgenes. |
| POST | /api/v1/dtes | JWT o API key | Emitir un nuevo DTE |
| POST | /api/v1/dtes/borrador | JWT o API key | Permite al operador suspender una factura para atender a otro cliente y retomarla luego. |
| POST | /api/v1/dtes/{codigoGeneracion}/transmitir | JWT o API key | Transmitir formalmente al Ministerio de Hacienda un DTE que está en estado PENDING. |
| DELETE | /api/v1/dtes/{codigoGeneracion} | JWT o API key | Descartar / Eliminar un DTE en estado PENDING (borrador no transmitido). |
| GET | /api/v1/dtes/sugerencia-dcl | JWT o API key | Suma ventas aceptadas del período emitidas por cuenta del afiliado (ventaTercero). |
| GET | /api/v1/dtes | JWT o API key | Listar DTEs con filtros |
| GET | /api/v1/dtes/{codigoGeneracion} | JWT o API key | Consultar DTE por código de generación, número de control o ID |
| POST | /api/v1/dtes/anular | JWT o API key | Anular (Invalidar) DTE |
| POST | /api/v1/dtes/nota-credito | JWT o API key | Emitir Nota de Crédito Electrónica (NCE) |
| POST | /api/v1/dtes/nota-debito | JWT o API key | Emitir Nota de Débito Electrónica (NDE) |
| POST | /api/v1/dtes/comprobante-retencion | JWT o API key | Emitir Comprobante de Retención Electrónico (CRE) |
| POST | /api/v1/dtes/factura-exportacion | JWT o API key | Emitir Factura de Exportación (FEX) |
| POST | /api/v1/dtes/eventos/retorno | JWT o API key | Transmitir evento oficial de Retorno de mercancías o servicios ante el Ministerio de Hacienda |
| POST | /api/v1/dtes/eventos/operaciones-especiales | JWT o API key | Transmitir evento oficial de Operaciones Especiales ante el Ministerio de Hacienda |
| GET | /api/v1/dtes/eventos/historial | JWT o API key | Consultar historial auditable de eventos DTE transmitidos por el tenant |
| POST | /api/v1/dtes/audit-event | JWT o API key | Registrar eventos y decisiones de auditoría fiscal desde el frontend |
Alias /dte (27)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/dte/{codigoGeneracion}/invalidacion/json | Público | JSON oficial del Evento de Invalidación v3 |
| GET | /api/v1/dte/{codigoGeneracion}/invalidacion/pdf | Público | Representación gráfica del Evento de Invalidación |
| GET | /api/v1/dte/{codigoGeneracion}/retorno/json | Público | JSON oficial del Evento de Retorno de Bienes (Tipo 18) |
| GET | /api/v1/dte/{codigoGeneracion}/retorno/pdf | Público | Representación gráfica del Evento de Retorno de Bienes (Tipo 18) |
| GET | /api/v1/dte/{codigoGeneracion}/operaciones-especiales/json | Público | JSON oficial del Evento de Operaciones Especiales (Tipo 17) |
| GET | /api/v1/dte/{codigoGeneracion}/operaciones-especiales/pdf | Público | Representación gráfica del Evento de Operaciones Especiales (Tipo 17) |
| GET | /api/v1/dte/events/{codigoGeneracion}/pdf | Público | Carta del evento 17 o 18 según el tipo almacenado. |
| GET | /api/v1/dte/{codigoGeneracion}/json | Público | Descargar DTE en formato JSON (PÚBLICO) |
| GET | /api/v1/dte/{codigoGeneracion}/pdf | Público | Descargar PDF del DTE (PÚBLICO) - Soporta ?format=ticket o carta estándar |
| GET | /api/v1/dte/{codigoGeneracion}/ticket | Público | Emitir e imprimir comprobante en formato Ticket Térmico (80mm o 58mm) |
| GET | /api/v1/dte/{codigoGeneracion}/ticket-print | Público | Dispara window.print() directamente sin abrir pestañas ni desfasar márgenes. |
| POST | /api/v1/dte | JWT o API key | Emitir un nuevo DTE |
| POST | /api/v1/dte/borrador | JWT o API key | Permite al operador suspender una factura para atender a otro cliente y retomarla luego. |
| POST | /api/v1/dte/{codigoGeneracion}/transmitir | JWT o API key | Transmitir formalmente al Ministerio de Hacienda un DTE que está en estado PENDING. |
| DELETE | /api/v1/dte/{codigoGeneracion} | JWT o API key | Descartar / Eliminar un DTE en estado PENDING (borrador no transmitido). |
| GET | /api/v1/dte/sugerencia-dcl | JWT o API key | Suma ventas aceptadas del período emitidas por cuenta del afiliado (ventaTercero). |
| GET | /api/v1/dte | JWT o API key | Listar DTEs con filtros |
| GET | /api/v1/dte/{codigoGeneracion} | JWT o API key | Consultar DTE por código de generación, número de control o ID |
| POST | /api/v1/dte/anular | JWT o API key | Anular (Invalidar) DTE |
| POST | /api/v1/dte/nota-credito | JWT o API key | Emitir Nota de Crédito Electrónica (NCE) |
| POST | /api/v1/dte/nota-debito | JWT o API key | Emitir Nota de Débito Electrónica (NDE) |
| POST | /api/v1/dte/comprobante-retencion | JWT o API key | Emitir Comprobante de Retención Electrónico (CRE) |
| POST | /api/v1/dte/factura-exportacion | JWT o API key | Emitir Factura de Exportación (FEX) |
| POST | /api/v1/dte/eventos/retorno | JWT o API key | Transmitir evento oficial de Retorno de mercancías o servicios ante el Ministerio de Hacienda |
| POST | /api/v1/dte/eventos/operaciones-especiales | JWT o API key | Transmitir evento oficial de Operaciones Especiales ante el Ministerio de Hacienda |
| GET | /api/v1/dte/eventos/historial | JWT o API key | Consultar historial auditable de eventos DTE transmitidos por el tenant |
| POST | /api/v1/dte/audit-event | JWT o API key | Registrar eventos y decisiones de auditoría fiscal desde el frontend |
Comprobantes comerciales (6)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/commercial-documents/capabilities | JWT o API key | Declarado en el inventario, sin descripción adicional. |
| GET | /api/v1/commercial-documents | JWT o API key | Declarado en el inventario, sin descripción adicional. |
| POST | /api/v1/commercial-documents | JWT o API key | Declarado en el inventario, sin descripción adicional. |
| GET | /api/v1/commercial-documents/{id} | JWT o API key | Declarado en el inventario, sin descripción adicional. |
| GET | /api/v1/commercial-documents/{id}/pdf | JWT o API key | Declarado en el inventario, sin descripción adicional. |
| POST | /api/v1/commercial-documents/{id}/convert | JWT o API key | La unicidad del origen y un bloqueo de sesión en el servidor hacen que un reintento reutilice el mismo intento fiscal firmado. |
Certificados (5)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| POST | /api/v1/certificates | JWT o API key | Subir un nuevo certificado |
| GET | /api/v1/certificates | JWT o API key | Listar certificados del usuario |
| GET | /api/v1/certificates/active | JWT o API key | Obtener certificado activo (sin claves) |
| PUT | /api/v1/certificates/{id}/activate | JWT o API key | Activar un certificado específico |
| DELETE | /api/v1/certificates/{id} | JWT o API key | Eliminar un certificado |
Empresa (15)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/tenants/stats | JWT o API key | Estadísticas del panel de la empresa en sesión, acotadas por sucursal cuando aplica. |
| GET | /api/v1/tenants/sequences | JWT o API key | Obtener las 11 secuencias y correlativos oficiales del tenant aisladas por ambiente y año |
| PUT | /api/v1/tenants/sequences | JWT o API key | Actualizar múltiples secuencias en lote por ambiente y año |
| PUT | /api/v1/tenants/sequences/{tipoDte} | JWT o API key | Actualizar una secuencia individual por ambiente y año |
| GET | /api/v1/tenants/{id}/production-readiness | JWT o API key | Evaluación de Checklist Pre-Vuelo para habilitacion productiva de la empresa (Ambiente 00 -> 01) |
| GET | /api/v1/tenants/{id}/production-transition | JWT o API key | Evaluación de Checklist Pre-Vuelo para habilitacion productiva de la empresa (Ambiente 00 -> 01) |
| POST | /api/v1/tenants/{id}/production-transition | JWT o API key | Declarado en el inventario, sin descripción adicional. |
| GET | /api/v1/tenants/{id}/production-transition/{transition}/archive | JWT o API key | Declarado en el inventario, sin descripción adicional. |
| GET | /api/v1/tenants/{id} | JWT o API key | Obtener un tenant por ID |
| PUT | /api/v1/tenants/{id} | JWT o API key | Actualizar tenant |
| POST | /api/v1/tenants/{id}/logo | JWT o API key | Subir logo de la empresa |
| POST | /api/v1/tenants/{id}/certificate | JWT o API key | Subir certificado digital de la empresa |
| POST | /api/v1/tenants/{id}/mh-credentials | JWT o API key | Guardar credenciales de la API de Hacienda (Normativa 2.0) |
| GET | /api/v1/tenants/{id}/certificate | JWT o API key | Obtener información del certificado del administrador de la empresa. |
| GET | /api/v1/tenants/preview-pdf | JWT o API key | Generar vista previa real de Representación Gráfica (PDF Carta) con PDFKit |
Clientes (5)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/clients | JWT o API key | Listar clientes del tenant actual |
| GET | /api/v1/clients/{id} | JWT o API key | Obtener cliente por ID |
| POST | /api/v1/clients | JWT o API key | Crear cliente |
| PUT | /api/v1/clients/{id} | JWT o API key | Actualizar cliente |
| DELETE | /api/v1/clients/{id} | JWT o API key | Eliminar cliente (Soft delete) |
Productos e inventario (8)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/products | JWT o API key | Listar catálogo de productos y servicios con filtros y paginación |
| GET | /api/v1/products/inventory/movements | JWT o API key | Consultar historial global de movimientos de inventario y kardex |
| GET | /api/v1/products/{id} | JWT o API key | Obtener detalle completo de un producto por identificador |
| GET | /api/v1/products/{id}/movements | JWT o API key | Consultar movimientos de inventario específicos de un producto |
| POST | /api/v1/products/{id}/adjust-stock | JWT o API key | Realizar ajuste manual o corrección de stock en inventario |
| POST | /api/v1/products | JWT o API key | Crear un nuevo producto o servicio en el catálogo del tenant |
| PUT | /api/v1/products/{id} | JWT o API key | Actualizar información, precios y parámetros de un producto existente |
| DELETE | /api/v1/products/{id} | JWT o API key | Eliminar o deshabilitar un producto del catálogo |
Catálogos de Hacienda (1)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/catalogs/{type} | JWT o API key | Obtener catálogo oficial de Hacienda por tipo (actividades, departamentos, tributos, etc.) |
Webhooks (9)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| POST | /api/v1/webhooks | JWT o API key | Registrar un nuevo webhook |
| GET | /api/v1/webhooks | JWT o API key | Listar webhooks del tenant |
| GET | /api/v1/webhooks/eventos | JWT o API key | Listar eventos disponibles |
| GET | /api/v1/webhooks/{id} | JWT o API key | Obtener webhook por ID |
| PUT | /api/v1/webhooks/{id} | JWT o API key | Actualizar webhook |
| DELETE | /api/v1/webhooks/{id} | JWT o API key | Eliminar webhook |
| GET | /api/v1/webhooks/{id}/logs | JWT o API key | Obtener logs de un webhook |
| POST | /api/v1/webhooks/{id}/test | JWT o API key | Probar webhook (envío de prueba) |
| POST | /api/v1/webhooks/{id}/deliveries/{jobId}/replay | JWT o API key | Reintentar entrega manual de webhook fallido por identificador de trabajo |
Correo (5)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/email/template | JWT o API key | Obtener la plantilla de correo de la empresa. |
| PUT | /api/v1/email/template | JWT o API key | Actualizar la plantilla de correo de la empresa. |
| POST | /api/v1/email/preview | JWT o API key | Previsualizar la plantilla de correo con datos de ejemplo. |
| POST | /api/v1/email/resend/{dteId} | JWT o API key | Reenviar el correo del DTE a una dirección indicada. |
| GET | /api/v1/email/logs/{dteId} | JWT o API key | Consultar el historial de correos de un DTE. |
API keys (3)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/apikeys | JWT o API key | Listar las API keys de la empresa. |
| POST | /api/v1/apikeys | JWT o API key | Generar una API key nueva. Únicamente habilitado en Plan Pro. |
| DELETE | /api/v1/apikeys/{id} | JWT o API key | Revocar una API key. |
Usuarios (5)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/users | JWT o API key | Listar los usuarios de la empresa. |
| POST | /api/v1/users | JWT o API key | Crear un usuario de la empresa. Acepta chg_password para exigir cambio de clave en el próximo inicio de sesión. |
| PUT | /api/v1/users/{id} | JWT o API key | Editar datos de un usuario de la empresa, incluido rol, sucursal y la bandera chg_password. |
| PUT | /api/v1/users/{id}/status | JWT o API key | Activar/Desactivar usuario |
| DELETE | /api/v1/users/{id} | JWT o API key | Eliminar (lógico) usuario |
Roles (6)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/roles/permissions-catalog | JWT o API key | Obtener catálogo maestro de permisos agrupados por módulo |
| GET | /api/v1/roles | JWT o API key | Listar roles del tenant |
| GET | /api/v1/roles/{id} | JWT o API key | Obtener un rol por ID con sus permisos asignados |
| POST | /api/v1/roles | JWT o API key | Crear un nuevo rol para el tenant |
| PUT | /api/v1/roles/{id} | JWT o API key | Actualizar nombre, alcance y permisos de un rol |
| DELETE | /api/v1/roles/{id} | JWT o API key | Eliminar rol personalizado |
Compras (12)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/purchases/{id}/retenciones-renta | JWT o API key | Consultar retenciones de renta ISR art. 156 del Código Tributario. Registros solo de la empresa autenticada, independientes del CRE 07. |
| POST | /api/v1/purchases/{id}/retenciones-renta | JWT o API key | Registrar una retención de renta ISR art. 156 del Código Tributario, independiente del CRE 07. |
| POST | /api/v1/purchases/{id}/retenciones-renta/{retentionId}/anular | JWT o API key | Anular una retención de renta ISR art. 156 del Código Tributario, independiente del CRE 07. |
| GET | /api/v1/purchases/{id}/retenciones-renta/{retentionId}/pdf | JWT o API key | Declarado en el inventario, sin descripción adicional. |
| POST | /api/v1/purchases/import | JWT o API key | Importar DTE JSON de compra |
| GET | /api/v1/purchases | JWT o API key | Listar compras |
| GET | /api/v1/purchases/{id} | JWT o API key | Detalle de compra por ID |
| PATCH | /api/v1/purchases/{id}/sector | JWT o API key | Actualizar sector tributario de la compra (Normativa MH F-07 v14) |
| POST | /api/v1/purchases/{id}/retencion | JWT o API key | Emitir Comprobante de Retención 1% (CRE 07) |
| GET | /api/v1/purchases/{id}/inventory-status | JWT o API key | Consultar estado de inventario y saldos de la compra |
| POST | /api/v1/purchases/{id}/load-inventory | JWT o API key | Cargar ítems de compra al inventario (Kardex) |
| DELETE | /api/v1/purchases/{id} | JWT o API key | Eliminar compra |
Contingencia (4)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/contingency/pending | JWT o API key | Listar DTEs en estado contingencia pendientes de lote |
| POST | /api/v1/contingency/transmit-batch | JWT o API key | Transmitir lote de contingencia al MH (máximo 50 comprobantes por lote) |
| GET | /api/v1/contingency/events | JWT o API key | Historial de eventos / lotes de contingencia transmitidos |
| GET | /api/v1/contingency/stats | JWT o API key | Estadísticas de contingencia del tenant |
Planes (12)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/plans/available | JWT o API key | Listar planes activos disponibles comercialmente |
| GET | /api/v1/plans/my-plan | JWT o API key | Obtener el plan actual, overrides y DTEs autorizados del tenant en sesión |
| GET | /api/v1/plans/program-config | JWT o API key | Fuente única de configuración del programa (S.14 y Contrato sección 2.3) |
| GET | /api/v1/plans/quota-status | JWT o API key | Consultar estado de cuota mensual, bloqueo, adicionales y modo solo consulta (S.16 y S.17) |
| POST | /api/v1/plans/activate-additional | JWT o API key | Activar DTE adicionales del mes ($0.03 + IVA; contador $0.0255 + IVA) y desbloquear la emisión al instante. |
| POST | /api/v1/plans/upgrade | JWT o API key | Subir de plan inmediatamente (NEST -> WING -> FLIGHT) y desbloquear emisión (S.16.1) |
| POST | /api/v1/plans/checkout-wompi | JWT o API key | Generar enlace de pago en Wompi SV para escalar o renovar plan |
| POST | /api/v1/plans/reactivate | JWT o API key | Reactivar cuenta desde Modo Solo Consulta al activar un plan (S.17.2) |
| POST | /api/v1/plans/read-only | JWT o API key | Pasar cuenta a Modo Solo Consulta (por vencimiento o cancelación - S.17.2) |
| GET | /api/v1/plans/billing-profile | JWT o API key | Consultar perfil fiscal de facturación SaaS, medios de pago y ciclo de renovación |
| PUT | /api/v1/plans/billing-profile | JWT o API key | Actualizar comprobante preferido, datos fiscales y cobro automático |
| GET | /api/v1/plans/invoices | JWT o API key | Consultar facturas SaaS recibidas y enlaces a PDF y JSON oficiales |
Promociones (4)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/promotions/public/founder-spots | Según el middleware | Consultar cupos restantes de la promoción de fundadores (público con caché de 60s) |
| POST | /api/v1/promotions/validate | Según el middleware | Validar en el servidor un código de promoción durante el registro o la suscripción (S.19.5). |
| POST | /api/v1/promotions/redeem | JWT o API key | Aplicar un código de promoción antes del primer pago confirmado (S.19.4). |
| GET | /api/v1/promotions/my-panel | JWT o API key | Panel de la empresa: «Recomendá RAVEN DTE» y «Mi descuento» (S.19.7). |
Cotizaciones (7)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| POST | /api/v1/quotes | JWT o API key | Crear cotización |
| GET | /api/v1/quotes | JWT o API key | Listar cotizaciones |
| GET | /api/v1/quotes/{id} | JWT o API key | Obtener detalle |
| PATCH | /api/v1/quotes/{id}/status | JWT o API key | Cambiar estado (Aceptar/Rechazar/Facturar) |
| PUT | /api/v1/quotes/{id} | JWT o API key | Editar cotización |
| GET | /api/v1/quotes/{id}/pdf | JWT o API key | Generar y descargar/visualizar PDF de la cotización |
| POST | /api/v1/quotes/{id}/send-email | JWT o API key | Enviar cotización por correo electrónico |
Facturación recurrente (6)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/recurring | JWT o API key | Listar programas de facturación recurrente configurados en el tenant |
| POST | /api/v1/recurring | JWT o API key | Registrar un nuevo programa de facturación recurrente programada |
| PUT | /api/v1/recurring/{id} | JWT o API key | Actualizar configuración, periodicidad y montos de un programa recurrente |
| PATCH | /api/v1/recurring/{id}/estado | JWT o API key | Cambiar estado operativo (activo/pausado) de un programa recurrente |
| POST | /api/v1/recurring/{id}/generar | JWT o API key | Disparar ejecución inmediata de emisión para un programa recurrente |
| DELETE | /api/v1/recurring/{id} | JWT o API key | Eliminar o cancelar definitivamente un programa de facturación recurrente |
Cuentas por cobrar (7)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| POST | /api/v1/accounts-receivable/sync | JWT o API key | Sincronizar DTEs a crédito pendientes retroactivamente |
| GET | /api/v1/accounts-receivable | JWT o API key | Listar cuentas por cobrar |
| GET | /api/v1/accounts-receivable/stats | JWT o API key | Métricas de CxC |
| GET | /api/v1/accounts-receivable/{id} | JWT o API key | Detalle de cuenta por cobrar y sus abonos |
| POST | /api/v1/accounts-receivable/{id}/payments | JWT o API key | Registrar abono / pago |
| DELETE | /api/v1/accounts-receivable/payments/{paymentId} | JWT o API key | Revertir / anular abono |
| GET | /api/v1/accounts-receivable/payments/{paymentId}/ticket | JWT o API key | Ticket Térmico auto-imprimible de Abono / Pago |
Notificaciones (3)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/notifications | JWT o API key | Listar notificaciones y conteo no leído del usuario |
| POST | /api/v1/notifications/{id}/read | JWT o API key | Marcar una notificación individual como leída |
| POST | /api/v1/notifications/mark-all-read | JWT o API key | Marcar todas las notificaciones como leídas |
Sucursales (16)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/branches | JWT o API key | Listar sucursales y bodegas del tenant |
| GET | /api/v1/branches/main | JWT o API key | Obtener la Casa Matriz del tenant |
| GET | /api/v1/branches/{id} | JWT o API key | Detalle de una sucursal |
| POST | /api/v1/branches | JWT o API key | Crear una nueva sucursal / bodega |
| PUT | /api/v1/branches/{id} | JWT o API key | Actualizar sucursal |
| DELETE | /api/v1/branches/{id} | JWT o API key | Desactivar sucursal |
| GET | /api/v1/branches/{id}/pos | JWT o API key | Listar cajas / puntos de venta de una sucursal |
| POST | /api/v1/branches/{id}/pos | JWT o API key | Crear una caja / punto de venta en una sucursal |
| DELETE | /api/v1/branches/{id}/pos/{posId} | JWT o API key | Eliminar o desactivar punto de venta de forma segura |
| PUT | /api/v1/branches/toggle-all-emission | JWT o API key | Bloquear o desbloquear masivamente la emisión en todas las sucursales y terminales del tenant |
| PUT | /api/v1/branches/{id}/toggle-emission | JWT o API key | Bloquear o desbloquear la emisión de DTEs en la sucursal completa |
| PUT | /api/v1/branches/{id}/pos/{posId}/toggle-emission | JWT o API key | Bloquear o desbloquear la emisión de DTEs en una caja específica |
| POST | /api/v1/branches/activate-postdating | JWT o API key | Activar o desactivar modo posfechado seleccionando qué cajas tienen permiso para emitir |
| GET | /api/v1/branches/{id}/stock | JWT o API key | Obtener inventario segregado de la sucursal/bodega |
| PUT | /api/v1/branches/{id}/stock/{productId} | JWT o API key | Ajustar stock en la sucursal/bodega |
| POST | /api/v1/branches/transfers | JWT o API key | Transferir inventario entre sucursales o bodegas |
Turnos de caja (6)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/shifts/{id}/ticket | JWT o API key | Ticket térmico auto-imprimible de corte/cierre de caja (58mm/80mm) |
| GET | /api/v1/shifts/active | JWT o API key | Consultar si hay turno activo para una caja dada |
| POST | /api/v1/shifts/open | JWT o API key | Abrir turno de caja |
| GET | /api/v1/shifts/{id}/summary | JWT o API key | Resumen de ventas actuales del turno (para pre-visualizar el arqueo) |
| POST | /api/v1/shifts/{id}/close | JWT o API key | Cerrar turno y asentar arqueo de caja |
| GET | /api/v1/shifts | JWT o API key | Listar historial de turnos para reportes administrativos |
Libros de IVA (7)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/iva-books/settings | JWT o API key | Consultar configuración de Libros de IVA (foliado inicial, resolución, sector predeterminado) |
| PUT | /api/v1/iva-books/settings | JWT o API key | Actualizar configuración general y parámetros fiscales de Libros de IVA |
| GET | /api/v1/iva-books/periods/{periodo} | JWT o API key | Obtener resumen fiscal, anexos y compras extemporáneas del período tributario |
| GET | /api/v1/iva-books/periods/{periodo}/annexes/{key}/csv | JWT o API key | Exportar anexo oficial en CSV codificado en windows-1252 para carga en MH |
| POST | /api/v1/iva-books/periods/{periodo}/close | JWT o API key | Cerrar formalmente período tributario generando snapshot inmutable de libros |
| POST | /api/v1/iva-books/periods/{periodo}/reopen | JWT o API key | Reabrir período tributario cerrado con justificación fiscal y auditoría |
| POST | /api/v1/iva-books/periods/{periodo}/late-purchases/{purchaseId} | JWT o API key | Asignar o desasignar compra extemporánea a un período tributario |
Portal del contador (13)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/accountants/me | JWT o API key | Estado del panel multiempresa del contador: nivel, estrellas y empresas. |
| POST | /api/v1/accountants/profile | JWT o API key | Crea o actualiza el perfil de contador (inscripción CVPCPA + declaración jurada) |
| POST | /api/v1/accountants/recalculate | JWT o API key | Recalcula bajo demanda el nivel de estrellas y conteo de empresas activas |
| GET | /api/v1/accountants/tenant-access | JWT o API key | Lista los contadores vinculados o invitados por la empresa actual (Configuración → Contador) |
| POST | /api/v1/accountants/invitations | JWT o API key | La empresa invita a su contador por correo o número CVPCPA (S.2 / S.4) |
| POST | /api/v1/accountants/invitations/{id}/respond | JWT o API key | El contador acepta o rechaza la invitación de una empresa |
| PUT | /api/v1/accountants/access/{id}/scopes | JWT o API key | La empresa actualiza los scopes o condición de contador principal (S.4) |
| DELETE | /api/v1/accountants/access/{id} | JWT o API key | La empresa revoca acceso o el contador renuncia al acceso (efecto inmediato) |
| POST | /api/v1/accountants/internal-receipts | JWT o API key | Emitir un Comprobante Interno No Fiscal (CI-000001) en serie propia del contador (S.13) |
| POST | /api/v1/accountants/internal-receipts/{id}/cancel | JWT o API key | Anular un Comprobante Interno No Fiscal conservando su correlativo (S.13.1) |
| GET | /api/v1/accountants/internal-receipts/{id}/pdf | JWT o API key | PDF tamaño carta, listo para imprimir, del comprobante interno no fiscal. |
| POST | /api/v1/accountants/massive-downloads | JWT o API key | Solicita una descarga masiva ZIP en segundo plano (S.11) |
| POST | /api/v1/accountants/assistants | JWT o API key | Agrega o actualiza un asistente del contador según cupo de su nivel (S.15) |
Certificación (6)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/certification/status | JWT o API key | Cantidades emitidas en sandbox y corrida activa, si existe. |
| POST | /api/v1/certification/runs | JWT o API key | Inicia una nueva corrida de certificación |
| POST | /api/v1/certification/runs/{id}/pause | JWT o API key | Pausa la corrida en curso |
| POST | /api/v1/certification/runs/{id}/resume | JWT o API key | Reanuda una corrida pausada |
| POST | /api/v1/certification/runs/{id}/stop | JWT o API key | Detiene definitivamente una corrida |
| GET | /api/v1/certification/evidence/zip | JWT o API key | Descarga el paquete probatorio ZIP con los JSON sellados y manifiesto SHA-256 |
Simulación (6)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| POST | /api/v1/simulation/render-income-pdf | Según el middleware | Representación de demostración del ISR, sin estado. No acepta un logo de archivo ni un sello fiscal. |
| POST | /api/v1/simulation/render-report-pdf | Público (demo, sin operación fiscal) | Generar y renderizar en memoria PDF ejecutivo para reportes del Modo Demo |
| POST | /api/v1/simulation/render-pdf | Público (demo, sin operación fiscal) | Renderizado sin estado y solo en CPU. Sin base de datos, firma, colas ni peticiones externas. |
| GET | /api/v1/simulation/catalog | Público (demo, sin operación fiscal) | Solo metadatos comerciales públicos. No escribe prospectos, sesiones ni datos de negocio. |
| POST | /api/v1/simulation/start | Según el middleware | Iniciar sesión demo con captura de lead |
| POST | /api/v1/simulation/end | Según el middleware | Finalizar sesión demo y computar duración |
Reportes (2)
| Método | Ruta | Acceso | Descripción |
|---|---|---|---|
| GET | /api/v1/reports/tenant | JWT o API key | Obtener datos JSON de reportes del Tenant (T-01 a T-07) |
| GET | /api/v1/reports/export | JWT o API key | Exportar reporte en Excel (.xlsx) o PDF con universo completo sin truncamiento |
