مستندات

راهنمای API سرویس‌های مکانی

همه سرویس‌ها (جستجوی آدرس، مسیریابی، تحلیل مکانی، هوش مصنوعی و آب و هوا) از یک آدرس پایه و یک روش احراز هویت استفاده می‌کنند. این صفحه موارد مشترک را توضیح می‌دهد؛ جزئیات هر سرویس در صفحه همان سرویس است.

https://cloud.geotajak.ir/api/geo

شروع سریع

  1. ثبت‌نام کنید و شماره موبایل را تایید کنید؛ ۲۰۰ هزار ژئوکوین هدیه به کیف پول شما اضافه می‌شود.
  2. در توکن‌های API یک توکن بسازید و بخشی از موجودی کیف پول را به آن بدهید.
  3. کلید توکن را در هدر Authorization بفرستید:
curl -G "https://cloud.geotajak.ir/api/geo/geocode" \
  --data-urlencode "q=میدان آزادی تهران" \
  --data-urlencode "limit=1" \
  -H "Authorization: Bearer $GEOTAJAK_API_KEY"

احراز هویت

کلید توکن (با پیشوند gk_) را به یکی از این سه روش بفرستید؛ روش اول توصیه می‌شود:

روشنمونه
هدر AuthorizationAuthorization: Bearer gk_...
هدر X-API-KeyX-API-Key: gk_...
پارامتر آدرس?api_key=gk_...

کلید را در کد عمومی (مثلا اپلیکیشن یا صفحه وب) قرار ندهید مگر اینکه برای آن توکن دامنه مجاز، سقف مصرف و سقف درخواست ساعتی تعیین کرده باشید. برای سرور، آی‌پی سرور را در توکن محدود کنید. اگر کلید لو رفت، در صفحه توکن‌ها «کلید جدید» بزنید.

کیف پول و هزینه

هر سرویس قیمت مشخصی برای هر درخواست دارد. هزینه هر درخواست موفق از اعتبار توکنی که با آن فراخوانی می‌کنید کم می‌شود؛ اشتراک یا خرید جداگانه لازم نیست. اعتبار توکن را از کیف پول اضافه می‌کنید و هر وقت خواستید اعتبار باقی‌مانده را به کیف پول برمی‌گردانید (با حذف توکن هم برمی‌گردد). واحد همه قیمت‌ها «ژئوکوین» است: کیف پول با خرید بسته ژئوکوین از درگاه بانکی شارژ می‌شود و فاکتور هر خرید در داشبورد ثبت می‌شود.

وضعیت پاسخهزینه کسر می‌شود؟
موفق (2xx) یا «پیدا نشد» (404)بله
ورودی نادرست (400، 422)خیر
خطای سرور (5xx) یا قطعی سرویسخیر
رد شدن به‌خاطر توکن، اعتبار یا محدودیت‌ها (401، 402، 403، 429)خیر

توکن‌ها و محدودیت‌ها

به تعداد دلخواه توکن بسازید (مثلا یکی برای هر برنامه یا محیط). هر توکن این تنظیمات را دارد:

تنظیمتوضیح
اعتبارحداکثر مبلغی که توکن می‌تواند مصرف کند؛ از کیف پول منتقل می‌شود.
سقف مصرف دوره‌ایمثلا «حداکثر ۱۰۰ هزار ژئوکوین در هفته». دوره‌ها به وقت تهران: روزانه (از نیمه‌شب)، هفتگی (از شنبه) یا ماهانه (از اول ماه شمسی).
سرویس‌هاهمه سرویس‌ها یا فقط سرویس‌های انتخابی.
سقف درخواست در ساعتبرای کل توکن و/یا هر سرویس جداگانه.
تاریخ انقضاتاریخ شمسی؛ پس از پایان آن روز درخواست‌ها رد می‌شوند.
آی‌پی مجازآی‌پی یا رنج (مثل 10.0.0.0/24).
دامنه مجازبرای استفاده در مرورگر؛ هدر Origin یا Referer بررسی می‌شود (مثل *.example.com).

وقتی اعتبار توکن کمتر از ۱۰٪ شود یا تمام شود، یا تاریخ انقضا نزدیک باشد یا بگذرد، پیامک و اعلان داشبورد دریافت می‌کنید.

هدرهای پاسخ

هدرتوضیح
X-Request-Costهزینه همین درخواست (ژئوکوین)
X-Credit-Remainingاعتبار باقی‌مانده توکن (ژئوکوین)

خطاها

خطاهای مربوط به توکن و هزینه با بدنه {"error": "...", "message": "..."} برمی‌گردند؛ خطاهای ورودی هر سرویس با {"detail": "..."}.

