واجهة برمجة المحاسبة عن بعد
آخر تحديث: 10 مايو 2026
سجّل القيود من cURL أو اختصارات iOS أو نصوص الأتمتة باستخدام رمز API شخصي. الرمز مخصص للكتابة فقط — يمكنه إدراج المعاملات وقراءة قوائم الفئات / العلامات، لكنه لا يستطيع قراءة أو حذف أي بيانات معاملات.
1. الحصول على رمز
سجّل الدخول كـ admin، وافتح الإعدادات ← 🔑 واجهة برمجة المحاسبة عن بعد وانقر "إنشاء رمز".
يُعرض الرمز النصي مرة واحدة فقط — انسخه فورًا. يحفظ الخادم فقط تجزئة SHA-256، لذا لا يمكن استبدال رمز مفقود إلا بالتدوير (الذي يلغي القديم).
تنسيق الرمز: bb_<userId>_<secret>. أرسله في كل طلب بصيغة Authorization: Bearer <token>.
2. POST /api/ingest — إدراج معاملة واحدة
جسم الطلب هو كائن JSON بالحقول التالية:
title(string، مطلوب) — اسم المعاملةamount(number، مطلوب) — يجب أن يكون موجبًاtype(string، اختياري، الافتراضيexpense) — أحدexpense/income/prepaid_expense/pending_incomecategory(string، اختياري) — اسم الفئةnote(string، اختياري) — ملاحظة حرةcreated_at(string، اختياري) — ISO 8601؛ الافتراضي الآن
curl -X POST https://billbook.me/api/ingest \
-H "Authorization: Bearer bb_<userId>_<secret>" \
-H "Content-Type: application/json" \
-d '{"title":"Coffee","amount":120,"type":"expense","category":"Food"}'
# response: 201
{ "id": "...", "created_at": "..." }3. GET /api/ingest/categories — قائمة الفئات
يُرجع أسماء فئات admin بترتيب القائمة المنسدلة في لوحة التحكم. تحتوي الاستجابة على الأسماء فقط — بدون أي معرفات أو بيانات معاملات.
curl https://billbook.me/api/ingest/categories \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "categories": ["Food", "Rent", "..."] }4. GET /api/ingest/tags — العلامات المستخدمة مؤخرًا
يُرجع بادئات العلامات الأحدث تحديثًا (علامات #XXX المضمنة في العناوين). الافتراضي 20؛ استخدم ?limit= للتغيير (الحد الأقصى 100).
يُرجع مصفوفة فارغة بدلاً من خطأ إذا لم يكن جدول tag_prefixes موجودًا بعد.
curl "https://billbook.me/api/ingest/tags?limit=20" \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }5. رموز الأخطاء
جميع الأخطاء بصيغة JSON: { "error": "رسالة" }.
401— تفويض مفقود، تنسيق الرمز خاطئ، ملغى أو غير متطابق402— انتهت صلاحية الاشتراك؛ التجديد مطلوب للكتابة405— الطريقة غير مدعومة (مثل GET على/api/ingest)501— الخادم لا يحتوي علىSUPABASE_SERVICE_ROLE_KEY500— خطأ داخلي آخر
6. الأمان والقيود
بحكم التصميم، يمكن للرمز الكتابة فقط في مؤسسته الخاصة — لا يمكنه انتحال orgs أخرى أو قراءة البيانات الموجودة:
user_idهو دائمًا مالك الرمز؛ لا يمكن تزويرهorg_idهو دائمًا org المالك؛ الكتابة عبر المؤسسات مستحيلة- الرموز تُصدر فقط لدور admin (manager / staff يحصلون على 403)
- الاستجابات لا تكشف صفوفًا أخرى — يُرجع فقط
{ id, created_at } - الإلغاء فوري؛ يمكن التدوير في أي وقت من الإعدادات
7. مثال اختصار iOS
أضف إجراء "Get Contents of URL"، الرابط https://billbook.me/api/ingest، الطريقة POST، الترويسات Authorization: Bearer bb_... و Content-Type: application/json، وجسم الطلب JSON: {"title":"قهوة","amount":120,"type":"expense"}. اربط title و amount بمدخل الاختصار أو متغيرات "اسأل في كل مرة".
هذا المستند مرجع سريع؛ كود الخلفية هو المصدر الموثوق للسلوك الفعلي.