חיפוש בתיעוד...

התחילו להקליד כדי לחפש בתיעוד

מדריך הפלטפורמה

API של הפלטפורמה

קראו מהקוד את הקטלוג, את המחירים, את היתרה ואת השימוש שלכם.

זה כל מה שאינו שליחת פרומפט: אילו מודלים קיימים, כמה גובה כל ספק, כמה הוצאתם, ואילו מפתחות יש לכם. הכול מוחזר כ-JSON מאותו מארח api שאליו אתם שולחים בקשות השלמה.

נקודות הקצה של הקטלוג והמחירים ציבוריות ואינן דורשות אמצעי הזדהות כלל. כל מה שנוגע לחשבון שלכם דורש אמצעי הזדהות, ויש שני סוגים.

הם אינם בני החלפה. מפתח API אינו יכול לקרוא את היתרה שלכם, ואסימון גישה אינו יכול לשלוח בקשת השלמה.

אמצעי הזדהותאיך זה נראהמה זה פותח
מפתח APIsk-...הסקה, רשימת המודלים, ומונה השימוש של אותו מפתח בלבד.
אסימון גישה29 עד 32 תווים, ללא קידומתהחשבון שלכם: יתרה, ניהול מפתחות, יומני שימוש.

שניהם נשלחים באותה כותרת, Authorization: Bearer ואחריה הערך. שום דבר אחר אינו נקרא. דוגמאות ישנות מוסיפות כותרת New-Api-User, שמתעלמים ממנה, ואין מנגנון גיבוי מבוסס עוגיות.

שלחו את הכותרת הזאת גם כשנקודת הקצה הייתה עונה בלעדיה. בקשה לנתיב של חשבון שאינה נושאת אמצעי הזדהות עלולה להיתקל באתגר אבטחה לפני שהיא מגיעה אלינו, ואתגר כזה עונה HTML במקום JSON.

פתחו את ההגדרות, מצאו את גישת API תחת אבטחה, וצרו אסימון. הוא מוצג פעם אחת בלבד. אפשר ליצור אותו רק כשאתם מחוברים, ולכן סקריפט אינו יכול להנפיק לעצמו אסימון.

יש לכם אסימון גישה אחד בכל רגע נתון. יצירת אסימון חדש מבטלת את הישן בשקט, וכל מה שעדיין משתמש בו מפסיק לעבוד.

התייחסו אליו כאל סיסמה. הוא יכול להוציא כסף, ליצור מפתחות ולקרוא את ההיסטוריה שלכם. בטלו אותו מאותו מסך ברגע שסקריפט כבר אינו זקוק לו.

בקשה ציבורית אחת מחזירה כל מודל, עם מחירים שכבר הומרו לדולרים למיליון טוקנים. בלי מפתח, בלי הרשמה.

bash
curl https://api.unorouter.com/api/pricing/catalog
json
{
  "counts": { "models": 239, "free": 134, "paid": 105, "vendors": 50 },
  "first_free_model": "glm-5.3:free",
  "vendors": [{ "vendor_id": 4, "vendor_name": "Zhipu", "icon": "Zhipu.Color" }],
  "models": [
    {
      "model_name": "glm-5.3",
      "vendor": "Zhipu",
      "type": "text",
      "is_free": false,
      "online": true,
      "input_price": 0.05103,
      "output_price": 0.160382187,
      "original_input_price": 1.26,
      "original_output_price": 3.960054,
      "tags": "Text,Reasoning,Tools,Cache",
      "supported_endpoint_types": ["openai", "anthropic"],
      "uptime_24h": 99.965,
      "success_rate": 95,
      "avg_latency_ms": 11062
    }
  ]
}

input_price ו-output_price הם מה שתשלמו בפועל היום, אצל הספק הזול ביותר שמשרת כרגע את המודל. original_input_price ו-original_output_price הם מחיר המחירון של היצרן עצמו, ולכן הפער בין השניים הוא ההנחה. is_free מסמן מודלים שלעולם אינם גובים תשלום, ו-online מסמן את אלה שיש להם ספק פעיל ברגע זה.

שני קרובים קטנים יותר: /api/pricing/counts מחזירה רק את הסכומים הכוללים והיא זולה מספיק לתשאול תכוף, ו-/api/pricing/vendors מחזירה את רשימת היצרנים. נקודת הקצה הישנה יותר /api/pricing מחזירה יחסים גולמיים במקום דולרים והיא גדולה פי כמה.

רוב המודלים מוגשים על ידי כמה ספקים בתעריפים שונים. בקשו מודל בודד כדי לראות את כולם.

bash
curl "https://api.unorouter.com/api/pricing/catalog/model?model=glm-5.3"
json
{
  "model_name": "glm-5.3",
  "model_ratio": 0.63,
  "completion_ratio": 3.1429,
  "cache_ratio": 0.1857,
  "input_price": 0.05103,
  "output_price": 0.160382187,
  "grid_min_ratio": 0.0405,
  "auto_chain": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3", "a7-4069-glm-5.3"],
  "group_ratio": {
    "a7-bbgt-2846-glm-5.3": 0.0405,
    "a7-kkl-3731-glm-5.3": 0.0911,
    "a7-4069-glm-5.3": 0.1214
  },
  "enable_groups": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3"]
}

auto_chain הוא הסדר שבו הניתוב מנסה אותם, מהזול ביותר תחילה. group_ratio נותן את המקדם של כל ספק, והמחיר נגזר ממנו:

text
input  $/1M = model_ratio * 2 * group_ratio
output $/1M = input * completion_ratio
cached $/1M = input * cache_ratio

