Habilitación DIAN en 24 horas · Soporte humano por WhatsApp · Sin contrato mínimo
⚡ REST API v1 UBL 2.1 Anexo 1.9 DIAN Firmas XAdES-BES Webhooks HMAC

La API de facturación electrónica DIAN que integra en 5 minutos.

Emite Facturas Electrónicas, Notas Débito/Crédito, Documento Soporte y Eventos RADIAN con una llamada REST JSON. Sin SDKs obligatorios, sin lidiar con SOAP ni certificados enredados y con validación DIAN en menos de 500ms.

✓ Sandbox gratis inmediato · ✓ 0 contratos mínimos · ✓ Soporte directo por WhatsApp
curl -X POST https://api.emytu.com/v1/invoices \
  -H "Authorization: Bearer emytu_live_sec_994a..." \
  -H "Idempotency-Key: ord_77281_f92" \
  -H "Content-Type: application/json" \
  -d '{
    "numbering_prefix": "SETT",
    "customer": {
      "identification": "901234567",
      "dv": "8",
      "legal_name": "ACME Colombia S.A.S.",
      "email": "contabilidad@acme.co"
    },
    "payment_means": { "code": "10", "method": "cash" },
    "items": [
      {
        "sku": "SUB-PRO-01",
        "name": "Suscripción Software Anual",
        "quantity": 1,
        "price": 1200000,
        "tax_rate": 19.0
      }
    ]
  }'
import { EmytuClient } from '@emytu/sdk';

const emytu = new EmytuClient({ apiKey: process.env.EMYTU_API_KEY });

const invoice = await emytu.invoices.create({
  idempotencyKey: 'ord_77281_f92',
  numberingPrefix: 'SETT',
  customer: {
    identification: '901234567',
    dv: '8',
    legalName: 'ACME Colombia S.A.S.',
    email: 'contabilidad@acme.co',
  },
  paymentMeans: { code: '10', method: 'cash' },
  items: [
    {
      sku: 'SUB-PRO-01',
      name: 'Suscripción Software Anual',
      quantity: 1,
      price: 1_200_000,
      taxRate: 19.0,
    },
  ],
});

console.log(`Factura validada por DIAN: ${invoice.cufe}`);
import requests

response = requests.post(
    "https://api.emytu.com/v1/invoices",
    headers={
        "Authorization": "Bearer emytu_live_sec_994a...",
        "Idempotency-Key": "ord_77281_f92",
    },
    json={
        "numbering_prefix": "SETT",
        "customer": {
            "identification": "901234567",
            "dv": "8",
            "legal_name": "ACME Colombia S.A.S.",
            "email": "contabilidad@acme.co",
        },
        "payment_means": {"code": "10", "method": "cash"},
        "items": [{
            "sku": "SUB-PRO-01",
            "name": "Suscripción Software Anual",
            "quantity": 1,
            "price": 1200000,
            "tax_rate": 19.0,
        }],
    },
)

invoice = response.json()
print(f"Factura generada: {invoice['number']} - CUFE: {invoice['cufe']}")
<?php
use Illuminate\Support\Facades\Http;

$response = Http::withToken(config('services.emytu.secret'))
    ->withHeaders(['Idempotency-Key' => 'ord_77281_f92'])
    ->post('https://api.emytu.com/v1/invoices', [
        'numbering_prefix' => 'SETT',
        'customer' => [
            'identification' => '901234567',
            'dv' => '8',
            'legal_name' => 'ACME Colombia S.A.S.',
            'email' => 'contabilidad@acme.co',
        ],
        'payment_means' => ['code' => '10', 'method' => 'cash'],
        'items' => [[
            'sku' => 'SUB-PRO-01',
            'name' => 'Suscripción Software Anual',
            'quantity' => 1,
            'price' => 1200000,
            'tax_rate' => 19.0,
        ]],
    ]);

$invoice = $response->json();
package main

import (
    "bytes"
    "encoding/json"
    "net/http"
)

func emitInvoice() (*http.Response, error) {
    payload := map[string]interface{}{
        "numbering_prefix": "SETT",
        "customer": map[string]string{
            "identification": "901234567",
            "legal_name":     "ACME Colombia S.A.S.",
            "email":          "contabilidad@acme.co",
        },
    }
    body, _ := json.Marshal(payload)
    req, _ := http.NewRequest("POST", "https://api.emytu.com/v1/invoices", bytes.NewBuffer(body))
    req.Header.Set("Authorization", "Bearer emytu_live_sec_994a...")
    req.Header.Set("Idempotency-Key", "ord_77281_f92")
    return http.DefaultClient.Do(req)
}
200 OK ⚡ DIAN Validado en 342ms
{
  "status": "accepted",
  "number": "SETT-10492",
  "cufe": "f8319e7a20c91823abdf0175bca...",
  "qr_code_url": "https://emytu.com/qr/f8319e...",
  "xml_url": "https://storage.emytu.com/xml/SETT-10492.xml",
  "pdf_url": "https://storage.emytu.com/pdf/SETT-10492.pdf",
  "payable_amount": 1428000.00,
  "dian_validation": {
    "status_code": "00",
    "message": "Documento validado por la DIAN con éxito.",
    "track_id": "dian_trk_081a9f7"
  }
}
Arquitectura & Primitivas

