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.
| Endpoint | Límite |
|---|---|
| POST /api/proof/stamp | 20 / min |
| GET /api/proof/verify | 120 / 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:
- No es un servicio de confianza cualificado según eIDAS, así que un sello no otorga la presunción legal del artículo 41. Es una prueba, no un veredicto.
- Prueba existencia e integridad, no autoría. Una marca de tiempo dice que esa secuencia de bytes existía ya entonces y no ha cambiado; no quién la hizo ni si su contenido es cierto.
- No es RFC 3161. Hoy no hablamos ese protocolo, así que las herramientas que lo esperan —
openssl ts,signtool— no se entenderán con esta API. - Las entradas son públicas y permanentes. Un hash no se puede retirar; no selles algo que no quieras ver listado.
Los algoritmos están escritos en la especificación, y el cliente de escritorio que recalcula todo esto es código abierto.