Guía para integradores
Dá de alta los CUITs de tus clientes y sus certificados por API, sin entrar al dashboard, y sabé en cada momento qué le falta hacer a cada uno en ARCA.
Si tu software factura en nombre de tus propios clientes —un sistema de gestión, un estudio contable, una plataforma—, cada contribuyente nuevo necesita su CUIT dado de alta y su certificado de ARCA cargado antes de poder emitir. Con estos endpoints hacés todo ese recorrido desde tu propio panel: ni vos ni tu cliente tienen que entrar a nuestro dashboard.
El modelo es el mismo que el del dashboard: un certificado por CUIT y por entorno, generado a partir de un CSR que armamos nosotros. La clave privada se genera de nuestro lado y queda guardada cifrada: nunca viaja, ni hacia vos ni hacia tu cliente.
Una vez que el CUIT está listo, emitís para él con la misma API key, mandando su número en representada.
El flujo completo
Tu sistema Tu cliente, en ARCA (con su Clave Fiscal)
────────── ─────────────────────────────────────────
1. POST /api/cuits
→ 201 con el CSR (csrPendiente.csrPem)
──── le mostrás el CSR ────▶
2. Crea el certificado pegando el CSR
y descarga el .crt
3. Autoriza los web services
(Administrador de Relaciones)
4. Da de alta un punto de venta
para Web Services
◀──── te pasa el .crt ────
5. POST /api/cuits/{cuit}/{environment}/certificado { "crtPem": "..." }
→ estado "vigente"
6. GET /api/cuits/{cuit}/{environment}
→ pasosPendientes vacío: ya puede emitir
(si figura algo, se lo mostrás y después
POST .../verificar cuando avise que lo hizo)Los pasos 2 a 4 ocurren dentro de ARCA y no se pueden automatizar: requieren la Clave Fiscal del contribuyente y ARCA no ofrece una API para eso. Lo que sí podés hacer es guiarlo con los textos de más abajo, que salen directo del campo pasosPendientes.
- Alta del CUIT.
POST /api/cuitscon el número, el entorno, un alias y la razón social. En la misma operación generamos el CSR y lo devolvemos encsrPendiente.csrPem. El CUIT queda en estadopendiente. - Tu cliente tramita el certificado en ARCA con ese CSR, y te devuelve el
.crtque ARCA le emitió. - Carga del certificado.
POST .../certificadocon{ "crtPem": "..." }. Lo validamos contra el CSR, lo activamos y —si ARCA responde— detectamos su punto de venta. El CUIT pasa avigente. - Lo que falte. Consultá el CUIT y, si
pasosPendientesno está vacío, mostrale a tu cliente el texto de cada paso. Cuando te avise que lo hizo,POST .../verificarvuelve a preguntarle a ARCA y actualiza la lista.
Si tu cliente ya tiene un certificado —porque venía usando otro proveedor—, saltea el CSR: subí su par con POST .../certificado enviando crtPem y keyPem. El CSR que generamos en el alta se cancela solo.
Pasos pendientes
Cada CUIT viene con pasosPendientes: la lista, ordenada por prioridad, de lo que falta para que pueda emitir sin avisos. Una lista vacía significa que no queda nada pendiente que conozcamos. Los textos de esta sección están pensados para que los copies a tu panel tal cual, o adaptados.
| Valor | Cuándo aparece | Quién lo resuelve |
|---|---|---|
generar_csr | El CUIT no tiene certificado ni CSR pendiente | Vos, por API |
cargar_certificado | Hay un CSR esperando el .crt de ARCA | Tu cliente en ARCA, y después vos por API |
renovar_certificado | El certificado vence en 30 días o menos, o ya venció | Vos por API, y después tu cliente en ARCA |
delegar_constancia | ARCA respondió que el certificado no está autorizado para la constancia de inscripción | Tu cliente en ARCA |
habilitar_punto_venta | ARCA no habilita el punto de venta guardado | Tu cliente en ARCA, o vos cambiando el ptoVta |
delegar_constancia y habilitar_punto_venta sólo aparecen cuando ARCA dijo que no. Si nunca se pudo verificar —por ejemplo, porque ARCA no respondía—, no figuran: no convertimos la falta de un dato en un paso pendiente.
generar_csr
El CSR se genera solo en el alta. Este paso aparece si esa generación falló, o si el CSR se canceló. Lo resolvés vos: POST .../csr y seguí con cargar_certificado.
cargar_certificado
Texto para tu cliente, en producción:
- Entrá a arca.gob.ar con tu Clave Fiscal.
- Abrí Administración de Certificados Digitales, elegí agregar un alias y pegá este CSR.
- Descargá el certificado (
.crt) que te devuelve ARCA y envianoslo.
En homologación el trámite es en el WSASS (autogestión de certificados de homologación): Crear certificado, pegar el CSR y descargar el .crt.
Cuando tengas el .crt, cargalo con POST .../certificado. Si el CUIT estaba en activo_renovando, el certificado anterior sigue funcionando hasta ese momento.
renovar_certificado
Los certificados de ARCA vencen. Iniciá la renovación con POST .../csr: el CUIT pasa a activo_renovando, sigue emitiendo con el certificado actual y te devolvemos un CSR nuevo para que tu cliente repita el trámite de cargar_certificado.
Para saber qué renovar sin recorrer toda la cuenta: GET /api/cuits?estado=por_vencer,vencido.
delegar_constancia
Sin este servicio no podemos leer del padrón el domicilio fiscal ni la razón social del contribuyente, y el comprobante impreso sale con el bloque del emisor incompleto. Texto para tu cliente:
- Entrá a arca.gob.ar con tu Clave Fiscal.
- Abrí Administrador de Relaciones de Clave Fiscal → Nueva Relación.
- Buscá el servicio
ws_sr_constancia_inscripcion(constancia de inscripción).- En Representante, elegí el computador fiscal «
{alias}» —el alias del certificado—, no una persona, y confirmá.
El alias es el certificado.subjectCn del CUIT. Cuando tu cliente te avise, llamá a POST .../verificar: si ARCA ya lo autoriza, el paso desaparece.
La delegación en ARCA es por servicio. Que el cliente ya factura (wsfe delegado) no significa que tenga delegada la constancia. Si además vas a usar otros servicios —wsfex para exportación, ws_sr_padron_a13 para consultas de padrón—, cada uno se delega igual. Ver El certificado no está autorizado en ARCA.
habilitar_punto_venta
El punto de venta guardado para el CUIT (ptoVta) no figura entre los que ARCA habilita para Web Services: la primera factura con ese número la va a rechazar. Texto para tu cliente:
- Entrá a arca.gob.ar con tu Clave Fiscal.
- Abrí Administración de Puntos de Venta y Domicilios y dá de alta un punto de venta con sistema de facturación Web Services.
El punto de venta que usás en Comprobantes en línea no sirve para facturar por API: son modalidades distintas y se declaran por separado.
Después tenés dos caminos: si tu cliente habilitó ese mismo número, POST .../verificar; si habilitó otro, fijalo con PATCH { "ptoVta": <número> }, o mandá { "ptoVta": null } para que lo resolvamos contra ARCA al emitir.
Operaciones disponibles
| Operación | Endpoint | Scope |
|---|---|---|
| Listar CUITs | GET /api/cuits | Cualquiera |
| Obtener un CUIT | GET /api/cuits/{cuit}/{environment} | Cualquiera |
| Dar de alta un CUIT | POST /api/cuits | read_write |
| Editar un CUIT | PATCH /api/cuits/{cuit}/{environment} | read_write |
| Dar de baja un CUIT | DELETE /api/cuits/{cuit}/{environment} | read_write |
| Generar el CSR | POST /api/cuits/{cuit}/{environment}/csr | read_write |
| Cancelar el CSR | DELETE /api/cuits/{cuit}/{environment}/csr | read_write |
| Cargar el certificado | POST /api/cuits/{cuit}/{environment}/certificado | read_write |
| Dar de baja el certificado | DELETE /api/cuits/{cuit}/{environment}/certificado | read_write |
| Reverificar contra ARCA | POST /api/cuits/{cuit}/{environment}/verificar | read_write |
El recurso se identifica por número de CUIT (11 dígitos, sin guiones) y entorno (homologacion o produccion), igual que representada al emitir: el mismo CUIT en los dos entornos son dos recursos distintos, cada uno con su certificado, su CSR y su punto de venta.
Las lecturas también están disponibles como tools del servidor MCP (cuits_listar, cuits_obtener), para que un agente pueda consultar qué le falta a cada CUIT.
No consume cuota
Nada de lo que hagas en /api/cuits descuenta comprobantes ni consultas de padrón, ni cuenta como consumo en el dashboard: tampoco la reverificación, aunque consulte a ARCA.
Lo que sí aplica es el cupo de CUITs de tu plan: si la cuenta ya lo completó, el alta responde 402. Dar de baja un CUIT libera su lugar.
Autenticación
Todos los endpoints requieren una API key válida en el header Authorization: Bearer <key>. Las escrituras requieren scope read_write; con una key de solo lectura responden 403. Ver Scopes de API key.
Errores
| Status | Descripción |
|---|---|
400 | El body o la ruta no pasaron la validación (CUIT o entorno con formato inválido, campo faltante, filtro desconocido) |
401 | API key ausente, inválida o revocada |
402 | La cuenta completó el cupo de CUITs de su plan (sólo en el alta) |
403 | La API key es de solo lectura (sólo en escrituras) |
404 | El CUIT no existe en ese entorno, es de otra cuenta o fue dado de baja |
409 | El estado del CUIT no admite la operación (alta duplicada, cargar el .crt sin CSR pendiente, verificar sin certificado) |
422 | El certificado o la clave se rechazaron: el request está bien armado, pero el material no sirve. Trae un code estable |
Todos los errores responden { "error": "<mensaje en español>" }, más los campos que se indican en cada caso.