احراز هویت

برای استفاده از API، کلید API خود را در هدر درخواست ارسال کنید. کلید را از پنل مدیریت دریافت کنید.

Header
Authorization: Bearer YOUR_API_KEY
توجه: درخواست‌های بدون کلید به نقاط عمومی محدود هستند (۱۰ درخواست در دقیقه).

محدودیت نرخ

پلن محدودیت پنجره
آزاد10 req1 min
پایه60 req1 min
حرفه‌ای600 req1 min

هدرهای پاسخ شامل اطلاعات محدودیت هستند:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1693520400

قالب پاسخ

همهٔ پاسخ‌ها با یک پوششِ یکسان برمی‌گردند: ok (بولین)، data (داده)، و meta (اطلاعات کمکی، در صورت وجود). خطا: {"ok": false, "error": {"code": "...", "message": "..."}}. کدِ نماد به شکلِ market:SYMBOL است (بازار کوچک)، مثلاً crypto:BTC-USD، tse:فولاد، ir_gold:18K.

GET /api/v1/quote/{code}

دریافت آخرین قیمتِ یک نماد (از بهترین منبعِ تازه).

پارامترها

نامنوعمحلتوضیحات
codestringpathکد نماد، مثلاً crypto:BTC-USD

نمونه درخواست

cURL
curl "https://generalmarket.ir/api/v1/quote/crypto:BTC-USD"

نمونه پاسخ

{
  "ok": true,
  "data": {
    "symbol_code": "crypto:BTC-USD",
    "last": 77264.02,
    "bid": null, "ask": null,
    "volume": 22845603919,
    "change_pct": -0.31,
    "ts": "Sun, 13 Sep 2026 15:10:00 GMT"
  }
}
GET /api/v1/quotes

دریافت آخرین قیمتِ چند نماد به‌صورتِ یکجا (حداکثر ۱۰۰).

پارامترها

نامنوعمحلتوضیحات
codesstringqueryلیست کدها با کاما، مثلاً crypto:BTC-USD,crypto:ETH-USD,ir_gold:18K
cURL
curl "https://generalmarket.ir/api/v1/quotes?codes=crypto:BTC-USD,crypto:ETH-USD"
GET /api/v1/markets

لیستِ هر ۱۴ بازار (tse, ifb, ime, irenex, bond, fund, ir_gold, ir_fx, crypto, index, fx, commodity, us_equity, macro).

GET /api/v1/board/{market}

تابلوی قیمتِ یک بازار — همهٔ نمادهای آن با آخرین قیمت (از بهترین منبعِ تازه).

پارامترها

نامنوعمحلتوضیحات
marketstringpathکد بازار، مثلاً crypto
limitintqueryتعداد (پیش‌فرض ۱۰۰، سقف ۱۰۰۰)
cURL
curl "https://generalmarket.ir/api/v1/board/crypto?limit=20"
GET /api/v1/symbols

لیست نمادها با فیلتر و صفحه‌بندی.

پارامترها

نامنوعمحلتوضیحات
marketstringqueryفیلتر بازار
pageintqueryشماره صفحه
per_pageintqueryتعداد در صفحه
GET /api/v1/search

جستجوی نماد بر اساس نام یا کد. حرفِ ی/ک عربی و فارسی یکسان گرفته می‌شود؛ تطابقِ دقیقِ نماد اول می‌آید. پاسخ: {symbols:[...], markets:[...]}.

پارامترها

نامنوعمحلتوضیحات
qstringqueryعبارت جستجو (مثلاً فولاد یا BTC)
limitintqueryتعداد نتایج (پیش‌فرض ۲۰)
cURL
curl "https://generalmarket.ir/api/v1/search?q=فولاد&limit=5"
GET /api/v1/candles

کندل‌های OHLCV یک نماد. ⚠ پارامتر tf است نه timeframe (پارامترِ اشتباه بی‌صدا دادهٔ روزانه می‌دهد).

پارامترها

نامنوعمحلتوضیحات
symbolstringqueryکد نماد، مثلاً crypto:BTC-USD
tfstringqueryتایم‌فریم: 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w, 1M, 3M, 1y
limitintqueryتعداد (پیش‌فرض ۵۰۰)
cURL
curl "https://generalmarket.ir/api/v1/candles?symbol=crypto:BTC-USD&tf=1d&limit=100"
{
  "ok": true,
  "data": [
    { "symbol_code": "crypto:BTC-USD", "tf": "1d",
      "ts": "Thu, 11 Sep 2026 00:00:00 GMT",
      "open": 76000, "high": 78200, "low": 75800,
      "close": 77264, "volume": 22845603919 }
  ]
}
GET /api/v1/indicators

اندیکاتورهای محاسبه‌شده روی کندل‌های یک نماد (SMA، EMA، RSI، ATR).

پارامترها

نامنوعمحلتوضیحات
symbolstringqueryکد نماد (الزامی)
indicatorsstringqueryالزامی — با کاما، مثلاً sma,ema,rsi,atr
tfstringqueryتایم‌فریم (پیش‌فرض 1d)
periodintqueryدورهٔ اندیکاتور (پیش‌فرض ۱۴)
cURL
curl "https://generalmarket.ir/api/v1/indicators?symbol=crypto:BTC-USD&tf=1d&indicators=sma,rsi&period=14"
GET /api/v1/ticks

