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/stamp | 20 / min |
| GET /api/proof/verify | 120 / 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
Чем это не является
Стоит знать, прежде чем строить на этом, — и мы лучше скажем здесь, чем вы обнаружите это на ревью:
- Это не квалифицированная доверительная услуга по eIDAS, поэтому отметка не даёт правовой презумпции по статье 41. Это доказательство, а не приговор.
- Доказывает существование и целостность, а не авторство. Метка говорит: эта последовательность байтов существовала не позже указанного момента и не изменилась, — а не кто её создал и правдива ли она.
- Это не RFC 3161. Сегодня мы не говорим на этом протоколе, поэтому инструменты, которые его ждут —
openssl ts,signtool, — с этим API не договорятся. - Записи публичны и постоянны. Хеш нельзя отозвать, поэтому не отмечайте то, что не хотели бы видеть в списке.
Алгоритмы описаны в спецификации, а настольный клиент, который всё это пересчитывает, имеет открытый код.