Saltar al contenido
DevFact

Documentación

Empieza a emitir.

Una API JSON para los 6 comprobantes electrónicos del SRI. Prueba en el sandbox en un minuto y pasa a producción cuando estés listo.

Guía de inicio

  1. Paso 1

    Crea un sandbox y emite

    Sin cuenta, sin RUC y sin firma. Recibes una clave fk_test_ y el emisor demo 3099999992001, que emite contra un SRI simulado. Para provocar los errores reales del SRI usa los datos mágicos (GET /v1/sandbox/datos-magicos).

    TerminalShell
    # 1. Crea un sandbox (sin cuenta, sin RUC, sin firma)
    export FK=$(curl -s -X POST https://api.devfact.152-53-13-73.sslip.io/v1/sandbox \
      | jq -r .token)
    
    # 2. Emite contra el SRI simulado con el emisor demo
    curl -s -X POST https://api.devfact.152-53-13-73.sslip.io/v1/comprobantes \
      -H "Authorization: Bearer $FK" \
      -H "Content-Type: application/json" \
      -d '{
        "tipo": "factura",
        "items": [{ "descripcion": "Consultoría", "cantidad": 2,
                    "precioUnitario": "20.00", "iva": "15" }],
        "pagos": [{ "formaPago": "transferencia" }]
      }'
  2. Paso 2

    Usa idempotencia y fija la versión

    Envía una Idempotency-Key por cada operación de tu sistema: si repites la petición recibes el mismo comprobante sin gastar otro número. Tu clave queda fijada a la versión 2026-11-01; puedes indicarla en Fk-Version.

    POST /v1/comprobantesShell
    curl -X POST https://api.devfact.152-53-13-73.sslip.io/v1/comprobantes \
      -H "Authorization: Bearer $FK" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: pedido-1001" \
      -H "Fk-Version: 2026-11-01" \
      -d '{
        "tipo": "factura",
        "items": [{
          "descripcion": "Martillo",
          "cantidad": 1,
          "precioUnitario": "10.00",
          "iva": "15"
        }],
        "pagos": [{ "formaPago": "efectivo" }]
      }'
  3. Paso 3

    Guarda el XML autorizado

    La respuesta 201 trae xmlAutorizado. Por la retención mínima, el XML y el RIDE se pueden descargar sólo durante la retención (24 horas por defecto); después responden 410 PAYLOAD_PURGADO. La custodia de 7 años es tuya.

    DescargasShell
    # XML autorizado → FAC-001-001-000004521.xml
    curl -OJ https://api.devfact.152-53-13-73.sslip.io/v1/comprobantes/$ID/xml \
      -H "Authorization: Bearer $FK"
    
    # RIDE en PDF → FAC-001-001-000004521.pdf
    curl -OJ https://api.devfact.152-53-13-73.sslip.io/v1/comprobantes/$ID/ride \
      -H "Authorization: Bearer $FK"
  4. Paso 4

    Pasa a tu emisor y a producción

    Con tu cuenta registras tu emisor y su punto de emisión, subes tu .p12 y emites en el ambiente de pruebas del SRI. Para producción: verificación en dos pasos activa, una clave fk_live_ y el número desde el que sigue cada tipo de comprobante.

    Activar producciónShell
    # Con tu clave fk_live_ (se crea con verificación en dos pasos)
    RUC=1799999990001
    curl -X POST "https://api.devfact.152-53-13-73.sslip.io/v1/emisores/$RUC/activar-produccion" \
      -H "Authorization: Bearer $FK_LIVE" \
      -H "Content-Type: application/json" \
      -d '{
        "secuenciales": [{
          "estab": "001", "ptoEmi": "001",
          "tipo": "factura", "siguiente": 4521
        }],
        "confirmarRestantes": true
      }'

Conecta un agente (MCP)

Claude, ChatGPT, Cursor o cualquier cliente MCP emiten por ti con el servidor https://api.devfact.152-53-13-73.sslip.io/mcp. Agrega la URL y el cliente abre la pantalla de autorización de DevFact: eliges los permisos y, si quieres, el acceso a producción. Nunca pegues una clave API en un agente: el MCP sólo usa tokens OAuth que se renuevan solos y revocas en Claves API. En Claude: Configuración → Conectores → Agregar conector personalizado.

Claude CodeShell
claude mcp add --transport http devfact https://api.devfact.152-53-13-73.sslip.io/mcp
Cursor (.cursor/mcp.json)JSON
{
  "mcpServers": {
    "devfact": {
      "url": "https://api.devfact.152-53-13-73.sslip.io/mcp"
    }
  }
}
preparar_comprobante
Valida, calcula los totales en el servidor y devuelve un token de confirmación. No emite.
emitir_comprobante
Emite exactamente lo preparado (el cliente te pide confirmación). Idempotente.
consultar_comprobante
Estado, recorrido y, si el SRI lo rechazó, la causa con su solución.
descargar_comprobante
RIDE (PDF) o XML autorizado mientras siga retenido.
estado_cuenta
Tus emisores y qué le falta a cada uno.
validar_identificacion · calcular_totales · …
Gratis y sin cuenta en https://api.devfact.152-53-13-73.sslip.io/mcp/publico.

Referencia

Lo esencial

Autenticación
Authorization: Bearer con tu clave. fk_test_ emite siempre en pruebas; fk_live_ emite en el ambiente del emisor.
Montos
Como texto decimal ("10.50"). Calculamos los totales con redondeo half-up a 2 decimales.
Fechas
YYYY-MM-DD. La fecha de emisión por defecto es hoy, en la hora de Ecuador.
Estados
201 AUTORIZADO; 202 en proceso (el SRI no respondió a tiempo, se reintenta solo); 422 inválido o rechazado por el SRI.
Webhooks
Standard Webhooks: verifica webhook-signature con tu secreto whsec_ y deduplica por webhook-id.
Errores
{ error: { code, message, details, requestId, source, docUrl, solucion } } con un code estable.
Límites
300 peticiones por minuto por clave (429 con Retry-After) y 2 MiB por comprobante.