واجهة برمجة الختم الزمني — بداية سريعة
استدعاء 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
- حالة المرتكز في بيتكوين: pending أثناء انتظار التأكيد، ثم bitcoin مع ارتفاع الكتلة.
- anchors
- مراجع بنكية سُجِّل عليها جذر الأسبوع — مرتكز لا يعتمد على أي سلسلة كتل.
«الأسبوع ما زال مفتوحًا» ردّ طبيعي، وليس خطأ.
الختم الجديد لا يحمل بعد توقيعًا ولا مرتكزًا، لأن الأسبوع الذي ينتمي إليه لم يُختَم بعد. يحدث ذلك في نهاية أسبوع ISO، ويتبعه إثبات بيتكوين بعد يوم تقريبًا. اسأل لاحقًا بالبصمة نفسها وستجد الحقول الناقصة موجودة. ولا يتغيّر الوقت المسجَّل في هذه الأثناء.
ختم الملف نفسه مرتين
الختم الأول يفوز دائمًا. أرسِل البصمة نفسها مجددًا فتستعيد السجل الأصلي — الوقت نفسه والرقم التسلسلي نفسه — بالحالة 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: بايثون وPHP وجافاسكربت و#C وC++17. انسخ أحدها إلى مشروعك أو اطّلع على المرجع الكامل.
ما ليست عليه هذه الخدمة
من المفيد معرفته قبل أن تبني عليه — ونفضّل قوله هنا على أن تكتشفه في المراجعة:
- ليست خدمة ثقة مؤهَّلة بمفهوم eIDAS، لذا لا يمنح الختم قرينة قانونية بموجب المادة 41. هو دليل، لا حكم.
- يثبت الوجود والسلامة، لا التأليف. الختم الزمني يقول إن تسلسل البايتات هذا كان موجودًا قبل تلك اللحظة ولم يتغيّر — لا من أنشأه ولا صحّة محتواه.
- ليست RFC 3161. لا نتحدث هذا البروتوكول اليوم، لذا فالأدوات التي تتوقعه —
openssl tsوsigntool— لن تتفاهم مع هذه الواجهة. - المُدخلات علنية ودائمة. لا يمكن سحب بصمة بعد تسجيلها، فلا تختم ما لا تريد رؤيته مدرجًا.
الخوارزميات مدوَّنة في المواصفة، وتطبيق سطح المكتب الذي يعيد حساب كل ذلك مفتوح المصدر.