# מגבלות קצב

> אסימון API של Nodaro מאפשר 30 בקשות הרצה לדקה כברירת מחדל, ועד 120. ראו את המגבלות לכל נתיב, שני קודי 429, גודלי אצווה ואיך לנסות שוב.

Source: https://nodaro.ai/he/docs/developers/api/rate-limits

**מגבלות קצב** מגינות על ה-API של Nodaro מפני עומס פתאומי של בקשות. לכל אסימון API אישי יש תקציב משלו של הרצות תהליכים לדקה, לכמה נתיבים יש מגבלות משלהם, ובקשה שחורגת ממגבלה נדחית עם `429 Too Many Requests`. תשאול של משימה או של הרצה אף פעם לא נספר בתקציב של האסימון, כך שאפשר לבדוק את הסטטוס מדי כמה שניות בלי שהתקציב ייגמר.

## המגבלה לכל אסימון
לכל אסימון API אישי יש תקציב של בקשות לדקה:

- **30 בקשות לדקה כברירת מחדל.** קובעים את המגבלה כשיוצרים את האסימון, בשדה **מגבלת קצב (בקשות לדקה)**, בין 1 ל-120. אפשר לשנות אותה אחר כך עם השדה `rateLimit` ב-`PATCH /v1/api-tokens/:id`.
- **רק שני נתיבים נספרים:** `POST /v1/api/run` ו-`GET /v1/api/workflows`.
- **בקשות קריאה לא נספרות.** הנתיבים `GET /v1/api/status/:execId`, `GET /v1/api/result/:execId` ו-`GET /v1/api/schema` לא נספרים בתקציב.
- **התקציב מתאפס כל דקה.**

בקשה שחורגת מהתקציב מקבלת את התגובה הזו:

```json
{ "error": { "code": "rate_limited", "message": "Too many requests. Max 30 per minute." } }
```

