Emitir un comprobante

POST /v1/comprobantes — headers Authorization e Idempotency-Key (obligatorio, ver la sección siguiente). Responde 201.

CampoTipoNotas
cuitnúmeroCUIT emisor (el del certificado)
entornohomologacion | produccionproducción emite comprobantes reales
ptoVtanúmeropunto de venta habilitado para Web Services
tipoComprobantenúmerover Catálogos (11 = Factura C)
concepto1 | 2 | 3productos / servicios / ambos
receptorobjetodocTipo, docNro (0 = consumidor final sin identificar), condicionIvaId
fechafechadel comprobante: usá la fecha de hoy en cada intento
fechaServicioDesde, fechaServicioHasta, fechaVtoPagofechaobligatorias con concepto 2 o 3
moneda, cotizaciontexto, número"PES" y 1 para pesos
importesobjetoneto, noGravado?, exento?, iva?[], tributos?[], total
comprobantesAsoclistaobligatoria en notas de crédito/débito: [{ "tipo", "ptoVta", "nro" }] (cuit opcional: 11 dígitos, sin guiones)
receptor.nombre, receptor.domiciliotextoopcionales, solo para el PDF
receptor.emailtextoopcional: se guarda para mandarle el PDF (ver Mandar el PDF por mail)
condicionVentatextoopcional, para el PDF: Contado (por defecto), Cuenta corriente, Transferencia bancaria, Tarjeta de débito, Tarjeta de crédito, Cheque u Otra
itemslistaopcional, para el PDF: [{ "descripcion", "cantidad", "precioUnitario", "codigo?", "unidad?", "bonificacion?", "alicuotaId?" }], hasta 50. Tienen que sumar importes.neto; con varias alícuotas, alicuotaId en cada ítem y cada alícuota suma su base imponible
plantillatextoopcional: plantilla del PDF (su identificador, ver Plantillas de factura). Sin enviar: la plantilla de la API key, la del punto de venta, la predeterminada de la cuenta o la Clásica
nombreFantasiatextoopcional: nombre de fantasía para el PDF de este comprobante (pisa el de la plantilla y el del CUIT; hasta 100 caracteres, sin enlaces). Queda guardado con el comprobante
certPem, keyPemtextoopcionales: solo si no guardaste el certificado en la bóveda (van los dos juntos)

Reglas que valida la API antes de ir a ARCA:

  • total = neto + noGravado + exento + Σiva + Σtributos (tolerancia de 1 centavo).
  • Factura C (monotributo): sin iva. A y M: IVA discriminado por alícuota y receptor con CUIT (docTipo 80).
  • Concepto 2 o 3: fechaServicioDesde, fechaServicioHasta y fechaVtoPago.
  • ARCA exige la fecha cerca de hoy (±5 días productos, ±10 servicios) y no anterior al último comprobante de la serie.

Respuesta (201):

{
  "numero": 42, "cae": "86400952208054", "caeVencimiento": "2026-10-22",
  "resultado": "A", "resultadoDescripcion": "Aprobado",
  "ptoVta": 1, "tipoComprobante": 11, "letra": "C", "clase": "factura", "descripcion": "Factura C",
  "observaciones": []
}

Factura C de servicios a un CUIT (TypeScript):

// hoyAR(): fecha de hoy en Argentina, 'YYYY-MM-DD'
const r = await fetch('https://api.arcafactura.com/v1/comprobantes', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.ARCAFACTURA_API_KEY}`,
    'Idempotency-Key': cobro.idempotencyKey, // guardada junto al cobro: la misma en cada reintento
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    cuit: 20111111112, entorno: 'produccion', ptoVta: 2, tipoComprobante: 11, concepto: 2,
    receptor: { docTipo: 80, docNro: 30712345678, condicionIvaId: 1 },
    fecha: hoyAR(), fechaServicioDesde: '2026-10-01', fechaServicioHasta: '2026-10-31', fechaVtoPago: hoyAR(),
    moneda: 'PES', cotizacion: 1,
    importes: { neto: 15000, total: 15000 },
  }),
})
if (r.status === 503 || r.status >= 500) throw new Transitorio()   // reintentar con la MISMA key
const body = await r.json()
if (!r.ok) throw new Rechazado(body.code, body.message, body.observaciones)

Nota de crédito C que anula la factura 42: igual, con "tipoComprobante": 13 y "comprobantesAsoc": [{ "tipo": 11, "ptoVta": 2, "nro": 42 }] (ver Notas de crédito).