بازارنما
بازارنما

مستندات API نسخهٔ ۱

API عمومی، ایستا و بدون کلید. نمونه‌های این صفحه از فایل‌های واقعی API ساخته شده‌اند.

نقاط دسترسی

مسیرتوضیح
GET /api/v1/latest.jsonآخرین قیمت‌ها (44 قلم؛ coin: 5، crypto: 13، currency: 12، energy: 6، gold: 3، metal: 5)
GET /api/v1/history/{asset_id}.jsonتاریخچهٔ قیمت؛ فهرست شناسه‌ها در index.json (44 دارایی)
GET /api/v1/index.jsonفهرست دارایی‌ها و الگوی مسیر تاریخچه
GET /api/v1/source-health.jsonسلامت منابع، سقف تازگی و تعداد هر وضعیت

پایهٔ آدرس: https://bazarnama.github.io. فایل‌ها ایستا هستند و با GitHub Actions بازسازی می‌شوند؛ زمان واقعی به‌روزرسانی را از freshness بخوانید، نه از زمان درخواست.

نمونه: latest.json (ساختار)

{
  "api": "bazarnama/v1",
  "generated_utc": "2026-11-13T10:57:03",
  "fetched_utc": "2026-11-13T11:03:43Z",
  "freshness": {
    "counts": {
      "fresh": 44,
      "aging": 0,
      "stale": 0,
      "unknown": 0
    },
    "checked_utc": "2026-11-13T11:03:43Z",
    "policy_version": 1
  },
  "items": [
    "... 44 items ..."
  ]
}

یک قلم واقعی

{
  "id": "usd",
  "family": "currency",
  "name": {
    "en": "US dollar (Tehran free market)",
    "fa": "دلار آمریکا (بازار آزاد)"
  },
  "unit": "IRT",
  "price": 268200.0,
  "price_irt": null,
  "change_pct": 0.47,
  "spread_pct": 0.97,
  "sources": 2,
  "method": "average",
  "as_of": null,
  "updated_utc": "2026-11-13T10:44:43",
  "stale": false,
  "page": {
    "fa": "https://nerkhara.com/dollar/",
    "en": "https://nerkhara.com/en/dollar/"
  },
  "history": {
    "json": "https://nerkhara.com/api/v1/history/usd.json",
    "csv": "https://nerkhara.com/api/v1/history/usd.csv",
    "first": "2016-09-21",
    "last": "2026-11-13"
  },
  "freshness": {
    "status": "fresh",
    "observed_utc": "2026-11-13T10:44:43Z",
    "checked_utc": "2026-11-13T11:03:43Z",
    "age_seconds": 1140,
    "max_age_seconds": 5400,
    "clock_basis": "provider_timestamp"
  },
  "source_checked_utc": "2026-11-13T11:03:43Z",
  "source_name": "NerkhAra",
  "source_updated_utc": "2026-11-13T10:44:43",
  "source_selection": "primary-aggregated",
  "secondary_source": "NerkhSanj",
  "secondary_price": 266900.0,
  "validation_source": "NerkhSanj",
  "validation_price": 266900.0,
  "source_discrepancy_pct": 0.485,
  "validation_warning": false,
  "discrepancy_warning": false,
  "validation": {
    "status": "accepted",
    "reason": "ok_in_range"
  }
}

فیلدها

