Login

Guía de Integración API

Versión: 3.9 (Extended Technical Documentation)
Plataforma: Facturación Electrónica (Ecuador)

Esta API permite a sistemas externos (ERP, POS, E-commerce, CRMs) emitir documentos electrónicos legales en Ecuador a través de una sola llamada simplificada. Al basarse en estándares web (REST/JSON), admite integración desde cualquier lenguaje de programación, incluyendo PHP (Laravel), Python (Django/Flask), Java, Node.js, C# (.NET) y más.

El motor interno de KoaDoc se encarga de todo el ciclo de vida del documento electrónico dictaminado por el Servicio de Rentas Internas (SRI):

1. Autenticación

Todas las peticiones requieren el header Authorization. Existen dos métodos dependiendo de la arquitectura de su integración:

A. Token de Empresa (Prefijo VSR)

Ideal para aplicaciones exclusivas de una empresa, donde la integración no necesita saber el ID interno de la empresa en KoaDoc. Nota: "VSR" es el prefijo de seguridad interno específico de KoaDoc para identificar tokens de empresa única.

B. Token de Usuario (Multi-Empresa)

Ideal para integradores (SaaS) que manejan múltiples empresas desde una sola cuenta administrativa.

2. Endpoint Principal: Emisión Completa

POST https://koadoc.koadevs.com/api/sri/documents/create_and_process_invoice_complete/
Este endpoint recibe la metadata cruda de una venta y devuelve el resultado del procesamiento.

Importante: La Clave de Acceso (49 Dígitos)
Este es el identificador legal supremo único de cada comprobante. Al enviar tu petición a este endpoint, nosotros nos encargamos de generar y estructurar esta clave automáticamente por ti. Debes asegurarte de guardar esta clave que te retornamos en tu base de datos local, ya que es el comprobante oficial ante el SRI y no se puede repetir por nada del mundo.

Estructura del JSON (Request)

{ 
  "issue_date": "2025-08-04", 
  "customer_identification_type": "05", 
  "customer_identification": "1234567890", 
  "customer_name": "JUAN CARLOS PÉREZ LÓPEZ", 
  "customer_address": "Av. Principal 123, Quito", 
  "customer_email": "[email protected]", 
  "customer_phone": "0987654321", 
  "service_period": "Agosto 2025",
  "expiration_date": "2025-08-15",
  "payment_methods": [
    {
      "payment_method_code": "01",
      "amount": 103.50,
      "payment_term": 0,
      "time_unit": "dias"
    }
  ],
  "items": [ 
    { 
      "main_code": "PROD-001", 
      "auxiliary_code": "AUX-001", 
      "description": "Producto de ejemplo", 
      "quantity": 2.00, 
      "unit_price": 50.00, 
      "discount": 5.00,
      "tax_rate": 15
    } 
  ] 
}

Detalle de Campos Raíz (Root)

CampoTipoReqDescripción
issue_dateStringSIFormato ISO 8601 (YYYY-MM-DD). Debe ser fecha actual o máximo 1 mes atrás.
customer_identification_typeStringSICódigo SRI del tipo de ID.
customer_identificationStringSINúmero de ID. Valida algoritmo automáticamente.
customer_nameStringSIRazón Social (Máx 300 caracteres). Evite caracteres especiales.
customer_emailStringNOEmail para envío del XML y PDF. Admite múltiples separados por coma.
companyIntegerNOID de la empresa (Obligatorio solo si usa Token de Usuario).

Detalle de Items

CampoTipoReqDescripción
main_codeStringSIMáx 25 caracteres. Código interno del producto.
descriptionStringSIMáx 300 caracteres. Descripción del ítem.
quantityNumberSICantidad > 0. Soporta hasta 6 decimales.
unit_priceNumberSIPrecio unitario > 0. Soporta hasta 6 decimales.
discountNumberNODescuento ≥ 0.
tax_rateNumberNOPorcentaje de IVA del ítem (0, 5, 12, 14, 15).

3. Consulta de Comprobante Completo

GET https://koadoc.koadevs.com/api/sri/documents/{id}/
Reemplazando {id} por el ID numérico de la factura (ej: /api/sri/documents/1234/).

