مرجع API
همهچیز برای اتصال برنامه شما به مدلهای آنیگپ: احراز هویت، گفتگو، استریم، تصویر، صدا و خطاها — دقیقا همانطور که سرویس واقعا رفتار میکند.
معرفی
آنیگپ یک اندپوینت سازگار ارائه میدهد: اگر کلاینت یا SDK شما با قرارداد رایج chat/completions کار میکند، کافی است آدرس پایه را عوض کنید — بقیه کد شما دستنخورده میماند.
https://anygap.ir/v1
اندپوینتهای موجود:
| متد و مسیر | احراز هویت | کاربرد |
|---|---|---|
GET /v1/models | عمومی | لیست مدلهای فعال |
POST /v1/chat/completions | کلید API | گفتگو (عادی و استریم) |
POST /v1/images/generations | کلید API | تولید تصویر |
POST /v1/audio/transcriptions | کلید API | رونویسی صدا |
احراز هویت
از داشبورد ← کلیدهای API یک کلید جدید بسازید. کلیدها با پیشوند agp- شروع میشوند (کلیدهای قدیمی gpt- همچنان معتبرند) و مقدار کامل آنها فقط یک بار، هنگام ساخت نمایش داده میشود — بعدا فقط نسخه ماسکشده را میبینید.
کلید را در هدر Authorization هر درخواست بفرستید:
Authorization: Bearer agp-1f87c3a9e4b2d6f0c5a8e1b4d7f0a3c6e9b2d5f8a1c4e7b0d3f6a9c2e5b8d1f4
- کلید را هرگز در کد فرانتاند، مخزن گیت یا سمت کلاینت قرار ندهید — فقط از سرور خودتان فراخوانی کنید.
- کلید را در متغیر محیطی نگه دارید (مثلا ANYGAP_API_KEY).
- اگر کلیدی لو رفت، از داشبورد آن را غیرفعال یا برای همیشه حذف کنید و یک کلید جدید بسازید. میتوانید برای هر برنامه یک کلید جدا داشته باشید.
تکمیل گفتگو
POST /v1/chat/completions — قلب API. یک مدل و آرایهای از پیامها میفرستید و پاسخ مدل را میگیرید. فیلدهای model و messages الزامیاند؛ بقیه پارامترها بدون تغییر به مدل پاس داده میشوند.
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
model | string | بله | اسلاگ مدل — مثل gpt-oss-120b. لیست کامل در GET /v1/models. |
messages | array | بله | آرایه پیامها با role (system | user | assistant | tool) و content. برای مدلهای بینایی، content میتواند آرایهای از بخشهای text و image_url باشد. |
stream | boolean | خیر | پیشفرض false. با true پاسخ به صورت SSE استریم میشود. |
temperature | number | خیر | میزان خلاقیت پاسخ. مستقیم به مدل ارسال میشود. |
max_tokens | integer | خیر | حداکثر توکن خروجی. مستقیم به مدل ارسال میشود. |
top_p, stop, ... | — | خیر | سایر پارامترهای استاندارد نمونهبرداری بدون تغییر به مدل پاس داده میشوند. |
درخواست بدون استریم:
curl https://anygap.ir/v1/chat/completions \
-H "Authorization: Bearer $ANYGAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss-120b",
"messages": [
{"role": "user", "content": "سلام! خودت را معرفی کن."}
]
}'پاسخ:
{
"id": "chatcmpl-9f3c...",
"object": "chat.completion",
"created": 1718182800,
"model": "gpt-oss-120b",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "سلام! من دستیار هوش مصنوعی آنیگپ هستم..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 38,
"total_tokens": 50
}
}استریم (SSE)
با "stream": true پاسخ بهصورت Server-Sent Events با هدر Content-Type: text/event-stream برمیگردد. هر رویداد یک خط data: با یک قطعه JSON است که متن تازه در choices[0].delta.content قرار دارد. پایان استریم با data: [DONE] اعلام میشود.
curl -N https://anygap.ir/v1/chat/completions \
-H "Authorization: Bearer $ANYGAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss-20b",
"messages": [{"role": "user", "content": "Count to three."}],
"stream": true
}'data: {"id":"chatcmpl-9f3c...","object":"chat.completion.chunk","created":1718182800,"model":"gpt-oss-20b","choices":[{"index":0,"delta":{"role":"assistant","content":"One"},"finish_reason":null}]}
data: {"id":"chatcmpl-9f3c...","object":"chat.completion.chunk","created":1718182800,"model":"gpt-oss-20b","choices":[{"index":0,"delta":{"content":", two"},"finish_reason":null}]}
data: {"id":"chatcmpl-9f3c...","object":"chat.completion.chunk","created":1718182800,"model":"gpt-oss-20b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]مدلها
هر مدل با یک اسلاگ شناخته میشود که در فیلد model میفرستید. لیست زنده مدلهای API را از GET /v1/models (بدون نیاز به کلید) بگیرید. کاتالوگ API با مدلهای اپلیکیشن چت متفاوت است — اینجا مدلها با نام واقعیشان ارائه میشوند و همگی با یک قیمت ثابت برای هر درخواست در دسترساند.
curl https://anygap.ir/v1/models
{
"object": "list",
"data": [
{
"id": "gpt-oss-120b",
"object": "model",
"created": 1714521600,
"owned_by": "anygap",
"permission": [],
"root": "gpt-oss-120b",
"parent": null
}
]
}کاتالوگ فعلی API (همین لیست را اندپوینت بالا زنده برمیگرداند):
| اسلاگ | نام | دسته | کانتکست | قیمت هر درخواست |
|---|---|---|---|---|
gpt-oss-120b | GPT-OSS 120B | chat | 131K | ۱٬۰۰۰ تومان |
gpt-oss-20b | GPT-OSS 20B | chat | 131K | ۱٬۰۰۰ تومان |
llama-3.3-70b-instruct | Llama 3.3 70B Instruct | chat | 131K | ۱٬۰۰۰ تومان |
gemma-4-26b | Gemma 4 26B | chat | 262K | ۱٬۰۰۰ تومان |
gemma-4-31b | Gemma 4 31B | chat | 262K | ۱٬۰۰۰ تومان |
qwen3-coder | Qwen3 Coder | chat | 1M | ۱٬۰۰۰ تومان |
qwen3-next-80b | Qwen3 Next 80B | chat | 262K | ۱٬۰۰۰ تومان |
nemotron-3-super-120b | Nemotron 3 Super 120B | chat | 1M | ۱٬۰۰۰ تومان |
nemotron-3-ultra-550b | Nemotron 3 Ultra 550B | chat | 1M | ۱٬۰۰۰ تومان |
gemini-3-pro-image | Gemini 3 Pro Image | image | — | ۱٬۰۰۰ تومان |
gemini-3.1-flash-image | Gemini 3.1 Flash Image | image | — | ۱٬۰۰۰ تومان |
تولید تصویر
POST /v1/images/generations — فیلدهای الزامی model (یک مدل با دسته image، مثل gemini-3-pro-image یا gemini-3.1-flash-image) و prompt. فیلد n تعداد تصویر است (۱ تا ۸، پیشفرض ۱) و پارامترهای اختیاری مثل size، quality و response_format به مدل پاس داده میشوند. ارسال اسلاگ غیرتصویری خطای 400 برمیگرداند.
curl https://anygap.ir/v1/images/generations \
-H "Authorization: Bearer $ANYGAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3-pro-image",
"prompt": "غروب آفتاب روی دریا، سبک نقاشی",
"n": 1
}'رونویسی صدا
POST /v1/audio/transcriptions — برخلاف بقیه اندپوینتها، بدنه باید multipart/form-data باشد: بخش file (فایل صوتی، حداکثر حدود ۲۵ مگابایت) و بخش متنی model (اسلاگ یک مدل با دسته audio). فیلدهای اختیاری مثل language، prompt، response_format و temperature هم پاس داده میشوند. در دسترس بودن مدل صوتی به لیست زنده مدلها بستگی دارد — قبل از استفاده، GET /v1/models را بررسی کنید.
curl https://anygap.ir/v1/audio/transcriptions \ -H "Authorization: Bearer $ANYGAP_API_KEY" \ -F file=@meeting.mp3 \ -F model=AUDIO_MODEL_SLUG
خطاها
همه خطاها با یک شکل JSON واحد برمیگردند:
{
"error": {
"message": "Invalid API key",
"type": "AuthenticationError",
"code": 401
}
}| کد | type | چه زمانی رخ میدهد |
|---|---|---|
400 | ValidationError | بدنه ناقص یا نامعتبر — مثلا نبود model یا messages، یا استفاده از مدل غیرتصویری در /images/generations. |
401 | AuthenticationError | هدر Authorization غایب یا بدفرمت، کلید نامعتبر یا غیرفعال، یا حساب کاربری مسدود. |
402 | InsufficientBalanceError | موجودی کیف پول کافی نیست. |
404 | NotFoundError | اسلاگ مدل ناشناخته/غیرفعال است یا ارائهدهنده آن موقتا در دسترس نیست. |
5xx | InternalError | خطای غیرمنتظره در گیتوی یا خطای سرویس بالادستی. |
در تولید تصویر و رونویسی صدا، اگر سرویس بالادستی خطا بدهد، همان کد وضعیت و بدنه خطای بالادستی عینا به شما برگردانده میشود.
نمونه کد
هر سه نمونه با همان کلیدی که در داشبورد ساختید، قابل اجرا هستند.
import requests
API_KEY = "agp-..." # از /dashboard/keys
resp = requests.post(
"https://anygap.ir/v1/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "llama-3.3-70b-instruct",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "یک هایکو درباره دریا بنویس"},
],
"temperature": 0.7,
"max_tokens": 512,
},
timeout=60,
)
resp.raise_for_status()
print(resp.json()["choices"][0]["message"]["content"])# هر SDK رسمی دلخواه — کافی است base_url را به اندپوینت سازگار ما بدهید.
from openai import OpenAI
client = OpenAI(
base_url="https://anygap.ir/v1",
api_key="agp-...", # کلید آنیگپ شما
)
stream = client.chat.completions.create(
model="gemma-4-26b",
messages=[{"role": "user", "content": "سه ایده برای اسم یک کافه"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)const res = await fetch("https://anygap.ir/v1/chat/completions", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ANYGAP_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "qwen3-coder",
messages: [{ role: "user", content: "Explain SSE in one paragraph." }],
stream: true,
}),
});
const reader = res.body.getReader();
const decoder = new TextDecoder();
let buffer = "";
while (true) {
const { done, value } = await reader.read();
if (done) break;
buffer += decoder.decode(value, { stream: true });
const lines = buffer.split("\n");
buffer = lines.pop() ?? "";
for (const line of lines) {
if (!line.startsWith("data: ") || line === "data: [DONE]") continue;
const chunk = JSON.parse(line.slice(6));
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
}انیکد (CLI)
انیکد یک عاملِ برنامهنویسیِ خطفرمان و بدون وابستگی برای آنیگپ است — مثل Codex یا Claude Code، اما در ترمینال شما. آن را در هر پروژهای اجرا کنید تا کدتان را بخواند، بنویسد، ویرایش کند (همراه با diff)، جستوجو و اجرا کند — همه با اجازهی شما — روی https://anygap.ir/v1. فقط به Node 18+ نیاز دارد و یک ماسکوت کوچک ترمینالی مخصوص خودش هم دارد.
۱ · نصب
با npm بهصورت سراسری نصب کنید — این کار دستور anycode را روی PATH شما قرار میدهد:
npm i -g @anygap/anycode
یا اگر از سورس کار میکنید:
cd tools/anycode-cli && npm link
۲ · احراز هویت
از داشبورد ← کلیدهای API یک کلید با پیشوند agp- بسازید، سپس anycode login را اجرا کنید (کلید در ~/.anycode/config.json ذخیره میشود). بهجای آن میتوانید از متغیرهای محیطی ANYCODE_API_KEY و — در صورت تمایل — ANYCODE_MODEL استفاده کنید.
# روش تعاملی — کلید را در ~/.anycode/config.json ذخیره میکند anycode login # یا با متغیرهای محیطی export ANYCODE_API_KEY="agp-..." export ANYCODE_MODEL="laguna-m1"
۳ · بررسی نصب
برای اطمینان از نصب درست و دیدن مدلهای در دسترس:
anycode --help anycode models
۴ · REPL عاملی
anycode بدون آرگومان یک REPLِ عاملی باز میکند. از او بخواهید چیزی بسازد، درست کند یا اجرا کند و او با ابزارهای واقعی همان کار را انجام میدهد — فایل میسازد، ویرایش میکند (بهصورت diff)، پروژه را جستوجو میکند و دستور اجرا میکند — بهجای اینکه فقط کد چاپ کند. دستورها و میانبرها:
| دستور / ورودی | کاربرد |
|---|---|
/model · /models | انتخاب مدل فعال با کلیدهای ↑/↓ |
/mode | تغییر حالت تأیید (suggest · auto-edit · full-auto) |
/diff | نمایش diff گیت در دایرکتوری کاری |
/init | ساخت فایل زمینهی پروژه AGENTS.md |
/status · /tools | مدل/حالت/مسیر/تعداد دور · فهرست ابزارها |
/clear · /cwd · /help · /exit | ریست · نمایش مسیر · راهنما · خروج |
@path | پیوست محتوای یک فایل بهعنوان زمینه |
!command | اجرای مستقیم یک دستور شل |
۵ · حالتهای تأیید و ابزارها
انیکد بدون اجازهی شما فایلی را تغییر نمیدهد یا دستوری اجرا نمیکند. حالت را هر زمان با /mode عوض کنید (یا با --auto-edit / --full-auto شروع کنید):
| حالت | رفتار |
|---|---|
suggest | پیش از هر ویرایش و دستور میپرسد (پیشفرض) |
auto-edit | ویرایشها خودکار اعمال میشوند، برای دستورها میپرسد |
full-auto | ویرایشها و دستورها خودکار اجرا میشوند |
پشت صحنه، عامل هفت ابزار دارد — read_file، list_dir، search، glob، write_file، edit_file و run_command — همه محدود به دایرکتوری جاری، با یک فهرستِ منعِ داخلی که دستورهای خطرناک را در هر حالت مسدود میکند. برای اسکریپتنویسی، anycode exec یک کار را غیرتعاملی و در حالت full-auto اجرا میکند:
# یک کار را غیرتعاملی (full-auto) اجرا کن و خارج شو anycode exec "یک اسکریپت پایتون بساز که سلام چاپ کند، بعد اجرایش کن" # یا REPL را با یک کار اولیه شروع کن anycode agent "تستها را اجرا کن و خطاها را درست کن"
انیکد از همان API استفاده میکند: هر درخواست یک هزینه ثابت دارد که از کیف پول شما کسر میشود — دقیقا مثل بخش «قیمت و کیف پول».
پلیگراند
همینجا یک درخواست واقعی به گیتوی بزنید: یکی از کلیدهای خودتان را انتخاب کنید، مدل و پیام را مشخص کنید و پاسخ خام API را ببینید. درخواست واقعی است و مثل هر درخواست API از کیف پول شما کسر میشود.
قیمت و کیف پول
قیمتگذاری API ساده است: هر مدل یک قیمت ثابت برای هر درخواست دارد — فارغ از طول پیام یا تعداد توکن. در حال حاضر همه مدلها ۱٬۰۰۰ تومان برای هر درخواست. مبلغ پس از پاسخ موفق از کیف پول شما کسر میشود و همه درخواستها در صفحه مصرف ثبت میشوند.
| مدل | قیمت هر درخواست |
|---|---|
gpt-oss-120b | ۱٬۰۰۰ تومان |
gpt-oss-20b | ۱٬۰۰۰ تومان |
llama-3.3-70b-instruct | ۱٬۰۰۰ تومان |
gemma-4-26b | ۱٬۰۰۰ تومان |
gemma-4-31b | ۱٬۰۰۰ تومان |
qwen3-coder | ۱٬۰۰۰ تومان |
qwen3-next-80b | ۱٬۰۰۰ تومان |
nemotron-3-super-120b | ۱٬۰۰۰ تومان |
nemotron-3-ultra-550b | ۱٬۰۰۰ تومان |
gemini-3-pro-image | ۱٬۰۰۰ تومان |
gemini-3.1-flash-image | ۱٬۰۰۰ تومان |
اگر موجودی کیف پول کمتر از قیمت درخواستِ مدل انتخابی باشد، گیتوی پیش از ارسال درخواست خطای 402 برمیگرداند. از کیف پول شارژ کنید. درخواستهای ناموفق (خطای بالادستی) هزینهای ندارند.
اولین کلید خود را بسازید و در کمتر از یک دقیقه اولین درخواست را بزنید.