glm-5.3 on a7-bbgt-2846: 0.63 * 2 * 0.0405 = $0.05103 / 1M in
                          0.05103 * 3.1429  = $0.16038 / 1M out

שמות הקבוצות האלה הם אותם שמות שאליהם אתם מצמידים מפתח, ראו הצמדת קבוצות

הרשימה תואמת OpenAI היא מה שרוב הלקוחות קוראים לו כשלוחצים על התחברות. היא דורשת מפתח API.

bash
curl https://api.unorouter.com/v1/models \
  -H "Authorization: Bearer $UNOROUTER_API_KEY"

היא מחזירה רק את מה שאותו מפתח רשאי להשתמש בו בפועל, ולכן מפתח בשכבה החינמית רואה פחות מודלים ממפתח ממומן. כל רשומה נושאת גם context_length ו-max_output_tokens, ש-OpenAI הרגילה אינה מספקת.

הנתיב הוא /v1/models. השמטת /v1 מובילה אתכם לדף אינטרנט ולא ל-API, ולקוחות מדווחים על כך כשגיאת פענוח JSON בגלל doctype לא צפוי.

קריאה אחת מחזירה את החשבון שלכם, כולל מה שנותר להוצאה.

bash
curl https://api.unorouter.com/api/user/self \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"
json
{
  "success": true,
  "message": "",
  "data": {
    "id": 12345,
    "username": "you",
    "group": "default",
    "quota": 265000,
    "used_quota": 4231900,
    "request_count": 1884,
    "aff_code": "ABC123"
  }
}

הסכומים הם ביחידות מכסה, לא בדולרים. 500,000 יחידות שוות דולר אמריקאי אחד, ולכן היתרה שלמעלה היא $0.53. חלקו ב-500,000 כדי להציג כסף.

quota הוא מה שעדיין אפשר להוציא. used_quota ו-request_count הם סכומים מצטברים לכל החיים שרק עולים, ולכן used_quota אינו ההפרש בין משהו ובין היתרה שלכם.

הציגו את רשימת המפתחות שלכם, ואז חשפו אחד לפי המזהה שלו.

bash
curl "https://api.unorouter.com/api/token/?p=1&page_size=20" \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"

curl -X POST https://api.unorouter.com/api/token/42/key \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"

הצגת הרשימה ממסכת את ערכו של כל מפתח, ולכן החשיפה היא קריאה נפרדת. קריאה זו מוגבלת בקצב ונרשמת ביומן הביקורת שלכם.

יצירת מפתח מחזירה success אך לא את המפתח עצמו. צור אותו, הצג רשימה כדי למצוא את ה-id שלו, ואז חשוף אותו. עדכון מפתח מחזיר את האובייקט המעודכן, אך שלח את האובייקט המלא: רק cross_group_retry, group_mapping ו-auto_groups שורדים השמטה, וכל שדה אחר שתשמיט ייכתב מחדש כריק.

היסטוריית הבקשות שלכם מחולקת לעמודים וניתנת לסינון.

bash
curl -G https://api.unorouter.com/api/log/self \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN" \
  -d p=1 \
  -d page_size=100 \
  -d type=2 \
  -d start_timestamp=1789344000 \
  -d model_name=glm-5.3
פרמטרמשמעות
type1 טעינת יתרה, 2 צריכה, 3 ניהול, 5 שגיאה, 6 החזר, 7 התחברות. השמיטו אותו כדי לקבל הכול.
start_timestamp, end_timestampשניות יוניקס. הפער בין השניים אינו יכול לעלות על עשר שנים.
model_name, token_name, groupצמצום למודל אחד, למפתח אחד או לקבוצת ספק אחת.
request_id, upstream_request_idאיתור בקשה בודדת, לפי המזהה שלנו או לפי זה של הספק.

הוסיפו p ו-page_size לעימוד, כאשר גודל העמוד מוגבל ל-100. נקודת קצה אחות, /api/log/self/stat, מחזירה רק את הסכומים הכוללים לאותם מסננים: הוצאה, בקשות לדקה וטוקנים לדקה.

כדי לקרוא את היתרה שנותרה למפתח יחיד בלי אסימון גישה, הזדהו באמצעות המפתח עצמו:

bash
curl https://api.unorouter.com/api/usage/token/ \
  -H "Authorization: Bearer $UNOROUTER_API_KEY"
json
{
  "object": "token_usage",
  "name": "SillyTavern",
  "total_granted": 500000,
  "total_used": 231900,
  "total_available": 268100,
  "unlimited_quota": false,
  "model_limits_enabled": false,
  "expires_at": 0
}

נקודות קצה של חשבון עוטפות את המטען שלהן. נקודות קצה מעומדות עוטפות אותו פעמיים.

json
{ "success": true, "message": "", "data": { ... } }

{ "success": true, "message": "", "data": {
    "page": 1, "page_size": 20, "total": 137, "items": [ ... ]
} }

נקודות הקצה הציבוריות של הקטלוג הן היוצא מן הכלל ומחזירות את האובייקט שלהן ישירות, ללא עטיפה.

רוב הכשלים עדיין עונים HTTP 200 כאשר success מוגדר כ-false ולצדו הודעה שמסבירה מדוע. בדקו את השדה הזה ולא את קוד הסטטוס.

אימות הוא היוצא מן הכלל ועונה בסטטוס אמיתי: 401 עם AUTH_UNAUTHORIZED עבור אמצעי הזדהות שגוי, AUTH_TOKEN_EXPIRED עבור אחד שפג תוקפו, AUTH_SESSION_REVOKED לאחר התנתקות, ו-403 AUTH_INSUFFICIENT_PRIVILEGE כאשר החשבון אינו רשאי לקרוא לנתיב הזה.