ComprobadoDocumentaciónIngresar

API: referencia de endpoints

Todas las rutas empiezan con /v1 y llevan Authorization: Bearer ask_live_… (ver API: primeros pasos). La columna Permiso indica qué clave puede usarlas:

  • Cualquiera: cualquier tipo de clave (incluida «Solo lectura»). Leer comprobantes pide el permiso de consulta (invoice:read), que traen todos los tipos; una clave «a medida» sin él recibe 403.
  • Escritura: clave Completa o Facturación masiva (permiso invoice:write).
  • Configuración: clave Completa (permiso config, que incluye los de abajo) o una clave a medida con el permiso puntual: config:fiscal (datos fiscales y nombres de puntos de venta), config:certificate (CSR y certificado) o config:webhooks (webhooks). Mercado Libre pide config:mercadolibre (incluido en config, nunca en una clave a medida) para conectar y configurar, y invoice:read / invoice:write para la bandeja. Ver API keys.
  • Lotes: solo clave de Facturación masiva (permiso invoice:batch).
  • Cobro: clave a medida con invoice:settle (marcar lo cobrado y escribir notas en comprobantes emitidos).
  • Compras: clave a medida con purchases:read (ver) o purchases:write (importar, editar, marcar pagos y notas; incluye purchases:read).
  • Solo consola: no se puede con una API key; es para personas que entraron con usuario y contraseña.

Un permiso que falta responde 403 con AS-2014. Estas claves son solo de la API REST: una clave de tipo MCP no entra acá y una clave de API no entra al MCP (403 con AS-2022). La descripción formal de cada respuesta está en /openapi/v1.json.

Comprobantes

Endpoint Permiso Para qué
POST /v1/invoices Escritura Emite un comprobante. Header Idempotency-Key obligatorio. Con ?diferir=true, si ARCA no responde antes de enviar el comprobante (red caída, servicio no disponible), queda enEspera (202, sin número ni CAE; no es una factura válida) y se emite solo cuando ARCA vuelve (aviso invoice.deferred, y después invoice.authorized o invoice.rejected); un certificado vencido no es una caída y se rechaza igual, y un timeout después de enviar sigue siendo incierto. Con ?cobrada=true (y el permiso de Cobro además del de escritura; si falta responde 403 y no emite) el comprobante autorizado queda cobrado —factura/ND saldada con un cobro por el total, nota de crédito aplicada— y el header de respuesta X-Cobro-Estado dice saldada, aplicada o no-marcada. 201 autorizado; ver los códigos. Cuerpo: Emitir comprobantes
POST /v1/invoices/preview Cualquiera Valida y calcula sin pedir CAE ni consumir número. Mismo cuerpo que emitir. Devuelve { tipoCodigo, tipoNombre, fecha, importes }
GET /v1/invoices/{id} Cualquiera Un comprobante. Si estaba incierto, lo reconcilia con ARCA antes de responder
GET /v1/invoices/{id}/detalle Lectura El comprobante con el pedido original (solicitud), canal, creado, ambiente y qrUrl (la dirección de verificación de ARCA). Sirve para mostrarlo o derivar una nota de crédito
GET /v1/invoices/{id}/pdf Lectura PDF del comprobante con el QR de ARCA. Solo si está autorizado; si no, 409 (AS-1016). Los externo no tienen PDF (409 AS-1021). ARCA no entrega el PDF: lo arma Comprobado con los datos del comprobante, con su diseño. ?diseno=fabrica o ?diseno={id} lo dibuja con otro solo en esta descarga (plan con editor; si no, 403 AS-2027)
GET /v1/invoices/{id}/design Lectura Con qué diseño sale el PDF: { estado: "sinElegir|fabrica|diseno", disenoId, nombre, version, vigente, puedeCambiar }. sinElegir: nunca se eligió (sale de fábrica). vigente: es la última versión de ese diseño
PUT /v1/invoices/{id}/design Escritura Fija el diseño del comprobante: { "diseno": "fabrica" } o { "diseno": "{id}" } (toma su versión vigente). Cambia solo el dibujo: datos, CAE y QR son los mismos. Plan sin editor: 403 AS-2027; diseño inexistente: 404 AS-1047
GET /v1/invoices Cualquiera Listado filtrable. Devuelve un arreglo; el total viene en el header X-Total-Count
GET /v1/invoices/page Cualquiera Lo mismo, con el total dentro del cuerpo: { items, total, page, pageSize, truncado }
POST /v1/invoices/import?dryRun=true|false Escritura Importa comprobantes emitidos desde un CSV (el de «Mis Comprobantes → Emitidos» u otra planilla) { csv, nombreArchivo }. dryRun=true (por defecto) revisa sin guardar. Valida TODO primero: con un problema no se importa nada. Lo que ya está (mismo ambiente, punto de venta, tipo y número) no se duplica: si lo emitió Comprobado no se toca; si es externo y le faltan datos (CAE, nombre del cliente, importes) se completa sin cambiar lo que tenía (actualizados; cada fila trae yaImportado o seCompleta). Repetir el mismo archivo no cambia nada. Devuelve { valido, importado, filas, nuevos, actualizados, yaImportados, totalPesosNuevos, problemas, comprobantes, puntosDeVenta }; puntosDeVenta informa, por cada uno del archivo, si ARCA lo habilita para facturar (habilitado, bloqueado, no_habilitado o sin_consultar). Un punto de venta no se crea: solo se puede poner nombre (nombresPuntosDeVenta: [{ numero, descripcion }] en el cuerpo, con config:fiscal) a los habilitados del archivo. Quedan como origen: externo, con nombre del cliente e importes. GET /v1/invoices/import/columns lista las columnas y GET/PUT/DELETE /v1/invoices/import/mappings los formatos guardados (POST /v1/invoices/import/mappings/suggest: sugerencia con IA, igual que en lotes)
POST /v1/invoices/sync Escritura Importa de ARCA los comprobantes emitidos fuera de Comprobado (otro sistema, portal de ARCA). De a tandas: repetí hasta completo: true. Parámetros: pv, tipo (acotan el carril), exportacion=true (suma las facturas E), maximo (1–200, 50 por defecto). Devuelve { importados, pendientes, omitidos, completo, carriles[] }. Ya hay una en curso → 409 AS-2023. No cuenta para la cuota
GET /v1/invoices/export Lectura* CSV (;, UTF-8 con BOM) con fecha;tipo;punto_venta;numero;estado;total;cae;cae_vencimiento;canal;origen;ambiente;receptor_documento;receptor_nombre;cobro;cobrado. Parámetros desde, hasta y ambiente (produccion, homologacion, simulado o todos; por defecto, solo el ambiente actual de la cuenta, para no mezclar pruebas con producción). Hasta 5000 filas: si hay más, la respuesta trae el header X-Truncado: true. *Depende de que tu plan incluya exportar

