Verifique la evidencia en 60 segundos
No nos crea: compruébelo. Cuatro pasos llevan de un valor servido por la API a los bytes exactos que la fuente oficial respondió, con el hash verificado en su propia máquina. Los pasos son los mismos en todo dominio; cambia solo el tamaño de la evidencia.
Los cuatro pasos
- Pida un dato. Toda respuesta trae la observación que lo respalda
(
observacion_id) y, en los dominios de archivo, la edición (edicion.sha256). - Pida la observación (
GET /v1/observations/{id}) o use la edición: ahí está el identificador de la evidencia (evidencia_idosha256). - Pida los metadatos de la evidencia (
GET /v1/evidence/{id}):sha256,bytes,fuente,identidad_consulta,fechaydescarga_url. Un solo contrato para toda evidencia. - Descargue y compare (
GET /v1/evidence/{id}/descarga):sha256sumde lo descargado debe dar exactamente elsha256de los metadatos.
La forma en cada dominio
| paso | tipo de cambio | consulta RUC |
|---|---|---|
| 1. el dato | Un ítem de /v1/rates con observacion_id. |
/v1/ruc/{ruc} con observacion_id y edicion.sha256. |
| 2. el respaldo | /v1/observations/{observacion_id} → evidencia_id y el fragmento exacto del payload del que se parseó el valor. |
La edición ya trae el sha256 del ZIP; la observación materializada (/v1/observations/{observacion_id}) apunta a la misma edición. |
| 3. los metadatos | /v1/evidence/{evidencia_id} → tipo: observacion, 24 bytes de text/plain. |
/v1/evidence/{sha256} → tipo: artefacto, ~392 MB de application/zip, más sha256_contenido del TXT descomprimido y, solo con la marca descarga_artefactos, el enlace firmado (descarga_directa_url; sin la marca, null). |
| 4. la descarga | Los bytes viajan directos, con X-Sha256 y ETag. |
Redirect (302) a un enlace firmado de 15 minutos al archivo inmutable; curl -L lo sigue. Cuenta en la cuota diaria de descarga y exige un token con la marca descarga_artefactos (sin ella, FORBIDDEN). |
Ejecutado real: el tipo de cambio
Paso 1 — el publicado del 21 de agosto de 2026:
curl -s -H "Authorization: Bearer $EKIA_TOKEN" \
'https://api.eurekia.pe/v1/rates?currency=USD&series=publicado&from=2026-08-21&to=2026-08-21'
Respuesta real (2026-09-28, revisión 4414): un solo ítem; tome su observacion_id.
{
"items": [
{
"fecha_serie": "2026-08-21",
"compra": "3.351",
"venta": "3.361",
"fuente": "sunat_txt",
"cotejos": [],
"tiene_discrepancia_abierta": false,
"marcas": [
"capturada",
"recaptura_identica"
],
"observacion_id": "f39403ae-c387-4045-8091-c901973f8feb",
"capturado_en": "2026-08-21T17:06:47.880642Z",
"superseded": false,
"superseded_por": null
}
],
"total": 1,
"next_page_token": null,
"dataset_revision": 4414,
"request_id": "ac77c194-516e-4ab7-b3ac-6683998cb0b2",
"schema_version": "1.0"
}
Paso 2 — la observación:
curl -s -H "Authorization: Bearer $EKIA_TOKEN" \
https://api.eurekia.pe/v1/observations/f39403ae-c387-4045-8091-c901973f8feb
Respuesta real (2026-09-28, revisión 4414): declara de qué consulta exacta salió el valor y qué evidencia lo respalda (eventos abreviados); tome observacion.evidencia_id.
{
"observacion": {
"id": "f39403ae-c387-4045-8091-c901973f8feb",
"fecha_serie": "2026-08-21",
"moneda": "USD",
"serie": "publicado",
"compra": "3.351",
"venta": "3.361",
"compra_cruda": "3.351",
"venta_cruda": "3.361",
"fuente": "sunat_txt",
"identidad_consulta": "GET https://www.sunat.gob.pe/a/txt/tipoCambio.txt",
"evidencia_id": "f4a7a1c6-e1a4-4999-b175-7191e90c77c6",
"fragmento": "21/08/2026|3.351|3.361|",
"capturado_en": "2026-08-21T17:06:47.880642Z",
"ejecucion_id": "bccdd8ab-6bcb-4953-a593-3ae237315cb3",
"version_parser": "sunat_txt-1.0",
"revision_creada": 217,
"superseded_por": null
},
"superseded": false,
"cadena": {
"ancestros": [],
"sucesoras": []
},
"eventos": [
{
"id": "f37f595b-5145-4df1-99c0-338777bff447",
"tipo": "capturada",
"detalle": {
"venta": "3.361",
"compra": "3.351",
"sha256": "40dad22e26fe688bd700781111a10212e3725ae1bf9c14df92de36787f3d5a59"
},
"evidencia_id": "f4a7a1c6-e1a4-4999-b175-7191e90c77c6",
"ejecucion_id": "bccdd8ab-6bcb-4953-a593-3ae237315cb3",
"revision": 217,
"ts": "2026-08-21T17:06:47.867368Z"
},
{
"…": "2 eventos más"
}
],
"cotejos": [],
"dataset_revision": 4414,
"request_id": "aff42acd-a6a5-41f1-80b5-5fc5408ffe66",
"schema_version": "1.0"
}
Paso 3 — los metadatos de la evidencia:
curl -s -H "Authorization: Bearer $EKIA_TOKEN" \
https://api.eurekia.pe/v1/evidence/f4a7a1c6-e1a4-4999-b175-7191e90c77c6
Respuesta real (2026-09-28, revisión 4414): 24 bytes de text/plain; el sha256 es lo que va a comprobar.
{
"id": "f4a7a1c6-e1a4-4999-b175-7191e90c77c6",
"tipo": "observacion",
"sha256": "40dad22e26fe688bd700781111a10212e3725ae1bf9c14df92de36787f3d5a59",
"bytes": 24,
"content_type": "text/plain",
"fuente": "sunat_txt",
"identidad_consulta": "GET https://www.sunat.gob.pe/a/txt/tipoCambio.txt",
"fecha": "2026-08-21T17:06:47.880642Z",
"descarga_url": "/v1/evidence/f4a7a1c6-e1a4-4999-b175-7191e90c77c6/descarga",
"observacion_id": "f39403ae-c387-4045-8091-c901973f8feb",
"fecha_serie": "2026-08-21",
"moneda": "USD",
"serie": "publicado",
"verificacion": "descargue los bytes y compare: sha256sum <archivo> debe dar exactamente `sha256`",
"dataset_revision": 4414,
"request_id": "2d81924c-5560-4a4f-aa7e-5bbea032ede5",
"schema_version": "1.0"
}
Paso 4 — descargue y compare:
curl -s -H "Authorization: Bearer $EKIA_TOKEN" \
-D encabezados.txt -o evidencia.txt \
https://api.eurekia.pe/v1/evidence/f4a7a1c6-e1a4-4999-b175-7191e90c77c6/descarga
cat evidencia.txt
# 21/08/2026|3.351|3.361|
sha256sum evidencia.txt
# 40dad22e26fe688bd700781111a10212e3725ae1bf9c14df92de36787f3d5a59 evidencia.txt
grep -i x-sha256 encabezados.txt
# x-sha256: 40dad22e26fe688bd700781111a10212e3725ae1bf9c14df92de36787f3d5a59
Coinciden. Esos 24 bytes son el tipoCambio.txt que SUNAT publicó ese
día, tal cual llegó por HTTP; el hash que usted calculó es el que el
servicio registró al capturarlo y el que viaja como ETag.
Ejecutado real: el padrón RUC
Pasos 1 y 2 — la edición viene en la respuesta de /v1/ruc/{ruc}
(primer request): tome edicion.sha256.
Paso 3 — los metadatos del artefacto (enlace firmado abreviado; capturado
con un token que lleva la marca descarga_artefactos — sin ella,
descarga_directa_url y descarga_expira_en vienen en null):
curl -s -H "Authorization: Bearer $EKIA_TOKEN" \
https://api.eurekia.pe/v1/evidence/399fcfa5568b531259420a3dce56152c89a5bbe23883ff3ff60596d641690d03
Respuesta real (2026-09-28, revisión 4414): el ZIP del padrón de una edición, con el sha256 del ZIP y el del TXT descomprimido.
{
"id": "ddb8461787ac1f35bcc7f09235508808e5cdaa0e67cc6e52c9840cfdbb4c11b9",
"tipo": "artefacto",
"sha256": "ddb8461787ac1f35bcc7f09235508808e5cdaa0e67cc6e52c9840cfdbb4c11b9",
"bytes": 392899559,
"content_type": "application/zip",
"fuente": "sunat_padron_reducido",
"identidad_consulta": "https://www2.sunat.gob.pe/padron_reducido_ruc.zip",
"fecha": "2026-09-28T08:30:09.240463Z",
"descarga_url": "/v1/evidence/ddb8461787ac1f35bcc7f09235508808e5cdaa0e67cc6e52c9840cfdbb4c11b9/descarga",
"fecha_padron": "2026-09-28",
"sha256_contenido": "19fc944d450767fba4adc761a3aa784b165b67a7e25834c1d9c25b25d2ba25b0",
"descargado_en": "2026-09-28T08:30:09.240463Z",
"http_last_modified": "2026-09-28T07:36:30.000000Z",
"http_etag": "6aba18fe-176b2be7",
"durable_verificado_en": "2026-09-28T08:30:09.240463Z",
"cf_cache_status": "HIT",
"cf_ray": "a421626db92b803e-CDG",
"txt_mtime": "2026-09-28T07:30:14.000000Z",
"capturado_por": "colector",
"interpretaciones": [
{
"interpretacion_id": 28,
"resultado": "aceptada"
}
],
"decision": {
"decision": "publicada",
"motivo": "aceptada",
"ts": "2026-09-28T08:30:09.240463Z"
},
"descargable": true,
"descarga_directa_url": "https://s3.eu-central-003.backblazeb2.com/ekia-archivo-01/padron-ruc/2026/09/28/ddb8461787ac1f35bcc7f09235508808e5cdaa0e67cc6e52c9840cfdbb4c11b9.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=…&X-Amz-Date=20260929T012901Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=…",
"descarga_expira_en": "2026-09-29T01:44:01.606695Z",
"verificacion": "descargue el artefacto y compare: sha256sum <archivo> debe dar exactamente `sha256`; unzip -p <archivo> | sha256sum debe dar `sha256_contenido`",
"dataset_revision": 4414,
"request_id": "392c1416-beea-4ff4-be52-f1155c11f945",
"schema_version": "1.0"
}
Paso 4 — descargue (392 MB, unos 20 segundos) siguiendo el redirect y
compare los dos hashes. Solo con un token propio que lleve la marca
descarga_artefactos; el artefacto íntegro trae los campos que la API
suprime para personas naturales (por qué):
curl -sL -o padron.zip -H "Authorization: Bearer $EKIA_TOKEN" \
https://api.eurekia.pe/v1/evidence/399fcfa5568b531259420a3dce56152c89a5bbe23883ff3ff60596d641690d03/descarga
sha256sum padron.zip # = sha256
unzip -p padron.zip | sha256sum # = sha256_contenido
Esto funciona para cualquier dato del registro, hoy y dentro de diez años: la evidencia es inmutable por diseño y se conserva de forma indefinida. Qué hay detrás — observaciones, revisiones, supersesión, transiciones — está en El modelo de evidencia.