Diseñado para sistemas que no pueden fallar

Cada detalle de la API de Emytu fue construido pensando en la resiliencia técnica, velocidad de respuesta y cero fricción con la DIAN.

🛡️

Idempotencia Nativa

Envía el encabezado Idempotency-Key en cada emisión. Si tu red sufre un timeout o tu servidor se reinicia, reintenta sin riesgo de generar una doble factura ni alterar consecutivos fiscales.

Firma XAdES-BES en Memoria

Nuestro motor canónico procesa el XML UBL 2.1 y aplica la firma digital PKCS#12 en menos de 80ms, calculando el CUFE/CUDE con SHA-384 sin bloquear tus hilos.

🔔

Webhooks con Firma HMAC

Recibe notificaciones instantáneas cuando un documento cambie de estado (accepted, rejected, eventos RADIAN). Valida la autenticidad con la firma criptográfica X-Emytu-Signature.

🏢

Multi-Tenancy para SaaS y ERPs

¿Tienes cientos de clientes que facturan? Aprovisiona empresas hijas (tenants), asigna sus resoluciones DIAN y gestiona sus certificados mediante endpoints dedicados.

🧪

Sandbox & Habilitación DIAN

Ambiente de pruebas aislado. Ejecuta el set de pruebas oficial de la DIAN para nuevos emisores en una sola llamada y pasa a producción sin trámites presenciales.

📄

PDF, XML y QR Instantáneos

Obtén URLs CDN de alta velocidad para el XML firmado (UBL 2.1) y la representación gráfica en PDF lista para descargar, enviar por WhatsApp o adjuntar a correos transaccionales.

Ahorro de Tiempo & Código

¿Por qué no integrar directamente con la DIAN?

Construir infraestructura propia para la DIAN te cuesta semanas de ingeniería, mantenimiento de servidores SOAP y dolores de cabeza ante contingencias. Con Emytu pasas a producción en horas.

Método Tradicional (SOAP DIAN)

Integración Directa

  • 3 a 6 semanas de desarrollo

    Implementar librerías SOAP/WSDL, digest de XML UBL 2.1 y firma PKCS#12 en disco.

  • Bloqueos por caídas de la DIAN

    Si la DIAN responde con timeout, tu servidor se congela o genera facturas duplicadas.

  • Errores crípticos de validación

    Códigos opacos como Regla FAU02 sin indicación de qué campo falló.

  • Mantenimiento continuo de resoluciones

    Modificaciones constantes por cada nuevo anexo técnico o cambio normativo.

Con Emytu API

API REST Moderna

  • 1 llamada POST JSON en 5 minutos

    Envías datos limpios; nosotros generamos el XML, firmamos y validamos en <500ms.

  • Contingencia Tipo 04 Automática

    Colas en BullMQ con CUFE inmediato en memoria. Tu usuario nunca espera a la DIAN.

  • Respuestas y Errores Claros en Español

    Mensajes explicativos con el campo exacto a corregir y sugerencias en el JSON.

  • Multi-Tenant, Webhooks & Idempotencia

    Infraestructura completa lista para escalar a cientos de empresas y millones de docs.

Especificación OpenAPI

Una sola API para todos los comprobantes DIAN

Todos los tipos de documentos fiscales bajo una interfaz homogénea y consistente.

Emitir Factura Electrónica de Venta

Genera la factura, aplica firma digital XAdES-BES, envía a la DIAN y retorna el CUFE y URLs en una respuesta síncrona.

Campo Tipo Descripción
numbering_prefix string Prefijo del rango de numeración autorizado por la DIAN (ej. "SETT", "FE").
customer object Identificación (NIT/CC), dígito de verificación, razón social y correo del adquiriente.
items array Líneas de la factura: SKU, descripción, cantidad, precio unitario y tarifa de IVA/ICA/INC.
payment_means object Medio de pago (código DIAN: 10 efectivo, 48 tarjeta, 31 transferencia, etc.) y vencimiento.

Emitir Nota Crédito

Anula o ajusta el valor de una factura emitida previamente, referenciando su CUFE y número original.

Campo Tipo Descripción
billing_reference object Número de la factura referenciada y su CUFE original.
discrepancy_code string Concepto de corrección DIAN (ej. "1": Devolución, "2": Anulación total, "3": Descuento).
items array Líneas objeto de ajuste o devolución con sus impuestos proporcionales.

Emitir Documento Soporte a No Obligados

Soporta compras de bienes y servicios prestados por personas naturales que no expiden factura electrónica.

