Skip to content

Fuentes ​

La API resuelve identidad combinando varias fuentes. Cada fuente aporta una dimensión distinta del sujeto y llega siempre como un payload versionado con su schemaRef: el conocimiento propio de esa fuente, sin deformar.

Hay dos maneras de consumirlas, y las dos devuelven exactamente los mismos payloads:

Person SearchConsulta por fuente
Pregunta¿Quién es este sujeto?¿Qué dice esta fuente?
FuentesLas que decide el modeloLa que vos elegís
EndpointPOST /api/v1/person-search/searchPOST /api/v1/sources/{source}/query
ResultadoSujetos resueltos con todas sus dimensionesSujetos con una dimensión: la de esa fuente
Precio1 consulta del productoTarifa de la fuente (más barata)

Usá Person Search cuando querés resolver identidad; usá la consulta por fuente cuando ya sabés a qué registro querés preguntarle y no querés pagar (ni esperar) por lo demás.

Cada fuente tiene su página con lo que trae, sus claves y su payload:

FuenteSlugModoClavesPayloadScope
IGJ · Registro societarioigjLOCALcuit, nameigj.company.v1provider:igj
ARCA · Padrón fiscalarcaLOCALcuit, namearca.padron.v1provider:arca
BCRA · Central de DeudoresbcraLIVEcuit (obligatorio)bcra.credit.v1provider:bcra
InformeLegal · PersonasinformelegalLIVEcuit (obligatorio)informelegal.persona.v1provider:informelegal

Modo dice de dónde sale el dato:

  • LOCAL — réplica propia versionada del registro. Respuesta rápida y estable; la frescura depende del último ciclo de ingesta.
  • LIVE — consulta en vivo al organismo en el momento del request. Máxima frescura, mayor latencia y sujeta a la disponibilidad del origen (si el origen falla, la respuesta viene con partial: true).

Descubrir el catálogo desde la API ​

El mismo catálogo está disponible como endpoint, con un dato que la documentación no puede darte: si tu API Key puede usar cada fuente hoy.

bash
curl https://tu-host/api/v1/sources \
  -H "Authorization: Bearer ilk_live_xxx"
json
{
  "sources": [
    {
      "source": "igj",
      "name": "IGJ · Registro societario",
      "description": "Sociedades inscriptas en la Inspección General de Justicia…",
      "mode": "LOCAL",
      "payloadSchemaRef": "igj.company.v1",
      "supportedKeys": ["cuit", "name"],
      "requiredKeys": [],
      "requiredScopes": ["provider:igj"],
      "authorized": true,
      "price": { "amount": 0.25, "currency": "USD" }
    }
  ]
}
CampoSignificado
sourceSlug que va en la ruta de la consulta.
modeLOCAL (réplica) o LIVE (consulta al origen).
payloadSchemaRefForma del data que vas a recibir.
supportedKeysClaves que la fuente sabe resolver.
requiredKeysClaves sin las cuales la consulta no se puede ejecutar (400).
requiredScopesScopes que tu key necesita, además de sources:read.
authorizedSi tu key puede consultarla hoy.
pricePrecio comercial por consulta a esa fuente.

El catálogo es metadata: no factura ni consume cuota. Requiere el scope sources:read.

GETProbar el catálogo

Consultar una fuente ​

bash
curl -X POST https://tu-host/api/v1/sources/igj/query \
  -H "Authorization: Bearer ilk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{ "keys": { "cuit": "30111111119" } }'
CampoReq.Descripción
keyssíClaves de búsqueda. Al menos una; deben estar entre las supportedKeys de la fuente.
entityTypenoHint de clase (PERSON). Si se omite, el motor resuelve NATURAL_PERSON/LEGAL_ENTITY.
POSTProbar la consulta por fuente

La respuesta usa el mismo envelope que Person Search, más el source consultado:

json
{
  "source": "igj",
  "queryId": "dq_01J0000000000000000000EXMP",
  "resolvedEntityType": "LEGAL_ENTITY",
  "subjects": [
    {
      "resolvedEntityType": "LEGAL_ENTITY",
      "identity": {
        "identifiers": [{ "type": "CUIT", "value": "30111111119", "country": "AR" }],
        "names": [{ "kind": "LEGAL_NAME", "value": "EJEMPLO S.A." }]
      },
      "score": 100,
      "payloads": [
        { "schemaRef": "igj.company.v1", "version": "1.0.0", "data": { } }
      ]
    }
  ],
  "partial": false,
  "cost": { "amount": 0.25, "currency": "USD" },
  "correlationId": "7f3e0c2a-4b1d-4e5f-9a8b-0c1d2e3f4a5b"
}

Cada sujeto trae exactamente un payload: el de la fuente consultada. Es el mismo objeto que aparecería, junto a otros, dentro de una búsqueda de Person Search.

Permisos, y por qué acá un 403 sí es un error ​

En Person Search, una fuente para la que no tenés permiso simplemente no aparece en el resultado: el resto de la búsqueda sigue siendo útil. Acá la fuente es la consulta, así que devolver un 200 vacío sería engañoso: sin el scope de la fuente la respuesta es 403.

Necesitás sources:read más el provider:<fuente> correspondiente (Autenticación y scopes).

Claves faltantes: 400, no "sin resultados" ​

Si la fuente exige una clave que no enviaste (BCRA exige cuit), la respuesta es 400 con el requisito explícito:

json
{
  "statusCode": 400,
  "message": "Ninguna fuente de descubrimiento del modelo puede ejecutarse con las claves provistas [NAME]. Requisitos mínimos por fuente: BCRA(CUIT)",
  "error": "Bad Request"
}

Es distinto de una búsqueda válida que no encontró nada, que devuelve 200 con subjects: []. La API no colapsa "no pude ejecutar" con "ejecuté y no hay".

Un payload abierto

Todas las fuentes devuelven payloads versionados por este contrato, con una excepción declarada: InformeLegal adjunta la respuesta cruda del proveedor. El envelope es el de siempre; lo que no está versionado por nosotros es el contenido de data.

Ver también: Payloads por dominio · Errores · Límites y facturación.