Documentación

Fichas

La ficha es la entrada pública que se crea al registrarte: con fecha, con número y sellada con un hash criptográfico que cualquiera puede recalcular. Esta página es la referencia completa — incluida la receta exacta del hash.

Qué contiene una ficha

Estos son los campos públicos de toda ficha:

Campo Significado
registry_code El número THB, p. ej. THB-2026-00117.
slug El identificador de la URL pública de la ficha: https://platform.thehumanbehind.com/r/nova.
avatar_name El nombre del avatar, clon, voz o agente registrado.
type avatar · voice_clone · agent · image · other.
scope general, o un ámbito sensible: health, finance, legal.
operates_at Dónde opera: el perfil, sitio o canal declarado.
responsible_name El nombre de la persona que responde por él.
status active, o unclaimed (una ficha a la espera de su titular — ver Reclamaciones).
verification_level registered (sello verde) o verified (sello dorado, con verified_at). Ver Verificación.
registered_at Fecha y hora del alta, en ISO-8601 UTC.
content_hash SHA-256 del snapshot del alta — la receta, más abajo.

El correo de la persona responsable no es un campo de la ficha. Nunca forma parte del hash, nunca se muestra en la página pública y nunca lo devuelve la API.

El número THB

Cada ficha recibe un identificador con el formato THB-<año>-<número>, p. ej. THB-2026-00117: el año del alta más un número secuencial dentro de ese año, relleno con ceros hasta cinco dígitos. Lo asigna la base de datos de forma atómica en el momento de la inserción, es correlativo sin huecos dentro de cada año y jamás se reutiliza — ni siquiera si la ficha se da de baja después.

Qué puede cambiar — y qué no podrá jamás

  • Editable por el titular: avatar_name, type, scope, operates_at, responsible_name.
  • Inmutable para todos, administradores incluidos: registry_code, registered_at, content_hash y slug. Los triggers de la base de datos rechazan cualquier intento de cambiarlos, lo intente quien lo intente.

Esto significa que el hash certifica la ficha tal como se declaró el primer día. Si más adelante editas un campo, la ficha conserva su número, su fecha y su hash originales: el registro nunca reescribe la historia. La baja también es «blanda»: la ficha deja de listarse, pero su URL sigue respondiendo con un aviso fechado (HTTP 410) para que la constancia permanezca.

El hash de contenido — receta pública exacta

El content_hash es un resumen SHA-256 que calcula la propia base de datos, en la misma transacción que crea la ficha. Cualquiera puede recalcularlo a partir de datos públicos. La receta, byte a byte:

  1. Toma los ocho campos del snapshot: registry_code, slug, avatar_name, type, scope, operates_at, responsible_name y registered_at.
  2. Normaliza los valores: type y scope son sus identificadores en minúsculas (p. ej., voice_clone); si operates_at no se indicó, se usa la cadena vacía ""; registered_at se formatea en ISO-8601 UTC con exactamente seis dígitos de microsegundos y una Z final — AAAA-MM-DDTHH:MM:SS.ssssssZ.
  3. Serializa como un objeto JSON de una sola línea en forma canónica: claves ordenadas primero por longitud y después por orden de bytes (es la forma textual canónica del jsonb de PostgreSQL). Para estos ocho campos, el orden es por tanto siempre: slug, type, scope, avatar_name, operates_at, registered_at, registry_code, responsible_name. Tras cada clave van dos puntos y espacio (: ) y los pares se separan con coma y espacio (, ). El resultado se codifica en UTF-8.
  4. Calcula el hash: content_hash es el SHA-256 de esos bytes en hexadecimal en minúsculas (64 caracteres).

Ejemplo completo

Para una ficha llamada Nova (THB-2026-00117), el snapshot canónico es exactamente esta línea:

{"slug": "nova", "type": "avatar", "scope": "general", "avatar_name": "Nova", "operates_at": "https://instagram.com/nova.avatar", "registered_at": "2026-07-14T09:21:33.481205Z", "registry_code": "THB-2026-00117", "responsible_name": "Maria Lopez"}

Compruébalo en cualquier máquina:

printf '%s' '{"slug": "nova", "type": "avatar", "scope": "general", "avatar_name": "Nova", "operates_at": "https://instagram.com/nova.avatar", "registered_at": "2026-07-14T09:21:33.481205Z", "registry_code": "THB-2026-00117", "responsible_name": "Maria Lopez"}' | sha256sum
# 54a8995c2e0c1c4ab014c18d65243c6527e0f62ff456440ed74bf8473f2b10fc

La salida coincide con el content_hash publicado de la ficha. Cambia un solo carácter en cualquier punto del snapshot y el hash será completamente distinto: eso es lo que hace que la ficha sea a prueba de manipulaciones.

Verificar una ficha de principio a fin

  1. Obtén la ficha desde la API pública (o lee los campos en su página pública).
  2. Reconstruye el snapshot canónico con la receta de arriba.
  3. Compara tu SHA-256 con el content_hash publicado. Si coinciden, los datos que ves son exactamente los que se registraron, en la fecha indicada.

Siguiente: Directorio →