Para empezar
- 1En el facturador, entrá a Ajustes › Integraciones y creá una clave de prueba con permiso de facturar.
- 2Probá con el ejemplo de Crear una factura: sale en el ambiente de prueba de ARCA, sin validez fiscal.
- 3Cuando todo ande, conectá tu certificado de ARCA (guía), pasá el facturador a producción y creá una clave de producción.
Autenticación
Cada pedido lleva la clave en el encabezado Authorization.
Authorization: Bearer art_test_xxxxxxxxxxxxxxxxxxxxxxxx- Ambiente: las claves
art_test_funcionan solo con el facturador en modo de prueba, y lasart_live_solo en producción. Una prueba nunca sale como factura real. - Permiso: "Solo leer" consulta; "Facturar" además crea facturas y notas de crédito.
- Guardá la clave en tu servidor, nunca en una página web ni en una app del celular. Si se filtra, revocala en Ajustes y creá otra.
Crear una factura
Con el encabezado Idempotency-Key: un identificador único de la venta en tu sistema, por ejemplo el número de pedido (8 a 120 caracteres). Si repetís el pedido con el mismo valor, devuelve la misma factura y no emite otra.
curl https://facturador.mitrastienda.com.ar/v1/comprobantes \
-H "Authorization: Bearer art_test_..." \
-H "Idempotency-Key: pedido-10457" \
-H "Content-Type: application/json" \
-d '{
"cliente": { "nombre": "Consumidor final" },
"items": [
{ "descripcion": "Auriculares bluetooth", "cantidad": 1, "precioUnitario": 48900, "iva": 21 },
{ "descripcion": "Envío", "cantidad": 1, "precioUnitario": 6500, "iva": 21 }
]
}'Campos
items[]De 1 a 50 líneas: descripcion, cantidad, precioUnitario (con IVA incluido) e iva (21, 10.5, 27 o 0; por defecto 21).
cliente.nombreopcionalNombre o razón social. Si no viene, "Consumidor final".
cliente.docTipo · cliente.docNroopcional80 CUIT, 86 CUIL, 96 DNI, 99 sin identificar (por defecto). El número, solo con dígitos.
cliente.condicionIvaopcionalSegún ARCA: 1 Responsable Inscripto, 4 Exento, 5 Consumidor final (por defecto), 6 Monotributo.
cliente.email · cliente.domicilioopcionalVan impresos en la factura.
emitiropcionaltrue (por defecto) la manda a ARCA enseguida. false la deja como borrador para aprobar en el panel.
fechaopcionalFecha de la factura anterior a hoy (AAAA-MM-DD): hasta 5 días antes, o 10 con servicios, y nunca anterior a la última factura del mismo tipo y punto de venta. Sin este campo, el día en que se emite.
servicioopcionalPara facturar servicios con su período: {"concepto": 2, "desde": "2026-10-01", "hasta": "2026-10-31", "vencimientoPago": "2026-10-20"}. Concepto 2 es servicios y 3 productos y servicios. Sin este campo, se factura como productos.
La letra (A, B o C) sale de tu condición frente al IVA y la del comprador. El punto de venta es el predeterminado del ambiente.
Respuesta
{
"id": "cm2x...",
"tipo": "factura",
"estado": "emitiendo",
"ambiente": "prueba",
"letra": "B",
"puntoDeVenta": 3,
"numero": null,
"cae": null,
"total": 55400,
"referencia": "pedido-10457",
"mensaje": null
// ...
}El CAE llega en segundos: consultá GET /v1/comprobantes/{id} hasta que el estado sea autorizada o rechazada, o recibilo con los avisos a tu sistema.
Estados
emitir: false, o le falta un dato (mirá mensaje, por ejemplo el DNI en ventas grandes).mensaje.Todos los pedidos
Crear una factura (arriba).
Ver un comprobante.
Listar, de a 50. Filtros: desde y hasta (AAAA-MM-DD), estado, referencia (tu Idempotency-Key) y pagina.
El PDF con el QR de ARCA.
Nota de crédito por el total de una factura autorizada. Si ya existe, devuelve la misma.
Datos del padrón de ARCA: razón social, domicilio y condición frente al IVA.
Libro IVA Ventas del período en CSV (punto y coma, coma decimal): neto, IVA por alícuota y total de cada comprobante; las notas de crédito en negativo.
Los puntos de venta del ambiente y el predeterminado.
Avisos a tu sistema
En Ajustes › Integraciones › Avisos a tu sistema cargás una dirección https://. Cuando un comprobante se autoriza o se rechaza, le mandamos un POST:
{
"evento": "comprobante.autorizado",
"creado": "2026-10-12T15:04:05.000Z",
"comprobante": { "id": "cm2x...", "estado": "autorizada", "numero": 128, "cae": "76412589031524", "referencia": "pedido-10457" /* ... */ }
}- Eventos:
comprobante.autorizadoycomprobante.rechazado. El botón Probar manda uno de tipoprueba. - Respondé con un 2xx en menos de 10 segundos. Si no, reintentamos con espera creciente, hasta 8 veces.
- Puede llegar más de una vez: usá
comprobante.idpara no procesarlo dos veces.
Verificar la firma
Cada aviso trae Artic-Signature: t=<segundos>,v1=<firma>. La firma es un HMAC-SHA256 en hexadecimal de t + "." + cuerpo con el secreto que te mostramos al cargar la dirección.
import { createHmac, timingSafeEqual } from "node:crypto";
function avisoValido(cuerpo, encabezado, secreto) {
const { t, v1 } = Object.fromEntries(encabezado.split(",").map((p) => p.split("=")));
if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false; // más de 5 minutos: se descarta
const esperada = createHmac("sha256", secreto).update(`${t}.${cuerpo}`).digest("hex");
return timingSafeEqual(Buffer.from(esperada), Buffer.from(v1));
}Errores
Responden con un código HTTP y este formato:
{ "error": { "codigo": "idempotency_key", "mensaje": "Mandá el encabezado Idempotency-Key..." } }¿Dudas con la integración? Escribinos con lo que estás armando y te ayudamos.
admin@artic.systems