دفترِ ثبتِ قیمت (append-only): هر قیمتِ متمایز از هر منبع با زمانِ دقیق. برای رجوع/ممیزیِ تاریخچهٔ قیمتِ هر منبع در هر لحظه.

پارامترها

نامنوعمحلتوضیحات
symbolstringqueryکد نماد (اختیاری)
sourcestringqueryکد منبع، مثلاً lbank (اختیاری)
fromstringqueryاز تاریخ (ISO-8601، اختیاری)
tostringqueryتا تاریخ (ISO-8601، اختیاری)
limitintqueryتعداد (پیش‌فرض ۵۰۰، سقف ۵۰۰۰)
cURL
curl "https://generalmarket.ir/api/v1/ticks?symbol=crypto:BTC-USD&source=lbank&from=2026-09-13T00:00:00Z"

ویجت‌های قابل جاسازی

تیکر قیمت

نوار قیمت متحرک برای جاسازی در سایت شما.

<iframe
  src="https://generalmarket.ir/embed/ticker?symbols=crypto:BTC-USD,ir_gold:18K,ir_fx:USD&theme=dark&speed=medium"
  width="100%" height="40" frameborder="0">
</iframe>

پارامترها

نامنوعتوضیحات
symbolsstringلیست نمادها با کاما
speedstringسرعت: slow, medium, fast
themestringتم: dark, light

نمودار

نمودار قیمت تعاملی برای جاسازی.

<iframe
  src="https://generalmarket.ir/embed/chart/crypto:BTC-USD?tf=1d&type=candlestick&theme=dark&height=400&indicators=ichimoku,rsi"
  width="100%" height="400" frameborder="0">
</iframe>

تابلوی قیمت

جدول قیمت‌های یک بازار برای جاسازی.

<iframe
  src="https://generalmarket.ir/embed/board/crypto?theme=dark&limit=10"
  width="100%" height="500" frameborder="0">
</iframe>

نمونه کدها

Python
import requests

BASE_URL = "https://generalmarket.ir"

# Latest price of one symbol
resp = requests.get(f"{BASE_URL}/api/v1/quote/crypto:BTC-USD")
q = resp.json()["data"]
print(f"BTC: {q['last']:,} ({q['change_pct']:+.2f}%)  @ {q['ts']}")

# Latest prices of several symbols
resp = requests.get(
    f"{BASE_URL}/api/v1/quotes",
    params={"codes": "crypto:BTC-USD,crypto:ETH-USD,ir_gold:18K"},
)
for item in resp.json()["data"]:
    print(f"{item['symbol_code']}: {item['last']}")

# OHLCV candles (tf, NOT timeframe)
resp = requests.get(
    f"{BASE_URL}/api/v1/candles",
    params={"symbol": "crypto:BTC-USD", "tf": "1d", "limit": 30},
)
candles = resp.json()["data"]

# Full price provenance — every source's price over time
resp = requests.get(
    f"{BASE_URL}/api/v1/ticks",
    params={"symbol": "crypto:BTC-USD", "source": "lbank", "limit": 100},
)
ticks = resp.json()["data"]
JavaScript
const BASE_URL = 'https://generalmarket.ir';

// Latest price of one symbol
const resp = await fetch(`${BASE_URL}/api/v1/quote/crypto:BTC-USD`);
const { data } = await resp.json();
console.log(`BTC: ${data.last.toLocaleString()} (${data.change_pct}%)`);

// Latest prices of several symbols
const r2 = await fetch(`${BASE_URL}/api/v1/quotes?codes=crypto:BTC-USD,crypto:ETH-USD`);
for (const q of (await r2.json()).data) {
  console.log(`${q.symbol_code}: ${q.last}`);
}

// Poll every 5s for a live feed (no API key needed for public endpoints)
setInterval(async () => {
  const q = (await (await fetch(`${BASE_URL}/api/v1/quote/crypto:BTC-USD`)).json()).data;
  console.log(q.symbol_code, q.last, q.ts);
}, 5000);
PHP
$apiKey = 'YOUR_API_KEY';
$baseUrl = 'https://generalmarket.ir';

$ch = curl_init("$baseUrl/api/v1/quote/crypto:BTC-USD");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true)['data'];
echo "BTC: " . number_format($data['last']) . " ({$data['change_pct']}%)\n";
cURL
# Latest price of one symbol
curl "https://generalmarket.ir/api/v1/quote/crypto:BTC-USD"

# Latest prices of several symbols
curl "https://generalmarket.ir/api/v1/quotes?codes=crypto:BTC-USD,ir_gold:18K"

# OHLCV candles (tf, not timeframe)
curl "https://generalmarket.ir/api/v1/candles?symbol=crypto:BTC-USD&tf=1d&limit=30"

# Price provenance ledger
curl "https://generalmarket.ir/api/v1/ticks?symbol=crypto:BTC-USD&source=lbank&limit=20"