Para obtener todos los detalles completos de una factura (incluyendo los items individuales que compró el cliente, los impuestos desglosados y el estado final del SRI), debes usar este endpoint de lectura o consulta. El JSON devuelto en la creación es un resumen, pero para armar tu comprobante o voucher completo, debes hacer una petición GET.

Respuesta Esperada

Te devolverá un JSON detallado con toda la información necesaria para dibujar tu ticket. Presta especial atención a los bloques items, taxes y payment_methods.

{
    "id": 1234,
    "company": 1,
    "company_name": "Helados S.A.",
    "company_ruc": "0999999999001",
    "document_type": "INVOICE",
    "document_number": "001-001-000000123",
    "access_key": "1308202601179000000000120010010000001231234567812",
    "issue_date": "2026-08-13",
    "status": "AUTHORIZED",
    "status_display": "Autorizado",
    
    "customer_identification": "0999999999",
    "customer_name": "Juan Pérez",
    "customer_address": "Av. Principal y Secundaria",
    "customer_email": "[email protected]",
    
    "subtotal_without_tax": "4.50",
    "total_tax": "0.68",
    "total_amount": "5.18",
    
    "sri_authorization_code": "13082026011790...",
    "sri_authorization_date": "2026-08-13T12:05:00Z",
    
    "items": [
        {
            "main_code": "HEL-001",
            "description": "Cono de Vainilla",
            "quantity": "2.000000",
            "unit_price": "1.500000",
            "discount": "0.00",
            "subtotal": "3.00",
            "taxes": [
                {
                    "tax_code_display": "IVA",
                    "percentage_code_display": "15%",
                    "rate": "15.00",
                    "taxable_base": "3.00",
                    "tax_amount": "0.45"
                }
            ]
        },
        {
            "main_code": "HEL-002",
            "description": "Tarrina de Chocolate",
            "quantity": "1.000000",
            "unit_price": "1.500000",
            "discount": "0.00",
            "subtotal": "1.50",
            "taxes": [
                {
                    "tax_code_display": "IVA",
                    "percentage_code_display": "15%",
                    "rate": "15.00",
                    "taxable_base": "1.50",
                    "tax_amount": "0.23"
                }
            ]
        }
    ],
    
    "payment_methods": [
        {
            "payment_method_code_display": "SIN UTILIZACION DEL SISTEMA FINANCIERO",
            "amount": "5.18",
            "payment_term": 0,
            "time_unit": "dias"
        }
    ],
    
    "pdf_file_url": "https://tu-dominio.com/mediafiles/sri/pdfs/001-001-000000123.pdf",
    "xml_file_url": "https://tu-dominio.com/mediafiles/sri/xmls/001-001-000000123.xml"
}

¿Cómo usar esto para tu comprobante o voucher?
Con esta respuesta tu sistema ya tiene todo para imprimir el voucher:

  • Pones el company_name y company_ruc como cabecera.
  • Muestras el document_number y usas la access_key para generar un código de barras o QR.
  • Iteras el array de items para imprimir la lista de productos vendidos con cantidad y precio.
  • Muestras el sri_authorization_date para darle validez legal al ticket.
  • Opcional: Si no quieres diseñar el ticket, descarga y muestra la URL del pdf_file_url (RIDE).

4. Ten en cuenta la codificación del SRI

El éxito de la integración recae en usar los catálogos técnicos correctos exigidos por el SRI para evitar rechazos en los comprobantes.

Tipos de Identificación (customer_identification_type)

CódigoTipo DocumentoLongitudRegla de Validación
"04"RUC13 dígitosAlgoritmo módulo 11. Debe terminar en 001.
"05"Cédula10 dígitosAlgoritmo módulo 10.
"06"PasaporteAlfanuméricoLibre hasta 20 caracteres.
"07"Consumidor FinalN/AIdentificación debe ser 9999999999999.
"08"ID ExteriorAlfanuméricoLibre. Para extranjeros no residentes.

