RECE.APICOMPLOOK SISTEMAS
Referencia Errores

Empresas y certificados

RECE.API es multi-empresa: podés operar varios CUIT desde la misma instalación, cada uno con su certificado por ambiente. Esta página cubre el alta de empresas y la gestión de certificados digitales.

Cómo se resuelve el certificado

En cada emisión, la API busca el certificado que corresponde a la combinación de CUIT + ambiente. El mismo CUIT puede tener dos certificados distintos, uno de homologación y otro de producción, y se elige según el campo ambiente del request.

flujo
Request con cuit + ambiente
      │
      ├─ 1. Certificado activo en la base de datos para ese CUIT y ambiente
      │
      └─ 2. Si no hay: archivo .pfx configurado en el servidor

Listar empresas

GET /api/empresas Token

Devuelve las empresas definidas en la configuración del servidor.

json
[
  {
    "cuit": "30712345678",
    "razonSocial": "Mi Empresa SRL",
    "ambiente": "Homologacion",
    "activa": true,
    "tieneCertificado": true
  }
]
Dos endpoints parecidos que devuelven cosas distintas

GET /api/empresas lee del archivo de configuración; GET /api/empresas/db lee de la base de datos. No son intercambiables. Además, tieneCertificado solo indica que hay una ruta configurada: no verifica que el archivo exista ni que el certificado sea válido. Para eso está el diagnóstico.

GET /api/empresas/{cuit} Token

Una empresa puntual. Acepta ?ambiente=, por defecto homologacion. Devuelve 404 si no existe.

GET /api/empresas/por-defecto Token

El CUIT que se usa cuando un request no especifica cuit.

Subir un certificado

POST /api/empresas/{cuit}/certificado Token

El certificado se guarda en la base y queda activo para ese CUIT y ambiente.

CampoTipoReq.Descripción
ambientestringNoPor defecto "homologacion".
razonSocialstringSíNombre de la empresa.
certificadoBase64stringSíEl .pfx o .p12 codificado en Base64.
passwordstringNoClave del certificado.

Convertir el certificado a Base64

powershell
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\certs\produccion.pfx"))
bash
base64 -w 0 produccion.pfx
csharp
var bytes  = File.ReadAllBytes("produccion.pfx");
var base64 = Convert.ToBase64String(bytes);

Respuesta

json
{
  "ok": true,
  "id": 3,
  "message": "Certificado guardado correctamente en base de datos",
  "venceEn": "15/04/2027",
  "diasRestantes": 455,
  "advertencia": null
}
  • Si el certificado vence en menos de 30 días, advertencia trae el aviso.
  • Si ya venció, la respuesta es 400 y no se guarda.
  • Si el archivo no contiene la clave privada, la carga falla: exportá el .pfx incluyéndola.
La contraseña viaja en el cuerpo del request

Usá siempre HTTPS para este endpoint. La clave del certificado va en texto plano dentro del JSON y queda almacenada en la base de datos sin cifrar. Tratá el acceso a este endpoint y a la base con el mismo cuidado que al archivo .pfx original.

Listar certificados

GET /api/empresas/{cuit}/certificados Token
json
[
  {
    "id": 3,
    "cuit": "30712345678",
    "ambiente": "produccion",
    "razonSocial": "Mi Empresa SRL",
    "esActivo": true,
    "creadoEn": "2026-01-15T12:00:00Z",
    "venceEn": "2027-04-15T00:00:00Z",
    "tamanoBytes": 4096,
    "diasHastaVencimiento": 455,
    "estadoVigencia": "VIGENTE"
  }
]
estadoVigenciaSignificado
VIGENTEMás de 30 días para vencer.
POR VENCERVence en menos de 30 días. Momento de renovarlo.
VENCIDOYa expiró. Las emisiones van a fallar.
Sin fechaNo se registró fecha de vencimiento.

Diagnóstico de certificado

GET /api/empresas/{cuit}/certificado/diagnostico Token

La consulta a hacer cuando una emisión falla por autenticación. Verifica que el certificado exista, tenga clave privada y esté vigente.

bash
curl "https://api.tudominio.com/api/empresas/30712345678/certificado/diagnostico?ambiente=produccion" \
  -H "X-Api-Token: abc123XYZ..."

Devuelve 404 si no hay empresa para ese CUIT, y 500 si el certificado no se puede cargar.

Desactivar un certificado

DELETE /api/empresas/{cuit}/certificado/{id} Token
json
{ "ok": true, "message": "Certificado desactivado" }

No borra el registro: lo marca como inactivo. Para renovar un certificado, subí el nuevo y desactivá el anterior; conviene además invalidar el caché de WSAA para que los tickets viejos no se sigan usando.


Empresas en base de datos

Aparte de las empresas de configuración, existe un registro de empresas en la base con parámetros adicionales de integración.

GET /api/empresas/db Token
POST /api/empresas/db Token
PUT /api/empresas/db/{id} Token
DELETE /api/empresas/db/{id} Token
json
{
  "nombre": "Mi Empresa SRL",
  "cuit": "30712345678",
  "ambiente": "produccion",
  "color": "#0078D4",
  "activa": true,
  "dbTipo": "SQL",
  "dbConnectionString": "Server=192.168.1.1;Database=ERP;User Id=usuario;Password=...;",
  "dbPrefijoTablas": "IV_",
  "monitorHabilitado": true,
  "monitorIntervaloSegundos": 30,
  "monitorLoteTamano": 10,
  "monitorValidarNumeracion": true,
  "monitorModoDebug": false
}
GET /api/empresas/db devuelve cadenas de conexión

La respuesta incluye dbConnectionString en texto plano, con usuario y contraseña de la base del ERP. Cualquier portador de un token válido puede leerla. Si no necesitás este endpoint para tu integración, no lo uses; y si lo usás, restringí quién tiene tokens.

Los campos monitor* y db* aplican solo a instalaciones que usan el componente de monitoreo automático sobre la base de un ERP. Si te integrás directamente contra la API, no te afectan.

RECE.API — CompLook Sistemas Documentación de integración