Filtros de GET /v1/invoices y /page (todos opcionales y combinables):

Parámetro Tipo Qué filtra
desde, hasta fecha aaaa-mm-dd Fecha del comprobante, ambos inclusive
tipo texto Código de comprobante (11, 1, 19…); varios separados por coma (tipo=1,6,11) trae los que sean de alguno de ellos
estado texto pendiente, autorizado, rechazado, incierto o enEspera; varios separados por coma (estado=autorizado,incierto)
importeMin, importeMax número Rango del total
ambiente texto produccion, homologacion o simulado
origen texto suite (emitidos con Comprobado) o externo (emitidos fuera de Comprobado e importados de ARCA)
cobro texto Estado de cobro: adeudada, parcial, saldada (facturas y ND) o pendiente, aplicada (notas de crédito); varios separados por coma (cobro=adeudada,parcial)
cuit texto Documento del receptor (CUIT, CUIL o DNI); alcanza con una parte de los dígitos
nombre texto Nombre del receptor (contiene, sin distinguir mayúsculas ni tildes)
q texto Búsqueda libre por tipo («Factura C»), CAE o número (0003-00000008 o solo los dígitos)
orden texto Orden del listado: fecha, numero, total, estado, tipo o receptor; con - adelante es descendente (orden=-total). Sin orden, lo más nuevo primero. Ordena todo el listado, no solo la página; un campo que no existe responde 400. Ordenar por receptor lee hasta los últimos 5000 del período
take entero Filas por página, de 1 a 100 (50 en /invoices, 20 en /page)
pagina entero Desde 1

Con varios valores (tipo, estado, cobro) el comprobante entra si coincide con alguno. Lo mismo vale para estado en GET /v1/purchase-invoices (además de los atajos abiertos y cerrados), GET /v1/mercadolibre/sales, GET /v1/webhooks/{id}/deliveries y GET /v1/invoice-batches/{id}/items, y para servicio y operacion en GET /v1/arca/calls/page. Un estado, tipo, ambiente, origen o cobro que no existe responde 400 (no se ignora en silencio). Cada fila trae id, estado, tipo, tipoNombre, puntoVenta, numero, fecha, total, cae, caeVencimiento, createdAt, canal (web, api, mcp o mercadolibre), ambiente, receptor, receptorDoc, origen, cobro (el estado de cobro; null si no está autorizado) y cobrado (lo ya cobrado, en la moneda del comprobante; null en notas de crédito y si no está autorizado; el saldo es total − cobrado). Los filtros cuit, nombre y q se aplican sobre los últimos 5000 comprobantes del período; si hay más, truncado es true: acotá con desde y hasta.

curl "https://TU-DOMINIO/v1/invoices?estado=incierto&ambiente=produccion" -H "Authorization: Bearer $COMPROBADO_KEY"

ARCA, puntos de venta y receptores

