Skip to main content

Nota de débito electrónica

Endpoint
PUT /api/2.0/documentos-electronicos/emision/nota-debito/{clave}

Emite una nota de débito electrónica con la disposición 4.4 sobre un documento ya emitido, para incrementar el monto de una operación previamente facturada. Al igual que la nota de crédito, este endpoint usa el método PUT y la clave del documento de referencia viaja en la URL, no en el cuerpo.

La nota de débito hereda al receptor, la moneda y el tipo de cambio del documento de referencia. Esos campos se ignoran si se envían en el cuerpo. Ver la sección «Datos heredados».

Autenticación

Todas las peticiones requieren los cuatro encabezados siguientes.

EncabezadoDescripción
api-tokenToken de API de la cuenta.
access-tokenToken de acceso asociado al api-token.
Content-Typeapplication/json
Acceptapplication/json. Obligatorio. Si se omite, una petición no autenticada responde con una redirección al formulario de inicio de sesión en lugar de un error JSON.

La emisión por API requiere un plan con acceso a API activo y documentos disponibles en el ciclo vigente.

Documento de referencia

El segmento {clave} de la URL es la clave numérica de 50 dígitos del documento sobre el que se emite la nota. El documento debe pertenecer a la misma cuenta que emite la nota; no es posible referenciar comprobantes de otro contribuyente.

PUT /api/2.0/documentos-electronicos/emision/nota-debito/50622032000070175094601000001010000000006118491223

Ejemplo mínimo

curl --location --request PUT 'https://app.facturadorvirtual.com/api/2.0/documentos-electronicos/emision/nota-debito/50622032000070175094601000001010000000006118491223' \
--header 'api-token: iuJPbVCYQY3AmWuVHMflT9ZySlwzxb9ehviLbHNsz6yQnBm4' \
--header 'access-token: IDq4ME4ZUO9YmQ0fOc43AFp7mMO6talIuIALFaUUcs2H2pwLpYN2' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-raw '{
    "actividad": "014002",
    "razon": "03",
    "razon_referencia": "Por corrección de monto",
    "condicion_venta": "01",
    "medio_pago": {
        "01": {
            "codigo": "01",
            "total": 565
        }
    },
    "comentarios": "Ajuste al alza sobre la factura de referencia",
    "lineas": [
        {
            "codigo": "00001",
            "codigoCabys": "0196109000000",
            "descripcion": "Diferencia de precio Entrada a CRFW22",
            "cantidad": "1",
            "unidad": "Unid",
            "descuento": 0,
            "naturalezaDescuento": "",
            "precioUnitario": 500,
            "impuestos": {
                "01": {
                    "tarifa": "08"
                }
            }
        }
    ]
}'

Datos heredados del documento de referencia

Los siguientes datos se toman del documento referenciado y no se leen del cuerpo de la petición. Enviarlos no produce error, pero tampoco tiene efecto.

DatoOrigen
Identificación, tipo de identificación, nombre, nombre comercial, teléfono y correo del receptorDocumento de referencia
Ubicación del receptor (provincia, cantón, distrito, barrio, otras señas)Documento de referencia, si lo tenía registrado
monedaResumen del documento de referencia
tipo_cambioResumen del documento de referencia

Por esa razón los campos cedula, tipo_cedula, nombre, correo, telefono, moneda y tipo_cambio no aparecen entre los campos aceptados de este endpoint.

Campos del documento

Obligatorios

CampoTipoDescripción
actividadstringCódigo de la actividad económica del emisor. Debe estar registrada en la cuenta.
razonstringCódigo de la razón de la nota. Ver la tabla y la advertencia más abajo.
medio_pagoobjectDe 1 a 4 medios de pago. Se ignora cuando la condición de venta es a crédito.
lineasarrayAl menos una línea de detalle. Ver la sección correspondiente.

Opcionales

CampoTipoDescripción
condicion_ventastringCódigo de condición de venta de la nota. Ver la tabla más abajo.
razon_referenciastringDescripción de la razón. Si se omite, se usa el texto correspondiente al código enviado en razon.
sin_receptorbooleanCon valor verdadero, la nota se emite sin datos del receptor, aunque el documento de referencia los tuviera.
codigo_actividad_receptorstringCódigo de actividad económica del receptor.
sucursalstringCódigo de sucursal, por ejemplo 004. Si se omite, se usa el valor configurado en las preferencias de facturación.
puntostringPunto de emisión, por ejemplo 00001. Si se omite, se usa el valor configurado en las preferencias de facturación.
comentariosstringNotas del comprobante. Si el texto contiene un patrón #codigo, ese valor se registra además como número de orden.
ordenstring u objectNúmero de orden asociado. Acepta un string con el código, o un objeto {"codigo": "...", "estado": "...", "proveedor": "..."}.
devolucionnumberMonto de devolución de IVA, mayor que cero.
cargosarrayOtros cargos del comprobante.

