रिमोट बहीखाता API
अंतिम अद्यतन: 10 मई 2026
व्यक्तिगत API टोकन का उपयोग करके cURL, iOS शॉर्टकट या ऑटोमेशन स्क्रिप्ट से प्रविष्टियाँ दर्ज करें। टोकन केवल लिखने योग्य है — यह लेन-देन जोड़ सकता है और श्रेणी / टैग सूचियाँ पढ़ सकता है, लेकिन किसी भी लेन-देन डेटा को पढ़ या हटा नहीं सकता।
1. टोकन प्राप्त करें
admin के रूप में साइन इन करें, सेटिंग्स → 🔑 रिमोट बहीखाता API खोलें और "टोकन बनाएँ" पर क्लिक करें।
सादे टेक्स्ट का टोकन केवल एक बार दिखाया जाता है — तुरंत कॉपी करें। सर्वर केवल 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 के श्रेणी नामों को डैशबोर्ड ड्रॉपडाउन क्रम में लौटाता है। प्रतिक्रिया में केवल नाम होते हैं — कोई id, user id या लेन-देन डेटा नहीं।
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 तालिका अभी मौजूद नहीं है तो त्रुटि के बजाय खाली array लौटाता है।
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— विधि समर्थित नहीं (जैसे/api/ingestपर GET)501— सर्वर परSUPABASE_SERVICE_ROLE_KEYअनुपस्थित500— अन्य आंतरिक त्रुटि
6. सुरक्षा और सीमाएँ
डिज़ाइन के अनुसार, टोकन केवल अपने स्वयं के संगठन में लिख सकता है — अन्य orgs का प्रतिरूपण या मौजूदा डेटा पढ़ना संभव नहीं:
user_idहमेशा टोकन के स्वामी का होता है; जाली नहीं हो सकताorg_idहमेशा स्वामी के org का होता है; org-पार लेखन असंभव- टोकन केवल admin भूमिका को जारी होते हैं (manager / staff को 403 मिलता है)
- प्रतिक्रियाएँ कभी अन्य पंक्तियाँ लीक नहीं करतीं — केवल
{ id, created_at }लौटाया जाता है - रद्दीकरण तत्काल होता है; सेटिंग्स से कभी भी रोटेट करें
7. iOS शॉर्टकट उदाहरण
एक "Get Contents of URL" क्रिया जोड़ें, URL https://billbook.me/api/ingest, विधि POST, हेडर्स Authorization: Bearer bb_... और Content-Type: application/json, अनुरोध बॉडी JSON: {"title":"कॉफी","amount":120,"type":"expense"}। title और amount को शॉर्टकट इनपुट या "Ask Each Time" चर से जोड़ें।
यह दस्तावेज़ एक त्वरित संदर्भ है; वास्तविक व्यवहार के लिए बैकएंड कोड ही प्रामाणिक है।