Tequiodevelopers
dte-sv · API

Facturación electrónica de El Salvador, vía API.

Emití Documentos Tributarios Electrónicos firmados ante el Ministerio de Hacienda con una sola llamada REST. Una request, un PDF con sello fiscal. Alineado a la Normativa de Cumplimiento DTE v2.0.

Por qué dte-sv

Firma + transmisión al MH

Mandás el JSON; nosotros firmamos (JWS RS512) y lo transmitimos al Ministerio de Hacienda. Te devolvemos el sello fiscal y el PDF.

Contingencia automática

Si el MH está caído, el DTE queda firmado y se retransmite solo dentro de la ventana legal de 72h. No perdés ventas.

Todos los tipos de DTE

Factura, CCF, Notas de Crédito y Débito, Exportación, Retención, Liquidación, Donación y más, con sus eventos (Invalidación, Contingencia, Retorno y Operaciones Especiales), alineados a la Normativa v2.0.

Notificaciones incluidas

Email (con PDF + Archivo DTE firmado) y WhatsApp opcionales por request. O notificá vos con las URLs firmadas.

Multi-emisor, rate-limited

Un Consumer emite por varios NIT. Rate limit por Consumer, webhooks de contingencia, ambientes de pruebas y producción.

OpenAPI + hand-off a IA

Spec OpenAPI 3.1 machine-readable y llms.txt. Tu IA (Claude Code, Codex) implementa el cliente en minutos.

Quickstart

Autenticás con Authorization: Bearer tqo_…. Emitís una Factura a consumidor final así:

bash
curl -X POST https://dte-sv.tequio.work/api/dte/factura \
  -H "Authorization: Bearer tqo_TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "receptor": null,
    "items": [
      { "descripcion": "Servicio mensual", "precioUni": 9.99, "tipoItem": 2 }
    ],
    "notify": ["email"]
  }'

Respuesta:

json
{
  "estado": "PROCESADO",
  "codigoGeneracion": "C6D61720-8D93-40CF-B4C1-845764DD7F4A",
  "numeroControl": "DTE-01-M001P001-000000000000186",
  "selloRecibido": "20262F05FA037B8B461A967C8AD5990F002BHOMY",
  "assets": {
    "portalUrl": "https://dte-sv.tequio.work/dte/C6D61720-…",
    "pdfUrl": "…firmada 30 días…"
  }
}

Hand-off a Claude Code / Codex / Cursor

¿No querés escribir el cliente a mano? Pegale esto a tu IA: tiene los recursos machine-readable y queda integrado al 100%.

Quiero integrar **dte-sv** (facturación electrónica de El Salvador, Ministerio de Hacienda) a mi sistema. Implementá un cliente completo y robusto.

Recursos (leélos antes de empezar):
- OpenAPI 3.1 (machine-readable): https://dte-sv.tequio.work/openapi.json
- Referencia completa para IA: https://dte-sv.tequio.work/llms-full.txt
- Guía humana: https://dte-sv.tequio.work/developers

Mis credenciales:
- API key: tqo_TU_API_KEY
- Base URL: https://dte-sv.tequio.work

Implementá:
1. Un cliente con auth Bearer (header `Authorization: Bearer tqo_TU_API_KEY`).
2. Emisión de Factura (01) a consumidor final y CCF (03) B2B, con los shapes exactos del OpenAPI.
3. Manejo de los 3 estados de respuesta: PROCESADO (200), PENDIENTE_CONTINGENCIA (422 con estado), RECHAZADO (422). NO reintentar con el mismo codigoGeneracion en RECHAZADO.
4. Manejo de errores HTTP (401, 402 sin suscripción, 422 invalid-payload con `issues`, 429 con `Retry-After`).
5. Tipado fuerte a partir del OpenAPI (generá tipos/cliente con tu herramienta preferida).
6. Tests con el ambiente de pruebas (`"ambiente": "00"`) antes de producción.
7. (Opcional) Emisión con IA: `POST /api/dte/ai` recibe la venta en lenguaje natural
   (`{ textos?, audios?, adjuntos?, ambiente, autoEmit? }`: texto, notas de voz, fotos o PDF;
   `input` también vale como un solo texto) y devuelve uno o varios documentos en
   `documentos[]`, cada uno con `accion` EMITIR/CONFIRMAR/NO_EMITIR, su `statusEmision` y el
   DTE emitido o el payload listo. Si llegó a intentar emitir responde 200 o 422, nunca 5xx: no
   reintentes el pedido entero, mirá cada documento. Útil como atajo de captura.

Cuenta y emisores: si mi sistema emite en nombre de varios clientes (multi-emisor), leé
la sección "7-bis" de llms-full.txt: el alta de cada emisor NO es por API ni hace falta
pedirle los datos fiscales al cliente; Tequio la hace con su contador y nos entrega el
issuerId. No diseñes un formulario de alta fiscal. Las pruebas que exige Hacienda para
autorizar al emisor también las hace Tequio en el alta. Los DTE de pruebas (00) se cobran.
Usá `externalRef` en TODA emisión (todos los tipos lo aceptan) y, ante timeout o 502,
repetí el mismo POST con el mismo externalRef: nunca duplica. El webhook no va firmado:
usalo solo como aviso y confirmá con GET /api/dte/{codigoGeneracion}. Registralo vos
con PATCH /api/consumer/me { "webhookUrl": "https://..." } (no hace falta pedírnoslo).

Empezá generando el cliente desde https://dte-sv.tequio.work/openapi.json y mostrame un ejemplo de emisión de Factura.

Endpoints

POST/api/dte/facturaFactura (01), consumidor final
POST/api/dte/ccfComprobante de Crédito Fiscal (03), B2B
POST/api/dte/nota-remisionNota de Remisión (04), traslado de mercadería
POST/api/dte/nota-creditoNota de Crédito (05)
POST/api/dte/nota-debitoNota de Débito (06)
POST/api/dte/comprobante-retencionComprobante de Retención (07)
POST/api/dte/comprobante-liquidacionComprobante de Liquidación (08)
POST/api/dte/documento-contable-liquidacionDocumento Contable de Liquidación (09)
POST/api/dte/factura-exportacionFactura de Exportación (11)
POST/api/dte/factura-sujeto-excluidoFactura de Sujeto Excluido (14)
POST/api/dte/comprobante-donacionComprobante de Donación (15)
POST/api/dte/aiEmisión con IA: texto, audio o archivos → uno o varios DTE
GET/api/dte/{codGen}Consultar estado + assets
POST/api/dte/{codGen}/invalidarInvalidar un DTE
POST/api/dte/{codGen}/retornoReportar devolución (B2C)
POST/api/dte/loteEmisión masiva (hasta 100)

Schemas exactos, ejemplos por endpoint y "try it" en la referencia interactiva.

¿Ya sos cliente?

Entrá al dashboard para ver tu API key, tus issuerIds y tu archivo .env listo para copiar, con un hand-off a Claude Code ya personalizado con tus credenciales.

Ir a mi integraciónCrear cuenta / Entrar