UpGate Logo

کریپتو

شروع سریع

اولین مقاله را در حدود ۵ دقیقه بگیرید — کلید بگیرید، یک GET بزنید، آرایه JSON را بخوانید.

نمونه کدها

curl -X GET "https://api.upgate.online/api/v1/crypto/articles/translated/latest-snapshot/?lang=fa&limit=3" \
  -H "X-API-Key: your_client_api_key" \
  -H "Accept: application/json"

پاسخ

[
  {
    "original_id": 2147,
    "language": "fa",
    "title": "OKX جفت‌ارزهای IRYS/USD و IRYS/EUR را راه‌اندازی می‌کند",
    "content": "برای حمایت از رشد اکوسیستم یکپارچه USD و EUR...",
    "created_at": "2026-05-27T05:00:00",
    "meta": {
      "token_mentions": ["IRYS"],
      "thumbnail_url": "https://img.upgate.online/crypto/2147",
      "source_name": "OKX",
      "category": "exchanges",
      "sentiment": "positive"
    }
  }
]

کدام Endpoint؟

مطمئن نیستید ScrollBoost یا Snapshot؟ از انتخابگر زیر استفاده کنید.

کدام endpoint مناسب من است؟

کاربرد خود را انتخاب کنید — endpoint مناسب پیشنهاد می‌شود.

چه چیزی می‌سازید؟

راهنمای یکپارچه‌سازی: فید خبری

ScrollBoost را با direction=newer وقتی اپ باز است poll کنید. موقعیت خواندن سمت سرور است — cursor نمی‌فرستید. مقالات جدید را به UI اضافه کنید؛ [] یعنی به‌روز هستید.

نمونه کدها

const API_BASE = "https://api.upgate.online"
const PATH = "/api/v1/crypto/articles/translated/"

async function pollFeed({ apiKey, lang = "fa", limit = 10 }) {
  const url = new URL(API_BASE + PATH)
  url.searchParams.set("lang", lang)
  url.searchParams.set("limit", String(limit))
  url.searchParams.set("direction", "newer")

  const res = await fetch(url, {
    headers: { "X-API-Key": apiKey, Accept: "application/json" },
  })
  if (!res.ok) {
    const err = await res.json().catch(() => ({}))
    throw new Error(err.detail || `HTTP ${res.status}`)
  }
  return res.json() // [] = مقاله جدید نیست (خطا نیست)
}

const apiKey = process.env.UPGATE_API_KEY
setInterval(async () => {
  const batch = await pollFeed({ apiKey, lang: "fa", limit: 10 })
  for (const article of batch) {
    renderCard(article)
  }
}, 60_000) // فاصله ≥ frequency_minutes پلن شما

راهنمای یکپارچه‌سازی: Cron و هشدار

Snapshot را از سرور یا cron poll کنید. بدون state — dedup با original_id. مناسب داشبورد، ربات تلگرام و فیلتر توکن (?token=BTC).

نمونه کدها

const API_BASE = "https://api.upgate.online"
const PATH = "/api/v1/crypto/articles/translated/latest-snapshot/"
const seen = new Set()

async function pollSnapshot({ apiKey, lang = "fa", limit = 10, token }) {
  const params = { lang, limit: String(limit) }
  if (token) params.token = token
  const url = new URL(API_BASE + PATH)
  Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v))

  const res = await fetch(url, {
    headers: { "X-API-Key": apiKey, Accept: "application/json" },
  })
  if (!res.ok) throw new Error((await res.json().catch(() => ({}))).detail || res.status)
  return res.json()
}

function ingestNew(articles) {
  return articles.filter((a) => {
    if (seen.has(a.original_id)) return false
    seen.add(a.original_id)
    return true
  })
}

async function tick() {
  const apiKey = process.env.UPGATE_API_KEY
  const fresh = ingestNew(await pollSnapshot({ apiKey, lang: "fa", limit: 10, token: "BTC" }))
  for (const article of fresh) await notify(article)
}
setInterval(tick, 5 * 60_000)

معرفی

اخبار ترجمه‌شده کریپتو برای محصول شما — عنوان، متن، تصویر، توکن، دسته‌بندی و sentiment. خروجی انگلیسی (en) یا فارسی (fa، RTL). دو endpoint GET: یکی برای فید اسکرولی، یکی برای polling سمت سرور.