فیلدمعنی
idشناسهٔ دارایی؛ همان نام فایل تاریخچه.
familyگروه: currency، gold، coin، metal، crypto، energy.
name.fa / name.enنام دارایی.
unitواحد قیمت، مثلاً IRT (تومان)، USD، USDT. قیمت‌ها را بدون توجه به این فیلد با هم جمع یا مقایسه نکنید.
priceقیمت فعلی در واحد unit.
change_pctدرصد تغییر ۲۴ساعته؛ ممکن است null باشد.
staleاگر true باشد قیمت زنده تلقی نشود.
updated_utcزمان به‌روزرسانی ثبت‌شده توسط منبع.
freshness.statusوضعیت تازگی: fresh، aging، stale، unknown.
freshness.observed_utcزمان اعلام قیمت توسط منبع.
freshness.checked_utcزمان بررسی توسط بازارنما.
freshness.age_seconds / max_age_secondsسن داده و سقف مجاز آن گروه.
freshness.clock_basisمبنای ساعت: provider_timestamp یعنی ساعت خود منبع؛ unknown یعنی زمان معتبر موجود نبود.
source_name / secondary_sourceمنبع اصلی و (در صورت وجود) منبع مقایسه‌کننده.
source_discrepancy_pctاختلاف درصدی با منبع دوم؛ فقط وقتی منبع دوم دارد.
validation.status / validation.reasonنتیجهٔ اعتبارسنجی بازارنما (جدول دلایل پایین‌تر).
validation_warning / discrepancy_warningهشدار اعتبارسنجی یا اختلاف بیش از آستانه.
sources, method, spread_pct, as_of, price_irtارائه‌شده توسط منبع داده؛ معنی دقیق به مستندات آن منبع بستگی دارد و بازارنما آن‌ها را بازتعریف نمی‌کند. ممکن است نباشند.
page, history (داخل هر قلم)توجه: این آدرس‌ها به وب‌سایت منبع داده اشاره می‌کنند، نه بازارنما. تاریخچهٔ بازارنما فقط از الگوی history_pattern در index.json خوانده شود.

نمونه: تاریخچه (usd، سه نقطهٔ آخر)

{
  "api": "bazarnama/v1",
  "id": "usd",
  "unit": "IRT",
  "updated_utc": "2026-11-13T11:00:00Z",
  "points": [
    {
      "timestamp": 1794553200,
      "price": 268200.0
    },
    {
      "timestamp": 1794564000,
      "price": 268200.0
    },
    {
      "timestamp": 1794567600,
      "price": 268200.0
    }
  ]
}

timestamp یعنی Unix UTC بر حسب ثانیه و price در همان unit سطح بالای فایل است. فاصلهٔ نقاط یکنواخت نیست (سال‌های قدیم معمولاً روزانه‌اند و نقاط اخیر می‌توانند ساعتی باشند) و ممکن است شکاف داشته باشد؛ نقطهٔ گمشده را درون‌یابی نکنید.

تازگی و سقف سن

گروهحداکثر سن
crypto20 دقیقه
currency90 دقیقه
gold120 دقیقه
coin120 دقیقه
metal120 دقیقه
energy120 دقیقه

وضعیت aging از ۶۵٪ سقف شروع می‌شود. سری‌های روزانه (مثل برنت و WTI فیزیکی، سبد اوپک، گاز طبیعی) آستانه‌های بلندتری دارند؛ جزئیات در DATA-FRESHNESS.md. نمونهٔ source-health.json:

{
  "schema": "bazarnama/source-health/v1",
  "freshness": {
    "policy": {
      "crypto": 1200,
      "currency": 5400,
      "gold": 7200,
      "coin": 7200,
      "metal": 7200,
      "energy": 7200
    },
    "counts": {
      "fresh": 44,
      "aging": 0,
      "stale": 0,
      "unknown": 0
    }
  }
}

اعتبارسنجی

دلایل ممکن برای validation.reason (از آخرین اجرا):

دلیلمعنی
ok_in_rangewithin the 24h band
ok_no_baselinenot enough own history for a 24h band; basic checks passed
ok_confirmed_moveoutside the 24h band but confirmed by two consecutive readings
held_outside_24h_rangeoutside the 24h band; waiting for a confirming reading
held_source_conflictindependent sources disagree strongly; waiting for a confirming reading
invalid_numberprice is missing, not a number, not finite or not positive
skipped_staleitem already flagged stale; not re-validated

نمونهٔ اجرا

# curl
curl -s https://bazarnama.github.io/api/v1/latest.json | jq '.items[] | select(.id=="usd") | {price, unit, freshness: .freshness.status}'

# JavaScript
const r = await fetch("https://bazarnama.github.io/api/v1/latest.json");
const { items } = await r.json();
const x = items.find(i => i.id === "usd");
if (x.stale || x.freshness.status !== "fresh") console.warn("not live");

# Python
import requests
d = requests.get("https://bazarnama.github.io/api/v1/history/usd.json", timeout=15).json()
print(d["unit"], d["points"][-1])

سیاست پایداری