Certificado propio (modo contador)
Esta guía es para el modo contador y el autoservicio. Si solo facturás para tu propio CUIT sin certificado, no la necesitás: usá el modo plataforma.
El servidor siempre genera la clave privada y la guarda cifrada. Nunca sale de Berlinesa y no hay forma de subir una clave propia. El alta tiene dos pasos, con un trámite en ARCA en el medio.
1. Pedir el CSR
El CSR sale con el CUIT de tu perfil, así que primero cargalo si todavía no lo hiciste:
curl -X PATCH "$API_URL/users/me" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "cuit": "20111111112" }'
curl -X POST "$API_URL/credentials/csr" -H "Authorization: Bearer $TOKEN"
{
"id": "8c1d…",
"csr_pem": "-----BEGIN CERTIFICATE REQUEST-----\n…\n-----END CERTIFICATE REQUEST-----\n",
"status": "PENDING_CERT"
}
Guardá el id. En este paso también se crea tu CUIT propio como represented CUIT (is_self: true).
2. Obtener el certificado en ARCA
Con tu Clave Fiscal (nivel 3), en el Administrador de Certificados Digitales de ARCA:
- Creá un DN nuevo. El nombre simbólico solo admite letras y números.
- Pegá el
csr_pemcompleto, incluidas las líneasBEGINyEND. - ARCA devuelve el certificado en formato PEM (
-----BEGIN CERTIFICATE-----). Copialo entero.
Después, autorizá ese certificado a usar el servicio de Facturación Electrónica para cada CUIT que vaya a facturar con él: el tuyo en autoservicio, o el de cada cliente en modo contador.
La navegación del sitio de ARCA cambia seguido y el trámite difiere entre homologación y producción. La referencia oficial está en la documentación de ARCA.
3. Completar la credential
curl -X POST "$API_URL/credentials/<id>/certificate" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n --rawfile cert certificado.crt '{cert_pem: $cert}')"
Usá jq (o tu lenguaje) para armar el JSON: el PEM tiene saltos de línea que hay que escapar. Si todo está bien, la credential pasa a ACTIVE.
4. Agregar clientes (modo contador)
Cada cliente le delega Facturación Electrónica a tu CUIT en ARCA y habilita un punto de venta para facturar por sistema. Después lo registrás:
curl -X POST "$API_URL/represented-cuits" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"credential_id": "<id de la credential>",
"cuit": "30712345678",
"label": "Cliente SA",
"rg2904_adherent": false
}'
La API registra el CUIT pero no puede verificar que la delegación exista en ARCA. Si falta, el primer comprobante vuelve REJECTED con un error de code 600 en provider_errors.
Desde acá, facturás en nombre del cliente mandando su represented_cuit_id en POST /invoices.
Errores frecuentes
| Error | Causa |
|---|---|
400 "El certificado no corresponde a la clave generada por este sistema" | El .crt no es el de este CSR. ¿Pediste un CSR nuevo sin querer? |
400 "El PEM del certificado no es válido" | El PEM está cortado o mal escapado. |
409 "La credential ya tiene un certificado activo" | Esa credential ya se completó. |
403 "La credential expiró" / "fue revocada" | El certificado venció o se revocó con DELETE /credentials/{id}. Pedí uno nuevo. |
Comprobante REJECTED con provider_errors[].code 600 | Falta la delegación en ARCA para ese CUIT, o no incluye este tipo de comprobante. |
Comprobante REJECTED por el punto de venta | El CUIT no tiene ese punto de venta habilitado para facturar por sistema. |
500 con code 50001044 en todos los comprobantes de una credential recién completada | Revisá que el certificado sea el que emitió ARCA para este ambiente (homologación y producción usan certificados distintos). |
Los code de cada error están en el catálogo de errores.