Campos condicionales

CampoSe vuelve obligatorio cuando…Reglas
plazo_creditocondicion_venta es 02 o 10Entero entre 1 y 99999, expresado en días.
condicion_venta_otroscondicion_venta es 99Texto entre 5 y 100 caracteres.
medio_pago.<codigo>.detalleEl código del medio de pago es 99Texto entre 3 y 100 caracteres.

Razón de la nota

CódigoDescripción
01Para anular documento de referencia
02Por corrección de texto
03Por corrección de monto

Solo se aceptan los tres códigos de la tabla; cualquier otro valor se rechaza con 422. Si se omite razon_referencia, la descripción se toma del catálogo de razones de la nota de débito.

Condición de venta

CódigoDescripción
01Contado
02Crédito
03Consignación
04Apartado
05Arrendamiento con opción de compra
06Arrendamiento en función financiera
07Cobro a favor de un tercero
08Servicios prestados al Estado
09Pago de servicios prestados al Estado
10Venta a crédito en IVA hasta 90 días
11Pago de venta a crédito en IVA hasta 90 días
12Venta de mercancía no nacionalizada
13Venta de bienes usados no contribuyente
14Arrendamiento operativo
15Arrendamiento financiero
99Otros. Requiere condicion_venta_otros.

Con las condiciones de venta 02, 08 y 10 el comprobante se emite a crédito y los medios de pago enviados se descartan: el XML no incluye el nodo de medio de pago. Aun así el campo medio_pago debe venir presente en la petición.

Medios de pago

medio_pago es un objeto con hasta cuatro entradas, donde la clave y el campo codigo coinciden. total es el monto cubierto por ese medio y debe ser mayor que cero.

"medio_pago": {
    "01": { "codigo": "01", "total": 130 },
    "02": { "codigo": "02", "total": 400 },
    "03": { "codigo": "03", "total": 600 }
}
CódigoDescripción
01Efectivo
02Tarjeta
03Cheque
04Transferencia o depósito bancario
05Recaudado por terceros
06SINPE Móvil
07Plataforma digital
99Otros. Requiere detalle.

Líneas de detalle

Campos obligatorios de la línea

CampoTipoDescripción
codigostringCódigo del producto o servicio, máximo 20 caracteres.
descripcionstringDetalle de la línea, entre 3 y 200 caracteres.
cantidadnumberCantidad, mayor que cero. Se redondea a 3 decimales.
unidadstringCódigo de unidad de medida del catálogo de Hacienda. Debe coincidir exactamente con un código del catálogo, por ejemplo Unid, Sp, Os, kgKg, L, Al, Alc.
precioUnitarionumberPrecio unitario, mayor o igual a cero.
descuentonumberMonto del descuento. Envíe 0 si no aplica.
naturalezaDescuentostringNaturaleza del descuento. Envíe cadena vacía si no aplica; si se envía texto, debe tener entre 3 y 80 caracteres.

codigoCabys no es rechazado por la validación, pero Hacienda exige el código CABYS en todos los comprobantes. Omitirlo produce un rechazo del lado de Hacienda, no del API.

Campos opcionales de la línea

CampoTipoDescripción
codigoCabysstringCódigo CABYS de 13 dígitos.
codigoInternoFVstringCódigo del producto en el catálogo de Facturador Virtual.
id_productointegerIdentificador del producto en Facturador Virtual.
unidadMedidaComercialstringUnidad de medida comercial, máximo 20 caracteres.
partidaArancelariastringPartida arancelaria de la mercancía.
tipoTransaccionstringCódigo de tipo de transacción de la versión 4.4.
tipoDescuentostringCódigo del tipo de descuento, máximo 2 caracteres. Si se omite se asume 08. Con los códigos 01 y 03 el impuesto de la línea se registra como asumido por el emisor.
tipoDescuentoOtrostringDescripción cuando tipoDescuento corresponde a «otros». Entre 5 y 100 caracteres.
ivaCobradoFabricanumberIVA cobrado en fábrica.
vinSeriestringNúmero VIN o serie, para vehículos.
esCabysMedicamentobooleanMarca la línea como medicamento. Al activarse se toman registroMedicamento (máximo 100 caracteres) y formaFarmaceutica (3 caracteres).
es_combobooleanMarca la línea como combo. Los componentes se envían en componentes, un arreglo con la misma estructura de una línea de detalle.
impuestosobjectImpuestos aplicados a la línea. Ver la siguiente sección.

