Documentación Ver secciones

Nivel gratuito (DAT-FREE)

La versión del API que responde preguntas sobre la data sin entregar la data: por entidad, si existe, si está vigente, un puñado de booleanos y conteos en rangos. Nunca un nombre de tercero, un monto, una fecha, un documento.

Llave gratuita en dos minutos. Correo y contraseña; sin tarjeta. La llave dura 90 días y cualquier compra la vuelve permanente.

Crear mi llave gratuita

Para qué sirve

Con una llave gratuita obtienes el id de Panadata de una entidad y sabes qué hay detrás; los registros cuestan créditos. Alcanza para validar una regla de compuerta sobre un RUC o una cédula, pre-chequear un proveedor, priorizar una lista de 300 filas por señales o probar el JSON mientras construyes. No alcanza, a propósito, para operar una cartera.

Cuatro reglas: respuestas, no registros (todo campo es un booleano, un rango o un año); cada campo apunta a un SKU pagado (DAT-FREE es el menú, el precio está en Precios); mismo meter, mismo id en todos los niveles; y lo que hace el MCP lo hace el API, con el mismo nivel de acceso y la misma respuesta.

Los cuatro niveles

Nivel Quién Qué devuelve Límite
0. Sin llave cualquiera: cualquier sesión de Claude, Cursor o ChatGPT vía el MCP público; cualquier request HTTP a api.panadata.net sin cabecera resolve con ids enmascarados (una fila); existe, vigente, suspendida, tipo, año y el menú (codigos_con_datos) presupuesto global de 1,000 consultas/día para todo el nivel (reinicia a las 00:00 de Panamá); una entidad por llamada, sin lote
1. Llave gratuita email verificado (teléfono opcional) la ficha DAT-FREE completa: booleanos y rangos por cuenta: 500/mes y 30/día (1,000/mes y 100/día con dominio corporativo), lote 10; los contadores reinician a las 00:00 UTC
2. Sandbox US$95 quien paga registros completos, 95 créditos, llave permanente; la ficha DAT-FREE sigue a 0 créditos por saldo; la ficha DAT-FREE, 500/día y 10,000/mes por cuenta
3. Packs Piloto / Barrido / Programa registros a volumen, lote 100, estimador por pack

Los cupos son de la cuenta, no de la llave. Todas las llaves de una cuenta descuentan del mismo contador, así que crear otra llave no suma cupo. La ficha GET /v5/entities/{id}?include=DAT-FREE cuesta 0 créditos, sin cargo base, para toda llave y con cualquier saldo. Con saldo descuenta de ese mismo contador con un tope de 500 al día y 10,000 al mes; el resto de los códigos (también CHK-BIN y DAT-RESOLVE) se cobra del saldo. El tope sigue a la billetera al momento de la llamada: una cuenta que gastó 30 hoy sin saldo y recarga tiene 470 fichas más hoy.

El nivel 0 da el menú pero no los booleanos: un agente sin llave aprende «Panadata tiene datos judiciales, inmobiliarios y de comercio sobre esta sociedad, constituida en 1914 y vigente». Los booleanos detrás cuestan un email confirmado. Los registros cuestan créditos.

La ficha DAT-FREE

GET /v5/entities/{id}?include=DAT-FREE cuesta 0 créditos. Ejemplo para una organización, con llave gratuita (respuesta real de producción):

{
  "id": "pa_own_4629361", "country": "panama",
  "nombre": "CERVECERÍA NACIONAL HOLDING, S.A.",
  "nivel": "DAT-FREE",
  "existe": true, "vigente": true, "suspendida": false,
  "tipo": "organizacion", "anio_constitucion": 1914,
  "directores": "10+",
  "tiene_judicial": true, "moroso_css": false, "contrata_con_estado": false,
  "en_planilla_estatal": false,
  "inmuebles": "3-9", "comercio_exterior": true, "noticias": true,
  "codigos_con_datos": ["DAT-ASSET","DAT-BIZ","DAT-BUSINESS","DAT-DOC","DAT-NEWS","DAT-REALESTATE","DAT-REGISTRY","DAT-RISK","DAT-TRADE"],
  "actualizado": "2026-09",
  "siguiente_paso": {"para_ver_los_registros": "https://platform.panadata.net/docs/precios", "tokens_dat_core": 0.66}
}

