タイムスタンプ API — クイックスタート

HTTP 1 回。鍵も、アカウントも、登録フォームもありません。ファイルはそのまま手元に残り、送られるのは SHA-256 だけです。

# 現在の世界共通時刻
curl https://beattime.live/api/now/

# ファイルを記録:ハッシュは手元で計算し、ハッシュだけを送る
sha256sum contract.pdf
curl -X POST https://beattime.live/api/proof/stamp \
     -H 'Content-Type: application/json' \
     -d '{"digest":"<64 hex characters>"}'

連携はこれで全部です。登録するものも、更新すべきトークンも、交渉する割り当ても存在しません。このサービスは無料で、これからも無料です。

返ってくるもの

記録はその時点の状態を返します。しばらくすると同じハッシュがより多くを返します。まず署名、次に外部のアンカーです。

digest
送信した SHA-256(小文字)。あなたのファイルについて私たちが見るのは、これだけです。
beat
.beat 時間での時点。タイムゾーンのない、世界共通のひとつの読み値です。
utc
同じ時点を UTC で、マイクロ秒まで。
seq
追記専用ログでの位置。番号が重複することも、動くこともありません。
week
この記録が属するマークル木の ISO 週。
chain_hash
この記録を直前の記録に結び付けます。記録を削除すれば連鎖が目に見えて壊れます。
week_root
週のマークル・ルート。週が締まるまでは暫定で、まだ動きます。
inclusion_proof
兄弟ハッシュと、その位置(L か R)。これを使えばルートを自分で再計算できます。証明が私たちから独立するのは、この一点によります。
root_signature
凍結された週のルートに対する Ed25519 署名。週が封印された時点で現れます。
ots_status
ビットコイン・アンカーの状態。確認待ちの間は pending、確定後は bitcoin とブロック高。
anchors
週のルートを記録した銀行の参照番号。どのブロックチェーンにも依存しないアンカーです。

「週はまだ開いています」は正常な応答であり、エラーではありません。

新しい記録にはまだ署名もアンカーもありません。属する週がまだ封印されていないからです。封印は ISO 週の終わりに行われ、ビットコインの証明は一日ほど遅れて続きます。同じハッシュで後からもう一度問い合わせれば、欠けていた項目がそろいます。その間、記録された時刻は変わりません。

同じファイルを二度記録した場合

最初の記録が常に優先されます。同じハッシュをもう一度送れば、元の記録がそのまま返ります。時刻も連番も同じで、ステータスは 201 ではなく 200 です。ですから再送は安全です。応答が失われても、慌てたクライアントが再試行しても、時刻が後ろにずれることはありません。

201 Created   → 初めて記録された
200 OK        → すでに記録済み。元のタイムスタンプが返る
400           → ハッシュが 16 進 64 文字ではない
429           → 上限に達した。時間をおいて再試行

上限と CORS

上限は IP アドレスごとで、ひとりの利用者が他を締め出さないためにあります。通常の連携が行うことに対しては、意図的に余裕を持たせています。

エンドポイント上限
POST /api/proof/stamp20 / min
GET /api/proof/verify120 / min
GET /api/proof/cert/<digest>10 / min
その他(時刻・変換・同期)300 / min

すべてのエンドポイントが Access-Control-Allow-Origin: * を返すので、ブラウザーから直接呼び出せます。Tor 経由の要求は上限が高めです。ひとつの出口ノードの背後に多くの人がいるからです。

用意済みのクライアント

単一ファイル、依存なし、Apache-2.0。Python、PHP、JavaScript、C#、C++17 に対応。ひとつをプロジェクトにコピーするか、完全なリファレンスをご覧ください。

クライアントを入手   OpenAPI リファレンス

これが何でないか

これを土台にする前に知っておくべきことです。レビューで気づくより、ここで申し上げたいと思います。

アルゴリズムは仕様書に記されており、それらをすべて再計算するデスクトップ・クライアントはオープンソースです。

← ブラウザーでファイルを記録する