Endpoint Permiso Para qué
GET /v1/points-of-sale Lectura, escritura o config. fiscal Puntos de venta habilitados en ARCA para web services: [{ numero, emision, bloqueado, descripcion, informado }]. descripcion es el nombre que le pusiste en la consola. ?exportacion=true trae los de factura E. En homologación ARCA suele no informar ninguno: se puede emitir igual con el número que creaste
GET /v1/points-of-sale/labels Lectura, escritura o config. fiscal Solo los nombres ([{ numero, descripcion }]), sin consultar a ARCA
GET /v1/pdf-designs Lectura, escritura o config. fiscal Diseños del PDF (plan con editor): { disenos: [{ id, nombre, porDefecto, version, actualizado }], maximo, limites }, el por defecto primero. Sin el plan, 403 AS-2027
GET /v1/pdf-designs/{id} Lectura, escritura o config. fiscal Un diseño con su versión vigente: { id, nombre, porDefecto, version, plantilla, actualizado, limites }
POST /v1/pdf-designs Config. fiscal Crea un diseño: { nombre, plantilla: { fuente, escala, acento, color, zonas: { superior, cliente, pie }, bloques: [{ id, tipo: "texto|imagen|linea", zona, x, y, ancho, alto, lineas, fuente, tam, negrita, alineacion, color, imagen, grosor }], imagenes: [{ id, datos }] }, porDefecto } (los elementos van dentro de su franja; las imágenes en base64, PNG o JPG). 201. Hasta 10 y con nombre único: 409 AS-1046; diseño inválido: 400 AS-1044. El primero queda por defecto
PUT /v1/pdf-designs/{id} Config. fiscal Guarda nombre y contenido (mismo cuerpo) como versión nueva; si el contenido no cambió, no versiona. Los comprobantes que ya salieron con una versión anterior la conservan. Inexistente: 404 AS-1047
DELETE /v1/pdf-designs/{id} Config. fiscal Borra un diseño (204). Lo ya emitido con él sale igual; si era el por defecto, los comprobantes nuevos salen de fábrica
PUT /v1/pdf-designs/default Config. fiscal Elige el diseño por defecto, el que reciben los comprobantes nuevos: { "disenoId": "…" } (null: ninguno). Devuelve la lista
POST /v1/pdf-template/scene Lectura, escritura o config. fiscal La primera página de un comprobante de ejemplo como lista de elementos (textos con su línea base, rectángulos, líneas, QR) y las franjas ya ubicadas: es lo que dibuja el editor
POST /v1/pdf-template/preview Lectura, escritura o config. fiscal Devuelve el PDF de un comprobante de ejemplo con el diseño pedido ({ plantilla }, como en POST /v1/pdf-designs), sin guardar nada
GET /v1/pdf-template/fonts/{Familia-Peso} Lectura, escritura o config. fiscal Tipografía embebida del PDF (LiberationSans-Bold, Roboto-Regular…; sin extensión), para dibujar igual que el PDF
PUT /v1/points-of-sale/{numero} Configuración Pone el nombre de un punto de venta: { "descripcion": "Local Centro" } (hasta 80 caracteres; vacío o null lo borra). Es solo local: no va a ARCA
GET /v1/fce/obligation?cuit=&fecha= Escritura FCE MiPyME: dice si el CUIT está obligado a recibir Factura de Crédito Electrónica en esa fecha (por defecto hoy) y desde qué importe: { cuit, obligado, montoDesde, fecha }. Si obligado y el total llega a montoDesde (inclusive), una factura común la rechaza ARCA (10192): corresponde un comprobante con fce. Errores: 400 AS-1011, 424 AS-1026 (certificado no autorizado para wsfecred, ver Autorizar el servicio; se puede emitir igual)
GET /v1/fce/invoices?rol=&cuit=&estado=&desde=&hasta=&pagina= Cualquiera FCE MiPyME, estado posterior: las facturas emitidas (rol=emisor) o recibidas (receptor) con su estado (pendienteRecepcion, recepcionado, aceptado, rechazado, informadaAgDpto), tipoAceptacion, motivosRechazo y opcionTransferencia. Sin fechas, últimos 90 días (máx. un año); hayMas para paginar. Filtro inválido: AS-1029; sin autorizar wsfecred: AS-1026
GET /v1/taxpayers/{cuit} Escritura Padrón de ARCA: busca un CUIT/CUIL (con o sin guiones) y devuelve { cuit, tipoPersona, tipoClave, estado, razonSocial, condicionIva, condicionIvaId, domicilio, impuestos, categoriaMonotributo, actividadPrincipal }. Trae además alertas ([{ codigo, gravedad, titulo, detalle }]): ARCA marca la clave como inactiva (inactiva), limitada (limitada, RG 3832/16 o 4320/18), cancelada (cancelada), de un titular fallecido (fallecido) o no confiable (no_confiable); gravedad es bloqueo (restricción de la clave) o aviso (dato incompleto), y detalle es el texto de ARCA. Informan, no bloquean. Si ARCA no devuelve los datos de la clave (p. ej. cancelada), condicionIva y condicionIvaId vienen null: no se inventa una condición. La condicionIva se deduce de los impuestos inscriptos (IVA activo ⇒ responsableInscripto; IVA exento ⇒ exento; monotributo ⇒ monotributo; ninguno ⇒ noCategorizado): es una sugerencia que podés pasar tal cual a receptor.condicionIva. Errores: 400 AS-1011 (CUIT inválido), 404 AS-1022 (no existe en el padrón), 424 AS-1023 (el certificado no está autorizado para el servicio del padrón) y 429 AS-2028 (tope diario de búsquedas por cuenta, 500 por defecto; las respuestas que salen de la memoria de unos minutos no cuentan; se reinicia a las 00:00 hora argentina). Ver Autorizar el servicio de facturación. Los datos no se guardan; se recuerdan unos minutos en memoria
GET /v1/arca/last-number?pv=3&tipo=11 Lectura, escritura o config. fiscal Último número que ARCA autorizó para ese punto de venta y tipo: { puntoVenta, tipo, ultimoNumero }. El próximo comprobante será ultimoNumero + 1
GET /v1/catalog/tributos Lectura, escritura o config. fiscal Tipos de tributo/percepción que ARCA acepta ([{ id, descripcion }]) para el bloque tributos del comprobante
GET /v1/catalog/condicion-iva-receptor Cualquiera Condiciones frente al IVA que ARCA acepta para el receptor: [{ id, descripcion }]
GET /v1/receptors Cualquiera Sugerencias para el documento del receptor al emitir: tus clientes guardados (origen: "cliente", con su condicionIva) y los proveedores con ese CUIT (origen: "proveedor", condicionIva: null): { docTipo, docNro, nombre, condicionIva, origen }
GET /v1/invoices/last-by-receptor?docTipo=&docNro= Lectura Último comprobante a ese receptor (mismo tipo y número de documento, autorizados, del ambiente de la cuenta): { tipoNombre, concepto, fecha, renglones: [{ alicuotaIva, tratamiento }] }, o null si no hay ninguno. Pensado para precargar la carga manual de lotes: nunca trae la descripción ni el precio de los renglones
GET /v1/export/catalog Lectura, escritura o config. fiscal Tablas de ARCA para una factura E: paises, cuitsPais, monedas, incoterms, idiomas, unidadesMedida (cada una [{ id, descripcion }]). Se guardan unas horas
GET /v1/ai/resumen-mes Lectura El resumen del mes de hoy: { id, dia, creado, resumen: { cifras, texto, generadoPorIa, aviso } }. Si todavía no hay uno de hoy se genera en el momento (la IA solo redacta las cifras que calcula el servidor; sin IA, el texto lo arma el sistema) y se guarda. Solo si el plan incluye el resumen del mes (AS-2027)
GET /v1/ai/resumenes Lectura Los últimos 10 resúmenes guardados, del más nuevo al más viejo (misma forma). Mismo plan
POST /v1/invoices/{id}/recordatorio Escritura Borrador de un recordatorio de pago ({ "tono": "cordial" | "firme" }) para una factura con saldo: { asunto, mensaje, saldo, diasDesdeLaEmision, generadoPorIa, aviso }. No envía nada
POST /v1/invoices/conciliacion Cobro (invoice:settle) Cruza los créditos de un extracto (movimientos: [{ fecha, descripcion, importe, referencia }], hasta 2.000) con las facturas en pesos con saldo y propone qué pago es de cada una. No registra nada: cada pago va por POST /v1/invoices/{id}/pagos
POST /v1/purchase-invoices/read-document Compras (escritura) Lee con IA la foto o el PDF (base64, hasta 8 MB) de una factura de proveedor y devuelve los datos para revisar; exige confirmaEnvio: true. No guarda nada
POST /v1/purchase-invoices/manual Compras (escritura) Guarda UN comprobante recibido revisado; devuelve { resultado, id } (el id sirve para /constatar)
GET /v1/cotizacion?moneda=DOL&fecha=aaaa-mm-dd Lectura, escritura o config. fiscal Cotización oficial de ARCA para una factura A/B/C en moneda extranjera (WSFEv1; con fecha, la de ese día: con «se cancela en la misma moneda» ARCA exige la del día hábil anterior al comprobante): { moneda, cotizacion, fecha }
GET /v1/export/cotizacion?moneda=DOL Lectura, escritura o config. fiscal Cotización oficial de ARCA: { moneda, cotizacion, fecha }
GET /v1/arca/calls Lectura Últimas llamadas a ARCA de tu cuenta (take hasta 200): { id, servicio, operacion, durationMs, hayError, createdAt }
GET /v1/arca/calls/page Lectura Lo mismo paginado y filtrable (desde, hasta, servicio, operacion, resultado=ok|error, lentoMs, orden (cuando, servicio, operacion, duracion o resultado; con - adelante, descendente), take, pagina)
GET /v1/arca/calls/{id} Lectura El pedido y la respuesta SOAP crudos de una llamada (el arcaCallId de un comprobante). Para diagnosticar con tu contador

Contribuyente y conexión

