وبسرویس قیمت طلا، سکه، آبشده، انس، ارز و رمزارز — استفاده با توکن عضویت
نسخهٔ v1 بدون تغییر باقی مانده است. همان توکن را میتوانید برای v2 هم استفاده کنید. جداول و محدودیتهای v2 کاملاً مجزا هستند.
Base v2: https://24tala.ir/api_v2.php?r=...
| Endpoint | توضیح |
|---|---|
?r=rates | لیست نرخها — سازگار با ویجت Nerkh (symbols, lang, crypto_base) |
?r=rate/USD | یک نماد خاص |
?r=assets | کاتالوگ نمادهای فعال |
?r=gold / fx / crypto | فیلتر بر اساس نوع |
?r=health | سلامت سرویس (بدون توکن) |
?r=sync&secret=... | همگامسازی قیمت از منابع داخلی |
نمونه:
curl -H "Authorization: Bearer YOUR_TOKEN" \ "https://24tala.ir/api_v2.php?r=rates&symbols=USD,EUR,IR_GOLD_18K&lang=fa"
پاسخ rates به شکل { ok, rates[], errors[], meta } است و برای ویجتهای دسکتاپ/مرورگر مناسب طراحی شده. Rate limit و لاگ IP/Origin فقط روی v2 اعمال میشود.
data یا meta اضافه شود؛ حذف یا تغییر معنای فیلدهای موجود فقط در نسخهٔ بعدی (v2) و با اعلام قبلی انجام میشود.
این API فقط برای دریافت قیمت طلا، ارز، فلزات/سکه و رمزارز است. endpointهای داده نیاز به توکن API دارند. توکن را از صفحه عضویت بگیرید و در پنل مدیریت کنید.
قیمتها از دادهٔ ذخیرهشده در سایت با تأخیر کوتاه هستند و جنبه اطلاعاتی دارند. این سرویس ارسال پیامک عمومی ارائه نمیدهد.
اگر rewrite روی هاست فعال باشد میتوانید از مسیر تمیز استفاده کنید؛ در غیر این صورت همیشه از api_v1.php?r= استفاده کنید.
| نوع | مثال |
|---|---|
| Query (پیشنهادی برای همه هاستها) | https://24tala.ir/api_v1.php?r=gold/current |
| Path (در صورت rewrite) | https://24tala.ir/api/v1/gold/current |
مقدار r بدون اسلش ابتدایی است، مثلاً: gold/current ، fx ، metals ، fx/show.
یکی از روشهای زیر کافی است:
X-Api-Token: YOUR_TOKEN (پیشنهادی)Authorization: Bearer YOUR_TOKEN?api_token=YOUR_TOKEN{
"ok": true,
"message": "OK",
"data": { },
"meta": { }
}
ok موفقیت منطقی، data بدنهٔ اصلی، meta اطلاعات جانبی (ممکن است خالی باشد یا فیلدهای کمکی داشته باشد).
| منبع | مسیر | فیلد قیمت | فیلد زمان | واحد معمول |
|---|---|---|---|---|
| طلای ۱۸ عیار | gold/current | data.current |
data.ts |
تومان |
| ارزها | fx | data.items[].sell (خرید: buy) |
data.items[].ts |
تومان |
| فلزات / سکه / انس | metals | data.items[].price |
data.items[].ts |
تومان یا دلار |
| رمزارز | crypto | طبق ساختار data همان endpoint |
ts / زمان موجود در پاسخ | معمولاً تومان/USDT |
فیلد جداگانهای به نام updated_at در این endpointها تعریف نشده؛ از ts (یونیکس) یا time_jalali استفاده کنید.
| متد | r= | توضیح |
|---|---|---|
| GET | gold/current | قیمت فعلی طلا + OHLC امروز و کلوز دیروز (معادل: gold ، gold/status) |
| GET | gold/history | تاریخچه؛ پارامترها: limit, from, to, order, days |
| GET | gold/ta | تحلیل تکنیکال؛ days (پیشفرض ۳۶۵) |
| GET | fx | لیست آخرین قیمت ارزها (معادل: fx/list) |
| GET | fx/show | جزئیات یک ارز؛ code=USD (حروف بزرگ) |
| GET | metals | لیست سکه، آبشده، گرم۱۸، انس (معادل: metals/list) |
| GET | metals/{code} | یک مورد؛ مثلاً metals/seke_emami — اختیاری: history=1&limit=100 |
| GET | metals/history | تاریخچه؛ code=abshode&limit=200 |
| GET | crypto | لیست رمزارزها (معادل: crypto/list) |
| GET | crypto/{SYMBOL} | یک رمزارز؛ مثلاً crypto/BTC |
geram18 — گرم طلای ۱۸ عیار (تومان)abshode — طلای آبشده / مثقال (تومان)seke_emami ، seke_bahar ، seke_nim ، seke_rob ، seke_gramiounce — انس جهانی طلا (دلار)ounce_silver — انس نقره (دلار)USD, EUR, GBP, AED, TRY, CNY, CAD, AUD, CHF, JPY, SAR, QAR, KWD, OMR, IQD, RUB, AZN, GEL, AFN, PKR
| فیلد | نوع | توضیح |
|---|---|---|
| ok | bool | آیا تیک آخر موجود است |
| current | int\|null | قیمت جاری طلای ۱۸ عیار (تومان) |
| ts | int\|null | زمان آخرین بهروزرسانی (unix) |
| today.date | string | تاریخ میلادی روز |
| today.date_jalali | string | تاریخ شمسی |
| today.open / high / low / close | int\|null | OHLC امروز |
| yesterday.date / date_jalali / close | — | کلوز دیروز |
| فیلد | نوع | توضیح |
|---|---|---|
| items | array | لیست ارزها |
| items[].code | string | مثلاً USD |
| items[].name | string | نام فارسی |
| items[].flag | string | ایموجی |
| items[].buy | int\|null | خرید (تومان) |
| items[].sell | int\|null | فروش (تومان) — قیمت اصلی برای اکثر پارسرها |
| items[].delta | number\|null | تغییر |
| items[].ts | int\|null | unix |
| items[].time_jalali | string\|null | زمان شمسی |
| last_ts / last_jalali | — | تازهترین زمان در کل لیست |
| فیلد | نوع | توضیح |
|---|---|---|
| items | array | همه کدهای فلز/سکه |
| items[].code | string | مثلاً geram18 |
| items[].name / unit / icon | string | نام، واحد، آیکن |
| items[].price | float\|null | قیمت نمایشی |
| items[].real_price | float\|null | قیمت واقعی (در صورت وجود) |
| items[].bubble_pct | float\|null | درصد حباب |
| items[].change_pct | float\|null | درصد تغییر |
| items[].ts | int\|null | unix |
| items[].time | string\|null | ISO 8601 |
| items[].time_jalali | string\|null | شمسی |
{
"ok": true,
"message": "OK",
"data": {
"ok": true,
"current": 15720000,
"ts": 1727440000,
"today": {
"date": "2026-09-27",
"date_jalali": "1405/07/05",
"open": 15680000,
"high": 15750000,
"low": 15650000,
"close": 15720000
},
"yesterday": {
"date": "2026-09-26",
"date_jalali": "1405/07/04",
"close": 15690000
}
},
"meta": {}
}
{
"ok": true,
"message": "OK",
"data": {
"items": [
{
"code": "USD",
"name": "دلار آمریکا",
"flag": "🇺🇸",
"buy": 221750,
"sell": 224000,
"delta": 250,
"ts": 1727440000,
"time_jalali": "1405/07/05 12:30"
},
{
"code": "EUR",
"name": "یورو",
"flag": "🇪🇺",
"buy": 240000,
"sell": 242500,
"delta": null,
"ts": 1727440000,
"time_jalali": "1405/07/05 12:30"
}
],
"last_ts": 1727440000,
"last_jalali": "1405/07/05 12:30"
},
"meta": {}
}
{
"ok": true,
"message": "OK",
"data": {
"items": [
{
"code": "geram18",
"name": "گرم طلای ۱۸ عیار",
"unit": "تومان",
"icon": "🥇",
"price": 15720000,
"real_price": 15500000,
"bubble_pct": 1.42,
"change_pct": 0.35,
"ts": 1727440100,
"time": "2026-09-27T12:31:40+03:30",
"time_jalali": "1405/07/05 12:31"
},
{
"code": "ounce",
"name": "انس جهانی طلا",
"unit": "دلار",
"icon": "🌍",
"price": 2650.5,
"real_price": null,
"bubble_pct": null,
"change_pct": null,
"ts": 1727440100,
"time": "2026-09-27T12:31:40+03:30",
"time_jalali": "1405/07/05 12:31"
}
]
},
"meta": { "table": "metal_ticks" }
}
در همهٔ نمونهها YOUR_TOKEN را با توکن پنل عوض کنید. Base پیشنهادی: https://24tala.ir/api_v1.php?r=...
curl -s -H "X-Api-Token: YOUR_TOKEN" \ "https://24tala.ir/api_v1.php?r=gold/current" curl -s -H "X-Api-Token: YOUR_TOKEN" \ "https://24tala.ir/api_v1.php?r=fx" curl -s -H "X-Api-Token: YOUR_TOKEN" \ "https://24tala.ir/api_v1.php?r=metals"
<?php
$token = 'YOUR_TOKEN';
$url = 'https://24tala.ir/api_v1.php?r=gold/current';
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Accept: application/json',
'X-Api-Token: ' . $token,
],
CURLOPT_TIMEOUT => 15,
]);
$body = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode((string)$body, true);
if ($code === 200 && !empty($data['ok'])) {
echo 'قیمت طلا: ' . ($data['data']['current'] ?? '—');
} else {
echo 'خطا: ' . ($data['message'] ?? $body);
}
const token = 'YOUR_TOKEN';
const url = 'https://24tala.ir/api_v1.php?r=fx';
const res = await fetch(url, {
headers: {
'Accept': 'application/json',
'X-Api-Token': token,
},
});
const json = await res.json();
if (json.ok) {
const usd = json.data.items.find(i => i.code === 'USD');
console.log('USD sell:', usd?.sell, 'ts:', usd?.ts);
} else {
console.error(json.message);
}
import requests
token = "YOUR_TOKEN"
url = "https://24tala.ir/api_v1.php?r=metals"
r = requests.get(url, headers={"X-Api-Token": token, "Accept": "application/json"}, timeout=15)
r.raise_for_status()
payload = r.json()
if payload.get("ok"):
for row in payload["data"]["items"]:
print(row["code"], row["price"], row.get("unit"), row.get("ts"))
else:
print("error:", payload.get("message"))
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;
var token = "YOUR_TOKEN";
var url = "https://24tala.ir/api_v1.php?r=gold/current";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-Api-Token", token);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var json = await client.GetStringAsync(url);
using var doc = JsonDocument.Parse(json);
var root = doc.RootElement;
if (root.GetProperty("ok").GetBoolean())
{
var current = root.GetProperty("data").GetProperty("current");
Console.WriteLine($"Gold: {current}");
}
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://24tala.ir/api_v1.php?r=fx", nil)
req.Header.Set("X-Api-Token", "YOUR_TOKEN")
req.Header.Set("Accept", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
var payload map[string]any
_ = json.Unmarshal(body, &payload)
fmt.Println(payload["ok"], payload["data"])
}
import java.net.URI;
import java.net.http.*;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://24tala.ir/api_v1.php?r=metals"))
.header("X-Api-Token", "YOUR_TOKEN")
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
| HTTP | error_code / وضعیت | معنی |
|---|---|---|
| 401 | unauthorized | توکن ندارد یا نامعتبر است |
| 404 | not_found | مسیر یا داده یافت نشد |
| 400 | — | پارامتر نامعتبر |
| 422 | — | مثلاً داده کافی برای TA نیست |
| 500 | server_error | خطای سرور |
api_v1.php?r=... و در صورت وجود /api/v1/...) حفظ میشوند.{ ok, message, data, meta } و هدرهای توکن فعلی تغییر نمیکنند.data برای کلاینتهای فعلی پایدار است.data یا meta اضافه شوند؛ کلاینت باید فیلد ناشناخته را نادیده بگیرد./rates سازگار با ویجت، Rate Limit، لاگ IP/Origin، فعال/غیرفعالسازی نمادها و پنل ادمین admin_api_v2.php. v1 بدون تغییر.