Saltar al contenido

Factura para desarrolladores

Emite DTE ante Hacienda con una sola API: desde tu código, tu terminal o tu agente de IA.

  • API pública y OpenAPI 3.1
  • Ambiente de pruebas desde el primer día
  • API de código abierto: puedes autoalojarla

POST /api/v1/dte · ambiente de pruebas

curl https://app.openfactura.co/api/v1/dte \
  -H "Authorization: Bearer $OPENFACTURA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-1042" \
  -d '{
    "tipoDte": "01",
    "datos": {
      "items": [
        { "descripcion": "Servicio", "cantidad": 2, "precioUni": 11.3 }
      ]
    }
  }'

Lo que cubre hoy

  • 11

    tipos de DTE: factura, crédito fiscal, notas y más

  • 4

    eventos, como invalidar o emitir en contingencia

  • 100%

    API de código abierto

  • 2.0

    la normativa vigente de Hacienda

Autorizados por la DGII

Hicimos nuestras propias pruebas ante Hacienda con Open Factura y lo logramos sin complicaciones. En horas, no semanas.

  • Factura
  • Crédito Fiscal
  • Nota de Remisión
  • Nota de Crédito
  • Nota de Débito
  • Retención
  • Liquidación
  • Contable de Liquidación
  • Exportación
  • Sujeto Excluido
  • Contingencia
  • Invalidación
Autorización MH.DGII.DFE/008.071632/2026 de la Dirección General de Impuestos Internos: YAYA TECHNOLOGIES ha cumplido con los requerimientos técnicos para ser emisor de DTE
MH.DGII.DFE/008.071632/2026 · 13 de noviembre de 2026 · Ver PDF Acredita a YAYA TECHNOLOGIES como emisor de DTE. No es una certificación del software por parte del Ministerio de Hacienda.

Una llamada API y te integras con Hacienda

Tu primer DTE de prueba en 2 minutos, sin trámites.