Endpoint Permiso Para qué
GET /v1/tenant Cualquiera Tus datos: CUIT, razón social, condicionIva, environment, status, monthlyInvoiceLimit, connectionOkAt…
PUT /v1/tenant Configuración Actualiza razonSocial, condicionIva, ingresosBrutos, inicioActividades y domicilioFiscal. No toca estado, ambiente ni límites Además nombreFantasia (opcional, hasta 60 caracteres; vacío lo borra; AS-1048 si es más largo; se imprime junto a la razón social, nunca en su lugar) y categoriaMonotributo (A a K; vacío la borra) y actividadMonotributo (servicios o bienes: los topes A–K son los mismos, solo cambia la cuota; AS-1034 si no es válida), y cbu (22 dígitos) y aliasCbu (6 a 20 caracteres) para las Facturas de Crédito Electrónica; vacío los borra; AS-1027 si el formato es inválido. modalidadFacturaA (comun, pago_cbu_informada, sujeta_retencion; RG 5762): con sujeta_retencion el tipo auto emite 51–53, con pago_cbu_informada el PDF de la A lleva la leyenda y el CBU (que tiene que estar cargado; si no, 400 AS-1031)
GET /v1/tenant/health Escritura o configuración Semáforo de la conexión con ARCA: { ambiente, estado, checks: [{ nombre, ok, ms, detalle }] }. check=basic (solo certificado y servidor de ARCA), auth o all; force=1 reintenta sin esperar la memoria de un login rechazado; ambiente=produccion prueba el otro ambiente
GET /v1/tenant/health/export Escritura o configuración Lo mismo para el servicio de exportación (wsfex)
GET /v1/tenant/health/padron Escritura o configuración Lo mismo para el padrón (ws_sr_constancia_inscripcion); informa consultasHoy y limiteDiario y, en detalle.condicion, si tu condición frente al IVA coincide con la del padrón (estado: coincide · distinta · sin_dato, con declarada, enPadron y mensaje)
GET /v1/tenant/certificate Cualquiera Estado del certificado: cargado, vence, diasRestantes, estado. No llama a ARCA. ?ambiente= elige el de homologación o producción
POST /v1/tenant/csr Configuración Genera la clave privada y el pedido de certificado (CSR). La clave no sale del servidor
GET /v1/tenant/csr Cualquiera Descarga el CSR para subirlo a ARCA
PUT /v1/tenant/certificate Configuración Carga el certificado que devolvió ARCA: { "certificatePem": "-----BEGIN CERTIFICATE-----…" }
GET /v1/tenant/environment Cualquiera Ambiente actual y si se puede cambiar
PUT /v1/tenant/environment Solo consola Cambia homologación ↔ producción. Con una API key responde 403: cambiar de ambiente modifica a qué ARCA le hablan todas las integraciones, así que se hace a propósito desde la consola
GET /v1/tenant/production-readiness Cualquiera Checklist para pasar a producción (local, no llama a ARCA)
GET /v1/usage Lectura Comprobantes por mes y por canal contra tu cupo: { plan, limiteMensual, usadosMes, meses[], porDia[], desde, reiniciaEl, reinicio }. El cupo es siempre mensual: desde–reiniciaEl es el período en curso y reinicio dice cómo se calcula (calendario: el día 1 de cada mes; ciclo: el día en que empezó tu período pagado), siempre en hora de Argentina
GET /v1/monotributo Lectura Control del tope del monotributo, ya calculado: { aplica, categoria, actividad, control{ estado, acumulado, tope, porcentajeUsado, margen, categoriaSugerida, cuotaActual, cuotaSugerida }, ultimoCierre, conLaProxima, meses[], avisos[] }. 12 meses calendario del ambiente de la cuenta; las notas de crédito restan y la exportación entra al cambio de su cotización. conLaProxima aparece si ya hay una tabla futura capturada (no rige hasta su fecha). Si no sos monotributista, aplica es false
GET /v1/iva/posicion Lectura Posición de IVA del mes (periodo=aaaa-mm, por defecto el actual): { debito{ iva, netoGravado, noGravado, exento, porAlicuota[] }, credito, saldoAnterior, percepcionesYRetenciones, saldo, resultado, notas[] }. Débito = ventas autorizadas (las notas de crédito restan); crédito = compras importadas (solo si tenés purchases:read, si no es null). Solo el ambiente de la cuenta. Es el saldo técnico del mes, no la declaración jurada
GET /v1/iva/libro-ventas · .csv Lectura Libro IVA Ventas del mes: un renglón por comprobante (neto, no gravado, exento, IVA por alícuota, tributos, total). .csv = archivo para Excel (; y coma decimal)
GET /v1/iva/libro-compras · .csv purchases:read Libro IVA Compras del mes: los comprobantes recibidos importados, en pesos, con las notas de crédito restando
GET /v1/iva/libro-iva-digital.zip Lectura Libro IVA Digital (RG 4597) del mes: ZIP con LIBRO_IVA_DIGITAL_VENTAS_CBTE (266), _VENTAS_ALICUOTAS (62) y, con purchases:read, _COMPRAS_CBTE (325) y _COMPRAS_ALICUOTAS (84), ancho fijo, ISO-8859-1, importes en pesos; LEEME.txt lista lo omitido (sin desglose o con varias alícuotas)
GET /v1/iva/asientos.csv Lectura Asientos contables del mes en CSV (Fecha;Asiento;Cuenta;Debe;Haber;Concepto): uno balanceado por comprobante emitido, recibido (con purchases:read) y por retención/percepción, con un plan de cuentas genérico
POST /v1/invoices/{id}/email Escritura Envía el PDF de un comprobante autorizado y emitido por Comprobado: { para: [hasta 5 emails], mensaje?, diseno? } (diseno: fabrica o el id de un diseño, solo para este envío) → { enviados, destinatarios }. Direcciones inválidas (o con saltos de línea, comas o <>) → AS-1036; tope de 200 por día y cuenta → 429 AS-2029; correo sin configurar → 503. No consume cupo
GET /v1/invoices/numeracion Lectura Control de huecos de numeración por punto de venta y tipo (solo el ambiente de la cuenta): carriles[]{ puntoVenta, tipo, primero, ultimo, cantidad, faltantes[]{desde,hasta,cantidad}, faltantesTotal, ultimoEnArca, sinTraerDeArca }. arca=true compara con el último autorizado en ARCA (una consulta por carril). No consume cupo
GET /v1/withholdings · export.csv Lectura Retenciones y percepciones sufridas (filtros desde, hasta, impuesto = iva · ganancias · iibb · suss · otro), con totales por impuesto y tipo. export.csv = lo mismo para Excel
POST /v1/withholdings · DELETE /v1/withholdings/{id} invoice:settle Carga o borra una retención/percepción: { fecha, impuesto, tipo (retencion · percepcion), agenteCuit, importe, jurisdiccion?, agenteNombre?, certificado?, comprobante?, nota? } (AS-8017 si es inválida, AS-8018 si no existe). Las de IVA restan en /v1/iva/posicion
GET /v1/onboarding Cualquiera Pasos de la puesta en marcha y cuáles están hechos

