Skip to content

Crear Nota de Crédito ​

Crea, valida y firma una nueva nota de crédito electrónica (nota de crédito) que hace referencia a una factura previamente autorizada.

POST /v1/documents

Este es el mismo endpoint que Crear Factura — la forma del cuerpo de la solicitud se selecciona según documentType. El cuerpo de una nota de crédito no tiene bloque payments y en su lugar requiere originalDocument (la factura que se está acreditando) más un motivo.

El emisor debe tener habilitado el tipo de comprobante 04 — consulta Document Types.

Antes de enviar, verifica Get Credit Notes contra la clave de acceso del documento original para ver cuánto de su total ya ha sido acreditado — la API no rechaza una nota de crédito por exceder el saldo restante del original, ya que el propio SRI no impone esa restricción; es una validación del lado del cliente.

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": "04",
  "issueDate": "05/04/2026",
  "buyer": {
    "idType": "05",
    "id": "1234567890",
    "name": "John Doe",
    "email": "john@example.com",
    "address": "Av. Amazonas 123"
  },
  "originalDocument": {
    "documentType": "01",
    "number": "001-001-000000027",
    "issueDate": "03/04/2026"
  },
  "motivo": "Devolución de mercadería por defecto de fabricación",
  "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"
        }
      ]
    }
  ],
  "additionalInfo": [
    { "name": "Contract", "value": "CTR-2026-001" }
  ]
}

Referencia de campos ​

CampoTipoRequeridoDescripción
documentTypestringSíDebe ser "04" para esta forma de cuerpo
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)
originalDocument.documentTypestringSíCódigo de tipo de comprobante SRI del documento que se está acreditando (p. ej. "01" para una factura)
originalDocument.numberstringSíNúmero tipo clave de acceso del documento original, formato NNN-NNN-NNNNNNNNN
originalDocument.issueDatestringSíFecha de emisión del documento original, DD/MM/YYYY
motivostringSíMotivo de la nota de crédito (máx. 300 caracteres)
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
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": "0504202604179234567800110010010000000271234567810",
    "documentType": "04",
    "sequential": "000000027",
    "status": "SIGNED",
    "issueDate": "05/04/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 nota de crédito 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 04 — 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