Campo Tipo Descripción
seller object Datos del proveedor no obligado (Cédula de Ciudadanía, nombre completo, ciudad).
transmission_type string "individual" (por operación) o "accumulated" (acumulado semanal por proveedor).

Registrar Eventos RADIAN en Facturas a Crédito

Obligatorio para deducir costos y gastos en facturas a crédito recibidas de tus proveedores.

Campo Tipo Descripción
event_code string 030 (Acuse de recibo), 032 (Recibo del bien o servicio), 033 (Aceptación expresa).
invoice_cufe string CUFE oficial de la factura electrónica recibida.
Para Creadores de Software & ERPs

Factura a nombre de tus clientes sin enredos

Si desarrollas un SaaS (salud, restaurantes, e-commerce, colegios, veterinarias) o un ERP, Emytu maneja la infraestructura fiscal de cada uno de tus tenants de forma aislada e instantánea.

1

Crea el Tenant por API

POST /v1/tenants registra el NIT y razón social de tu cliente.

2

Asigna Certificado y Resolución

Sube el .p12 y la autorización DIAN sin tocar base de datos.

3

Emite con Tenant-Key

Envía X-Tenant-Id en tus requests y Emytu aísla firmas y consecutivos.

🖥️ Tu Plataforma / SaaS
⬇️ POST /v1/invoices (X-Tenant-Id)
⚡ Motor API Emytu Firma XAdES-BES + UBL 2.1
⬇️ SOAP Sync <500ms
🏛️ DIAN Colombia Validación Oficial + CUFE
⬇️ Webhook HMAC
🔔 Tu Webhook Listener (accepted)
Precios Transparentes

Calculadora de volumen para Desarrolladores

Sin costos ocultos de configuración, sin cobro por certificados de prueba y con soporte técnico dedicado por WhatsApp.

docs / mes
100 5,000 10,000 15,000 20,000+
Acceso rápido:
Precio por Documento $180 COP Tarifa decreciente por escala
Inversión Mensual Estimada $450,000 COP Sin contratos forzosos
Sandbox & Webhooks Ilimitados Incluidos en todos los planes
Ecosistema & Librerías

Integra en tu stack favorito

Kits de desarrollo oficiales, plantillas de código y conectores no-code listos para producción.

📦

Node.js / TypeScript

Cliente SDK con tipado estricto, manejo automático de reintentos y soporte de streams.

npm i @emytu/sdk
🐍

Python

Librería ligera compatible con Django, FastAPI y scripts de automatización contable.

pip install emytu
🐘

PHP / Laravel

Service Provider y Facades para Laravel y aplicaciones PHP nativas.

composer require emytu/laravel

Nodo Oficial n8n

Emite facturas y recibe eventos DIAN en tus flujos de automatización visual.

n8n-nodes-emytu
📮

Colección Postman

Todos los endpoints documentados con variables de entorno y ejemplos pre-cargados.

Descargar Colección →
🧩

Extensión de Navegador

Emisión en 1-clic desde cualquier panel web, CRM o punto de venta.

Chrome & Edge
Preguntas Frecuentes

Dudas técnicas resueltas

¿Cómo manejan los certificados digitales de los emisores?

Puedes cargar el certificado digital .p12 de tu empresa (o el de tus clientes vía API) en nuestro almacén encriptado (AES-256-GCM). Emytu realiza la firma digital XAdES-BES en memoria al momento de emitir. También podemos gestionar la expedición del certificado digital directamente con la entidad certificadora autorizada.

¿Qué sucede si los servidores de la DIAN sufren una caída o lentitud?

Emytu implementa contingencia automática de tipo 04 (Contingencia DIAN). El documento se firma, se le asigna su CUFE y se encola de forma segura en BullMQ con reintentos exponenciales hasta que la DIAN restablezca su servicio, notificando a tu webhook cuando la validación sea confirmada.

¿Puedo probar todo el flujo antes de contratar o salir a producción?

Sí. Al solicitar tu API Key de desarrollador recibes acceso inmediato al Sandbox de Emytu. Puedes emitir documentos de prueba ficticios o conectar el Set de Pruebas oficial de habilitación DIAN sin costo.

¿Cuáles son los límites de peticiones (Rate Limiting)?

El entorno Sandbox permite hasta 60 peticiones por minuto. En producción los límites se configuran a la medida de tu volumen, soportando ráfagas de alta concurrencia (ej. Black Friday o días sin IVA) de cientos de facturas por segundo.

¿La API soporta todos los anexos técnicos vigentes de la DIAN?

Sí. Cumplimos al 100% con la Resolución 000165 de 2023, Anexo Técnico 1.9 de Facturación Electrónica, Anexo 1.3 de Documento Soporte y la reglamentación vigente de Eventos RADIAN.

Onboarding en 30 minutos

Comienza a emitir con la API de Emytu hoy

Habla directamente con nuestros ingenieros por WhatsApp, obtén tus credenciales de prueba y valida tu primera factura en minutos.

¿Hablas por WhatsApp?