مرجع API
راهنمای راهاندازی عاملها و مرجع SQL API برای دسترسی برنامهنویسی به دادههای مالی شما.
نمای کلی
Expense Budget Tracker برای دسترسی ماشینی یک API عمومی در این نشانی ارائه میکند:
https://api.expense-budget-tracker.com/v1/
از همین API میتوان به دو روش استفاده کرد:
- راهاندازی بومیِ عامل که از
GET /v1/شروع میشود - استفادهٔ مستقیم از HTTP با
ApiKeyبلندمدتی که از قبل در اختیار دارید
همهٔ درخواستها زیر همان قواعد Row Level Security در Postgres اجرا میشوند که برنامهٔ وب هم از آنها پیروی میکند.
اگر کلاینت شما از MCP پشتیبانی میکند، از اتصالدهندهٔ MCP میزبانیشده در https://mcp.expense-budget-tracker.com/mcp استفاده کنید و آن را با OAuth در مرورگر مجاز کنید. این صفحه اتصال جداگانه از طریق Agent API و قرارداد HTTP مستقیم با ApiKey بلندمدت را توضیح میدهد.
کشف، کد منبع و شِمای زمان اجرا
نقطه شروع اینجاست:
https://api.expense-budget-tracker.com/v1/
پاسخ سند کشف API به عاملها میگوید احراز هویت را چگونه آغاز کنند و بعد از آن کدام مسیرها را فراخوانی کنند. این پاسخ همچنین به README و کد منبع پیادهسازی پیوند میدهد. API این مسیرها را ارائه میکند:
GET /v1/schemaGET /v1/openapi.jsonوGET /v1/swagger.jsonبهعنوان مسیرهای بررسی سازگاری که اعلام میکنند OpenAPI در دسترس نیست و کلاینت را به سند کشف و کد منبع هدایت میکنند
هر زمان به فهرست دقیق رابطهها و ستونهایی نیاز داشتید که از طریق /v1/sql/query، /v1/sql/execute و مسیر سازگاری /v1/sql در دسترساند، schema را بررسی کنید.
راهاندازی بومیِ عامل
اگر میخواهید Claude Code، Codex، OpenClaw یا هر عامل دیگری خودش اتصال را برقرار کند، از نقطهٔ کشف API شروع کنید و همان اقدامهایی را دنبال کنید که سرور برمیگرداند.
فرایند احراز هویت
GET https://api.expense-budget-tracker.com/v1/- اقدام
send_codeوbootstrapUrlبازگرداندهشده را بخوانید - ایمیل کاربر را با
POSTبهhttps://auth.expense-budget-tracker.com/api/agent/send-codeبفرستید otpSessionTokenرا دریافت کنید- از کاربر بخواهید کد ۸ رقمیِ ارسالشده به ایمیل را وارد کند
code،otpSessionTokenوlabelرا باPOSTبهhttps://auth.expense-budget-tracker.com/api/agent/verify-codeبفرستید- یک
ApiKeyبلندمدت دریافت کنید - این کلید را بیرون از حافظهٔ گفتوگو ذخیره کنید
GET https://api.expense-budget-tracker.com/v1/meGET https://api.expense-budget-tracker.com/v1/workspaces- در صورت نیاز با
POST https://api.expense-budget-tracker.com/v1/workspacesیک فضای کاری بسازید POST https://api.expense-budget-tracker.com/v1/workspaces/{workspaceId}/selectGET https://api.expense-budget-tracker.com/v1/schema- دادهها را با
POST https://api.expense-budget-tracker.com/v1/sql/queryبخوانید و نوشتنهای تأییدشده را باPOST https://api.expense-budget-tracker.com/v1/sql/executeارسال کنید
هدر احراز هویت
Authorization: ApiKey <key>
مدیریت فضای کاری
POST /v1/workspaces/{workspaceId}/selectفضای کاریِ پیشفرض را برای همان کلید API ذخیره میکند- وقتی فضای کاری ذخیره شد، دیگر لازم نیست در فراخوانیهای
/v1/sql/query،/v1/sql/executeو مسیر سازگاری/v1/sqlهدرX-Workspace-Idرا بفرستید - اگر بخواهید فقط برای یک درخواست، فضای کاریِ ذخیرهشده را نادیده بگیرید، همچنان میتوانید از
X-Workspace-Id: <workspaceId>استفاده کنید - اگر کاربر دقیقاً یک فضای کاری داشته باشد و این کلید هنوز انتخاب ذخیرهشدهای نداشته باشد، API همان فضای کاری را بهطور خودکار ذخیره و استفاده میکند
برای راهنمای مرحلهبهمرحله مخصوص کاربران انسانی، راهاندازی عامل هوش مصنوعی را ببینید.
استفادهٔ مستقیم از HTTP با کلیدی که از قبل دارید
اسکریپتها، کارهای زمانبندیشده، داشبوردها و برنامههای سفارشی، اگر از قبل یک ApiKey بلندمدت داشته باشند، میتوانند همین API را مستقیماً فراخوانی کنند.
احراز هویت
کلید را در هدر احراز هویت ApiKey بفرستید:
curl -X POST https://api.expense-budget-tracker.com/v1/sql/query \
-H "Authorization: ApiKey ebta_your_key_here" \
-H "X-Workspace-Id: workspace-id" \
-H "Content-Type: application/json" \
-d '{"sql": "SELECT * FROM ledger_entries ORDER BY ts DESC LIMIT 10"}'
فقط وقتی به X-Workspace-Id نیاز دارید که آن کلید هنوز فضای کاریِ پیشفرضِ ذخیرهشده نداشته باشد، یا بخواهید برای همان درخواست فضای کاریِ ذخیرهشده را نادیده بگیرید.
Authorization: ApiKey ebta_your_key_hereX-Workspace-Id: <workspaceId>در صورت نیاز
خلاصه نقطههای پایانی
GET /v1/— سند عمومی کشف APIGET /v1/openapi.jsonوGET /v1/swagger.json— مسیرهای سازگاری برای کشف کد منبع، نه مشخصات APIGET /v1/me— اطلاعات حسابِ احراز هویتشدهGET /v1/workspaces— فهرست فضاهای کاریِ در دسترس برای صاحب کلیدPOST /v1/workspaces— ایجاد یک فضای کاریPOST /v1/workspaces/{workspaceId}/select— ذخیرهٔ فضای کاریِ پیشفرض برای این کلیدGET /v1/schema— بررسی رابطهها و ستونهای مجاز برای اجرای SQLPOST /v1/sql/query— اجرای یک دستور فقطخواندنیSELECTیاWITH ... SELECTPOST /v1/sql/execute— اجرای یک دستور تأییدشدهٔINSERT،UPDATEیاDELETEPOST /v1/sql— مسیر سازگاری برای اسکریپتهای اتمیک چنددستوری
سیاست SQL
مسیرهای اصلی، خواندن و نوشتن را عمداً از هم جدا میکنند:
POST /v1/sql/queryدقیقاً یک دستور فقطخواندنیSELECTیاWITH ... SELECTرا میپذیردPOST /v1/sql/executeدقیقاً یک تغییرINSERT،UPDATEیاDELETE، از جمله شکلهای پشتیبانیشدهٔWITHرا میپذیرد- مسیر سازگاری
POST /v1/sqlاسکریپتهای محدود چنددستوری را میپذیرد و بهصورت اتمیک اعمال میکند؛ فقط زمانی از آن استفاده کنید که به این رفتار اتمیک نیاز دارید
الگوهای مسدود یا ردشده:
- چند دستور در مسیرهای اصلی
/v1/sql/queryو/v1/sql/execute - DDLهایی مثل
CREATE،DROPوALTER - دستورهای تراکنشی مثل
BEGIN،COMMITوROLLBACK set_config()- کامنتهای SQL
- شناسههای نقلقولشده
- رشتههای dollar-quoted
سرور فقط اجازه میدهد روی مجموعهٔ محدودی از رابطهها پرسوجو اجرا شود. پیش از تولید SQL، با /v1/schema رابطهها و ستونهای در دسترس را بررسی کنید.
رابطههای در دسترس در حال حاضر:
ledger_entriesbudget_linesworkspace_settingsaccount_metadataaccounts(فقطخواندنی)fx_rates_raw(فقطخواندنی)fx_rates_daily(فقطخواندنی)
محدودیتها
- حداکثر ۱۰۰ ردیف بازگرداندهشده در هر درخواست
- حداکثر ۱۰۰ ردیف تحت تأثیر در هر دستور تغییر و هر درخواست
- مهلت کل هر درخواست SQL برابر با ۲۵ ثانیه است
- ۱۰ درخواست در ثانیه و ۱۰٬۰۰۰ درخواست در روز برای هر کلید
امنیت
- کلیدهای API بهصورت هشهای SHA-256 ذخیره میشوند و هرگز بهصورت متن خام ذخیره نمیشوند
- RLS جداسازی فضاهای کاری را در سطح پایگاه داده اعمال میکند
- کلیدها را میتوان هر زمان از داخل محصول باطل کرد
- با حذف یک عضو از فضای کاری، همهٔ کلیدهای او بهطور خودکار باطل میشوند