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
AuthorizationAPI key tipo Bearer
X-Issuer-IdUUID de la sucursal emisora (obtenido de GET /v1/issuers). Identifica qué sucursal y certificado usar.
Content-Typeapplication/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
documentTypestringCó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.idTypestringCódigo de tipo de identificación SRI de 2 dígitos (p. ej. "05" = cédula, "04" = RUC)
buyer.idstringNúmero de identificación del comprador (máx. 20 caracteres)
buyer.namestringNombre completo o razón social del comprador (máx. 300 caracteres)
buyer.emailstringCorreo 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)
itemsarraySe requiere al menos un ítem
items[].mainCodestringCódigo principal del producto/servicio
items[].auxiliaryCodestringNoCódigo secundario
items[].descriptionstringDescripción (máx. 300 caracteres)
items[].quantitystringCantidad numérica
items[].unitPricestringPrecio unitario numérico
items[].discountstringNoMonto numérico de descuento
items[].taxesarrayAl menos un impuesto por ítem
items[].taxes[].codestringCódigo de tipo de impuesto SRI
items[].taxes[].rateCodestringCódigo de tarifa de impuesto SRI
items[].taxes[].ratestringPorcentaje de la tarifa de impuesto
items[].taxes[].taxableBasestringMonto sobre el cual se aplica el impuesto
items[].taxes[].taxAmountstringMonto de impuesto calculado
paymentsarraySe requiere al menos un pago
payments[].methodstringCódigo de forma de pago SRI de 2 dígitos
payments[].totalstringMonto 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