Errores
Los errores llegan de dos lugares distintos: los que genera RECE.API antes de contactar a AFIP, y los que devuelve AFIP al procesar el comprobante. Saber cuál es cuál acorta mucho el diagnóstico.
Dónde mirar
El código HTTP no alcanza. Un rechazo de AFIP puede llegar con 200 y
success: false en el cuerpo. Revisá siempre estos tres campos:
{
"success": false,
"errorMessage": "[10016] El punto de venta 9 no esta dado de alta en AFIP",
"errores": [
{ "codigo": 10016, "mensaje": "El punto de venta 9 no esta dado de alta en AFIP" }
],
"observaciones": []
}
| Campo | Qué significa |
|---|---|
success | Si la operación completó. Es lo primero a chequear. |
errorMessage | Resumen legible. Con formato [código] mensaje; varios errores van separados por punto y coma. |
errores[] | Detalle estructurado. El comprobante fue rechazado. |
observaciones[] | AFIP autorizó igual, pero con reparos. El CAE es válido. |
Códigos HTTP de la API
| Código | Significado | Causa habitual |
|---|---|---|
200 | Procesado | Revisá success: puede contener un rechazo. |
400 | Bad Request | Validación previa fallida, JSON malformado o error de negocio de AFIP. |
401 | Unauthorized | Token ausente, inválido o expirado. |
404 | Not Found | Comprobante, empresa o certificado inexistente. |
429 | Too Many Requests | Se agotó el requestsLimit del token. |
500 | Internal Server Error | Excepción no controlada. En CAEA es el código habitual ante fallos. |
503 | Service Unavailable | Solo en /api/facturacion/ping: AFIP no responde. |
Validaciones previas
Se rechazan con 400 antes de llamar a AFIP, así que no consumen tiempo de red:
| Endpoint | Condición que rechaza |
|---|---|
/api/facturacion/emitir | puntoVenta <= 0, tipoComprobante <= 0, importeTotal <= 0 |
/api/facturacionexportacion/autorizar | Lo mismo, más tipoComprobante fuera de [19, 21] e items vacío |
/api/auth/afip/login | ambiente distinto de homologacion o produccion; servicio vacío |
/api/RemitoCarnico/* | cuit vacío |
/api/auth/register, /login | email o password vacíos |
Códigos de error de AFIP
| Código | Descripción | Cómo resolverlo |
|---|---|---|
600 |
CUIT no habilitado para operar | En homologación, usá el CUIT de prueba 20409378472. En producción, verificá el alta del contribuyente en el servicio. |
1502 |
Token expirado | Invalidá el caché de WSAA y reintentá. Si se repite, revisá el reloj del servidor. |
10004 |
Datos de IVA incompletos | Cada entrada de ivas[] necesita id, baseImponible e importe. |
10015 |
Fecha del comprobante inválida | AFIP acepta ±5 días respecto de la fecha actual. Usá la fecha de hoy. |
10016 |
Punto de venta no dado de alta | Consultá puntos de venta y usá uno habilitado. Verificá también que el emisionTipo sea el correcto. |
10017 |
Tipo de comprobante no válido | El tipo no corresponde a la condición fiscal del emisor. Un monotributista no puede emitir factura A. |
10048 |
Los importes no coinciden | Verificá que importeTotal sea la suma exacta de neto, no gravado, exento, IVA y tributos. Redondeá a 2 decimales. |
2030 |
Punto de venta no habilitado para ese tipo | Típico al emitir FCEYM con un punto de venta común. Habilitalo en AFIP para ese tipo. |
10143 |
Receptor no admite FCEYM | El receptor también es MiPyME: emitir factura común. |
10144 |
Emisor no habilitado para FCEYM | El CUIT no está inscripto como MiPyME. |
10145 |
CBU o alias no informado | Agregar el opcional 2101 o 2102. |
10146 |
Condición de venta no informada | Agregar el opcional 22. |
10147 |
Falta fecha de vencimiento de pago | Incluir fechaVencimientoPago. |
10148 |
Tipo de documento inválido en FCEYM | Usar tipoDocumento: 80 (CUIT). |
Los códigos de AFIP cambian con las resoluciones. Si te encontrás con uno que no está acá, el mensaje que devuelve errores[] suele ser suficientemente descriptivo, y los manuales del desarrollador de cada web service tienen la lista completa.
Problemas frecuentes
"No se pudo obtener autenticación"
El certificado no se pudo usar. En orden de probabilidad:
- No está autorizado en AFIP para ese web service. Es la causa más común. La autorización es por servicio:
wsfe,wsfexywsremcarnese habilitan por separado. - Venció. Verificalo con el diagnóstico de certificado.
- La contraseña del
.pfxes incorrecta. - El archivo no incluye la clave privada. Al exportarlo desde el navegador o desde OpenSSL, hay que incluirla explícitamente.
- El reloj del servidor está desfasado respecto del de AFIP.
Para aislarlo, probá primero la autenticación sola:
curl "https://api.tudominio.com/api/monitor/empresa/30712345678/ping-wsaa?ambiente=produccion"
El comprobante se emitió pero no recibí el CAE
Pasa cuando la conexión se corta después de que AFIP autorizó. El comprobante existe y volver a emitir generaría un duplicado.
La forma de recuperarlo es reintentar la misma llamada enviando el numeroComprobante
explícito: si ese número ya tiene CAE, la API lo devuelve con esConsultaExistente: true
en vez de emitir de nuevo. Alternativamente, consultá el comprobante con
/api/facturacion/consultar.
Una emisión encadena varias llamadas a AFIP y, en el peor caso, puede tardar bastante. Si el timeout de tu HTTP client es corto, vas a abortar mientras la API sigue procesando, y el CAE queda emitido del lado de AFIP sin que tu sistema lo registre. Poné un timeout holgado y, ante un corte, consultá antes de reintentar.
Saltos de numeración
AFIP exige numeración correlativa. Si tu sistema lleva su propio contador y se desincroniza, vas a recibir
rechazos. La respuesta incluye numeroEsperado con el número que correspondía según el último
autorizado. Consultá el último número antes de emitir.
"Input string was not in a correct format"
Un problema de formato numérico. AFIP espera punto decimal (1210.00), no coma. Enviá los
importes como números JSON, no como strings: "importeTotal": 1210.00, nunca
"importeTotal": "1210,00".
Errores de comunicación sin causa aparente
Si un comprobante falla de forma inexplicable y otros similares pasan, revisá los campos de texto libre.
tributos[].descripcion, opcionales[].valor y los campos de cliente en WSFEX se
insertan en el XML sin escapar: un & en una razón social rompe el mensaje. Sanitizá esos
campos antes de enviarlos.
Emití en producción y aparece en homologación
Revisá el valor exacto de ambiente. Cualquier cosa que no sea exactamente
produccion — un "prod", un acento de más, un espacio — resuelve silenciosamente a
homologación y devuelve un CAE que parece válido pero no tiene efecto fiscal.
Checklist de diagnóstico
Antes de escalar un problema, verificá:
| Verificar | Cómo |
|---|---|
| El token es válido y tiene cuota | GET /api/auth/token-info |
| El certificado está vigente | GET /api/empresas/{cuit}/certificado/diagnostico |
| El certificado autentica ante AFIP | GET /api/monitor/empresa/{cuit}/ping-wsaa |
| AFIP está operativo | GET /api/facturacion/ping |
| El punto de venta está habilitado | POST /api/facturacion/parametros/puntos-venta |
| El número no salta | POST /api/facturacion/ultimo-numero |
| Los importes cierran | Total = neto + no gravado + exento + IVA + tributos |
| La fecha está en rango | ±5 días respecto de hoy |
| El ambiente es el correcto | Comparar el string exacto contra produccion |
| Errores recientes del servicio | GET /api/monitor/errores?limite=20 |
Reportar un problema
Si después del checklist el error sigue, para poder ayudarte hacen falta:
- El request completo, con la contraseña del certificado y el token censurados.
- La respuesta completa, incluidos
errores[]yobservaciones[]. - El ambiente y el CUIT emisor.
- La fecha y hora aproximadas, para cruzar contra los logs del servidor.
Ni el .pfx, ni su Base64, ni la contraseña, ni un token de API completo. Ninguna de esas cosas es necesaria para diagnosticar un error de emisión.