API меток времени — быстрый старт

Один HTTP-запрос. Без ключа, аккаунта и формы регистрации. Файл остаётся у вас — в путь отправляется только его 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
Состояние привязки к Bitcoin: pending, пока ждёт подтверждения, затем bitcoin с высотой блока.
anchors
Банковские референсы, против которых зафиксирован недельный корень, — привязка, не зависящая ни от какого блокчейна.

«Неделя ещё открыта» — это нормальный ответ, а не ошибка.

У свежей отметки ещё нет ни подписи, ни привязки, потому что неделя, к которой она относится, не запечатана. Это происходит в конце недели ISO; подтверждение в Bitcoin приходит примерно через сутки. Спросите позже тот же хеш — недостающие поля будут на месте. Записанное время при этом не меняется.

Отметка одного и того же файла дважды

Первая отметка выигрывает всегда. Отправьте тот же хеш снова — и получите исходную запись: то же время, тот же порядковый номер, статус 200 вместо 201. Повторы поэтому безопасны: потерянный ответ или нервный клиент не сдвинут вашу метку вперёд.

201 Created   → отмечен впервые
200 OK        → уже отмечен; возвращается исходная метка времени
400           → хеш не состоит из 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

Чем это не является

Стоит знать, прежде чем строить на этом, — и мы лучше скажем здесь, чем вы обнаружите это на ревью:

Алгоритмы описаны в спецификации, а настольный клиент, который всё это пересчитывает, имеет открытый код.

← Отметить файл в браузере