محتوای هر مقاله

خروجیجزئیات
عنوان و متن ترجمه‌شدهفارسی (fa) یا انگلیسی (en)، با پشتیبانی Markdown
دسته‌بندی موضوعیmarket_trends، exchanges، regulation_policy و ...
احساس بازارpositive، negative یا neutral
برچسب توکنmeta.token_mentions — مثلاً BTC، ETH
نام منبعmeta.source_name
تصویر بندانگشتیmeta.thumbnail_url — بدون احراز هویت جداگانه

Endpointها

EndpointStatefulحداکثر limitکاربرد
GET /articles/translated/بله۱۰۰ (پیش‌فرض ۱۰)فید خبری با اسکرول در اپلیکیشن
GET /articles/translated/latest-snapshot/خیر۵۰ (پیش‌فرض ۱۰)Polling از سرور، داشبورد یا cron

احراز هویت

کلید API را در هدر X-API-Key هر درخواست بفرستید. محدودیت‌ها هنگام صدور کلید تنظیم می‌شوند.

پارامترها

نامنوعاجباریتوضیحات
X-API-Keystringبلهکلید API صادرشده توسط UpGate
مثال: your_client_api_key
Acceptstringخیرapplication/json
مثال: application/json
X-Request-IDstringخیراختیاری؛ برای پشتیبانی در پاسخ برمی‌گردد
مثال: my-trace-id-123

نمونه کدها

curl -X GET "https://api.upgate.online/api/v1/crypto/articles/translated/latest-snapshot/?limit=1" \
  -H "X-API-Key: your_client_api_key"

فید ScrollBoost

صفحه‌بندی هوشمند با checkpoint سمت سرور. بدون cursor. مقالات در پنجره ۲ روزه.

جریان state در ScrollBoost

اولین درخواست
  GET ?direction=newer     → آخرین مقالات

دریافت مقالات جدید
  GET ?direction=newer     → فقط مقالات دیده‌نشده
  []                       → مقاله جدیدی نیست

اسکرول به مقالات قدیمی‌تر (پنجره ۲ روز)
  GET ?direction=older    → مقالات قدیمی‌تر
  []                       → به انتهای تاریخچه رسیدید

موقعیت خواندن سمت سرور (per کلید API و زبان) ذخیره می‌شود.
نیازی به ارسال cursor یا offset نیست.
در poll فید، همیشه direction=newer بفرستید.

نقطه پایانی

GEThttps://api.upgate.online/api/v1/crypto/articles/translated/

پارامترها

نامنوعاجباریتوضیحات
langstringخیرfa یا en. پیش‌فرض: fa
مثال: fa
limitintegerخیر۱ تا ۱۰۰، محدود به max_items_per_request
مثال: 10
directionstringخیرnewer (دیده‌نشده) یا older (تاریخچه). اگر حذف شود: بدون checkpoint → newer، با checkpoint → older. در poll فید همیشه newer بفرستید.
مثال: newer
tokenstringخیرفیلتر نماد توکن
مثال: BTC

نمونه کدها

curl -X GET "https://api.upgate.online/api/v1/crypto/articles/translated/?lang=fa&limit=10&direction=newer" \
  -H "X-API-Key: your_api_key_here"

Snapshot API

آخرین مقالات بدون ردیابی تاریخچه خواندن. مناسب داشبورد، cron و هشدار. dedup با original_id.

نقطه پایانی

GEThttps://api.upgate.online/api/v1/crypto/articles/translated/latest-snapshot/

پارامترها

نامنوعاجباریتوضیحات
langstringخیرfa یا en. پیش‌فرض: fa
مثال: fa
limitintegerخیر۱ تا ۵۰. پیش‌فرض: ۱۰
مثال: 10
tokenstringخیرفیلتر توکن
مثال: BTC

نمونه کدها

curl -X GET "https://api.upgate.online/api/v1/crypto/articles/translated/latest-snapshot/?lang=fa&limit=10&token=BTC" \
  -H "X-API-Key: your_api_key_here"

فرمت پاسخ

