API de sellado de tiempo — inicio rápido

Una llamada HTTP. Sin clave, sin cuenta, sin formulario de registro. Tu archivo se queda donde está: solo viaja su SHA-256.

# la hora universal actual
curl https://beattime.live/api/now/

# sellar un archivo: calcula el hash en local y envía solo el hash
sha256sum contract.pdf
curl -X POST https://beattime.live/api/proof/stamp \
     -H 'Content-Type: application/json' \
     -d '{"digest":"<64 hex characters>"}'

Esa es toda la integración. No hay nada que registrar, ningún token que rotar ni cuota que negociar: el servicio es gratuito y seguirá siéndolo.

Qué devuelve

El sello responde con el registro tal como está ahora mismo. Más adelante, el mismo hash devuelve más: una firma y, después, anclajes externos.

digest
El SHA-256 que enviaste, en minúsculas. Es lo único que vemos de tu archivo.
beat
El momento en tiempo .beat: una lectura universal, sin zona horaria.
utc
El mismo momento en UTC, con precisión de microsegundos.
seq
Posición en el registro de solo adición. Los números nunca se repiten ni se mueven.
week
La semana ISO a cuyo árbol de Merkle pertenece este sello.
chain_hash
Enlaza esta entrada con la anterior, de modo que eliminar una rompería la cadena de forma visible.
week_root
La raíz de Merkle semanal. Hasta que la semana se cierra es provisional y sigue cambiando.
inclusion_proof
Hashes hermanos con su lado (L o R). Con ellos recalculas la raíz por tu cuenta: eso es justo lo que hace que la prueba no dependa de nosotros.
root_signature
Firma Ed25519 sobre la raíz semanal congelada. Aparece cuando la semana queda sellada.
ots_status
Estado del anclaje en Bitcoin: pending mientras espera confirmación y luego bitcoin con la altura del bloque.
anchors
Referencias bancarias contra las que se registró la raíz semanal: un anclaje que no depende de ninguna cadena de bloques.

«Semana aún abierta» es la respuesta normal, no un error.

Un sello recién creado todavía no tiene firma ni anclaje, porque la semana a la que pertenece aún no se ha sellado. Eso ocurre al final de la semana ISO; la constancia en Bitcoin llega alrededor de un día después. Vuelve a consultar más tarde con el mismo hash y los campos que faltaban estarán ahí. La hora registrada no cambia mientras tanto.

Sellar el mismo archivo dos veces

El primer sello gana, siempre. Envía el mismo hash otra vez y recibirás el registro original —la misma hora, el mismo número de secuencia— con estado 200 en lugar de 201. Los reintentos son, por tanto, seguros: una respuesta perdida o un cliente nervioso no pueden adelantar tu marca de tiempo.

201 Created   → sellado por primera vez
200 OK        → ya sellado; se devuelve la marca de tiempo original
400           → el hash no tiene 64 caracteres hexadecimales
429           → límite alcanzado; espera y reintenta

Límites y CORS

Los límites son por dirección IP y existen para que un cliente no desplace a los demás. Para todo lo que hace una integración normal son deliberadamente generosos.

EndpointLímite
POST /api/proof/stamp20 / min
GET /api/proof/verify120 / min
GET /api/proof/cert/<digest>10 / min
el resto (hora, conversión, sincronización)300 / min

Todos los endpoints responden con Access-Control-Allow-Origin: *, así que puedes llamarlos directamente desde el navegador. Las peticiones por Tor tienen límites más altos, porque detrás de un nodo de salida hay muchas personas.

Clientes listos para usar

Archivos únicos, sin dependencias, Apache-2.0: Python, PHP, JavaScript, C# y C++17. Copia uno en tu proyecto o consulta la referencia completa.

Obtener un cliente   Referencia OpenAPI

Lo que esto no es

Conviene saberlo antes de construir sobre esto, y preferimos decirlo aquí a que lo descubras en la revisión:

Los algoritmos están escritos en la especificación, y el cliente de escritorio que recalcula todo esto es código abierto.

← Sellar un archivo en el navegador