Sin llave (nivel 0) la ficha se reduce a id, country, nombre, nivel, existe, vigente, suspendida, tipo, anio_constitucion, codigos_con_datos, actualizado y siguiente_paso; los booleanos y rangos aparecen con llave gratuita. Para una persona natural la ficha es la misma menos directores, contrata_con_estado y comercio_exterior (y con vigente, suspendida y anio_constitucion en null, que son atributos de sociedad), con tiene_judicial, moroso_css, en_planilla_estatal, inmuebles y noticias como campos principales. Un booleano o un rango en null significa «no computado», no «no tiene».

Hoy la ficha no trae score ni pep_local: entran cuando exista el Operating Score calibrado 0–100 y la bandera PEP a nivel de entidad. Los booleanos y rangos se calculan sobre los mismos contadores que DAT-CORE ya carga; codigos_con_datos es la lista de códigos del catálogo que devolverían registros para esa entidad (nunca incluye DAT-ALL).

Campo Forma SKU pagado detrás
existe, vigente, suspendida booleanos DAT-CORE
tipo persona / organizacion / fundacion DAT-CORE
anio_constitucion año (solo el año) DAT-CORE
directores rango 0 / 1-2 / 3-9 / 10+ de personas distintas en la junta (sin suscriptores, apoderados, agente residente ni representante legal) DAT-CORE (nombres y cargos)
tiene_judicial booleano DAT-RISK (expedientes judiciales; o su átomo cuando exista)
moroso_css booleano DAT-RISK (morosos CSS; o su átomo cuando exista)
contrata_con_estado booleano (solo licitaciones; la Contraloría aparece en codigos_con_datos como DAT-CGR) DAT-PROC (licitaciones)
en_planilla_estatal booleano DAT-PAYROLL
inmuebles rango 0 / 1-2 / 3-9 / 10+ DAT-REALESTATE
comercio_exterior booleano DAT-TRADE
noticias booleano DAT-NEWS
codigos_con_datos lista de códigos DAT que devolverían datos cada uno
actualizado mes/año del índice (YYYY-MM) — (el dato en vivo se pide con POST /v5/entities/{id}/update)

Los códigos de la tabla son los del catálogo vigente. Los créditos de cada SKU están en Precios y en vivo en GET https://api.panadata.net/v5/catalog (gratis).

Límites

Límite Valor Por qué
Nivel 0, por llamada una entidad por llamada: resolve de una fila y una ficha por request; el lote, las búsquedas y los sub-recursos exigen llave (403 public_tier_locked) suficiente para que un agente responda una pregunta; insuficiente para una lista
Nivel 0, global 1,000 consultas/día para todo el nivel (HTTP directo + MCP público); se reinicia a las 00:00 America/Panama (UTC−5); 429 public_budget_exhausted con reset_at y enlace a la llave gratuita al agotarse el techo lo elegimos nosotros; conservador hasta ver tráfico real
Entidades por mes (nivel 1) 500 por cuenta verificada, sumadas todas sus llaves (cada fila de resolve, cada ficha DAT-FREE o CHK-BIN y cada id de /entities/batch cuentan juntos; dry_run no cuenta); se reinicia el día 1 a las 00:00 UTC una muestra de 300 filas o 10 al día en micro-producción caben; una cartera no
Con dominio corporativo verificado 1,000 premia al comprador probable sin regalar volumen
Por día (nivel 1) 30 por cuenta (100 con dominio corporativo); se reinicia a las 00:00 UTC; el 429 free_tier_limit llega solo si la llamada no cabe (used + filas > limit) y trae used, remaining, requested, reset_at (ISO 8601) y Retry-After que los 500 no se gasten en una tarde sobre una lista
Ficha DAT-FREE con saldo 0 créditos; 500/día y 10,000/mes por cuenta, sobre el mismo contador que el nivel 1; 429 free_tier_limit al agotarse; sin saldo el tope vuelve a 30 y 500 la ficha es el menú: con saldo sigue gratis, pero no es un barrido
Tasa 1 request/segundo con ráfaga de 5 (plan de uso del API Gateway; 429 sin cuerpo JSON) una muestra de 300 tarda cinco minutos; molesto, pero gratis
Lote (resolve/batch) 10 filas sin with_presence (400 free_tier_batch_rows por encima) el batch grande es para packs
Vigencia de la llave 90 días sin compra (401 key_expired al vencer); cualquier compra (Sandbox US$95 en adelante) la vuelve permanente evita llaves zombis y cuentas fábrica
Verificación email confirmado, sin dominios de correo temporal; teléfono opcional, una cuenta gratuita por teléfono frena el sharding de cuentas
Estimador (resolve/batch con with_presence: true) solo agregados (summary + summary.presence, sin results[]); 5,000 filas/mes gratis, hasta 100 filas por llamada; no cobra ni cuenta contra los 30/día y 500/mes; más, por Ventas (402 estimator_rows_exhausted) no devuelve dato por entidad; es la herramienta para cotizar un barrido: cuántas filas resuelven y qué códigos tienen datos

