رفتن به متن مستندات
پلانکمستندات
مرجع API/API کاتالوگ، بازار و راهنما
پیاده‌سازی‌شده

API کاتالوگ، بازار و راهنما

قرارداد واقعی مسیرهای عمومی و رفتار خطا بدون نیاز به کلید کاربر.

توسعه‌دهندگانبازبینی: ۲ مهر ۱۴۰۵
در این صفحهقواعد مشترکمسیرها و وضعیت HTTPقرارداد کاتالوگقرارداد مظنه و جزئیاتقرارداد نرخ مرجعپیش‌نمایش و نبود مسیر سفارش

قواعد مشترک

این‌ها مسیرهای برنامهٔ مارکت‌پلیس‌اند، نه یک API معاملهٔ عمومی دارای کلید توسعه‌دهنده. پاسخ‌های JSON از کمک‌تابع مشترک با Cache-Control:no-store و X-Content-Type-Options:nosniff تولید می‌شوند.

مقادیر دهدهی قیمت و حجم بازار رشته‌اند تا دقت آن‌ها حفظ شود. GETهای جدول زیر ورود نمی‌خواهند؛ POSTهای راهنما و برآورد، کنترل Origin هم‌مبدأ دارند.

مسیرها و وضعیت HTTP

روش و مسیرورودی / دسترسیموفقیت و خطا
GET /api/catalogعمومی؛ بدون پارامتر پیش‌نمایش200 با Catalog؛ حتی هنگام ناموجود بودن، mode=unavailable در بدنه است.
GET /api/markets/wallexعمومی؛ بدون symbol200 در status=ready؛ 503 در unavailable.
GET /api/markets/wallex?symbol=USDTTMNعمومی؛ یکی از پنج نماد مجاز400 برای نماد نامعتبر؛ جزئیات معتبر 200 و پرچم‌های وجود داده.
GET /api/markets/exchange-rateعمومی؛ سیاست روی سرور خوانده می‌شود200 برای ready؛ 503 برای unavailable.
POST /api/quoteOrigin هم‌مبدأ؛ سفارش قابل اجرا ندارد403 برای Origin نامعتبر؛ در غیر این صورت همیشه 503.
POST /api/assistantبدنهٔ JSON {message}؛ در حالت AI نشست لازم است200 با reply/mode؛ 400 پیام نامعتبر، 401 نیاز به ورود، 403 Origin و 503 اختلال.

قرارداد کاتالوگ

بدنه شامل projects، content و mode است. mode یکی از live، preview یا unavailable است. Project فیلدهای id، slug، category، status، عنوان‌ها و توضیح‌های محلی، symbol، image_url، unit_price_rial، duration_months، total_units، sold_units، documents و شاخص نمونهٔ اختیاری دارد.

Content شامل معرفی هیرو، FAQ، فوتر، عنوان منوها، نشانی اختیاری اپلیکیشن و پذیرش توکنایزیشن، نشان تجاری و enabled_locales است. دادهٔ شخصی مشتری جزو این قرارداد نیست.

javascript
const response = await fetch('/api/catalog');
const catalog = await response.json();
if (catalog.mode === 'unavailable') {
  console.log('فهرست اکنون در دسترس نیست');
} else {
  console.log(catalog.projects.map(({slug, symbol}) => ({slug, symbol})));
}

قرارداد مظنه و جزئیات

Feed شامل source:wallex، status، quotes، receivedAt و در خطا error است. هر Quote شامل symbol، base، name، price، change24h، volume24h، quoteVolume24h، high24h، low24h، amountPrecision، pricePrecision، spot، otc و receivedAt است؛ چند فیلد عددی می‌توانند null باشند.

جزئیات شامل symbol، receivedAt، candles با time/close، asks و bids با price/quantity، historyAvailable و depthAvailable است. خطای منبع نمودار یا عمق، لزوماً HTTP503 نمی‌دهد؛ برنامه می‌تواند HTTP200 با پرچم false و آرایهٔ خالی دریافت کند. دادهٔ ناموجود را از همین پرچم‌ها تشخیص دهید.

قرارداد نرخ مرجع

پاسخ آماده شامل status:ready، base:USDT، quote:IRR، rateRial، rateToman، receivedAt و expiresAt است. پاسخ ناموجود شامل status:unavailable، همان base/quote و error است.

سیاست پیش‌فرض single با والکس است. آداپتورهای فعلی والکس و نوبیتکس‌اند؛ میانگین، میانگین حسابی هم‌وزن منابع انتخابی و وابسته به تازگی همهٔ آن‌هاست. نرخ نهایی به نزدیک‌ترین ریال گرد می‌شود.

javascript
const response = await fetch('/api/markets/exchange-rate');
const rate = await response.json();
if (response.ok && rate.status === 'ready') {
  console.log(rate.rateToman, rate.expiresAt);
}
// بدون دادهٔ معتبر، نرخ جایگزین نسازید.

پیش‌نمایش و نبود مسیر سفارش

پارامتر preview=design فقط در صفحات و محیط توسعه برای کاتالوگ نمونه کاربرد دارد و /api/catalog را به دادهٔ نمونهٔ اجباری تبدیل نمی‌کند. شکست خواندن کاتالوگ متصل با نمونه جبران نمی‌شود.

POST /api/quote هیچ قرارداد اجرایی مقدار/قیمت یا سفارش نهایی ندارد. تا زمان پیاده‌سازی سرویس معامله، 503 پاسخ مورد انتظار این مسیر است؛ نباید با retry نامحدود آن را به سفارش واقعی تبدیل کرد.

مراجع پیاده‌سازی این صفحه

این مسیرها نام فایل‌های مبنای مستندات‌اند؛ دسترسی به مخزن یا محیط خصوصی ایجاد نمی‌کنند.

  • app/api/catalog/route.ts
  • app/api/markets/wallex/route.ts
  • app/api/markets/exchange-rate/route.ts
  • app/api/quote/route.ts
  • app/api/assistant/route.ts
  • lib/server.ts
  • lib/wallex.ts
  • lib/exchange-rate.ts