API ساده است و SDK رسمی لازم ندارد؛ اینها الگوهای آماده برای زبانها و محیطهای رایجاند. در همه، دو نکته ثابت است: کلید در هدر Authorization و کش کوتاه سمت خودتان (نرخ هر چند دقیقه عوض میشود).
نسخهٔ کامل این الگوها، با کش و پیام خطای روشن، در مخزن netarz/fx-api-examples است. کتابخانهٔ آماده هم هست: PHP در netarz/fx-php (با Composer) و پایتون و جاوااسکریپت در پوشهٔ packages همان مخزن نمونهکد. افزونهٔ وردپرس و بقیهٔ مخزنها را در صفحهٔ کد باز معرفی کردهایم.
JavaScript (مرورگر)
// یک کلاینت کوچک برای مرورگر (روی دامنهٔ ثبتشده)
export function netarzFx(key, base = "https://netarz.ir/api/fx/v1") {
const call = async (path, params = {}) => {
const url = new URL(base + path);
Object.entries(params).forEach(([k, v]) => v != null && url.searchParams.set(k, v));
const res = await fetch(url, { headers: { Authorization: `Bearer ${key}` } });
const body = await res.json();
if (!res.ok) throw Object.assign(new Error(body.error?.message), { code: body.error?.code, status: res.status });
return body;
};
return {
rates: (codes) => call("/rates", { codes: codes?.join(",") }),
rate: (code) => call(`/rates/${code}`),
convert: (from, to, amount = 1, side = "mid") => call("/convert", { from, to, amount, side }),
history: (code, params) => call(`/history/${code}`, params),
me: () => call("/me"),
};
}
const fx = netarzFx("fx-ntz-v1-...");
const { data } = await fx.rate("USD");
Node.js
// Node.js 18+ (بدون وابستگی) — از سرور با IP مجاز
const BASE = "https://netarz.ir/api/fx/v1";
const headers = { Authorization: `Bearer ${process.env.NETARZ_FX_KEY}` };
export async function usdToman() {
const res = await fetch(`${BASE}/rates/USD`, { headers });
if (!res.ok) throw new Error((await res.json()).error.code);
const { data, meta } = await res.json();
return { buy: data.buy, sell: data.sell, asOf: meta.as_of };
}
Python
import os, requests
class NetArzFx:
BASE = "https://netarz.ir/api/fx/v1"
def __init__(self, key: str | None = None):
self.s = requests.Session()
self.s.headers["Authorization"] = f"Bearer {key or os.environ['NETARZ_FX_KEY']}"
def _get(self, path, **params):
r = self.s.get(f"{self.BASE}{path}", params=params, timeout=10)
body = r.json()
if not r.ok:
raise RuntimeError(f'{body["error"]["code"]}: {body["error"]["message"]}')
return body
def rates(self, codes=None): return self._get("/rates", codes=",".join(codes) if codes else None)["data"]
def rate(self, code): return self._get(f"/rates/{code}")["data"]
def convert(self, f, t, amount=1): return self._get("/convert", **{"from": f, "to": t, "amount": amount})["data"]
def history(self, code, **kw): return self._get(f"/history/{code}", **kw)["data"]
fx = NetArzFx()
print(fx.rate("EUR")["sell"])
PHP / Laravel
<?php
// Laravel — app/Services/NetArzFx.php
namespace App\Services;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;
class NetArzFx
{
private const BASE = 'https://netarz.ir/api/fx/v1';
public function rate(string $code): array
{
// نرخ هر ۵ دقیقه عوض میشود؛ کش کوتاه سهمیه را نجات میدهد
return Cache::remember("netarz-fx:$code", 120, fn () => Http::withToken(config('services.netarz.fx_key'))
->get(self::BASE."/rates/$code")
->throw()
->json('data'));
}
public function toToman(float $usd): int
{
return (int) round($usd * $this->rate('USD')['sell']);
}
}
WordPress
<?php
// WordPress — نمایش نرخ دلار در قالب: <?php echo netarz_usd(); ?>
function netarz_usd() {
$cached = get_transient('netarz_usd');
if ($cached !== false) return $cached;
$res = wp_remote_get('https://netarz.ir/api/fx/v1/rates/USD', [
'headers' => ['Authorization' => 'Bearer ' . NETARZ_FX_KEY], // در wp-config.php تعریف کنید
'timeout' => 10,
]);
if (is_wp_error($res)) return '—';
$data = json_decode(wp_remote_retrieve_body($res), true)['data'] ?? null;
$out = $data ? number_format($data['sell']) . ' تومان' : '—';
set_transient('netarz_usd', $out, 5 * MINUTE_IN_SECONDS);
return $out;
}
برای نمایش تابلو بدون کد، ویجت را ببینید. اگر نمیخواهید به functions.php دست بزنید، افزونهٔ وردپرس نِت اَرز را نصب کنید: کد کوتاه (شورتکد) [netarz_rate]، جدول چند ارز، ابزارک و کش داخلی دارد.
Go
package netarzfx
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
type Rate struct {
Code string `json:"code"`
Buy int `json:"buy"`
Sell int `json:"sell"`
Mid int `json:"mid"`
}
func GetRate(code string) (*Rate, error) {
req, _ := http.NewRequest("GET", "https://netarz.ir/api/fx/v1/rates/"+code, nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("NETARZ_FX_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer res.Body.Close()
if res.StatusCode != 200 {
return nil, fmt.Errorf("netarz fx: HTTP %d", res.StatusCode)
}
var body struct{ Data Rate `json:"data"` }
return &body.Data, json.NewDecoder(res.Body).Decode(&body)
}
Google Sheets
// Google Sheets — Extensions ▸ Apps Script
// سپس در سلول: =NETARZ_RATE("USD") یا =NETARZ_RATE("EUR"; "buy")
// نکته: Apps Script از IP گوگل درخواست میفرستد؛ IP آن ثابت نیست.
// راه حل: یک اپ با دامنهٔ script.google.com نمیشود، پس این تابع را پشت
// یک endpoint کوچک روی سرور خودتان بگذارید که کلید را نگه میدارد.
function NETARZ_RATE(code, side) {
const res = UrlFetchApp.fetch("https://YOUR-SERVER/netarz-proxy?code=" + code);
const data = JSON.parse(res.getContentText()).data;
return data[side || "mid"];
}
n8n / Make / Zapier
یک نود «HTTP Request» با متد GET، آدرس https://netarz.ir/api/fx/v1/rates/USD و هدر Authorization: Bearer …. چون این ابزارها از IPهای متغیر میآیند، برای اپشان یک محدودهٔ IP مجاز تعریف کنید (n8n خودمیزبان: IP سرور خودتان) یا درخواست را از سرور خودتان پروکسی کنید. راهحل هر حالتی که IP ثابت ندارد در راهنمای قفل دامنه و IP آمده است.