Autodetección Inteligente: Si tu sistema no envía el campo customer_identification_type en el JSON, la API es capaz de autodetectarlo matemáticamente basándose en la longitud y el contenido del campo (RUC/Cédula).

Porcentajes de IVA (tax_rate)

Valor EnviadoCódigo SRI (Automático)Descripción
0"0"IVA 0%
5"5"IVA 5%
12"2"IVA 12%
14"3"IVA 14%
15"4"IVA 15% (Actual)

Formas de Pago (payment_method_code)

Código SRISignificado Legal
"01"Sin utilización del sistema financiero (Efectivo)
"15"Compensación de deudas
"16"Tarjeta de débito
"17"Dinero electrónico
"18"Tarjeta prepago
"19"Tarjeta de crédito
"20"Otros con utilización del sistema financiero (Transferencias / Depósitos)
"21"Endoso de títulos

5. Respuestas y Arquitectura

El facturador electrónico posee un conmutador de Procesamiento Sincrónico vs Asincrónico para manejar el throughput de las llamadas en función de la latencia del SRI.

Respuesta en Modo Asincrónico (Recomendado)

Para evitar Timeouts causados por demoras en los servidores del SRI, el Facturador insertará el documento en base de datos, lo colocará en la cola y responderá instantáneamente.

{ 
  "success": true, 
  "message": "Factura recibida y puesta en cola para procesamiento (SRI asíncrono)", 
  "invoice": { 
    "id": 175, 
    "number": "001-001-000001102", 
    "access_key": "04082025011234567890...", 
    "status": "QUEUED"
  } 
}

Tipos de Respuestas en Emisión (Vouchers y Devoluciones)

Al generar o procesar un documento, la API puede devolver distintos mensajes que tu sistema debe ser capaz de interpretar para mostrar al cliente final o al cajero. Manejar correctamente estas devoluciones es clave para una buena integración:

6. Reglas Legales y de Validación SRI

Para evitar que el SRI rechace tus comprobantes, nuestro sistema y la ley exigen el cumplimiento estricto de las siguientes reglas de negocio:

8. Manejo de Errores (Extendido)

Es vital que tu sistema lea el código interno (Internal Code) y el mensaje de error para dar retroalimentación útil a los usuarios en sus sistemas de Punto de Venta. A continuación detallamos el catálogo exhaustivo de errores que puede emitir la API de KoaDoc:

Error HTTPCódigo InternoSignificado y Solución
422VALIDATION_ERRORFaltan campos obligatorios, formatos inválidos (ej. email incorrecto), o montos negativos. Solución: Revisa el payload JSON enviado y notifica al usuario.
400CERTIFICATE_NOT_AVAILABLELa empresa no tiene una firma electrónica (archivo .p12) cargada o está caducada. Solución: Solicita al cliente actualizar su firma en el dashboard.
400CERTIFICATE_PASSWORD_INVALIDLa contraseña proporcionada para el certificado .p12 es incorrecta.
403COMPANY_ACCESS_DENIEDEl token (API Key) utilizado no tiene permisos sobre la empresa solicitada.
400SRI_CONFIGURATION_MISSINGLa empresa no ha configurado su Punto de Emisión y Establecimiento (ej: 001-001).
502SRI_CONNECTION_ERRORNuestros servidores no pudieron conectar con el SRI. Solución: Suele ser intermitente, el sistema reintentará automáticamente.
400INVALID_IDENTIFICATIONLa cédula o RUC del cliente final es matemáticamente incorrecto según el algoritmo del Registro Civil. Solución: Pide al cajero corregir la cédula.
400LAB_QUALITY_ERRORError de Laboratorio de Calidad: Devuelto únicamente en ambiente de PRUEBAS. Indica que los datos ingresados activaron una validación de pruebas exhaustivas (ej. test de carga o tipos de impuestos no combinables). Permite certificar tu software.
400SRI_REJECTEDEl SRI rechazó explícitamente el comprobante (ej: Fecha de emisión caducada). Revisa el campo "message" para el motivo exacto que dio el SRI.
409DOCUMENT_DUPLICATEDSecuencial duplicado. Ya existe una factura autorizada con ese mismo número.

9. Notas Técnicas y Matemáticas