Clientes guardados

A quienes les facturás (guía). Leer pide el permiso de consulta (invoice:read); guardar, editar, borrar y traer del historial, Escritura. No va a ARCA ni consume cupo. Documento, nombre y contacto se guardan cifrados.

Endpoint Permiso Para qué
GET /v1/customers Cualquiera Paginado, más recientes primero (o `orden=nombre
POST /v1/customers Escritura Guarda un cliente { docTipo, docNro, nombre, condicionIva, email?, telefono? }. Si ya estaba (mismo tipo y número de documento) no lo duplica: responde 200 con creado: false, actualiza su condición frente al IVA y completa el nombre solo si faltaba. 201 si es nuevo
PUT /v1/customers/{id} Escritura Edita nombre, condicionIva, email y telefono (el documento no se cambia). Lo que no viene no se toca; un texto vacío borra el dato
DELETE /v1/customers/{id} Escritura Lo borra (los comprobantes ya emitidos no se tocan). 204
DELETE /v1/customers/pruebas Escritura Borra los clientes «de prueba» (nacidos en homologación o simulado): { borrados }
POST /v1/customers/from-invoices Escritura Trae a Clientes los receptores de tus últimos comprobantes del ambiente actual (en producción, solo los de producción; en pruebas, los de prueba): { agregados, yaEstaban }

Un consumidor final sin identificar no se guarda, y un CUIT/CUIL con el dígito verificador mal da 400 AS-9002. Errores: AS-9001 (no existe), AS-9002 (dato inválido), AS-9003 (máximo de 20 000 clientes).

Cobro y notas de comprobantes emitidos

Cada comprobante autorizado tiene un estado de cobro, aparte del de ARCA (guía). Depende del documento: facturas y notas de débito adeudada → parcial → saldada (según los cobros registrados; parcial no se asigna a mano); notas de crédito pendiente → aplicada. No consume cupo ni va a ARCA.

Endpoint Permiso Para qué
GET /v1/catalog/estados-de-pago Cualquiera Los estados de cada documento: { documentos: [{ documento, inicial, estados: [{ id, nombre, cerrado }], tipos }] }
PUT /v1/invoices/{id}/cobro Cobro Cambia el estado: { "estado": "saldada" }. Devuelve { estado, estadoNombre, admitidos, actualizado, actualizadoPor }. Estado que no corresponde → 400 AS-8004; no autorizado → 409 AS-8009
PUT /v1/invoices/cobro Cobro Varios a la vez (hasta 500): { "ids": [...], "estado": "saldada" }. Devuelve { cambiados, omitidos: [{ id, motivo }] }; los que no admiten ese estado no frenan al resto
GET /v1/invoices/{id}/pagos Cualquiera Cobros de una factura o ND: { estado, estadoNombre, total, pagado, saldo, pagos: [{ id, fecha, importe, medio, medioNombre, referencia, autor, registrado }], medios: [{ id, nombre }] }. Nota de crédito → 409 AS-8014; no autorizado → 409 AS-8009
POST /v1/invoices/{id}/pagos Cobro Registra un cobro { "importe": 40000, "fecha": "2026-10-29", "medio": "transferencia", "referencia": "op 4471" }. Todo es opcional: sin importe se toma el saldo completo, sin fecha hoy (hora argentina), sin medio otro (transferencia, efectivo, cheque, tarjeta, retencion, otro). No puede superar el saldo ni tener fecha futura (409/400 AS-8011). 201 con el mismo resumen
DELETE /v1/invoices/{id}/pagos/{paymentId} Cobro Anula un cobro y recalcula el estado. Devuelve el resumen; no existe → 404 AS-8013
GET /v1/invoices/{id}/notes Cualquiera Notas del comprobante (más nuevas primero): [{ id, texto, autor, creada, propia }]
POST /v1/invoices/{id}/notes Cobro Agrega una nota { "texto": "…" } (hasta 2000 caracteres; vacía o más larga → 400 AS-8006). 201
DELETE /v1/invoices/{id}/notes/{noteId} Cobro Borra una nota. Cada quien borra las suyas; la de otra persona solo la borra quien administra el equipo (403 AS-8016). 204

Las notas: el detalle trae ajustes (las notas de crédito y débito que corrigen ese comprobante: id, tipoNombre, numero, fecha, total, estado, naturaleza «credito» o «debito»), creditado y debitado (suma de las autorizadas) y, si el comprobante es una nota, corrige (el comprobante que corrige, para navegar). Cada fila del listado trae creditado y debitado. ARCA no controla que lo acreditado no pase del total del comprobante (probado en homologación), ni Comprobado lo bloquea: la consola advierte antes de emitir otra nota sobre un comprobante que ya tiene.

El detalle (GET /v1/invoices/{id}/detalle) trae el bloque cobro con los estados admitidos, pagado y saldo. Con PUT …/cobro, saldada registra un cobro por lo que falte; volver a adeudada con cobros registrados responde 409 AS-8012 (anulalos primero) y parcial se rechaza con 400 AS-8004.

# cobrar una parte; después, el resto (sin importe)
curl -X POST "https://TU-DOMINIO/v1/invoices/inv_…/pagos" -H "Authorization: Bearer $COMPROBADO_KEY" \
  -H "Content-Type: application/json" -d '{"importe":40000,"medio":"transferencia"}'
curl -X PUT "https://TU-DOMINIO/v1/invoices/cobro" -H "Authorization: Bearer $COMPROBADO_KEY" \
  -H "Content-Type: application/json" -d '{"ids":["inv_…","inv_…"],"estado":"saldada"}'

Facturación masiva

Todas piden el permiso Lotes; crear, confirmar, cancelar y borrar piden además invoice:write (lo trae la clave de Facturación masiva). Guía completa: Facturación masiva.

Endpoint Para qué
GET /v1/invoice-batches/columns Columnas del CSV: nombre, etiqueta, grupo, obligatoria, descripcion, ejemplo, valores, alternativos
GET /v1/invoice-batches/template.csv?tipo=comun|exportacion&separador=;|, Plantilla CSV de ejemplo
POST /v1/invoice-batches Crea un lote desde una lista JSON { nombreArchivo, comprobantes: [{ referencia, comprobante }] } (máx. 20 000 comprobantes y 25 MB; si no, 413 con AS-5021)
POST /v1/invoice-batches/csv Crea un lote desde el texto de un CSV { csv, nombreArchivo }
GET /v1/invoice-batches Lotes de los últimos 30 días (pagina, take, orden = creado, nombre o estado; con - adelante, descendente)
GET /v1/invoice-batches/{id} Estado y avance
GET /v1/invoice-batches/{id}/items Resultado por comprobante (estado, orden = fila, referencia, estado, comprobante o total, pagina, take hasta 500)
GET /v1/invoice-batches/{id}/results.csv CSV con número, CAE y error de cada comprobante
POST /v1/invoice-batches/{id}/start Confirma un borrador o reanuda un lote pausado
POST /v1/invoice-batches/{id}/cancel Cancela (lo ya emitido no se anula)
DELETE /v1/invoice-batches/{id} Borra un lote terminado, cancelado o sin confirmar
GET/PUT /v1/invoice-batches/mappings, DELETE …/mappings/{id} Formatos de archivo guardados desde el asignador de columnas de la consola. POST …/mappings/suggest { columnas, muestras? } → { sugerencias: [{ columna, campo }], aviso }: sugiere con IA qué columna (índice desde 0) es cada dato. Al proveedor de IA solo van los encabezados y la forma de hasta 5 valores por columna (dígitos → 9, letras → a/A); solo devuelve lo que reconoce con seguridad y nunca guarda nada. 503 AS-5022 si la instalación no la tiene activada (sugerenciasIa de /v1/auth/me), 429 AS-5023 tope diario por cuenta (30 por defecto; lo que se repite sale de la memoria y no cuenta), 502 AS-5024 si el servicio de IA no respondió

Parámetros de creación: dryRun=true (solo valida), empezar=true (crea y confirma de una) y permitirDuplicado=true.

Compras: proveedores y comprobantes recibidos

Lo que te facturan tus proveedores, con su estado de pago y notas (guía). Leer pide Compras (purchases:read); importar, editar, marcar pagos, borrar y escribir notas, purchases:write. No va a ARCA ni consume cupo.

Endpoint Para qué
GET /v1/purchase-invoices/columns Columnas del CSV: nombre, etiqueta, obligatoria, descripcion, ejemplo, valores y alternativos (los nombres del CSV de «Mis Comprobantes» de ARCA)
POST /v1/purchase-invoices/import?dryRun=true|false Revisa (dryRun=true, por defecto) o importa un CSV { csv, nombreArchivo }. Valida todo: con un problema no importa nada. Lo ya importado se saltea. Devuelve { valido, importado, filas, nuevos, yaImportados, proveedoresNuevos, totalPesosNuevos, problemas, comprobantes, importId }. Más de 20 000 → 413 AS-8010
POST /v1/purchase-invoices/{id}/constatar purchases:write
GET /v1/purchase-invoices Paginado: { items, total, page, pageSize, saldoPesos }; cada fila trae pagado y saldo (en la moneda del comprobante; lo que falta pagar). orden (fecha, numero, vence, total, estado, tipo o proveedor; - adelante = descendente). Filtros: proveedor, estado (abiertos, cerrados, adeudada, parcial, saldada, pendiente, aplicada), vencidos=true, desde, hasta, tipo, q (proveedor o número), pagina, take
GET /v1/purchase-invoices/{id} El comprobante con CAE, cotización, netos, IVA, tributos, estados admitidos y quién lo importó o cambió
PUT /v1/purchase-invoices/{id} Cambia estado y/o vencimiento (sinVencimiento: true lo borra). saldada registra un pago por lo que falte; adeudada con pagos registrados → 409 AS-8012; estado que no corresponde (incluido parcial, que sale de los pagos) → 400 AS-8004
PUT /v1/purchase-invoices/pago Varios a la vez (hasta 500): { ids, estado } → { cambiados, omitidos }
GET /v1/purchase-invoices/{id}/pagos Pagos de una factura o ND recibida (mismo resumen que los cobros). POST registra uno (purchases:write, mismas reglas: sin importe = saldo, no supera lo que falta); DELETE …/pagos/{paymentId} lo anula
DELETE /v1/purchase-invoices/{id} Lo borra con sus notas (p. ej. importado por error). 204
DELETE /v1/suppliers/pruebas Borra los proveedores «de prueba» con sus comprobantes, notas y pagos, y los comprobantes de prueba de proveedores reales: { borrados, comprobantes }. Cada proveedor y comprobante trae prueba: lo importado en homologación o simulado no se lista ni se suma en producción
GET /v1/suppliers Proveedores con saldo, mayor saldo primero (o `orden=nombre
GET /v1/suppliers/{id} La ficha: { resumen, email, telefono, creado }
PUT /v1/suppliers/{id} Edita { nombre, email, telefono } (el CUIT no). Dato inválido → 400 AS-8007
GET/POST /v1/suppliers/{id}/notes, DELETE …/notes/{noteId} Notas del proveedor
GET/POST /v1/purchase-invoices/{id}/notes, DELETE …/notes/{noteId} Notas del comprobante recibido
GET/PUT /v1/purchase-invoices/mappings, DELETE …/mappings/{id} Formatos de archivo guardados desde el asignador de columnas de la consola. POST …/mappings/suggest { columnas, muestras? } → { sugerencias: [{ columna, campo }], aviso }: sugiere con IA qué columna (índice desde 0) es cada dato. Al proveedor de IA solo van los encabezados y la forma de hasta 5 valores por columna (dígitos → 9, letras → a/A); solo devuelve lo que reconoce con seguridad y nunca guarda nada. 503 AS-5022 si la instalación no la tiene activada (sugerenciasIa de /v1/auth/me), 429 AS-5023 tope diario por cuenta (30 por defecto; lo que se repite sale de la memoria y no cuenta), 502 AS-5024 si el servicio de IA no respondió

El saldo (saldoPesos) es lo adeudado menos las notas de crédito sin aplicar, en pesos (total × tipo de cambio). Errores: AS-8001 (comprobante repetido en el archivo), AS-8002 (no existe el recibido), AS-8003 (no existe el proveedor), AS-8005 (no existe la nota).

curl -X POST "https://TU-DOMINIO/v1/purchase-invoices/import?dryRun=false" -H "Authorization: Bearer $COMPROBADO_KEY" \
  -H "Content-Type: application/json" --data-binary @- <<'JSON'
{"nombreArchivo":"octubre.csv","csv":"fecha;tipo;punto_venta;numero;doc_emisor;nombre_emisor;total\n21/10/2026;1;3;1234;30712345671;Proveedor SA;1210\n"}
JSON

Errores

Endpoint Permiso Para qué
GET /v1/catalog/errors Sin clave Catálogo público de errores explicados: [{ codigo, titulo, detalle, comoSolucionarlo, quienActua, reintentable }]. Sirve para mostrar tus propios mensajes
GET /v1/errors Cualquiera El mismo catálogo con las traducciones

Abonos

Facturación recurrente (guía). Piden el permiso de Lotes (clave de «Facturación masiva»); crear, cambiar, borrar y generar piden además Escritura.

Endpoint Para qué
GET /v1/subscriptions Tus abonos: { id, nombre, activo, modo, intervaloMeses, diaDelMes, proximaFecha, periodoServicio, diasVencimiento, comprobante, total, tipoNombre, ultimaEjecucion, ultimoLote, ultimoError }
POST /v1/subscriptions/preview Valida un abono y devuelve el comprobante que armaría (con el período de servicio), sus importes y las próximas fechas. No guarda nada
POST /v1/subscriptions Crea uno: { nombre, comprobante, modo?, intervaloMeses?, diaDelMes?, primeraFecha?, periodoServicio?, diasVencimiento?, activo? }. modo: borrador (por defecto) o automatico. Máximo 50
PUT /v1/subscriptions/{id} Cambia la plantilla, la frecuencia, el modo o activo
DELETE /v1/subscriptions/{id} Lo borra (los lotes ya generados no se tocan)
POST /v1/subscriptions/{id}/run Genera YA un lote de hoy. Siempre queda en borrador y no mueve el calendario. Devuelve el lote

Errores: AS-7001 (no existe), AS-7002 (máximo), AS-7003 (dato inválido), AS-7004 (no se pudo generar), AS-7005 (nombre repetido).

Webhooks

Avisos firmados a tu servidor (guía). Todas piden el permiso Configuración (clave «completa») o config:webhooks (clave a medida).

Endpoint Para qué
GET /v1/webhooks/events Tipos de evento que se pueden recibir
GET /v1/webhooks Tus webhooks: { id, url, eventos[], descripcion, activo, createdAt, ultimoExito, fallosSeguidos }
POST /v1/webhooks Crea uno: { url, eventos?, descripcion?, activo? }. Devuelve el secreto de firma una sola vez (secreto). Máximo 5
PUT /v1/webhooks/{id} Cambia la URL, los eventos, la descripción o activo (los avisos de uno desactivado esperan)
DELETE /v1/webhooks/{id} Lo borra con su historial
POST /v1/webhooks/{id}/rotate-secret Genera un secreto nuevo (el anterior deja de valer al instante)
POST /v1/webhooks/{id}/test Manda un ping solo a este webhook; devuelve { entregaId }
GET /v1/webhooks/{id}/deliveries?estado=&take= Historial de entregas: { id, tipo, estado (pendiente | entregado | muerto), intentos, proximoIntento, ultimoCodigo, ultimoError }
POST /v1/webhooks/deliveries/{eventId}/resend Reenvía un aviso ya (aunque se haya entregado)

Errores: AS-6001 (URL inválida), AS-6002 (evento desconocido), AS-6003 (máximo de webhooks), AS-6004 (no existe).

Mercado Libre

Facturar cada venta de una cuenta de vendedor de Mercado Libre (guía). Es una función del plan: sin ella, todo /v1/mercadolibre* responde 403 con AS-2027. Conectar necesita una persona en la consola (hay que autorizar en Mercado Libre con el navegador), pero el resto se puede usar con una clave completa. Los modos modoEmision (revisar | automatico) y modoCancelacion (asistida | automatica) no tienen valor por defecto: hasta elegirlos y confirmar que no se usa el Facturador de Mercado Libre, no se emite nada (faltantes y puedeEmitir en GET /v1/mercadolibre).

Endpoint Permiso Para qué
GET /v1/mercadolibre config:mercadolibre o invoice:read Estado: { disponible, conectada, estado (activa | reconectar | baja), nickname, cuentaId, conectadaEl, ultimaConciliacion, config, faltantes[], puedeEmitir, ventas[{ estado, cantidad }] }
POST /v1/mercadolibre/connect config:mercadolibre Devuelve { url }: la dirección de Mercado Libre donde se autoriza (vence a los 10 minutos). Al terminar vuelve a la consola con ?conexion=ok o ?conexion=error&codigo=AS-95xx
DELETE /v1/mercadolibre config:mercadolibre Desconecta (borra los tokens, libera la cuenta, conserva configuración y ventas). Devuelve el estado
PUT /v1/mercadolibre/config config:mercadolibre { puntoVenta?, modoEmision?, modoCancelacion?, alicuotaDefecto?, alicuotaEnvio?, subirFactura?, esperaFacturaHoras? (0 a 48, por defecto 2), confirmaSinFacturadorMl? } (lo que no viene no se toca). Devuelve la configuración
GET /v1/mercadolibre/item-taxes config:mercadolibre o invoice:read Excepciones de IVA: { id, tipo (sku | publicacion), clave, alicuota, tratamiento (gravado | exento | noGravado) }
PUT /v1/mercadolibre/item-taxes config:mercadolibre Crea o actualiza una: { tipo, clave, alicuota?, tratamiento? } (una por tipo y clave; máximo 500)
DELETE /v1/mercadolibre/item-taxes/{id} config:mercadolibre La borra (204)
GET /v1/mercadolibre/sales?estado=&desde=&hasta=&q=&orden=&pagina=&take= invoice:read Bandeja paginada { items[], total, pagina, tamano }. orden: fecha, total, estado, comprador, actualizada (con - para descendente). q busca comprador, orden o pack
GET /v1/mercadolibre/sales/{id} invoice:read Detalle y lo que se emitiría hoy (renglones, problemas[], previa). No llama a Mercado Libre. {id} es el pack (o la orden si no es un carrito)
POST /v1/mercadolibre/sales/{id}/emit invoice:write Vuelve a leer la venta y la emite si está lista. Nunca duplica. 409 AS-9506 si falta configuración
POST /v1/mercadolibre/sales/emit invoice:write { ventas[] } (hasta 50): emite una por una; cada resultado trae estado, comprobanteId y, si no salió, problema y problemaTexto
POST /v1/mercadolibre/sales/{id}/ignore invoice:write Ignora la venta (una con comprobante no se ignora)
POST /v1/mercadolibre/sales/{id}/refresh invoice:write Reintenta la lectura en Mercado Libre; saca de ignoradas y reconoce una nota de crédito hecha a mano
POST /v1/mercadolibre/sales/{id}/credit-note invoice:write Borrador de la nota de crédito { venta, comprobanteId, borrador, resumen }. No emite: se emite con POST /v1/invoices
POST /v1/mercadolibre/import invoice:write { dias } (1 a 90): trae a la bandeja las ventas de los últimos días, siempre sin emitir. Devuelve { revisadas, enBandeja }

Cada venta: { id, ordenes[], estado, problema, problemaTexto, fechaVenta, total, comprador, comprobanteId, notaCreditoId, facturaSubida, importada, prueba, actualizada }; el estado es uno de esperando_pago, para_revisar, facturada, con_problema, cancelada, cancelada_post_factura, ignorada. Lo que se crea en homologación o simulado va con prueba: true y en producción no se ve.

Errores: AS-9501 (no disponible en este servidor), AS-9502 (sin cuenta conectada), AS-9503 (no se pudo conectar), AS-9504 (cuenta ya vinculada a otro contribuyente), AS-9505 (reconectar), AS-9506 (falta configuración), AS-9507 (Mercado Libre no respondió), AS-9508 (la venta no existe), AS-9509 (acción no permitida en ese estado), AS-9510 (configuración inválida), AS-9511 (excepción de IVA inválida), AS-9512 (no se puede preparar la nota de crédito).

Fuera de la API de integración, Mercado Libre usa dos rutas públicas: GET /v1/mercadolibre/callback (vuelta de la autorización, protegida por un state firmado de un solo uso) y POST /v1/mercadolibre/notifications (avisos de ventas: siempre 200, no se les cree el cuerpo y solo encolan).

Solo consola

Estas rutas existen para la consola web y no se pueden usar con una API key (necesitan la sesión de una persona con el rol correspondiente):

  • Sesión: POST /v1/auth/login (con code si la persona activó la verificación en dos pasos: sin él responde 401 AS-2032; un código malo responde como una contraseña mala), logout, forgot, reset, password, invitation/accept, GET /v1/auth/me.
  • Verificación en dos pasos propia (opcional): GET /v1/auth/2fa (estado), POST /v1/auth/2fa/setup (contraseña → secreto y URI para el QR), POST /v1/auth/2fa/enable (código → 10 códigos de recuperación, se ven una vez), POST /v1/auth/2fa/disable y POST /v1/auth/2fa/recovery-codes (contraseña + código de la aplicación o de recuperación). Un código erróneo es 400 AS-2033.
  • Equipo: GET /v1/users, POST /v1/users/invite, PUT y DELETE /v1/users/{id}, POST /v1/users/{id}/reset-2fa (reinicia el segundo factor de otra persona; permiso team, sobre un Titular lo pide un Titular), POST /v1/users/{id}/resend (manda el enlace por correo; sin correo configurado solo devuelve el de una invitación pendiente, y sobre un Titular lo pide un Titular).
  • Perfiles de permisos: GET /v1/roles (roles de fábrica, perfiles propios y catálogo de permisos), POST /v1/roles, PUT y DELETE /v1/roles/{id}. Ver Roles y permisos.
  • Estudios con acceso (solo consola, permiso studio, solo el Titular de fábrica): GET /v1/studios (pedidos y accesos de esta cuenta), POST /v1/studios/{id}/accept (acepta; solo lectura) y DELETE /v1/studios/{id} (rechaza un pedido o revoca un acceso en el acto). Una clave de API recibe 403 AS-9804.
  • Portal del estudio (cookie propia, no sirve una clave de API ni la sesión de la consola): POST /v1/studio/clients/{tenantId}/enter abre la consola de un cliente con acceso activo en solo lectura y con permisos recortados (invoice:read y purchases:read) durante 30 minutos; sin acceso activo responde 404. Dentro de esa vista todo lo que no sea GET da 403 AS-2016 y el acceso se vuelve a comprobar en cada pedido (401 apenas se revoca).
  • Servicio contratado: GET /v1/billing (plan, vencimiento, próximo reinicio del cupo, pagos registrados y el estado del pago automático en suscripcion; permiso billing:read). Sigue disponible aunque la cuenta esté suspendida por falta de pago, para poder regularizarla. Ver Plan, cupo y pagos.
  • Elegir el plan antes del primer pago (permiso billing, solo cuentas registradas por su cuenta y planes publicados): PUT /v1/billing/plan con { planId }. Devuelve lo mismo que GET /v1/billing. 409 si ya hay un período pago o un pago automático activo.
  • Planes publicados (público, sin clave): GET /v1/public/plans. Precio, ciclo, cupo y qué incluye cada uno.
  • Monotributo y vencimientos (públicos, sin clave ni datos personales, con tope de pedidos por IP): GET /v1/public/monotributo/escalas devuelve la tabla de categorías que rige hoy (categoria, ingresosBrutos, cuotaServicios, cuotaBienes) y la próxima si ya está cargada. GET /v1/public/vencimientos?terminacion=3&condicion=monotributo&persona=humana&dias=90 devuelve los próximos vencimientos de ARCA para esa terminación de CUIT (terminacion de 0 a 9; condicion: monotributo, responsableInscripto o exento; persona: humana o sociedad; dias de 1 a 366, 90 por defecto). GET /v1/public/vencimientos.ics (mismos parámetros, sin dias) los devuelve como archivo de calendario iCalendar para agregarlo a Google Calendar, Outlook o el teléfono, o para suscribirse por dirección web. Las fechas las carga la plataforma desde el calendario de ARCA y ARCA las modifica seguido: confirmalas en su agenda. Un dato inválido responde 400 AS-9902; sin tabla cargada, 404 AS-9901.
  • Pago automático con Mercado Pago (permiso billing, solo sesión de la consola): POST /v1/billing/subscription devuelve { urlPago, estado } (el enlace de Mercado Pago donde la persona autoriza el pago; 409 si el servicio ya está pago por más de 7 días, no hay cobro activado o el plan no tiene precio) y DELETE /v1/billing/subscription lo cancela (el servicio sigue hasta el vencimiento ya pago).
  • Claves: GET, POST y DELETE /v1/api-keys. Las claves se crean y revocan desde la consola (Integraciones → API), nunca por una clave: así una clave filtrada no puede generar otras. La clave que la consola crea sola para su asistente integrado dura 2 horas, no aparece en esta lista y no cuenta para el tope de claves de tu plan.
  • PUT /v1/tenant/environment (ver arriba).

Hay además un grupo de rutas de administración (backoffice) que son del operador de la plataforma y no forman parte de la API de integración.