// Descripción general

Score Express

El endpoint Express devuelve en tiempo real el score crediticio de una persona a partir de su CUIT/CUIL. Cubre la población completa del registro CENDEU/BCRA — el mercado formal de crédito argentino.

Endpoint

GET https://api.score.findo.com.ar/v1/express
🧪
Ambiente de testing (QA)
Para pruebas e integración, usá el endpoint de QA:
https://qa.api.score.findo.com.ar/v1/express

Autenticación

🔐
OAuth 2.0 · Client Credentials
Antes de llamar al endpoint Express, debés obtener un access token usando tus credenciales de cliente. El token se incluye luego en cada request como Authorization: Bearer <token>. Expira a las 24h.
Paso 1 — Obtener el token
POST · Token endpoint
curl --location \
  'https://api.score.findo.com.ar/v1/oauth/token' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=client_credentials' \
  --data-urlencode 'client_id=<tu_client_id>' \
  --data-urlencode 'client_secret=<tu_client_secret>'
ParámetroValorDescripción
grant_type client_credentials Flujo OAuth 2.0 para integración server-to-server.
client_id string Identificador de cliente provisto por Findo.
client_secret string Secret de cliente provisto por Findo. Nunca exponerlo en el frontend.
Respuesta
JSON
{
  "access_token": "eyJhbGciOiAiUlMyNTYi...",
  "token_type":   "Bearer",
  "expires_in":   86400  // 24 horas en segundos
}
Paso 2 — Usar el token en cada request
JWT Payload (referencia)
isshttps://oauth.findo.com/
audhttps://score.findo.com/
expiat + 86400 s (+24h)
azptu client_id
algRS256

Parámetros de Query

NombreTipoReq.Descripción
legal_id string CUIT o CUIL sin guiones ni espacios.
Ej: 20340102034

Headers de Request

HeaderDescripciónReq.
Content-Type application/json
Authorization Token JWT firmado RS256. Formato: Bearer <token>. Expira cada 24h.
CLIENT_ID Identificador del cliente. Coincide con azp del JWT.
<tu_client_id>

Ejemplo de Request

cURL
curl --location \
  'https://api.score.findo.com.ar/v1/express?legal_id=20340102034' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <token>' \
  --header 'CLIENT_ID: <tu_client_id>'
JavaScript · fetch
const res = await fetch(
  `https://api.score.findo.com.ar/v1/express?legal_id=${legalId}`,
  {
    method: 'GET',
    headers: {
      'Content-Type':  'application/json',
      'Authorization': `Bearer ${jwtToken}`,
      'CLIENT_ID':     '<tu_client_id>',
    },
  }
);
const data = await res.json();

Respuestas

200 OK
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
500 Server Error

Esquema de la Respuesta 200

CampoTipoDescripción
request_id string Identificador único de la request para trazabilidad.
findo_score integer Score de 0 a 100. Mayor valor → mayor capacidad de pago.
estimated_income float Ingreso estimado en escala relativa (no en pesos).
individual_data_report object Historial financiero por ventanas de 1–24 meses: entidades, montos y variaciones.
positive_report object Deudas en situación 1 (al día): entidades, montos, situación máxima.
negative_report object Deudas en situación 3–5 (mora). Vacío {} si no hay mora.

Convención de nombres de campos

_ent_N
Cantidad de entidades informantes en los últimos N meses
_amount_total_due_N
Monto total adeudado acumulado en los últimos N meses
_variation_…_between_A_B
Variación % entre períodos A y B. Puede ser null sin datos previos
_max_sit_N
Situación máxima en N meses (1 = al día · 5 = incobrable)

Ejemplos simulados ilustrativos de respuesta

Score 82 · Sin mora
Score 17 · Con mora
Score 65 · Mixto
{
  "request_id":          "e3b40b61-2616-42ad-8970-8a4c04d9cbd2",
  "findo_score":          82,
  "estimated_income":     8.0,
  "individual_data_report": {
    "finantial_history_number_ent_1":                       1.0,
    "finantial_history_amount_total_due_3":                 1410.0,
    "finantial_history_amount_total_due_6":                 1899.0,
    "finantial_history_amount_total_due_12":                2650.0,
    "finantial_history_variation_amount_total_due_between_3_1": -10.49
    // ... demás variaciones por período
  },
  "positive_report": {
    "finantial_history_number_ent_sit1_1": 1.0,
    "finantial_history_amount_sit1_1":     1262.0,
    "finantial_history_max_sit_1":         1.0  // al día en todos los períodos
  },
  "negative_report": {}  // sin mora
}
// Quick start

Integrá en minutos

Este script de Python cubre el flujo completo: obtiene el token OAuth 2.0 con tus credenciales y consulta el score Express de un CUIL/CUIT. Podés usarlo como punto de partida para tu integración.

Requisitos
RequisitoDetalle
Python3.8 o superior
requestspip install requests
FINDO_CLIENT_IDVariable de entorno con tu Client ID
PROD_CLIENT_SECRETVariable de entorno con tu Client Secret. Nunca hardcodear.
Variables de entorno
bash
export FINDO_BASE_URL="https://api.score.findo.com.ar"
export FINDO_CLIENT_ID="tu_client_id"
export PROD_CLIENT_SECRET="tu_client_secret"
example.py
Python
import os
import sys
import requests

BASE_URL      = os.getenv("FINDO_BASE_URL", "https://api.score.findo.com.ar")
CLIENT_ID     = os.getenv("FINDO_CLIENT_ID")
CLIENT_SECRET = os.getenv("PROD_CLIENT_SECRET")


def validate_cuil(cuil):
    if not cuil.isdigit() or len(cuil) not in (10, 11):
        raise SystemExit("Invalid CUIL. Use digits only and a length of 10 or 11.")


def get_access_token():
    if not CLIENT_SECRET:
        raise SystemExit("Missing env var: PROD_CLIENT_SECRET")

    response = requests.post(
        f"{BASE_URL}/v1/oauth/token",
        headers={"Content-Type": "application/x-www-form-urlencoded"},
        data={"client_id": CLIENT_ID, "client_secret": CLIENT_SECRET},
    )
    print("Token status:", response.status_code)
    print("Token body:",   response.text)

    response.raise_for_status()

    access_token = response.json().get("access_token")
    if not access_token:
        raise SystemExit("No access_token in response")

    return access_token


def get_express_score(access_token, cuil, phone_number=None):
    headers = {
        "Content-Type":  "application/json",
        "Authorization": access_token,
        "CLIENT_ID":     CLIENT_ID,
    }
    params = {"legal_id": cuil}
    if phone_number:
        params["phone_number"] = phone_number

    response = requests.get(
        f"{BASE_URL}/v1/express", headers=headers, params=params
    )
    print("Express status:", response.status_code)
    print("Express body:",   response.text)
    return response


if __name__ == "__main__":
    if len(sys.argv) < 2:
        raise SystemExit("Usage: python example.py <cuil> [phone_number]")

    cuil         = sys.argv[1]
    phone_number = sys.argv[2] if len(sys.argv) > 2 else None

    validate_cuil(cuil)
    print("Getting access token...")
    token = get_access_token()
    print("Getting express score...")
    get_express_score(token, cuil, phone_number)
    print("Express score obtained successfully")
Ejecución
bash
# Solo con CUIL
python example.py 20340102034

# Con CUIL y teléfono (opcional)
python example.py 20340102034 543413155042