API znacznika czasu — szybki start

Jedno wywołanie HTTP. Bez klucza, bez konta, bez formularza rejestracji. Twój plik zostaje tam, gdzie jest — w drogę rusza tylko jego SHA-256.

# bieżący czas uniwersalny
curl https://beattime.live/api/now/

# ostemplowanie pliku: skrót liczysz lokalnie, wysyłasz sam skrót
sha256sum contract.pdf
curl -X POST https://beattime.live/api/proof/stamp \
     -H 'Content-Type: application/json' \
     -d '{"digest":"<64 hex characters>"}'

To cała integracja. Nie ma czego rejestrować, nie ma tokena do rotacji ani limitu do wynegocjowania — usługa jest darmowa i taka zostanie.

Co wraca w odpowiedzi

Stempel odpowiada wpisem w takim stanie, w jakim jest w tej chwili. Później ten sam skrót zwraca więcej: podpis, a potem kotwice zewnętrzne.

digest
Przesłany przez Ciebie SHA-256, małymi literami. To jedyne, co kiedykolwiek widzimy z Twojego pliku.
beat
Moment w czasie .beat — jeden odczyt uniwersalny, bez strefy czasowej.
utc
Ten sam moment w UTC, z dokładnością do mikrosekundy.
seq
Pozycja w rejestrze dopisywanym tylko na koniec. Numery się nie powtarzają i nigdy nie przesuwają.
week
Tydzień ISO, do którego drzewa Merkle należy ten stempel.
chain_hash
Wiąże ten wpis z poprzednim, więc usunięcie wpisu widocznie rozerwałoby łańcuch.
week_root
Tygodniowy korzeń Merkle. Do zamknięcia tygodnia jest tymczasowy i wciąż się zmienia.
inclusion_proof
Hasze rodzeństwa wraz ze stroną (L albo R). Z nimi przeliczasz korzeń samodzielnie — i właśnie to czyni dowód niezależnym od nas.
root_signature
Podpis Ed25519 pod zamrożonym korzeniem tygodnia. Pojawia się, gdy tydzień zostanie zapieczętowany.
ots_status
Stan kotwicy w Bitcoinie: pending, dopóki czeka na potwierdzenie, potem bitcoin wraz z wysokością bloku.
anchors
Referencje bankowe, wobec których zapisano tygodniowy korzeń — kotwica niezależna od jakiegokolwiek łańcucha bloków.

„Tydzień jeszcze otwarty” to normalna odpowiedź, a nie błąd.

Świeży stempel nie ma jeszcze podpisu ani kotwicy, bo tydzień, do którego należy, nie został zapieczętowany. Dzieje się to na koniec tygodnia ISO; potwierdzenie w Bitcoinie przychodzi mniej więcej dobę później. Zapytaj później o ten sam skrót, a brakujące pola będą na miejscu. Zapisany czas w międzyczasie się nie zmienia.

Dwukrotne ostemplowanie tego samego pliku

Pierwszy stempel wygrywa, zawsze. Wyślij ten sam skrót ponownie, a dostaniesz z powrotem pierwotny wpis — ten sam czas, ten sam numer kolejny — ze statusem 200 zamiast 201. Ponawianie jest więc bezpieczne: zgubiona odpowiedź albo nerwowy klient nie przesuną Twojego znacznika do przodu.

201 Created   → ostemplowany po raz pierwszy
200 OK        → już ostemplowany; zwracany jest pierwotny znacznik czasu
400           → skrót nie ma 64 znaków szesnastkowych
429           → przekroczony limit; odczekaj i ponów

Limity i CORS

Limity liczone są na adres IP i istnieją po to, żeby jeden klient nie wypchnął pozostałych. Dla wszystkiego, co robi normalna integracja, są celowo hojne.

Punkt końcowyLimit
POST /api/proof/stamp20 / min
GET /api/proof/verify120 / min
GET /api/proof/cert/<digest>10 / min
pozostałe (czas, przeliczanie, synchronizacja)300 / min

Każdy punkt końcowy odpowiada z nagłówkiem Access-Control-Allow-Origin: *, więc wywołasz go wprost z przeglądarki. Zapytania przez Tor mają wyższe limity, bo za jednym węzłem wyjściowym stoi wiele osób.

Gotowi klienci

Pojedyncze pliki, bez zależności, Apache-2.0: Python, PHP, JavaScript, C# i C++17. Skopiuj jeden do swojego projektu albo przeczytaj pełną dokumentację.

Pobierz klienta   Dokumentacja OpenAPI

Czym to nie jest

Warto wiedzieć, zanim na tym zbudujesz — wolimy powiedzieć to tutaj, niż żebyś odkrył to na przeglądzie:

Algorytmy są opisane w specyfikacji, a klient desktopowy, który to wszystko przelicza, ma otwarty kod.

← Ostempluj plik w przeglądarce