Estimador. Con llave gratuita POST /v5/resolve/batch con with_presence: true devuelve solo agregados: {country, count, estimator: true, summary{rows, resolved_exact, ambiguous, unresolved, invalid, homonyms_p50/p90/max, presence{DAT-…: n}}, note}, sin results[], sin ids ni candidatos. Hasta 100 filas por llamada; las filas válidas descuentan de la cuota del estimador (5,000/mes, 402 estimator_rows_exhausted al agotarse), nunca de los 30/día ni de los 500/mes. Sirve para cotizar un barrido: cuántas filas resuelven y qué códigos tienen datos. La resolución fila por fila es el resolve/batch pagado, o el gratuito sin with_presence (10 filas, dentro del cupo). Con llave pagada la misma llamada devuelve results[] por fila más summary.presence.

Cabeceras y cupo. Toda respuesta del nivel 1 (2xx y 429) trae X-Panadata-Tier: free, X-Panadata-Free-Remaining-Today y X-Panadata-Free-Remaining-Month (el estimador suma X-Panadata-Free-Estimator-Rows-Remaining). La ficha DAT-FREE de una cuenta con saldo trae X-Panadata-Free-Remaining-Today y X-Panadata-Free-Remaining-Month contra los topes con saldo (500 al día · 10,000 al mes), sin X-Panadata-Tier; su dry_run cotiza would_charge: "0" con el mismo bloque free_tier. El 429 free_tier_limit llega solo cuando used + filas > limit y dice used, remaining y requested (un lote de 7 sí pasa con 23/30) junto con reset_at y una cabecera Retry-After en segundos. Un identificador con formato irreconocible sale como outcome: invalid en el lote (no cuenta ni cobra) y como 400 invalid_identifier en POST /v5/resolve, que además acepta top (1..10).

Zonas horarias. Los contadores del nivel 1 (30 o 100/día, 500 o 1,000/mes, estimador) se cortan por día y mes UTC; el reset_at de los 429 es la próxima medianoche o el próximo día 1 en UTC. El presupuesto global del nivel 0 se corta a medianoche de Panamá (America/Panama, UTC−5, sin horario de verano). Son dos calendarios distintos: a las 03:00Z del día 22 el nivel 1 ya está en su día 22 y el nivel 0 sigue en su día 21.

dry_run=1 es gratis en los tres niveles. Sin llave, con llave gratuita o con saldo, cualquier ruta cobrable con ?dry_run=1 devuelve {dry_run, would_charge, product_codes, credits} para cualquier código pedido (también los pagados), sin cobrar y sin consumir contadores ni presupuesto: una llave gratuita puede cotizar ?include=DAT-ALL&dry_run=1 antes de cargar créditos. El candado free_tier_code_locked aplica solo a la llamada real. En el detalle, ?inline_limit=1..100 (default 10) acota las listas de cada sección para cualquier llave; DAT-FREE no lleva listas, así que no le afecta.

El dry_run de una llave gratuita cotiza en entidades, no en créditos. Esa llave nunca paga, así que su cotización trae would_charge: "0" y credits: 0, más un bloque free_tier con lo que la llamada real le haría al cupo. Leer los contadores no los incrementa: cotizar nunca cuenta. Las cifras de primer nivel son las del período del presupuesto y month trae las del mes:

  • budget: daily (el cupo de 30/día y 500/mes, o 100 y 1,000 con dominio corporativo) o estimator (resolve/batch con with_presence, que descuenta filas del estimador, 5,000/mes, y no toca el cupo diario).
  • counts_as: cuántas entidades o filas contaría la llamada real (las filas inválidas cuentan 0). period, used, limit y remaining dan el estado del período.
  • would_exceed: true cuando el día o el mes no alcanzan, exactamente cuando la llamada real recibiría el 429. En ese caso llegan también exceeded_period, would_status (429, o 402 para el estimador), code y reset_at.
  • locked: true con locked_codes: el código pedido está fuera del nivel gratuito. La cotización conserva el precio en créditos (lo que costaría con saldo) y la llamada real sería 403 free_tier_code_locked, sin contar nada.
  • Si los contadores no se pueden leer, used, remaining y would_exceed vienen en null; la respuesta sigue siendo 200. El dry_run también trae las cabeceras X-Panadata-Free-Remaining-Today y X-Panadata-Free-Remaining-Month.

