Factura SDK
Factura B

Factura B

Cómo emitir una Factura B con Factura SDK: la solicitud completa a consumidor final, la respuesta con el CAE y las variantes más comunes.


La Factura B la emite un responsable inscripto a un consumidor final, a un sujeto exento, no alcanzado o no categorizado. Los precios se muestran con el IVA incluido, pero el comprobante lo lleva por dentro: amounts.net y amounts.vat, con el detalle por alícuota en 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 Factura B

Una Factura B de $1.210 a un consumidor final, por un producto con IVA 21% incluido:

Solicitud
const response = await fetch('https://app.afipsdk.com/api/v1/invoices', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <ACCESS_TOKEN>',
    'Content-Type': 'application/json',
    'Idempotency-Key': 'venta-0001'
  },
  body: JSON.stringify({
    issuer_cuit: '20111111112',
    invoice_type: 6, // Factura B
    concept: 1, // 1 productos, 2 servicios, 3 productos y servicios
    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',
      email: '[email protected]' // Opcional: le llega el PDF al aprobarse
    },
    amounts: {
      net: 1000,
      vat: 210,
      total: 1210
    },
    vat_items: [ // Una entrada por alícuota; 5 = 21%
      { id: 5, base: 1000, amount: 210 }
    ],
    items: [ // Detalle impreso: precios con IVA incluido
      { description: 'Teclado inalámbrico', quantity: 1, unit_price: 1210, subtotal: 1210 }
    ],
    sale_condition: 'Contado'
  })
});

const invoice = await response.json();
  • El receptor es consumidor final (vat_condition 5), exento (4), no categorizado (7), no alcanzado (15), proveedor o cliente del exterior (8 y 9) o IVA liberado (10). A un responsable inscripto o a un monotributista le corresponde una Factura A.
  • amounts va neto más IVA, igual que en la A, y vat_items con una entrada por alícuota. En items los precios van con el IVA incluido, como se imprimen; vat_rate es opcional.
  • Si lo mandás, receiver.email recibe el PDF cuando el comprobante se aprueba.

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": "venta-0001",
    "status": "approved",
    "invoice_type": 6,
    "sales_point": 1,
    "number": 1523,
    "invoice_date": "2026-10-14",
    "total_amount": 1210,
    "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.

Consumidor final sin identificar

Tipo de documento 99 y número 0. ARCA exige identificar al consumidor final a partir de cierto importe, que actualiza cada tanto:

{
  "receiver": {
    "doc_type": 99,
    "doc_number": "0",
    "vat_condition": 5,
    "name": "Consumidor final",
    "address": "-"
  }
}

Servicios

Con concept 2 (o 3, productos y servicios) van las fechas del servicio y el vencimiento del pago:

{
  "concept": 2,
  "service_dates": { "from": "2026-10-01", "to": "2026-10-31", "due": "2026-11-10" },
  "items": [
    { "description": "Instalación a domicilio", "quantity": 1, "unit_price": 1210, "subtotal": 1210 }
  ]
}

Varias alícuotas de IVA

Una entrada en vat_items por alícuota. Acá un producto al 21% y otro al 10,5%, los dos con el IVA incluido en el precio:

{
  "amounts": { "net": 2000, "vat": 315, "total": 2315 },
  "vat_items": [
    { "id": 5, "base": 1000, "amount": 210 },
    { "id": 4, "base": 1000, "amount": 105 }
  ],
  "items": [
    { "description": "Producto al 21%", "quantity": 1, "unit_price": 1210, "subtotal": 1210 },
    { "description": "Producto al 10,5%", "quantity": 1, "unit_price": 1105, "subtotal": 1105 }
  ]
}

En dólares

Moneda DOL con la cotización del día. Todos los importes van en dólares:

{
  "currency": "DOL",
  "exchange_rate": 1450.5,
  "amounts": { "net": 10, "vat": 2.1, "total": 12.1 },
  "vat_items": [{ "id": 5, "base": 10, "amount": 2.1 }],
  "items": [
    { "description": "Teclado inalámbrico", "quantity": 1, "unit_price": 12.1, "subtotal": 12.1 }
  ]
}