کدerrorمعنی
401missing_token / invalid_tokenتوکن ارسال نشده یا معتبر نیست
401token_disabledتوکن غیرفعال شده است
402insufficient_creditاعتبار توکن تمام شده است؛ از کیف پول اضافه کنید
403service_not_allowedتوکن به این سرویس دسترسی ندارد
403token_expiredتاریخ انقضای توکن گذشته است
403ip_not_allowed / domain_not_allowedدرخواست از آی‌پی یا دامنه غیرمجاز
405method_not_allowedمتد HTTP اشتباه است (GET یا POST)
429rate_limitedسقف درخواست ساعتی پر شده است
429spend_limit_reachedسقف مصرف دوره‌ای پر شده است؛ فیلد resets_at زمان شروع دوره بعد است
502upstream_unavailableسرویس موقتا در دسترس نیست؛ دوباره تلاش کنید

نمونه کد

Python

import os, requests

API = "https://cloud.geotajak.ir/api/geo"
session = requests.Session()
session.headers["Authorization"] = f"Bearer {os.environ['GEOTAJAK_API_KEY']}"

resp = session.post(f"{API}/reverse", json={"lat": 35.6892, "lon": 51.3890}, timeout=60)
if resp.status_code == 402:
    print("اعتبار توکن تمام شده است")
resp.raise_for_status()
print(resp.json(), resp.headers["X-Credit-Remaining"])

JavaScript

const API = "https://cloud.geotajak.ir/api/geo";
const headers = { Authorization: `Bearer ${process.env.GEOTAJAK_API_KEY}` };

const res = await fetch(`${API}/route?from_lat=35.6892&from_lon=51.3890&to_lat=32.6539&to_lon=51.6660`, { headers });
if (!res.ok) throw new Error((await res.json()).message);
console.log(await res.json(), res.headers.get("X-Credit-Remaining"));

ویجت آماده (ui=true)

اگر نمی‌خواهید برای نمایش نتیجه کد بنویسید، به آدرس هر سرویس ui=true اضافه کنید: به‌جای JSON یک صفحه آماده (نقشه، نمودار و جدول همان سرویس) برمی‌گردد که در <iframe> سایت شما قرار می‌گیرد. هزینه آن با درخواست معمولی یکی است.

<iframe src="https://cloud.geotajak.ir/api/geo/weather/current?place=یزد&ui=true&api_key=YOUR_TOKEN"
        width="100%" height="640" style="border:0" loading="lazy"></iframe>
پارامترتوضیح
ui=trueخروجی گرافیکی به‌جای JSON
api_keyتوکن API (در آدرس، چون iframe هدر نمی‌فرستد)
ui_controls=falseحذف فرم بالای ویجت که بازدیدکننده با آن پارامترها را عوض می‌کند
body={...}برای سرویس‌های POST: بدنه JSON در آدرس (یا هر فیلد به‌صورت یک پارامتر جدا)
ui_primary=2563ebتغییر یک رنگ فقط برای همین فراخوانی؛ همین‌طور ui_accent، ui_background، ui_surface، ui_text، ui_muted، ui_border، ui_radius، ui_font و ui_map

رنگ‌ها، فونت و گردی گوشه‌ها را یک بار در «قالب رنگ ویجت‌ها»ی توکن (صفحه توکن‌های API) تنظیم کنید تا همه ویجت‌های آن توکن با سایت شما هماهنگ باشند؛ نتیجه را قبل از استفاده در «آزمایشگاه سرویس» صفحه هر سرویس ببینید. چون کلید در کد صفحه دیده می‌شود، برای سایت یک توکن جدا با «دامنه مجاز» و «سقف مصرف» بسازید.

اتصال با MCP (برای دستیارهای هوش مصنوعی)

اگر دستیار یا ایجنت هوش مصنوعی می‌سازید، به‌جای نوشتن کد برای هر API می‌توانید همه سرویس‌ها را با پروتکل MCP به مدل بدهید. آدرس سرور https://cloud.geotajak.ir/mcp است و با همان توکن API کار می‌کند؛ هر فراخوانی ابزار برابر یک درخواست همان سرویس حساب می‌شود.

Claude Code

claude mcp add --transport http geotajak https://cloud.geotajak.ir/mcp \
  --header "Authorization: Bearer YOUR_TOKEN"

Cursor، VS Code و برنامه‌های مشابه

{
  "mcpServers": {
    "geotajak": {
      "url": "https://cloud.geotajak.ir/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}

برای هر ایجنت یک توکن جدا با اعتبار و سقف مصرف محدود بسازید. فهرست ابزارها، نمونه Python و نکته‌های محدودیت توکن در راهنمای کامل MCP آمده است.

سرویس‌ها

فهرست کامل سرویس‌ها با قیمت، میزان استفاده، نمونه کد و امکان امتحان مستقیم در صفحه سرویس‌ها است. سوالی دارید؟ از بخش تیکت‌ها بپرسید یا از دستیار هوشمند کمک بگیرید.