Skip to content

Crear Factura ​

Crea, valida y firma una nueva factura electrónica.

POST /v1/documents

Para notas de crédito (documentType: "04"), consulta Crear Nota de Crédito — el cuerpo de la solicitud es diferente (sin bloque payments; requiere originalDocument + motivo en su lugar).

Autenticación ​

Authorization: Bearer <api-key>

Headers ​

HeaderRequeridoDescripción
AuthorizationSíAPI key tipo Bearer
X-Issuer-IdSíUUID de la sucursal emisora (obtenido de GET /v1/issuers). Identifica qué sucursal y certificado usar.
Content-TypeSíapplication/json
Idempotency-KeyNoString único (máx. 255 caracteres) — consulta idempotencia

Cuerpo de la solicitud ​

json
{
  "documentType": "01",
  "issueDate": "15/03/2026",
  "buyer": {
    "idType": "05",
    "id": "1234567890",
    "name": "John Doe",
    "email": "[email protected]",
    "address": "Av. Amazonas 123"
  },
  "items": [
    {
      "mainCode": "PROD-001",
      "auxiliaryCode": "AUX-001",
      "description": "Web development service",
      "quantity": "1.00",
      "unitPrice": "100.00",
      "discount": "0.00",
      "taxes": [
        {
          "code": "2",
          "rateCode": "2",
          "rate": "15.00",
          "taxableBase": "100.00",
          "taxAmount": "15.00"
        }
      ]
    }
  ],
  "payments": [
    {
      "method": "01",
      "total": "115.00",
      "term": 30,
      "termUnit": "dias"
    }
  ],
  "additionalInfo": [
    { "name": "Contract", "value": "CTR-2026-001" }
  ]
}

Referencia de campos ​

CampoTipoRequeridoDescripción
documentTypestringSíCódigo de tipo de comprobante. Usa "01" para esta forma de cuerpo (factura). Para "04" (nota de crédito), consulta Crear Nota de Crédito
issueDatestringNoFecha en formato DD/MM/YYYY. Debe ser la fecha de hoy — el SRI rechaza fechas pasadas y futuras. Por defecto, hoy si se omite
buyer.idTypestringSíCódigo de tipo de identificación SRI de 2 dígitos (p. ej. "05" = cédula, "04" = RUC)
buyer.idstringSíNúmero de identificación del comprador (máx. 20 caracteres)
buyer.namestringSíNombre completo o razón social del comprador (máx. 300 caracteres)
buyer.emailstringSíCorreo del comprador — el RIDE y el XML se envían aquí al momento de la autorización
buyer.addressstringNoDirección del comprador (máx. 300 caracteres)
guiaRemisionstringNoNúmero de guía de remisión en formato NNN-NNN-NNNNNNNNN (p. ej. 001-001-000000001)
itemsarraySíSe requiere al menos un ítem
items[].mainCodestringSíCódigo principal del producto/servicio
items[].auxiliaryCodestringNoCódigo secundario
items[].descriptionstringSíDescripción (máx. 300 caracteres)
items[].quantitystringSíCantidad numérica
items[].unitPricestringSíPrecio unitario numérico
items[].discountstringNoMonto numérico de descuento
items[].taxesarraySíAl menos un impuesto por ítem
items[].taxes[].codestringSíCódigo de tipo de impuesto SRI
items[].taxes[].rateCodestringSíCódigo de tarifa de impuesto SRI
items[].taxes[].ratestringSíPorcentaje de la tarifa de impuesto
items[].taxes[].taxableBasestringSíMonto sobre el cual se aplica el impuesto
items[].taxes[].taxAmountstringSíMonto de impuesto calculado
paymentsarraySíSe requiere al menos un pago
payments[].methodstringSíCódigo de forma de pago SRI de 2 dígitos
payments[].totalstringSíMonto numérico del pago
payments[].termnumberNoDuración del plazo de pago — corresponde al plazo del SRI
payments[].termUnitstringNoCódigo de unidad del plazo de pago — corresponde al unidadTiempo del SRI. Debe ser uno de los valores devueltos por GET /v1/catalogs/term-units (p. ej. "dias", "meses")
additionalInfoarrayNoPares clave-valor incluidos en el XML como campoAdicional

Respuesta ​

201 Created — nuevo comprobante creado. 200 OK — se devuelve cuando el mismo Idempotency-Key + carga útil idéntica ya fue procesado.

json
{
  "ok": true,
  "document": {
    "accessKey": "1503202601179234567800110010010000000011234567810",
    "documentType": "01",
    "sequential": "000000001",
    "status": "SIGNED",
    "issueDate": "15/03/2026",
    "total": "115.00",
    "email": {
      "status": "PENDING"
    }
  }
}

Idempotencia ​

Incluye un header Idempotency-Key para hacer que la creación sea idempotente. Genera la clave una sola vez por factura prevista y reutilízala en los reintentos:

  • Misma clave + mismo payload → devuelve el comprobante existente (no se crea un duplicado)
  • Misma clave + payload diferente → 409 Conflict

Errores ​

CódigoEstado HTTPCuándo ocurre
VALIDATION_FAILED400El cuerpo de la solicitud falla la validación de campos
DOCUMENT_TYPE_NOT_ENABLED400El emisor no tiene habilitado el tipo de comprobante 01 — consulta Document Types
BAD_REQUEST400El header X-Issuer-Id falta o está mal formado
UNAUTHORIZED401API key ausente o inválida, o desajuste de ambiente (llave sandbox apuntando a un emisor de producción o viceversa)
FORBIDDEN403El emisor de X-Issuer-Id pertenece a un tenant diferente
NOT_FOUND404El emisor de X-Issuer-Id no existe
CONFLICT409Se reutilizó la clave de idempotencia con un payload diferente
INTERNAL_ERROR500Error inesperado del servidor

Documentación de la API de Comprobify — API v1.3.1