Impuestos

impuestos es un objeto cuya clave es el código del impuesto. El campo tarifa recibe el código de tarifa, no el porcentaje: el porcentaje se resuelve a partir de ese código.

"impuestos": {
    "01": {
        "tarifa": "08"
    }
}
Código de impuestoDescripción
01Impuesto al Valor Agregado
02Impuesto Selectivo de Consumo
03Impuesto Único a los Combustibles
04Impuesto específico de Bebidas Alcohólicas
05Impuesto Específico sobre las bebidas envasadas sin contenido alcohólico y jabones de tocador
06Impuesto a los Productos de Tabaco
07IVA (cálculo especial)
08IVA Régimen de Bienes Usados (Factor)
12Impuesto Específico al Cemento
99Otros. Se describe en descripcionOtro.
Código de tarifaDescripciónPorcentaje aplicado
01Tarifa 0% (Artículo 32, num 1, RLIVA)0
02Tarifa reducida 1%1
03Tarifa reducida 2%2
04Tarifa reducida 4%4
05Transitorio 0%0
06Transitorio 4%4
07Tarifa transitoria 8%8
08Tarifa general 13%13
09Tarifa reducida 0.5%0.5
10Tarifa exenta0
11Tarifa 0% sin derecho a crédito0

Para el impuesto 08 se envía además factor. Para los impuestos 03, 04, 05 y 06 pueden enviarse los datos específicos cantidadUnidadMedida, porcentaje, proporcion, volumenUnidadConsumo e impuestoUnidad. La exoneración se declara dentro del impuesto 01 con los campos exoneracionTipo, exoneracionNumero, exoneracionInstitucion, exoneracionFecha en formato dd/mm/aaaa y exoneracionTarifa.

Respuesta

Una emisión procesada devuelve HTTP 200. El campo codigo del cuerpo indica el resultado de la recepción en Hacienda y es independiente del código HTTP.

{
  "codigo": 200,
  "contenidoXml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV…",
  "contenidoXmlFirmado": "Nfdsfffadeec2lvbj0iMS4wIiBlbmNvZGluZz0iV…",
  "documento": {
    "clave": "50622032000070175094601000001020000000007118491223",
    "consecutivo": "00400001020000000007",
    "recepcion": "recibido",
    "comprobacion": "por_comprobar"
  },
  "errores": []
}

La clave y el consecutivo devueltos corresponden a la nota de débito recién emitida, no al documento de referencia. El tipo de documento 02 en la posición correspondiente identifica la nota de débito.

CampoDescripción
codigoResultado de la recepción en Hacienda. 200 si el documento fue recibido; 500 si no se pudo entregar.
contenidoXmlXML generado, codificado en base64.
contenidoXmlFirmadoXML firmado, codificado en base64. Es null cuando la firma o el envío no se completaron.
documento.claveClave numérica de 50 dígitos de la nota de débito.
documento.consecutivoConsecutivo de 20 dígitos de la nota de débito.
documento.recepcionEstado de la recepción: recibido o por_enviar.
documento.comprobacionEstado de la comprobación: por_comprobar, aceptado o rechazado.
erroresArreglo de objetos {"tipo": "...", "mensaje": "..."} devueltos por Hacienda.

Errores

HTTPCuerpoCausa
302Redirección al inicio de sesiónFalta el encabezado Accept: application/json en una petición no autenticada.
401{"message": "Unauthenticated."}api-token o access-token inválidos o ausentes.
403{"error": "No posee un Plan Api activo"}El plan de la cuenta no incluye acceso a API.
403{"error": "Ha llegado al límite de facturas del Plan Api contratado"}Se agotaron los documentos del ciclo vigente.
422{"errors": {"campo": ["mensaje"]}}Uno o más campos no cumplen las reglas de validación.
500{"0": "Ha ocurrido un error", "error": "...", "stack": [...]}Error no controlado. Incluye el caso de una clave de referencia inexistente o perteneciente a otra cuenta: la búsqueda del documento lanza una excepción en lugar de devolver un mensaje de «no encontrado».

Verifique que la clave del documento de referencia sea correcta y pertenezca a su cuenta antes de emitir. Una clave inválida no produce un error descriptivo, sino un 500.

Comprobación

La recepción es el primer paso: significa que Hacienda recibió el documento, no que lo aprobó. La comprobación se realiza automáticamente, por lo general en uno o dos minutos, y el estado pasa de por_comprobar a aceptado o rechazado.