Ejemplo ilustrativo: un POST /v5/resolve/batch?dry_run=1 de 8 filas con 23 de 30 entidades usadas hoy.

{"dry_run": true, "would_charge": "0", "credits": 0, "product_codes": ["DAT-RESOLVE"],
 "free_tier": {"budget": "daily", "counts_as": 8, "period": "day", "used": 23, "limit": 30, "remaining": 7,
   "month": {"used": 141, "limit": 500, "remaining": 359},
   "would_exceed": true, "exceeded_period": "day", "would_status": 429, "code": "free_tier_limit",
   "reset_at": "2026-09-24T00:00:00+00:00", "upgrade_url": "https://platform.panadata.net/facturacion"}}

Cuando se agota: 429 con code: free_tier_limit (nivel 1: period, limit, used, remaining, requested + Retry-After) o code: public_budget_exhausted (nivel 0), ambos con reset_at y upgrade_url (con llave, la página de compra https://platform.panadata.net/facturacion; sin llave, esta misma página, https://platform.panadata.net/docs/dat-free); cuando se pide un código fuera del nivel: 403 con code: free_tier_code_locked, locked_codes y free_tier_codes; una llave vencida: 401 con code: key_expired. El MCP lee esos campos y muestra el paso siguiente en vez de un error. Los cuerpos completos están en la guía de Errores.

Sin llave: el mismo request por API y por MCP

Las dos operaciones del nivel 0 responden en https://api.panadata.net sin cabecera de autenticación (platform.panadata.net es este portal, no el API). Cada tool del MCP tiene su ruta HTTP y devuelve lo mismo; si un día una tool solo existe en el MCP, es un bug. Para conectar un agente sin llave:

claude mcp add --transport http panadata https://mcp.panadata.net/mcp

1. Resolver una entidad

API — POST /v5/resolve

curl -X POST 'https://api.panadata.net/v5/resolve' \
  --header 'Content-Type: application/json' \
  --data '{"name": "Cerveceria Nacional"}'

MCP — tool resolve_entity

resolve_entity({"name": "Cerveceria Nacional"})

Candidatos con nombre, tipo, identificador enmascarado (8-***-2264, 155***-2-2016), confidence, matched_on y exact_homonyms; una fila por llamada. Con llave gratuita, además resolve/batch hasta 10 filas; con saldo, el identificador completo y lote de 100.

2. Leer la ficha DAT-FREE

API — GET /v5/entities/{id}

curl 'https://api.panadata.net/v5/entities/pa_own_4629361?include=DAT-FREE'

MCP — tool get_entity

get_entity({"id": "pa_own_4629361", "include": ["DAT-FREE"]})

Sin llave: existe, vigente, suspendida, tipo, año, menú, actualizado y siguiente_paso, con las cabeceras X-Panadata-Tier: public y X-Panadata-Public-Budget-Remaining. Con llave gratuita (Authorization: Bearer pk_…): la ficha completa de arriba; sin include la ficha DAT-FREE es la respuesta por defecto de una llave sin saldo. Con saldo: los códigos que el menú anuncia.

Qué no devuelve, aunque nos cueste poco

  • Nombres de terceros. Ni directores, ni dueños, ni acreedores, ni contrapartes. Solo el nombre de la entidad resuelta.
  • Montos. Ni valores de propiedades, ni salarios, ni valores de contratos.
  • Fechas más allá del año de constitución y del mes de actualización.
  • Conteos exactos. «Tiene 4 propiedades» es un hecho sobre una persona; «tiene 3–9» es una señal.
  • Identificadores completos en resolve.
  • Búsquedas. Ningún endpoint que devuelva una lista de entidades a partir de criterios. Siguen pagados.
  • Activos por id. pa_finca_, pa_ph_, pa_nave_, pa_marca_, pa_imp_…: propietarios, titulares y montos son registros (403 free_tier_code_locked). pa_gov_ sigue abierto.
  • Listas internacionales (DAT-SCREEN), documentos, dockets, OCR, dato en vivo, red de control, historial.

Cuando necesites los registros

La ficha dice qué hay; leerlo cuesta créditos. El Sandbox de US$95 da el JSON completo y una llave permanente; los packs, volumen y lote de 100. Ver precios.