Datos abiertos
Descarga el índice
El índice es reemplazable. Todo lo que sabe y que un lector puede saber se publica como una exportación completa, un volcado, que cualquiera puede descargar y cargar en su propio índice.
El último volcado
Cuando se generó esta página, el volcado más reciente era la instantánea tomada el . Cada noche a las 04:30 UTC se escribe uno nuevo, y latest.jsonsiempre nombra el más reciente.
- sources.ndjson.gz
2 líneas · 446 B
Una línea por fuente.
sha256 0bb6045c5ba3c73d6756f3b5ec2e8910b28f147fd80f6403d542554f8879ba8c
- entities.ndjson.gz
24 líneas · 1.9 KiB
Una línea por entidad, incluidas las fusionadas.
sha256 1333fd9c883d4c4679a2288d874586caae364238233b04163aae8479bf72915c
- records.ndjson.gz
9 líneas · 1.2 KiB
Una línea por registro, incluidos los retirados.
sha256 cfdfb40fd5cdd941d65adbe559ca491261971ca328316741630d155e179a4600
- groupings.ndjson.gz
15 líneas · 501 B
Una línea por agrupación.
sha256 5c562f31473d5f2b8f8551caca0f1cbb2d2f3e35f542af1e2ee6e5f35f3f261e
- merges.ndjson.gz
0 líneas · 20 B
Una línea por fusión, incluidas las revertidas.
sha256 59869db34853933b239f1e2219cf7d431da006aa919635478511fabbfc8849d2
El directorio de este volcado es https://dumps.prodid.org/v1/2026-10-29/, y su manifiesto es manifest.json, escrito el 2026-10-29 04:30 UTC. Sus licencias dicen index: CC0-1.0 y claims: source.
Dónde se guardan los volcados
Un volcado es un directorio con el nombre de la fecha UTC de su instantánea, bajo la versión en la que está escrito. v1/ contiene los volcados v1, cuyo manifiesto y cuyas líneas de fuente y entidad son documentos v1. Contiene cinco archivos de datos y un manifiesto.
https://dumps.prodid.org/v1/<YYYY-MM-DD>/manifest.json
https://dumps.prodid.org/v1/<YYYY-MM-DD>/sources.ndjson.gz
https://dumps.prodid.org/v1/<YYYY-MM-DD>/entities.ndjson.gz
https://dumps.prodid.org/v1/<YYYY-MM-DD>/records.ndjson.gz
https://dumps.prodid.org/v1/<YYYY-MM-DD>/groupings.ndjson.gz
https://dumps.prodid.org/v1/<YYYY-MM-DD>/merges.ndjson.gz
https://dumps.prodid.org/v1/latest.jsonlatest.json se escribe el último. Es una copia del manifest.json del volcado más reciente, escrita después de que todos los archivos de ese volcado y su manifiesto estén en su sitio. Quien empieza por él nunca encuentra un manifiesto que nombre un archivo que aún no está, y encuentra el directorio a partir del propio snapshot_at del manifiesto.
Conservación. Un volcado diario se guarda 7 días. El primer volcado de cada mes UTC se guarda para siempre. Un volcado que se guarda nunca se reescribe: su directorio, sus archivos y su manifiesto quedan byte a byte como estaban.
Volcados v0. Los volcados v0 escritos antes de v1 siguen en https://dumps.prodid.org/v0/, con la misma conservación, y v0/latest.json sigue nombrando el último. Validan contra los esquemas v0 para siempre.
El manifiesto. Nombra cada uno de los cinco archivos exactamente una vez, con el SHA-256 y el tamaño del archivo tal como se sirve, comprimido, y su número de líneas ya descomprimido. Comprueba cada archivo contra su resumen antes de cargarlo. El esquema es https://prodid.org/schemas/v1/org.prodid.dump.json, con vectores en /spec/fixtures/v1/dump.
Qué contiene cada archivo
Cada archivo es NDJSON comprimido con gzip, un objeto JSON por línea. Los cinco se leen de una misma instantánea coherente, así que coinciden entre sí: cada fuente que nombra una línea tiene su línea en sources.ndjson.gz, y cada opid que nombra una línea tiene la suya en entities.ndjson.gz.
| Archivo | Una línea por | La línea |
|---|---|---|
| sources.ndjson.gz | fuente | El estado de la fuente, exactamente como lo responde /source/{name}. |
| entities.ndjson.gz | entidad, incluidas las fusionadas | El documento de la entidad exactamente como lo responde /id/{opid}?history=1, incluidas las afirmaciones retiradas. |
| records.ndjson.gz | registro, incluidos los retirados | source, key, feed, opid, body, first_seen, last_seen, withdrawn_at. |
| groupings.ndjson.gz | agrupación | source, kind, key, opid. |
| merges.ndjson.gz | fusión, incluidas las revertidas | from, into, decided_at, reverted_at. |
Entidades fusionadas
Un opid fusionado responde 308 en el resolutor, así que no tiene documento propio que copiar. Su línea es el documento que respondería si no estuviera fusionado (sus propios identificadores y afirmaciones se quedan en él, que es lo que hace reversible una fusión) con un miembro más, merged_into, el opid de la entidad que queda. Las fusiones no se encadenan: la entidad que queda nunca está fusionada a su vez.
Una línea de registro
Un registro tal como lo guarda el índice. Todas las horas en UTC, ISO 8601.
| Campo | Qué es |
|---|---|
| source | El nombre de la fuente. |
| key | La key del registro en esa fuente. |
| feed | La URL del feed del que se leyó. Ausente en un registro escrito por una importación de datos. |
| opid | El item al que se resolvió. |
| body | El org.prodid.item que envió el publicador, sin cambios. |
| first_seen | Cuándo lo leyó el índice por primera vez. |
| last_seen | Cuándo lo leyó el índice por última vez. |
| withdrawn_at | Presente exactamente cuando el registro está retirado. |
Una línea de agrupación
A qué entidad se resolvió una agrupación de una fuente. kind es family o variant, y key es aquello por lo que se agrupan los registros de la fuente, escrito en claro y no resumido, para que otra implementación pueda emparejar con ello su propia agrupación.
family
{ "group": "<group>" }
para un grupo del publicador; { "key": "<key>" } para un registro sin grupo, que forma una familia propia.
variant
{ "family": <la key de la familia>, "variant": { <eje>: <valor>, … } }
la variante del registro, {} si no tiene.
Una línea de fusión
Una decisión de fusión: from el opid fusionado, into la entidad que queda, decided_at cuándo se tomó y reverted_at, presente exactamente cuando se revirtió.
Lo que un volcado nunca contiene
Un volcado no dice más que el resolutor, más los registros, agrupaciones y fusiones con los que se construyen sus respuestas.
- La dirección de contacto de un publicador, que el índice guarda solo para enviar el aviso de lapse.
- El registro de rastreo, el texto de error del rastreador o cualquier otra cosa de un rastreo que el estado de la fuente no muestre.
- Por qué se hizo una fusión o quién la decidió.
- Por qué se bloqueó un hash de medio.
- Los bytes de los medios. El media_url de una afirmación de medio apunta al archivo, y un hash bloqueado no se sirve.
- Los identificadores internos de fila del índice. Cada línea nombra una fuente por su nombre y una entidad por su opid.
- Las concesiones de autoridad y sus pruebas. La línea de una fuente dice authoritative si lo era en snapshot_at, pero un índice cargado desde el volcado no tiene ninguna concesión hasta que su propio operador la conceda.
Licencias
Dos reglas, y el licenses del manifiesto dice ambas.
index: CC0-1.0
Todo lo que crea el índice
Los
opid, las correspondencias de identificadores, la jerarquía de familias y variantes, las agrupaciones y las fusiones.claims: source
Cada afirmación y cada registro
Bajo la licencia que declara su propia fuente: la
licensede la línea de esa fuente ensources.ndjson.gz. Una fuente que no declara ninguna no ha concedido nada, y prodid no concede nada en su nombre.
Un conjunto de datos abierto que no publica documento de descubrimiento propio entra en el índice como una fuente llamada dataset:<slug>, importada por el operador del índice desde la exportación pública del conjunto. Una fuente así es siempre unverified, y su license es la del propio conjunto. Las reglas están en la especificación.
Cárgalo en tu propio índice
prodid-batch load-dump carga un volcado v0 o v1 en una base de datos PostgreSQL 18 vacía migrada a la misma versión, en una sola transacción. Acepta el directorio con fecha de un volcado, su manifest.json o un latest.json, en local o por HTTPS.
git clone https://github.com/productdevbook/prodid.git && cd prodid
bun install --frozen-lockfile
export DATABASE_URL=postgres://<user>:<password>@<host>:<port>/<database>
bun run --filter '@prodid/db' migrate
PRODID_OPERATOR=<your name> bun apps/batch/src/cli.ts load-dump https://dumps.prodid.org/v1/latest.jsonCada archivo se comprueba contra los sha256, bytes y lines del manifiesto antes de escribir nada, y un volcado remoto se descarga primero a un directorio temporal. Una base de datos que no está vacía se rechaza. PRODID_OPERATOR queda registrado como quien decidió las fusiones cargadas.
Para leer un archivo sin cargarlo, compruébalo contra su resumen y descomprímelo. El resumen de abajo es el del último manifiesto cuando se generó esta página.
curl -sO https://dumps.prodid.org/v1/2026-10-29/sources.ndjson.gz
sha256sum sources.ndjson.gz
0bb6045c5ba3c73d6756f3b5ec2e8910b28f147fd80f6403d542554f8879ba8c sources.ndjson.gz
gunzip -c sources.ndjson.gz | head -n 1Las reglas completas están en la especificación, en Dumps.
La especificación se publica solo en inglés, y el texto en inglés es el normativo.