هر دو endpoint یک آرایه JSON از مقالات برمی‌گردانند. wrapper object ندارد.

پاسخ

[{ "original_id": 2147, "title": "...", "meta": { "token_mentions": ["IRYS"], "sentiment": "positive" } }]

فیلدهای مقاله

فیلدنوعتوضیح
original_idintegerشناسه یکتا — برای dedup
languagestringfa یا en
titlestringعنوان ترجمه‌شده
contentstringمتن ترجمه (Markdown؛ RTL برای fa)
created_atstringزمان ایجاد ترجمه (UTC)
meta.token_mentionsstring[]نمادهای توکن مثلاً ["BTC"]
meta.source_namestringمنبع مثلاً OKX
meta.categorystringبرچسب موضوعی AI
meta.sentimentstringpositive | negative | neutral
meta.thumbnail_urlstringآدرس Image Gateway
meta.has_watermarkbooleanواترمارک تصویر منبع

دسته‌بندی‌ها

برچسبتوضیح
market_trendsحرکت قیمت، تحلیل بازار، ETF
regulation_policyنظارت، قانون‌گذاری
project_updatesارتقا، نقشه راه، تیم
defiپروتکل‌های DeFi
nftبازار NFT
memecoinمیم‌کوین‌ها
exchangesلیستینگ و اخبار صرافی
security_hacksحملات و آسیب‌پذیری
adoption_partnershipsپذیرش و مشارکت
technology_innovationلایه ۲، اجماع، فناوری
mining_infrastructureماینینگ، استیکینگ
macro_economyعوامل کلان اقتصادی
unclassifiedاطمینان پایین در دسته‌بندی

زبان‌ها

کدزبانپیش‌فرض
faفارسیبله
enانگلیسیخیر

راهنمای خطاها

در production چه می‌بینید، یعنی چه، و چه کار کنید.

پاسخ

HTTP 429
{
  "detail": "Rate limit exceeded. Please wait 1 minutes between requests."
}

HTTP 200 (عادی)
[]

علائم و راه‌حل

چه می‌بینیدمعنیاقدام
[] (آرایه خالی)مقاله جدید یا match‌شده نیستعادی است — poll را ادامه دهید. خطا نیست.
HTTP 401 + detailکلید نامعتبر، غیرفعال یا منقضیX-API-Key را بررسی کنید. [email protected]
HTTP 429 + wait N minutesfrequency_minutes — زود بعد از درخواست قبلیN دقیقه صبر کنید. در cron backoff بگذارید.
HTTP 429 + daily limitdaily_limit کلید شما تمام شدهتا روز بعد UTC متوقف کنید یا پلن را ارتقا دهید.
HTTP 400 + max itemslimit از max_items_per_request بیشتر استپارامتر limit را کم کنید.
HTTP 400 + invalid langکد زبان نامعتبرفقط fa یا en.
HTTP 500خطای سروربا backoff retry. X-Request-ID را به [email protected] بفرستید.
پیام سقف تست دموسقف تستر مشترک docs (نه کلید شما)با کلید خودتان تست کنید یا فردا دوباره امتحان کنید.

سوالات متداول

پاسخ رایج‌ترین سوالات یکپارچه‌سازی.

سوالات متداول

webhook دارید؟

خیر. با polling — ScrollBoost برای فید، Snapshot برای cron.

چه زبان‌هایی پشتیبانی می‌شود؟

fa و en. پیش‌فرض fa است.

sandbox دارید؟

خیر. [email protected] برای دریافت کلید.

فیلتر توکن؟

?token=BTC روی هر دو endpoint (بدون حساسیت به حروف).

محدودیت‌ها و سهمیه

محدودیت per-client هنگام صدور کلید تنظیم می‌شود.

انواع محدودیت

محدودیتتوضیحکد HTTP
frequency_minutesحداقل فاصله بین درخواست‌های متوالی429
daily_limitحداکثر درخواست در روز429
max_items_per_requestحداکثر مقدار پارامتر limit400
access_expires_atتاریخ انقضای کلید401

پشتیبانی

کمک لازم دارید؟ با [email protected] تماس بگیرید و X-Request-ID، مسیر endpoint و زمان تقریبی درخواست را بفرستید.