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 recibe403. - 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) oconfig:webhooks(webhooks). Mercado Libre pideconfig:mercadolibre(incluido enconfig, nunca en una clave a medida) para conectar y configurar, yinvoice:read/invoice:writepara 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) opurchases:write(importar, editar, marcar pagos y notas; incluyepurchases: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(concodesi la persona activó la verificación en dos pasos: sin él responde401AS-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/disableyPOST /v1/auth/2fa/recovery-codes(contraseña + código de la aplicación o de recuperación). Un código erróneo es400AS-2033. - Equipo:
GET /v1/users,POST /v1/users/invite,PUTyDELETE /v1/users/{id},POST /v1/users/{id}/reset-2fa(reinicia el segundo factor de otra persona; permisoteam, 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,PUTyDELETE /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) yDELETE /v1/studios/{id}(rechaza un pedido o revoca un acceso en el acto). Una clave de API recibe403AS-9804. - Portal del estudio (cookie propia, no sirve una clave de API ni la sesión de la consola):
POST /v1/studio/clients/{tenantId}/enterabre la consola de un cliente con acceso activo en solo lectura y con permisos recortados (invoice:readypurchases:read) durante 30 minutos; sin acceso activo responde404. Dentro de esa vista todo lo que no seaGETda403AS-2016y el acceso se vuelve a comprobar en cada pedido (401apenas se revoca). - Servicio contratado:
GET /v1/billing(plan, vencimiento, próximo reinicio del cupo, pagos registrados y el estado del pago automático ensuscripcion; permisobilling: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/plancon{ planId }. Devuelve lo mismo queGET /v1/billing.409si 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/escalasdevuelve 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=90devuelve los próximos vencimientos de ARCA para esa terminación de CUIT (terminacionde 0 a 9;condicion:monotributo,responsableInscriptooexento;persona:humanaosociedad;diasde 1 a 366, 90 por defecto).GET /v1/public/vencimientos.ics(mismos parámetros, sindias) 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 responde400AS-9902; sin tabla cargada,404AS-9901. - Pago automático con Mercado Pago (permiso
billing, solo sesión de la consola):POST /v1/billing/subscriptiondevuelve{ urlPago, estado }(el enlace de Mercado Pago donde la persona autoriza el pago;409si el servicio ya está pago por más de 7 días, no hay cobro activado o el plan no tiene precio) yDELETE /v1/billing/subscriptionlo cancela (el servicio sigue hasta el vencimiento ya pago). - Claves:
GET,POSTyDELETE /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.