# ערכות

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

Source: https://nodaro.ai/he/docs/developers/api/presets

**ה-API של הערכות** קורא וכותב את הערכות השמורות שלכם, את התיקיות שלהן ואת המועדפים שלכם, וקורא את קטלוג הערכות המובנות של כל סוג רכיב. ערכה היא תצורת רכיב עם שם (למשל מודל, פרומפט, יחס גובה־רוחב ואיכות) שמחילים על רכיב בצעד אחד. השדה `data` של ערכה הוא תצורת הרכיב שנשמרה: כדי להחיל את הערכה, מזגו אותו לתוך הנתונים של רכיב.

הנתיבים עובדים בכל מהדורה. הם מקבלים אסימון Bearer: אסימון API אישי (`ndr_…`), אסימון של אפליקציית OAuth או אסימון הסשן שלכם. אסימון של אפליקציית OAuth צריך את `presets:read` לקריאה ואת `assets:write` לכתיבה. קטלוג הערכות המובנות, `GET /v1/node-presets/factory`, לא דורש אסימון בכלל. אסימון אישי שמוגבל לתהליכים מסוימים לא יכול לגשת לערכות שלכם (`403 forbidden`), אבל קורא את הקטלוג כמו כל אחד. ראו את דף ה-API [אימות](https://nodaro.ai/docs/developers/api/authentication) ואת הדף [ערכות](https://nodaro.ai/docs/concepts/presets), שמסביר מה ערכות עושות בעורך.

## נקודות קצה
| שיטה | נתיב | מה היא עושה |
| --- | --- | --- |
| `GET` | `/v1/node-presets` | הערכות שלכם, מהחדש לישן. אפשר לסנן לפי `nodeType`. |
| `GET` | `/v1/node-presets/factory` | קטלוג הערכות המובנות של סוג רכיב אחד. הפרמטר `nodeType` נדרש. לא צריך אסימון. |
| `GET` | `/v1/node-presets/favorites` | המזהים של הערכות שסימנתם בכוכב, לסוג רכיב אחד. הפרמטר `nodeType` נדרש. |
| `GET` | `/v1/node-preset-groups` | התיקיות והמקטעים של הערכות שלכם. אפשר לסנן לפי `nodeType`. |
| `POST` | `/v1/node-presets` | יצירת ערכה. |
| `PATCH` | `/v1/node-presets/:id` | שינוי השם של ערכה, החלפת הנתונים שלה, העברה שלה או קביעת התמונה שלה. |
| `DELETE` | `/v1/node-presets/:id` | מחיקת ערכה והסרתה מהמועדפים. |
| `POST` | `/v1/node-presets/import` | יצירה של עד 500 ערכות בבת אחת. |
| `POST` | `/v1/node-presets/reorder` | קביעת מיקומים והעברת ערכות בין תיקיות. |
| `POST` | `/v1/node-presets/favorites` | סימון ערכה בכוכב. |
| `DELETE` | `/v1/node-presets/favorites` | הסרת כוכב. |
| `POST` | `/v1/node-preset-groups` | יצירת תיקייה או מקטע. |
| `PATCH` | `/v1/node-preset-groups/:id` | שינוי השם או המיקום של תיקייה. |
| `DELETE` | `/v1/node-preset-groups/:id` | מחיקת תיקייה. הערכות שבה יוצאות ממנה, ואף אחת מהן לא נמחקת. |

## קריאת הערכות שלכם
הנתיב `GET /v1/node-presets` מחזיר `{ data: NodePreset[] }`, מהחדש לישן. שלחו `nodeType`, למשל `generate-image`, כדי לקבל רק את הערכות של סוג רכיב אחד.

**curl**

```bash
curl "https://app.nodaro.ai/v1/node-presets?nodeType=generate-image" \
  -H "Authorization: Bearer $NODARO_API_KEY"
```

**TypeScript SDK**

```ts

const client = createClient({
baseUrl: 'https://app.nodaro.ai',
auth: new StaticTokenAuth(process.env.NODARO_API_KEY!),
})

const presets = await client.presets.list('generate-image')
const cinematic = presets.find((p) => p.name === 'Cinematic Portrait')
const groups = await client.presets.listGroups('generate-image')
```

```json
{
"data": [
{
"id": "7e2c4a9f-1b3d-4f6a-8c5e-2d9b7a1f3c4e",
"nodeType": "generate-image",
"name": "Cinematic Portrait",
"description": "Warm key light, shallow depth of field",
"data": {
"provider": "nano-banana-pro",
"aspectRatio": "3:4",
"resolution": "2K",
"prompt": "cinematic portrait, warm key light, 85mm, shallow depth of field"
},
"groupId": null,
"tags": ["portrait"],
"sortOrder": 0,
"minReferences": 0,
"needsImage": false,
"previewUrl": null,
"createdAt": "2026-09-14T08:12:40Z",
"updatedAt": "2026-09-14T08:12:40Z"
}
]
}
```

| שדה | מה יש בו |
| --- | --- |
| `id` | ה-uuid של הערכה. |
| `nodeType` | סוג הרכיב שהערכה שייכת לו. |
| `name`, `description` | השם של הערכה ותיאור אופציונלי. |
| `data` | תצורת הרכיב שנשמרה. את זה מחילים. |
| `groupId` | התיקייה שהערכה נמצאת בה, מתוך `GET /v1/node-preset-groups`, או `null`. |
| `tags`, `sortOrder` | התגיות שלכם והמיקום של הערכה ברשימה שלה. |
| `minReferences` | מכמה תמונות ייחוס מחוברות הערכה עובדת. הערך `0` פירושו אף תמונה. |
| `needsImage` | הערך `true` כש-`minReferences` הוא 1 לפחות. |
| `previewUrl` | עותק משלה של תמונת הדוגמה שנתתם לערכה, או `null`. |
| `createdAt`, `updatedAt` | חותמות זמן. בכתיבה, שלחו את `updatedAt` בחזרה בתור `expectedUpdatedAt`. |

### תמונות שערכה עובדת מהן
הריצו ערכה שה-`minReferences` שלה גדול מ-0 כשמחוברות אליה תמונות ייחוס במספר הזה. בלעדיהן, הפרומפט של הערכה מתאר תמונה שלא קיימת. כשמשתמשים ב-`presetId` ב-`POST /v1/generate-image`, שלחו את התמונות ב-`referenceImageUrls`.

הערכות שבתיקיות גיליון ייחוס, שחקנים ועקביות, עריכה לפי שם, פרטיות פנים, עריכות, שינויי פורטרט ונושא מסוגנן צריכות תמונה אחת, והערכה רשת שחקנים מלאה צריכה שתיים. כך גם כל תבנית פרומפט שמשתמשת ב-`{image:N}`: מספר התמונות שלה הוא ה-N הגבוה ביותר. ערכה משלכם נספרת באותה דרך, לפי `{image:N}` ו-`{image:N:label}` בפרומפט שלה, בטקסט לפני ואחרי הפרומפט ובפרומפט השלילי.

## קריאת קטלוג הערכות המובנות
הנתיב `GET /v1/node-presets/factory?nodeType=generate-image` מחזיר `{ data: [...] }`, הערכות שמגיעות עם Nodaro לסוג הרכיב הזה. כל רשומה היא `{ id, name, description?, group?, groupKind?, section?, platforms?, data, minReferences, needsImage, previewUrl, previewSrcSet? }`. מזהה של ערכה מובנית הוא מהצורה `<node-type>/<name>`, למשל `generate-image/character-board` או `generate-video/orbit-360`.

הקטלוג **לא דורש אסימון**. הוא זהה לכולם ואין בו נתוני משתמשים, ולכן אפליקציית לקוח יכולה להציג אותו למבקרים שלא התחברו, ולבקש מהם להתחבר רק כשהם יוצרים משהו. התגובה נשלחת עם `Cache-Control: public, max-age=300`, ואסימון לא תקין או שפג תוקפו שנשלח עם הבקשה לא נלקח בחשבון.

ה-`previewUrl` של ערכה מובנית הוא תמונת דוגמה בשרת שפניתם אליו, במבנה `https://<host>/preset-previews/<nodeType>/<slug>.<hash>.webp`, או `null` כל עוד אין לערכה תמונה. שם הקובץ משתנה בכל פעם שהתמונה משתנה, ולכן אפשר לשמור כתובת במטמון לתמיד.

**curl**

```bash
# The presets that need a photo, and their example pictures. No token needed.
curl -s "https://app.nodaro.ai/v1/node-presets/factory?nodeType=generate-image" \
| jq '.data[] | select(.needsImage) | {id, minReferences, previewUrl}'
```

**TypeScript SDK**

```ts
const { data } = await client.presets.listFactory('generate-video')
const orbit = data.find((p) => p.id === 'generate-video/orbit-360')
```

### איפה ערכה מובנית מתויקת
- **`group`** הוא התיקייה, כגון `"YouTube"`, `"Shorts · TikTok"`, `"Social & Ads"`, `"Business"`, `"Life & Events"`, `"Layout"` או `"Text"`.
- **`section`**, כשהוא קיים, הוא כותרת משנה בתוך התיקייה: נושא של יוטיוב, כגון `"Finance & Crypto"`, או `"Instagram feed"`.
- **`platforms`**, כשהוא קיים, הוא הפלטפורמות שבהן התוצאה מיועדת להתפרסם, מהמתאימה ביותר והלאה: `["TikTok", "Reels", "Shorts"]`, `["LinkedIn"]` או `["Print", "Etsy"]`.

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

### גדלי התמונות
לתמונה של ערכה מובנית יש שני גדלים: תמונת האריח ב-`previewUrl`, ברוחב 512 פיקסלים, ותמונה למסך מלא ברוחב של עד 1024 פיקסלים, תחת `/preset-previews/1024/…`. השדה `previewSrcSet` מציין את שתיהן עם הרוחב שלהן בפועל, מוכן ל-`<img srcset>`, כך שהדפדפן בוחר לפי המקום שיש לו:

```text
<img src="{previewUrl}" srcset="{previewSrcSet}" sizes="(min-width: 900px) 80vw, 100vw" alt="{name}">
```

השדה `previewSrcSet` מופיע רק בערכה ששני הקבצים קיימים בה, ואף פעם לא בערכה משלכם. הרשימה ב-MCP משמיטה אותו.

## החלת ערכה
כדי ליצור תמונה אחת עם ערכה, שלחו את המזהה שלה בתור `presetId` ב-`POST /v1/generate-image`. השרת מחיל את הערכה כמו שהעורך מחיל אותה על רכיב יצירת תמונה, והשדות שאתם שולחים גוברים עליה. ראו בדף ה-API [החלת ערכה ברכיב יצירת תמונה](https://nodaro.ai/docs/developers/api/nodes#apply-a-preset).

כדי להחיל ערכה בתהליך, מזגו את ה-`data` שלה לתוך הנתונים של הרכיב כשאתם יוצרים או מעדכנים את התהליך. ערכים שאתם קובעים ברכיב אחרי המיזוג גוברים.

```ts
const node = {
id: 'portrait-1',
type: 'generate-image',
data: { ...cinematic.data, prompt: 'a lighthouse keeper at dawn' },
}
```

ערכה יכולה לכלול גם `promptPrefix` ו-`promptSuffix`: טקסט שמתווסף לפני הפרומפט ואחריו כשהרכיב רץ. ראו את הדף [טקסט לפני ואחרי הפרומפט](https://nodaro.ai/docs/concepts/prompt-pre-post-text).

דרך MCP, מצאו ערכה עם הכלי `list_node_presets` וקבלו אותה עם הכלי `get_node_preset`, או שלחו את ה-`presetId` שלה ישירות לכלי יצירה כגון `generate_image`. השרת מחיל אז את הערכה, עוטף את הפרומפט שלכם בטקסט שהערכה מוסיפה לפניו ואחריו, ונותן לכל שדה שאתם שולחים במפורש לגבור עליה. ראו את [מדריך כלי ה-MCP](https://nodaro.ai/docs/mcp/tools).

## מועדפים
המועדפים מציגים את הערכות שסימנתם בכוכב בראש רשימת הערכות בעורך. מזהה במועדפים הוא מזהה של ערכה מובנית או ה-uuid של ערכה שלכם. באסימון של אפליקציית OAuth, הקריאה דורשת `presets:read`, והכתיבה דורשת `assets:write`.

| שיטה | נתיב | שאילתה או גוף | מה חוזר |
| --- | --- | --- | --- |
| `GET` | `/v1/node-presets/favorites` | `nodeType` (נדרש) | `{ data: string[] }`, מהחדש לישן |
| `POST` | `/v1/node-presets/favorites` | גוף הבקשה `{ nodeType, presetId }` | `{ data: { success: true } }`. הוספה כפולה למועדפים לא משנה כלום. |
| `DELETE` | `/v1/node-presets/favorites` | `nodeType` ו-`presetId` (שניהם נדרשים) | `{ data: { success: true } }`. הסרה כפולה מהמועדפים לא משנה כלום. |

מזהים של ערכות מובנות כוללים `/`, ולכן קודדו את `presetId` בקידוד URL במחרוזת השאילתה של `DELETE`:

```bash
curl -X DELETE "https://app.nodaro.ai/v1/node-presets/favorites?nodeType=generate-image&presetId=generate-image%2Fcharacter-board" \
  -H "Authorization: Bearer $NODARO_API_KEY"
```

## יצירה ועריכה של ערכות
| שיטה | נתיב | גוף או שאילתה | מה היא עושה |
| --- | --- | --- | --- |
| `POST` | `/v1/node-presets` | `{ nodeType, name, description?, data, groupId?, tags?, sortOrder?, previewUrl? }` | יצירת ערכה. התגובה היא `201` עם הערכה. |
| `PATCH` | `/v1/node-presets/:id` | כל אחד מ-`name`, `description`, `data`, `groupId`, `tags`, `sortOrder` ו-`previewUrl`, ועוד `expectedUpdatedAt` אופציונלי | עדכון השדות שאתם שולחים. הערך `previewUrl: null` מסיר את התמונה. |
| `DELETE` | `/v1/node-presets/:id` | פרמטר שאילתה אופציונלי `expectedUpdatedAt` | מחיקת ערכה והסרתה מהמועדפים. |
| `POST` | `/v1/node-presets/import` | `{ presets: [{ nodeType, name, description?, data, previewUrl? }] }`, עד 500 | יצירה של ערכות רבות בבת אחת. מחזירה `{ data: { imported } }`. |
| `POST` | `/v1/node-presets/reorder` | `{ groups?: [{ id, sortOrder }], presets?: [{ id, groupId?, sortOrder }] }` | קביעת מיקומים והעברת ערכות בין תיקיות. מחזירה `{ data: { ok: true } }`. |
| `POST` | `/v1/node-preset-groups` | `{ nodeType, name, kind?, sortOrder? }` | יצירת `folder` (ברירת המחדל, תיקייה שאפשר לקפל) או `section` (כותרת שלא מתקפלת). |
| `PATCH` | `/v1/node-preset-groups/:id` | `{ name?, sortOrder? }` | שינוי השם או המיקום של תיקייה. |
| `DELETE` | `/v1/node-preset-groups/:id` | אין | מחיקת תיקייה. הערכות שבה יוצאות ממנה. |

**curl**

```bash
# Save a preset of your own, with one of your images as its picture
curl -s -X POST "https://app.nodaro.ai/v1/node-presets" \
  -H "Authorization: Bearer $NODARO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"nodeType": "generate-image", "name": "Studio portrait", "data": {"provider": "gpt-image-2", "aspectRatio": "3:4", "prompt": "{image:1:person}, studio portrait, soft key light"}, "previewUrl": "https://cdn.nodaro.ai/images/<jobId>.png"}'

# Rename it, refusing if it changed since you read it
curl -s -X PATCH "https://app.nodaro.ai/v1/node-presets/<presetId>" \
  -H "Authorization: Bearer $NODARO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Studio portrait (warm)", "expectedUpdatedAt": "<updatedAt>"}'
```

**TypeScript SDK**

```ts
const preset = await client.presets.create({
nodeType: 'generate-image',
name: 'Studio portrait',
data: { provider: 'gpt-image-2', aspectRatio: '3:4', prompt: '{image:1:person}, studio portrait' },
})
preset.needsImage // true: the prompt names {image:1}
await client.presets.addFavorite({ nodeType: 'generate-image', presetId: preset.id })
```

ב-CLI זמינות אותן פעולות כתיבה: הפקודות `nodaro presets create`, `update`, `delete`, `import`, `export`, `favorites`, `favorite`, `unfavorite` ו-`nodaro presets groups` עם `create`, `update` ו-`delete`. דרך MCP, הכלים `save_node_preset`, `delete_node_preset` ו-`favorite_node_preset` מנהלים ערכות.

### כללים לכתיבה
- **השמות ייחודיים לכל סוג רכיב**, בלי הבדל בין אותיות גדולות לקטנות. נתיבי היצירה והעדכון מחזירים `409 name_taken`. ייבוא שומר את שתי הערכות, ונותן לחדשה את השם `… (imported 2)` (יובא 2).
- **הגודל של `data` הוא 64 KB לכל היותר.** מפתחות של זמן ריצה, כגון תוצאות, מזהי משימות והתווית של הרכיב, מוסרים. על ערכה מיובאת שלא נשאר בה כלום מדלגים.
- **`groupId` חייב להיות אחת מהתיקיות שלכם**, אחרת הכתיבה נדחית עם `400 invalid_group`.
- **`previewUrl` חייב להיות אחת מהתמונות שלכם ב-Nodaro:** העלאה או תוצאה של יצירה שהסתיימה, בפורמט png, jpg, webp, gif או avif. הקובץ חייב להיות קיים כבר, ולכן קבעו את השדה אחרי שהמשימה שיוצרת את התמונה הסתיימה. כל ערך אחר נדחה עם `400 validation_error`, עם שם השדה, למשל `presets[3].previewUrl` בייבוא.
- **הערכה שומרת עותק משלה של התמונה.** ה-`previewUrl` שבתגובה הוא הכתובת של העותק, לא הכתובת ששלחתם, ולכן מחיקת המקור מהספרייה שלכם אף פעם לא שוברת את הערכה.
- **`expectedUpdatedAt`** גורם לכך שעדכון או מחיקה נדחים עם `409 conflict` אם הערכה השתנתה מאז שקראתם אותה. קבלו אותה מחדש לפני שאתם מנסים שוב.
- **ערכה או תיקייה שלא שייכות לכם**, או מזהה שהוא לא uuid: התשובה היא `404 not_found`.
- **בכל חשבון יכולות להיות עד 5,000 ערכות, 500 תיקיות ו-2,000 מועדפים.** מעבר לזה, יצירה, ייבוא או הוספה למועדפים נדחים עם `409 limit_reached` ולא כותבים כלום. ייבוא שלא נכנס במלואו לא מייבא אף ערכה.
- **סידור מחדש אחד מזיז עד 500 ערכות ו-100 תיקיות** כשהוא נשלח ממפתח API או מאפליקציית OAuth. סידור גדול יותר נדחה עם `400 validation_error`: שלחו את השאר בקריאה נוספת.
- **פעולות הכתיבה מוגבלות ל-60 בדקה לכל סט של פרטי גישה**, והייבואים ל-10 בדקה. מעבר לזה, הנתיב מחזיר `429 rate_limit_exceeded`.

### ערכות רינדור של Recast
אותה ספרייה שומרת הגדרות יצירה של Recast תחת מרחב השמות `recast-render`. מרחב השמות הזה הוא לא סוג רכיב: כל ערכה בו שומרת סט שלם של הגדרות רינדור של [Recast](https://nodaro.ai/docs/developers/api/recast), כדי שתוכלו להשתמש בהן שוב. הערכות המובנות הן לקריאה בלבד, והערכות שלכם נשארות פרטיות לכם בכל מכשיר.

ה-`data` של ערכת `recast-render` הוא תמונת מצב מלאה, עם מבנה קשיח:

```json
{
"schemaVersion": 1,
"provider": "seedance-2-5",
"resolution": "480p",
"segmentSec": "max",
"renderMethod": "extend",
"anchorMode": "upfront",
"citeStyle": "bare",
"promptTiming": true,
"textOnly": false,
"interactive": true,
"anchorGates": false,
"musicGates": true,
"musicSource": "generated"
}
```

| שדה | ערכים מותרים |
| --- | --- |
| `segmentSec` | `max`, `scenes-max` (ארוך) או `scenes` (קצר). |
| `resolution` | `480p`, `720p`, `1080p` או `4k`. |
| `renderMethod` | `extend` או `keyframes`. |
| `anchorMode` | `upfront`, `progressive` או `none`. |
| `citeStyle` | `bare` או `rich`. |
| `musicSource` | `generated`, `original` או `upload`. |
| `promptTiming`, `textOnly`, `interactive`, `anchorGates`, `musicGates` | `true` או `false`. |

כותבים אותן באותם נתיבים כמו כל ערכה. הן לא צריכות תמונות ואין להן תמונת דוגמה (`minReferences: 0`, `previewUrl: null`). שדות לא מוכרים וגרסאות סכמה לא מוכרות נדחים ביצירה, בעדכון ובייבוא. תמונת המצב אף פעם לא כוללת מדיית מקור, ייחוסים של הליהוק, פרומפטים, רצועות שהועלו, אישורי זכויות או תוצאות. החלת ערכה משנה את ההגדרות ומרעננת את אומדן המחיר; היא אף פעם לא מתחילה יצירה. בחירה במוזיקה המקורית או במוזיקה שהועלתה משתמשת במדיה של פרויקט היעד עצמו. לפני שאתם יוצרים, בדקו מה המודל שבחרתם יודע לעשות כרגע.

## שגיאות
| סטטוס | קוד | משמעות |
| --- | --- | --- |
| `400` | `validation_error` | השדה `nodeType` חסר במקום שבו הוא נדרש, או ששדה לא תקין. |
| `400` | `invalid_group` | השדה `groupId` הוא לא אחת מהתיקיות שלכם. |
| `401` | `unauthorized` | האסימון חסר, לא תקין או מבוטל. |
| `403` | `forbidden` | אסימון אישי שמוגבל לתהליכים מסוימים ביקש את הערכות שלכם. |
| `403` | `insufficient_scope` | לאסימון של אפליקציית OAuth אין `presets:read` לקריאה, או `assets:write` לכתיבה. |
| `404` | `not_found` | הערכה או התיקייה לא שייכות לכם, או שהמזהה הוא לא uuid. |
| `409` | `name_taken` | כבר יש לכם ערכה בשם הזה לסוג הרכיב הזה. |
| `409` | `conflict` | הערכה השתנתה מאז `expectedUpdatedAt`. קבלו אותה מחדש. |
| `409` | `limit_reached` | החשבון הגיע למגבלה של הערכות, התיקיות או המועדפים שלו. |
| `429` | `rate_limit_exceeded` | יותר מ-60 פעולות כתיבה בדקה, או יותר מ-10 ייבואים בדקה. |

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

### האם אפשר ליצור או לערוך ערכות עם אסימון API?

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

### האם צריך אסימון כדי לקרוא את קטלוג הערכות המובנות?

לא. הנתיב GET /v1/node-presets/factory ציבורי. אין בו נתוני משתמשים, ולכן אפליקציה יכולה להציג את הקטלוג, עם תמונות הדוגמה, למבקרים שלא התחברו.

### איך מחילים ערכה מקוד?

כדי להחיל ערכה מקוד, שלחו את השדה presetId ב-POST /v1/generate-image, והשרת מחיל את הערכה כמו שהעורך מחיל אותה. בתהליך, מזגו את האובייקט data של הערכה לתוך השדה data של הרכיב.

### מה המשמעות של minReferences בערכה?

השדה minReferences של ערכה הוא מספר תמונות הייחוס המחוברות שהערכה עובדת מהן, והשדה needsImage הוא true כשהמספר הזה הוא לפחות אחד. הריצו ערכה כזו כשמחוברות אליה תמונות ייחוס במספר הזה.

### אילו הרשאות OAuth צריכים נתיבי הערכות?

בנתיבי הערכות, קריאה של הערכות שלכם דורשת presets:read, וכתיבה דורשת assets:write. קטלוג הערכות המובנות לא דורש הרשאה. אסימוני API אישיים ואסימוני סשן לא צריכים הרשאות.