API · 3 líneas
const r = await fetch('https://app.openfactura.co/api/v1/dte', { method: 'POST',
  headers: { Authorization: `Bearer ${process.env.OPENFACTURA_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ tipoDte: '01', datos: { items: [{ descripcion: 'Café', cantidad: 2, precioUni: 3.5 }] } }) })
o con la CLI · 2 líneas
npx @openfactura/cli login --url https://app.openfactura.co
npx @openfactura/cli dte emitir factura.json

De vuelta a tu sistema: el sello, el PDF y el webhook dte.procesado.

Todo lo que necesitas para integrar

Lo que tu código necesita para emitir, enterarse y reintentar sin sorpresas.

  • Emisión de todos los DTE

    Factura, Crédito Fiscal, remisión, notas de crédito y débito, retención, exportación y sujeto excluido. Validación contra el esquema del MH, firma JWS, transmisión y sello.

  • Webhooks firmados

    Un aviso con HMAC-SHA256 cuando un documento cambia de estado. Reintentos con espera creciente e historial de entregas.

  • Idempotencia

    Si la red falla, repite la petición con la misma Idempotency-Key: recibes el resultado original y nada se emite dos veces.

  • MCP y agentes

    Servidor MCP remoto y por stdio, y skills para agentes. Cada herramienta exige el mismo permiso que su ruta REST.

  • Pruebas y producción

    Una clave of_test_ nunca toca producción. Credenciales del MH cifradas con AES-256-GCM y nunca devueltas por la API.

  • En español

    Documentación, mensajes y el vocabulario de Hacienda en español. Códigos de error estables, OpenAPI 3.1 y límites con cabeceras RateLimit.

Elige cómo integrar

Una API, una CLI y un agente. Cada operación existe en REST, en la CLI y como herramienta MCP, con los mismos permisos.

  • REST con OpenAPI 3.1 público
  • CLI @openfactura/cli con licencia MIT
  • MCP remoto o por stdio, y skills para agentes

Inicio rápido

POST /api/v1/dte
curl https://app.openfactura.co/api/v1/dte \
  -H "Authorization: Bearer $OPENFACTURA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-1042" \
  -d '{
    "tipoDte": "01",
    "datos": {
      "items": [
        { "descripcion": "Servicio", "cantidad": 2, "precioUni": 11.3 }
      ]
    }
  }'
201 Created
{
  "codigoGeneracion": "0862382B-0BB8-42A0-BB6B-B42DCCDF1EA4",
  "numeroControl": "DTE-01-M001P001-000000000000001",
  "estado": "procesado",
  "total": 22.6,
  "selloRecibido": "20265EE94C1B2C4CBB56F56121E37F5AC8CA7D27"
}
terminal
npm i -g @openfactura/cli
openfactura login --url https://app.openfactura.co   # pide la clave sin mostrarla

openfactura dte validar factura.json   # sin número de control, sin firmar
openfactura dte emitir factura.json
openfactura dte pdf 0862382B-0BB8-42A0-BB6B-B42DCCDF1EA4 -o factura.pdf
Claude Code · servidor remoto
claude mcp add --transport http openfactura https://openfactura.co/mcp \
  --header "Authorization: Bearer of_test_…"
o por stdio, con la CLI
claude mcp add openfactura \
  --env OPENFACTURA_API_KEY=of_test_… \
  --env OPENFACTURA_URL=https://app.openfactura.co \
  -- npx -y @openfactura/cli mcp

Pídele «Emite una factura de consumidor final por 2 servicios de $11.30, IVA incluido». El asistente valida, te muestra el resumen y emite cuando confirmas.

terminal
npx skills add xaviigna/openfactura

Cuatro skills para Claude Code, Cursor y otros agentes: openfactura-conectar, openfactura-facturar, openfactura-errores y openfactura-webhooks. Ver en skills.sh.

Entérate de cada sello sin consultar

Un POST firmado a tu sistema cuando un documento cambia de estado. Verifica la firma con WebCrypto en Node, Workers, Deno o Bun.

  • Firma HMAC-SHA256 en OpenFactura-Signature
  • Reintentos con espera creciente
  • Historial de entregas
  • dte.procesado
  • dte.rechazado
  • dte.contingencia
  • dte.invalidado
  • retorno.procesado
  • operaciones_especiales.procesado

Guía de webhooks

webhook.ts
const enc = new TextEncoder()

export async function POST(req: Request) {
  const cuerpo = await req.text() // crudo, antes de JSON.parse
  const cabecera = req.headers.get('OpenFactura-Signature') ?? ''
  const { t, v1 = '' } = Object.fromEntries(
    cabecera.split(',').map((p) => p.split('=')),
  )
  if (!(Math.abs(Date.now() / 1000 - Number(t)) <= 300))
    return new Response('expirado', { status: 400 })

  const llave = await crypto.subtle.importKey(
    'raw', enc.encode(process.env.OPENFACTURA_WEBHOOK_SECRET),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['verify'],
  )
  const firma = Uint8Array.from(v1.match(/../g) ?? [],
    (h) => Number.parseInt(h, 16))
  const ok = await crypto.subtle.verify(
    'HMAC', llave, firma, enc.encode(`${t}.${cuerpo}`),
  )
  if (!ok) return new Response('firma inválida', { status: 400 })

  const aviso = JSON.parse(cuerpo) // { id, evento, ambiente, datos }
  return new Response(null, { status: 204 })
}

Para agentes

Tu agente lo hace por ti

Pídelo en español. Tu agente busca al cliente, valida contra el esquema del MH y emite el DTE por MCP, con los permisos de la clave que le des.

Conecta tus agentes
npx @openfactura/cli mcp install --todos
Funciona con
  • +4

Conecta tu agente Herramientas MCP skills.sh

El PDF oficial, listo para tu cliente

Cada documento procesado tiene su representación gráfica con el formato sugerido por Hacienda, junto al JSON oficial firmado.

  • Código QR de consulta en el portal del MH
  • Código de generación, número de control y sello
  • Por la API, la CLI (openfactura dte pdf) o el panel

Leer la documentación

factura.pdf
Tu empresa, S.A. de C.V.
Documento tributario electrónicoFACTURA
Código de generación
0862382B-0BB8-42A0-BB6B-B42DCCDF1EA4
Número de control
DTE-01-M001P001-000000000000001
Sello de recepción
20265EE94C1B2C4CBB56F56121E37F5AC8CA7D27
Cant.DescripciónPrecioTotal
2Servicio$11.30$22.60

Total a pagar$22.60

Precios simples, todo incluido

Todos los planes traen el panel, WhatsApp y el ambiente de pruebas sin límite; desde Emprendedor, también la API, el MCP, la CLI y los webhooks. Cada DTE extra cuesta $0.01 y nunca detenemos tu emisión.

WhatsApp

$5 /mes

Factura desde tu teléfono, sin computadora.

  • 1,000 DTE/mes, luego $0.01 por DTE
  • Facturas desde WhatsApp
  • Panel: documentos, clientes y productos
  • Envío por correo con el PDF y el JSON
  • 1 empresa

Todo incluido

Emprendedor

$9 /mes

Todo incluido: el panel, WhatsApp y las herramientas para desarrolladores.

  • 2,000 DTE/mes, luego $0.01 por DTE
  • API, MCP, CLI y webhooks
  • Panel, WhatsApp y envío por correo (PDF y JSON)
  • Usuarios y sucursales ilimitados
  • 1 empresa

Pro

$19 /mes

Para negocios que facturan todos los días.

  • 10,000 DTE/mes, luego $0.01 por DTE
  • API, MCP, CLI y webhooks
  • Panel, WhatsApp y envío por correo (PDF y JSON)
  • Usuarios y sucursales ilimitados
  • Hasta 3 empresas
  • Soporte por correo

Platform

$99 /mes

Para software houses, agencias y contadores.

  • 50,000 DTE/mes, luego $0.01 por DTE
  • Todo lo de Pro
  • 25 empresas, luego $3 por empresa
  • Alta de tus clientes con tu marca y una API por cliente
  • Soporte prioritario

Complemento: alta ante Hacienda acompañada, $49 pago único.

¿Más volumen o un SLA? Hablemos

Precios en dólares, IVA no incluido. El ambiente de pruebas es ilimitado y no cuenta. Facturar ante Hacienda no tiene costo: pagas por la plataforma.

¿Nube o tu propio servidor?

El núcleo es de código abierto: puedes instalarlo tú. La nube agrega lo que te ahorra el trabajo.

QuéOpen Factura CloudAutoalojado
PrecioDesde $5 al mesGratis, más tu plan de Cloudflare Workers
Panel webSíNo: API, CLI y MCP
Facturar desde WhatsAppSíNo
Envío al cliente por correo (PDF y JSON)AutomáticoLo armas tú
Alta guiada y certificación ante HaciendaAutomáticasLas haces tú con la API
Actualizaciones y respaldosAutomáticos, recuperación de 30 díasLos operas tú
Puesta en marchaMinutosUna tarde: Cloudflare, base de datos y secretos
SoportePor correoComunidad en GitHub
LicenciaServicioAGPL-3.0; SDK y CLI MIT

Integra tu sistema

Crea tu cuenta, genera una clave of_test_ y emite tu primer DTE de prueba hoy. Si tienes dudas, la documentación y el repositorio están abiertos.