כדי לעבוד מהר יותר, העלו את המגבלה של האסימון ל-120. מעבר לזה, צרו עוד אסימונים, עד 10 לחשבון, ופזרו ביניהם את הבקשות. ראו את דף ה-API [אימות](https://nodaro.ai/docs/developers/api/authentication).

## מגבלות אחרות
| נתיב | מגבלה | התגובה בחריגה |
| --- | --- | --- |
| `POST /v1/webhooks/:token` (רכיב [טריגר Webhook](https://nodaro.ai/docs/nodes/automate/webhook-trigger)) | 10 בקשות לדקה לכל טריגר | `429` |
| הרצות של אפליקציה שפורסמה | מגבלת ההרצות היומית של האפליקציה, לכל משתמש | `429 rate_limit_exceeded` |
| `POST /v1/download-video` | 4 ייבואים של סרטונים במקביל לכל חשבון | `429 too_many_downloads` |
| `POST /v1/video-overlay` | 30 בקשות לדקה לכל משתמש | `429 rate_limit_exceeded` |
| `POST /v1/freecut-export` | 10 בקשות לדקה | `429 rate_limit_exceeded` |
| `POST /v1/characters/:id/train` | 3 בקשות לדקה לכל אסימון | `429 rate_limit_exceeded` |
| `POST /v1/oauth/register` | 10 בקשות לדקה לכל כתובת IP | `429 rate_limit_exceeded` |
| `POST /v1/orgs` | כמה ארגונים חדשים בשעה לכל משתמש | `429 rate_limit_exceeded` |
| `POST /v1/workspaces/join` | 10 ניסיונות לדקה לכל חשבון ו-30 לכל כתובת IP | `429 rate_limit_exceeded` |
| `POST /v1/workflows/:id/collaborators` | 20 הוספות לדקה לכל חשבון | `429 rate_limit_exceeded` |
| ייצוא נתוני שימוש כקובץ CSV | 10 לדקה לכל משתמש | `429 rate_limit_exceeded` |
| `POST /v1/orgs/:id/invitations` | 500 הזמנות ביום לכל ארגון | `429 bulk_invite_cap_exceeded` |
| `GET /v1/invitations/by-token/:token`, `GET /v1/shots/:id`, שלב ההחלפה בהתחברות SSO | מגבלה לכל כתובת IP | `429 rate_limit_exceeded` |

## שני קודי 429 שונים
- **`rate_limited`** מגיע רק מהתקציב לכל אסימון של הנתיבים `/v1/api/`.
- **`rate_limit_exceeded`** מגיע מכל שאר המגבלות: המגבלות לכל כתובת IP בכמה נתיבים שלא דורשים אסימון, המגבלות על כל מי שקורא לנתיבים מסוימים ומגבלת ההרצות היומית של אפליקציה שפורסמה.

נתיבים עם מגבלה לכל מי שקורא להם שולחים כותרת `Retry-After`. בנתיב שמוציא קרדיטים, כשהשרת לא יכול לבדוק את המגבלה, הוא מחזיר `503 rate_limit_unavailable`.

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

## טיפול נכון במגבלות
- **בדקו את הסטטוס כל 2–5 שניות.** הרצה משנה מצב בתוך שניות, ותשאול מהיר יותר לא נותן שום יתרון.
- **בדקו הרבה משימות בקריאה אחת.** הנתיבים `GET /v1/jobs/status` ו-`POST /v1/jobs/batch-status` מחזירים כל אחד עד 100 משימות. ראו בדף ה-API [משימות](https://nodaro.ai/docs/developers/api/jobs#poll-many-jobs-at-once).
- **אחרי `429`, האריכו את ההמתנה אקספוננציאלית:** המתינו 5 שניות, אחר כך 10 ואחר כך 20, לפני כל ניסיון חוזר. כשיש כותרת `Retry-After`, המתינו לפחות את הזמן שהיא מציינת.
- **התייחסו לשאר שגיאות ה-`4xx` כסופיות.** תקנו את הבקשה במקום לנסות אותה שוב. ראו את דף ה-API [שגיאות](https://nodaro.ai/docs/developers/api/errors).

```ts

async function withBackoff<T>(call: () => Promise<T>): Promise<T> {
for (const seconds of [5, 10, 20]) {
try {
return await call()
} catch (err) {
if (!(err instanceof RateLimitedError)) throw err
await new Promise((r) => setTimeout(r, seconds * 1_000))
}
}
return call()
}

const { executionId } = await withBackoff(() => client.workflows.run(workflowId))
```

## גודלי אצווה ועמוד
| נקודת קצה | מגבלה |
| --- | --- |
| `GET /v1/jobs/status?ids=…` | עד 100 מזהים |
| `POST /v1/jobs/batch-status` | עד 100 מזהים |
| `GET /v1/jobs` | `limit` עד 100 |
| `GET /v1/characters` | `limit` עד 500, 100 כברירת מחדל |
| `GET /v1/objects`, `/v1/creatures`, `/v1/locations`, `/v1/faces` | `limit` עד 500 |
| `GET /v1/credits/transactions` | `limit` בין 1 ל-50, 20 כברירת מחדל |
| `POST /v1/credits/model-costs` | עד 50 מזהי מודלים |
| `GET /v1/community/browse` | `limit` עד 50, 20 כברירת מחדל |
| `GET /v1/orgs/:id/members` | `limit` עד 200, 50 כברירת מחדל |
| `POST /v1/orgs/:id/invitations` | עד 200 כתובות בקריאה אחת |
| אסימוני API | 10 לכל חשבון |
| יישומי מפתחים של OAuth | 5 שנרשמו ידנית לכל משתמש |

## שאלות נפוצות

### מה מגבלת הקצב של אסימון API ב-Nodaro?

מגבלת הקצב של אסימון API ב-Nodaro היא 30 בקשות לדקה כברירת מחדל, ואפשר להעלות אותה עד 120 לכל אסימון. המגבלה סופרת רק הרצות של תהליכים ובקשות לרשימת התהליכים, כלומר POST /v1/api/run ו-GET /v1/api/workflows.

### האם תשאול נספר במגבלת הקצב?

לא. קריאה של הסטטוס של הרצה, של התוצאה שלה או של הסכמה של תהליך לא נספרת בתקציב של האסימון, וגם לא קריאה של הסטטוס של משימות. בדקו את הסטטוס כל 2–5 שניות.

### מה עושים כשמקבלים שגיאת 429?

כשה-API של Nodaro מחזיר 429, המתינו ונסו שוב, והאריכו את ההמתנה אקספוננציאלית, למשל אחרי 5, 10 ו-20 שניות. כשבתגובה יש כותרת Retry-After, המתינו לפחות את הזמן שהיא מציינת. בססו את הלוגיקה של הניסיונות החוזרים על הסטטוס 429, לא על קוד השגיאה.

### איך מקבלים מגבלת קצב גבוהה יותר?

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

### האם יש מגבלת קצב לטריגרים של Webhook?

כן, בנפרד מאסימוני ה-API. כל רכיב טריגר Webhook מקבל עד 10 בקשות לדקה בכתובת ה-URL שלו.
