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ńcowy | Limit |
|---|---|
| POST /api/proof/stamp | 20 / min |
| GET /api/proof/verify | 120 / 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:
- To nie jest kwalifikowana usługa zaufania w rozumieniu eIDAS, więc stempel nie daje domniemania prawnego z artykułu 41. To dowód, a nie wyrok.
- Dowodzi istnienia i integralności, nie autorstwa. Znacznik mówi, że ten ciąg bajtów istniał najpóźniej wtedy i nie zmienił się — a nie kto go stworzył ani czy treść jest prawdziwa.
- To nie jest RFC 3161. Dziś nie mówimy tym protokołem, więc narzędzia, które go oczekują —
openssl ts,signtool— nie dogadają się z tym API. - Wpisy są publiczne i trwałe. Skrótu nie da się wycofać, więc nie stempluj czegoś, czego nie chciałbyś zobaczyć na liście.
Algorytmy są opisane w specyfikacji, a klient desktopowy, który to wszystko przelicza, ma otwarty kod.