La Nota de débito B aumenta el importe de una Factura B ya emitida: un recargo, un gasto que no se facturó o intereses por mora. Lleva el motivo en reason y, en associated_invoices, el comprobante que ajusta. Las reglas son las de la Factura B: receptor consumidor final, exento, no alcanzado o no categorizado, precios con IVA incluido y el IVA por dentro en amounts.vat y vat_items.
Necesitás un emisor responsable inscripto y verificado, y un webhook para recibir el resultado. El detalle de cada campo está en la referencia de comprobantes.
Emitir una Nota de débito B
Una Nota de débito B de $3.630 por un envío que no se facturó, sobre la Factura B número 1523 del punto de venta 1, la del ejemplo:
const response = await fetch('https://app.afipsdk.com/api/v1/invoices', {
method: 'POST',
headers: {
'Authorization': 'Bearer <ACCESS_TOKEN>',
'Content-Type': 'application/json',
'Idempotency-Key': 'ajuste-0001'
},
body: JSON.stringify({
issuer_cuit: '20111111112',
invoice_type: 7, // Nota de débito B
concept: 1, // 1 productos, 2 servicios, 3 productos y servicios
reason: 'Recargo por envío a domicilio', // Obligatorio en las notas
associated_invoices: [ // El comprobante que ajusta
{ invoice_type: 6, sales_point: 1, number: 1523, date: '2026-10-14' }
],
receiver: {
doc_type: 96, // 96 DNI; 99 si el consumidor final no se identifica
doc_number: '12345678',
vat_condition: 5, // 5 consumidor final; o 4, 7, 8, 9, 10 y 15
name: 'Juan Pérez',
address: 'Calle Falsa 123, CABA'
},
amounts: {
net: 3000,
vat: 630,
total: 3630
},
vat_items: [ // Una entrada por alícuota; 5 = 21%
{ id: 5, base: 3000, amount: 630 }
],
items: [ // Detalle impreso: precios con IVA incluido
{ description: 'Envío a domicilio', quantity: 1, unit_price: 3630, subtotal: 3630 }
],
sale_condition: 'Contado'
})
});
const invoice = await response.json();
reasonyassociated_invoicesson obligatorios. Si la nota ajusta un período y no un comprobante puntual, vaassociated_perioden lugar deassociated_invoices.- Los importes son los del ajuste, no los del comprobante original, y el receptor es el mismo.
Respuesta
Factura SDK responde 202 con el comprobante en queued y lo autoriza en segundo plano. Cuando ARCA lo aprueba, tu webhook recibe el evento invoice.approved con el comprobante: el número asignado, el CAE y la URL pública del PDF.
{
"event_id": "evt_9f1e2d3c4b5a69788a9b0c1d2e3f4a5b",
"type": "invoice.approved",
"created": "2026-10-14T14:05:04.000Z",
"data": {
"id": "7c1d9e4b-2f3a-4b8c-9d0e-1a2b3c4d5e6f",
"idempotency_key": "ajuste-0001",
"status": "approved",
"invoice_type": 7,
"sales_point": 1,
"number": 41,
"invoice_date": "2026-10-14",
"total_amount": 3630,
"currency": "PES",
"cae": "76412345678901",
"cae_expiration": "2026-10-24",
"pdf_url": "https://app.afipsdk.com/api/v1/invoices/7c1d9e4b-2f3a-4b8c-9d0e-1a2b3c4d5e6f/pdf?token=kX3v9Qw2LmN8pR5tY7uZ1aB4cD6eF8gH0jK2lM4nO6p",
"...": "el comprobante completo, como lo devuelve GET /v1/invoices/:id"
}
}
Si ARCA lo rechaza, llega invoice.rejected con los motivos en errors. Con sync: true en el cuerpo, el comprobante vuelve ya decidido en la misma respuesta y no hay webhook. El detalle está en respuesta y estados.
Variantes
Los ejemplos muestran solo lo que cambia respecto de la solicitud de arriba.
Intereses por mora
Los intereses son un servicio, así que van con concept 2, el período que cubren y el vencimiento del pago:
{
"concept": 2,
"reason": "Intereses por pago fuera de término",
"service_dates": { "from": "2026-10-14", "to": "2026-11-13", "due": "2026-11-20" },
"amounts": { "net": 100, "vat": 21, "total": 121 },
"vat_items": [{ "id": 5, "base": 100, "amount": 21 }],
"items": [
{ "description": "Intereses por pago fuera de término", "quantity": 1, "unit_price": 121, "subtotal": 121 }
]
}
Varios comprobantes asociados
Una nota puede ajustar más de un comprobante, con una entrada en associated_invoices por cada uno:
{
"associated_invoices": [
{ "invoice_type": 6, "sales_point": 1, "number": 1523, "date": "2026-10-14" },
{ "invoice_type": 6, "sales_point": 1, "number": 1519, "date": "2026-10-12" }
]
}
Período asociado
Cuando la nota ajusta un período y no un comprobante puntual, por ejemplo un ajuste de precios sobre las ventas del mes, va associated_period en lugar de associated_invoices:
{
"reason": "Ajuste de precios de octubre",
"associated_period": { "from": "2026-10-01", "to": "2026-10-31" }
}