RECE.APICOMPLOOK SISTEMAS
Referencia Errores

Autenticación

Hay dos autenticaciones distintas en juego: el token de RECE.API, que identifica a tu sistema ante la API, y el ticket de AFIP, que la API gestiona sola usando tu certificado. Esta página cubre la primera; la segunda casi nunca la vas a tocar.

Cómo funciona

Todos los endpoints requieren un token, salvo el registro, el login y los de monitor. El token se obtiene al registrarte o haciendo login, y se manda en cada request.

CategoríaRutasTokenConsume cuota
Públicas/api/auth/register, /api/auth/login, /swagger/**, /api/monitor/**NoNo
Token sin consumo/api/auth/token-infoSíNo
Token con consumoTodo el restoSíSí

Registrar un usuario

Crea la cuenta y devuelve el primer token.

POST /api/auth/register Sin token

Body

CampoTipoRequeridoDescripción
emailstringSíÚnico por usuario.
passwordstringSíContraseña de la cuenta.
companyNamestringNoNombre de la empresa, informativo.
requestsLimitintNoMáximo de requests del token. null = ilimitado.
json
{
  "email": "sistema@miempresa.com",
  "password": "MiPassword123",
  "companyName": "Mi Empresa SRL",
  "requestsLimit": 1000
}

Respuestas

json
// 200 OK
{ "ok": true, "token": "abc123XYZ...", "userId": 1, "message": null }

// 400 Bad Request
{ "ok": false, "token": null, "userId": null, "message": "El email ya esta registrado" }

Si email o password llegan vacíos, la respuesta es 400 con el mensaje "Email y contraseña son requeridos".

Iniciar sesión

Genera un token nuevo para un usuario existente.

POST /api/auth/login Sin token
json
{
  "email": "sistema@miempresa.com",
  "password": "MiPassword123",
  "requestsLimit": 500
}
Cada login crea un token nuevo

No reutiliza el anterior. Los tokens viejos siguen activos hasta que expiren o se desactiven. Si llamás a /login en cada arranque de tu aplicación, vas acumulando tokens vivos. Conviene obtener uno y guardarlo.

Enviar el token

Dos formas equivalentes. Elegí una y usala siempre:

http
# Opción A — header propio
X-Api-Token: abc123XYZ...

# Opción B — Bearer estándar
Authorization: Bearer abc123XYZ...

Un request completo:

http
POST /api/facturacion/emitir HTTP/1.1
Host: api.tudominio.com
Content-Type: application/json
X-Api-Token: abc123XYZ...

{ "ambiente": "homologacion", "puntoVenta": 1, ... }

Consultar el estado del token

Devuelve el consumo acumulado. No descuenta de la cuota, así que podés llamarlo libremente.

GET /api/auth/token-info Token
json
{
  "ok": true,
  "message": null,
  "requestsUsed": 145,
  "requestsLimit": 1000,
  "requestsRemaining": 855,
  "email": "sistema@miempresa.com",
  "companyName": "Mi Empresa SRL",
  "createdAt": "2026-01-15T10:00:00Z",
  "expiresAt": null,
  "isActive": true
}

requestsRemaining: null significa que el token no tiene límite.

Límite de requests

Cada token lleva un contador propio:

  • requestsLimit: null o 0 — sin límite.
  • Cada request autenticado exitoso suma 1 al contador.
  • Los rechazados con 401 o 429 no se cuentan.
  • GET /api/auth/token-info no cuenta.

Al agotarse, todos los endpoints devuelven:

json
// 429 Too Many Requests
{ "ok": false, "message": "Limite de consultas alcanzado" }

Para reponer el límite, hacé un nuevo login con el requestsLimit que necesites.

Errores de autenticación

CódigoMensajeCausaSolución
401Token requeridoNo se envió ningún header de autenticación.Agregar X-Api-Token o Authorization.
401Token inválido o expiradoEl token no existe, venció o el usuario está inactivo.Hacer login para obtener uno nuevo.
429Limite de consultas alcanzadoSe agotó el requestsLimit.Login con un límite mayor.

El cuerpo del error siempre tiene la misma forma:

json
{ "ok": false, "message": "Token requerido" }

Login WSAA de AFIP

La API obtiene y renueva los tickets de AFIP automáticamente. Estos endpoints existen para casos donde necesitás el ticket crudo — por ejemplo, para llamar a un web service de AFIP que la API todavía no expone.

POST /api/auth/afip/login Token
json
{
  "ambiente": "homologacion",
  "servicio": "wsfe",
  "cuit": "20409378472"
}

Valores válidos de servicio: wsfe, wsfex, wsremcarne.

json
{
  "success": true,
  "token": "PD94bWwgdmVyc2lvb...",
  "sign": "ABC123...",
  "generationTime": "2026-08-20T14:00:00",
  "expirationTime": "2026-08-21T02:00:00",
  "service": "wsfe",
  "uniqueId": 12,
  "cuit": "20409378472",
  "ambiente": "homologacion",
  "errorMessage": null
}

Este endpoint sí valida el ambiente: si ambiente no es exactamente homologacion o produccion, devuelve 400. Es el único lugar de la API donde se hace esa validación.

Vigencia y caché del ticket

AFIP emite tickets de acceso con una vigencia típica de 12 horas. RECE.API los guarda en memoria y en disco, con clave por combinación de ambiente + servicio + CUIT, y los renueva unos minutos antes de que venzan. La renovación es perezosa: se dispara cuando llega un request que necesita el ticket.

El reloj del servidor importa

AFIP rechaza los pedidos de ticket cuya marca de tiempo esté demasiado adelantada respecto de su propio reloj. Si el servidor se desfasa más de unos minutos, los logins empiezan a fallar sin causa aparente. Mantené NTP sincronizado.

Invalidar el caché

Fuerza a pedir un ticket nuevo en la próxima llamada. Útil después de reemplazar un certificado.

DELETE /api/auth/afip/invalidar-cache Token
bash
curl -X DELETE "https://api.tudominio.com/api/auth/afip/invalidar-cache?ambiente=homologacion&servicio=wsfe&cuit=20409378472" \
  -H "X-Api-Token: abc123XYZ..."
El parámetro cuit no es opcional en la práctica

Si lo omitís, el endpoint responde 200 pero no invalida nada: la clave de caché que arma no coincide con ninguna entrada real. Mandá siempre los tres parámetros.

Estado del servicio

GET /api/auth/afip/health Token
json
{
  "status": "healthy",
  "timestamp": "2026-08-20T14:00:00Z",
  "service": "RECE.API - WSAA Authentication"
}
RECE.API — CompLook Sistemas Documentación de integración