פרטי הכניסה הם סודות שמנוהלים על ידי השרת ומאפשרים לסוכנים שלכם לגשת לשירותי צד שלישי בלי שהסודות יגיעו לסביבת הסוכן. אתם מאחסנים את פרטי הכניסה פעם אחת, מפנים אליהם באמצעות מזהה, ופרוקסי היציאה מזהה אותם ומכניס אותם בזמן הבקשה.
ערכי סוד הם לקריאה בלבד. אחרי שהם מאוחסנים, אף נקודת קצה לא מחזירה אותם, כך שסוכן שנפרץ לא יכול לקרוא את הטוקנים שהוא משתמש בהם.
המקום העיקרי שבו משתמשים בפרטי כניסה הוא רשימת ההיתרים של הרשת ב-environment.network. קודם מאחסנים את הסוד:
Python
from google import genai
client = genai.Client()
credential = client.credentials.create(
id="github-production",
type="bearer_token",
token="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
)
print(f"Credential ID: {credential.id}, Status: {credential.status}")
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const credential = await client.credentials.create({
id: "github-production",
type: "bearer_token",
token: "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
});
console.log(`Credential ID: ${credential.id}, Status: ${credential.status}`);
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/credentials" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"id": "github-production",
"type": "bearer_token",
"token": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}'
לאחר מכן מצרפים אותו לדומיין שהוא מאמת:
Python
interaction = client.interactions.create(
agent="antigravity-preview-09-2026",
input="Triage the open issues in my-org/my-repo.",
environment={
"type": "remote",
"network": {
"allowlist": [
{"domain": "api.github.com", "credential": "github-production"},
{"domain": "*"},
]
},
},
)
JavaScript
const interaction = await client.interactions.create({
agent: "antigravity-preview-09-2026",
input: "Triage the open issues in my-org/my-repo.",
environment: {
type: "remote",
network: {
allowlist: [
{ domain: "api.github.com", credential: "github-production" },
{ domain: "*" },
],
},
},
});
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "antigravity-preview-09-2026",
"input": "Triage the open issues in my-org/my-repo.",
"environment": {
"type": "remote",
"network": {
"allowlist": [
{ "domain": "api.github.com", "credential": "github-production" },
{ "domain": "*" }
]
}
}
}'
הסוכן שולח עכשיו בקשות מאומתות אל api.github.com, והטוקן אף פעם לא נמצא בארגז החול.
סוגי פרטי כניסה
לכל אמצעי אימות יש type שקובע אילו שדות הוא מקבל ואיך ה-proxy מחיל אותו.
| סוג | תרחיש שימוש | התנהגות |
|---|---|---|
bearer_token |
טוקנים של גישה אישית, טוקנים של בוטים, מפתחות סטטיים של API | שרת ה-proxy מוסיף את הטוקן כ-request header. אין לוגיקה לרענון. |
oauth2 |
אפליקציות OAuth ותהליכים שמוקצים למשתמשים | הפרוקסי מחליף את אסימון הרענון באסימוני גישה ומרענן אותם כשתוקף שלהם פג. |
environment_variable |
ערכות SDK ללקוח שקוראות סודות מסביבת התהליך | סביבת הנציג מקבלת placeholder. ה-proxy מחליף את הסוד האמיתי בבקשות יוצאות. |
שימוש בפרטי הכניסה ברשימת ההיתרים של הרשת
מוסיפים את credential לכלל ברשימת ההיתרים, והפרוקסי מאמת כל בקשה יוצאת לדומיין הזה. זו הדרך המומלצת לתת לסוכן גישה ל-API פרטי, למאגר פרטי או לדלי פרטי.
אפשר לשלב כללים מאומתים ולא מאומתים באותה רשימת היתרים:
Python
interaction = client.interactions.create(
agent="antigravity-preview-09-2026",
input="Sync the open Jira issues into the tracking sheet in my repo.",
environment={
"type": "remote",
"sources": [
{
"type": "repository",
"source": "https://github.com/your-org/backend",
"target": "/backend-app",
}
],
"network": {
"allowlist": [
{"domain": "github.com", "credential": "github-production"},
{"domain": "api.atlassian.com", "credential": "jira-oauth"},
{"domain": "*.googleapis.com"},
]
},
},
)
JavaScript
const interaction = await client.interactions.create({
agent: "antigravity-preview-09-2026",
input: "Sync the open Jira issues into the tracking sheet in my repo.",
environment: {
type: "remote",
sources: [
{
type: "repository",
source: "https://github.com/your-org/backend",
target: "/backend-app",
},
],
network: {
allowlist: [
{ domain: "github.com", credential: "github-production" },
{ domain: "api.atlassian.com", credential: "jira-oauth" },
{ domain: "*.googleapis.com" },
],
},
},
});
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "antigravity-preview-09-2026",
"input": "Sync the open Jira issues into the tracking sheet in my repo.",
"environment": {
"type": "remote",
"sources": [
{
"type": "repository",
"source": "https://github.com/your-org/backend",
"target": "/backend-app"
}
],
"network": {
"allowlist": [
{ "domain": "github.com", "credential": "github-production" },
{ "domain": "api.atlassian.com", "credential": "jira-oauth" },
{ "domain": "*.googleapis.com" }
]
}
}
}'
מכיוון שהפרוקסי פותר את פרטי הכניסה לכל בקשה, פרטי כניסה מסוג oauth2 מרעננים את אסימון הגישה שלהם באופן שקוף. אינטראקציה ארוכה לא תיפסק כשפג תוקף טוקן הגישה.
שילוב של credential ו-transform
כללי הרשימה הלבנה מקבלים גם אובייקט transform מוטבע שמגדיר כותרות ישירות בכלל. שני המנגנונים מופעלים על ידי שרת ה-proxy של היציאה (egress) בחיבור, כך שבשני המקרים ערך הכותרת אף פעם לא קיים בתוך ארגז החול. שני השדות יכולים להופיע באותו כלל.
| הגדרת הכלל | התנהגות |
|---|---|
credential בלבד |
הפרוקסי מפענח את פרטי הכניסה ומוסיף את הכותרת שלהם לכל בקשה לדומיין. |
transform בלבד |
החדרה סטטית של כותרות. הכותרות שאתם כותבים נשלחות כמו שהן. |
| שניהם | פרטי הכניסה מוחלים קודם, ואז transform מתמזגים מעל. אם שני סוגי הכותרות מגדירים את אותו מפתח, הכותרת transform מנצחת. |
| אין לי דעה לכאן או לכאן | הדומיין מותר ולא מוחדרות כותרות. |
כדאי להשתמש באמצעי אימות כשרוצים לאחסן סוד פעם אחת ולהפנות אליו מכל סביבה, סוכן וטריגר בפרויקט, וכשרוצים שהמערכת תטפל ברענון וברוטציה של אסימוני הגישה. transform מתאים כשמדובר בערך ששייך לקריאה יחידה, למשל טוקן שיוצרים בעצמכם ממש לפני יצירת האינטראקציה.
שילוב של שתי השיטות הוא נפוץ. פרטי הכניסה כוללים את כותרת האימות, ו-transform מוסיף את כל מה שהשירות במעלה הזרם מצפה לקבל באותה בקשה:
{
"domain": "api.atlassian.com",
"credential": "jira-oauth",
"transform": {
"X-Atlassian-Workspace": "my-workspace-id"
}
}
כדי להעביר סוד מתוך transform מוטבע אל תוך פרטי כניסה, מאחסנים אותו באמצעות POST /credentials, מחליפים את כותרת האימות ב-transform ב-"credential": "<id>" ומשאירים את שאר האובייקט transform ללא שינוי.
שימוש בפרטי כניסה עם שרתי MCP
שרתי MCP מרוחקים מקבלים את אותו שדה credential. מגדירים אותו בכלי mcp_server, ושרת ה-proxy מוסיף את כותרת האימות לכל בקשה לשרת הזה:
Python
interaction = client.interactions.create(
agent="antigravity-preview-09-2026",
input="Create a new issue in my-org/my-repo",
environment="remote",
tools=[{
"type": "mcp_server",
"name": "github",
"url": "https://api.githubcopilot.com/mcp",
"credential": "github-production",
}],
)
JavaScript
const interaction = await client.interactions.create({
agent: "antigravity-preview-09-2026",
input: "Create a new issue in my-org/my-repo",
environment: "remote",
tools: [{
type: "mcp_server",
name: "github",
url: "https://api.githubcopilot.com/mcp",
credential: "github-production",
}],
});
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "antigravity-preview-09-2026",
"input": "Create a new issue in my-org/my-repo",
"environment": "remote",
"tools": [
{
"type": "mcp_server",
"name": "github",
"url": "https://api.githubcopilot.com/mcp",
"credential": "github-production"
}
]
}'
credential ו-headers פועלים לפי אותו כלל עדיפות כמו רשימת ההיתרים.
האישורים מוחלים קודם וheaders מתמזג מעל, כך שכותרת מפורשת מנצחת אם שניהם מגדירים את אותו מפתח:
{
"type": "mcp_server",
"name": "jira",
"url": "https://jira.atlassian.com/mcp",
"credential": "jira-oauth",
"headers": {
"X-Atlassian-Workspace": "my-workspace-id"
}
}
כדי להוציא סוד מתוך headers ולהעביר אותו לפרטי כניסה, מאחסנים אותו באמצעות POST /credentials ומחליפים את רשומת האימות ב-headers ב-credential.
משאירים את הכותרות האחרות במקומן.
שימוש בפרטי כניסה כמשתני סביבה
חלק מספריות הלקוח קוראות סודות מסביבת התהליך במקום לקבל אותם ככותרות של בקשות. בדרך כלל, הלקוחות הם במצב Socket או במצב Long-polling.
מקשרים פרטי כניסה מסוג environment_variable לשם משתנה בקטע environment.env:
Python
interaction = client.interactions.create(
agent="antigravity-preview-09-2026",
input="Run the sync script and check notifications.",
environment={
"type": "remote",
"env": {
"NODE_ENV": "production",
"SLACK_BOT_TOKEN": {"credential": "slack-bot-token"},
},
},
)
JavaScript
const interaction = await client.interactions.create({
agent: "antigravity-preview-09-2026",
input: "Run the sync script and check notifications.",
environment: {
type: "remote",
env: {
NODE_ENV: "production",
SLACK_BOT_TOKEN: { credential: "slack-bot-token" },
},
},
});
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "antigravity-preview-09-2026",
"input": "Run the sync script and check notifications.",
"environment": {
"type": "remote",
"env": {
"NODE_ENV": "production",
"SLACK_BOT_TOKEN": { "credential": "slack-bot-token" }
}
}
}'
env מקבל מחרוזות מילוליות והפניות לפרטי כניסה זו לצד זו. מחרוזת מילולית מוזרקת למאגר כמשתנה רגיל של טקסט פשוט.
הפניה לפרטי כניסה לא. המשתנה מקבל את ה-placeholder __GEMINI_CRED_<credential-id>__, והפרוקסי מחליף אותו בסוד האמיתי רק בבקשות יוצאות שמופנות לדומיין ב-trusted_domains של פרטי הכניסה. בקשה לכל דומיין אחר נדחית, כך שהסוד אף פעם לא יוצא מגבולות הגזרה וה-פלייסהולדר לא נשלח במקומו.
מגדירים את trusted_domains בכל אישורי environment_variable. הוא קובע את ההיקף שבו אפשר להשתמש בסוד.
יצירת פרטי כניסה
כל בקשת יצירה צריכה לכלול type, בנוסף לשדות שנדרשים עבור הסוג הזה.
כשקוראים ישירות ל-REST, כל שמות השדות הם בפורמט snake_case. שליחת שדה בפורמט camelCase מחזירה 400.
טוקן למוכ"ז
פרטי כניסה של טוקן bearer צריכים לכלול רק את token:
Python
credential = client.credentials.create(
id="github-production",
type="bearer_token",
token="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
)
JavaScript
const credential = await client.credentials.create({
id: "github-production",
type: "bearer_token",
token: "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
});
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/credentials" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"id": "github-production",
"type": "bearer_token",
"token": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}'
התגובה מחזירה רק מטא-נתונים, אף פעם לא את הטוקן:
{
"id": "github-production",
"type": "bearer_token",
"status": "active",
"create_time": "2026-07-15T10:00:00.000000000Z",
"update_time": "2026-07-15T10:00:00.000000000Z"
}
כברירת מחדל, ה-proxy שולח Authorization: Bearer <token>. החלפת הערך של header_name ושל prefix כדי לטרגט שירות שמצפה למשהו אחר:
Python
credential = client.credentials.create(
id="my-api-key",
type="bearer_token",
token="key_xxxxxxxxxxxx",
header_name="x-goog-api-key",
prefix="",
)
JavaScript
const credential = await client.credentials.create({
id: "my-api-key",
type: "bearer_token",
token: "key_xxxxxxxxxxxx",
header_name: "x-goog-api-key",
prefix: "",
});
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/credentials" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"id": "my-api-key",
"type": "bearer_token",
"token": "key_xxxxxxxxxxxx",
"header_name": "x-goog-api-key",
"prefix": ""
}'
ההגדרה הזו יוצרת את הכותרת x-goog-api-key: key_xxxxxxxxxxxx.
בטבלה הבאה אפשר לראות איך header_name ו-prefix משולבים:
| הגדרות אישיות | כותרת שהוחדרה |
|---|---|
{"token": "ghp_xxx"} |
Authorization: Bearer ghp_xxx |
{"token": "sk_live_xxx"} |
Authorization: Bearer sk_live_xxx |
{"token": "key_xxx", "header_name": "x-goog-api-key", "prefix": ""} |
x-goog-api-key: key_xxx |
{"token": "mytoken", "header_name": "X-API-Token", "prefix": ""} |
X-API-Token: mytoken |
OAuth2
פרטי כניסה מסוג OAuth2 דורשים client_id, client_secret, refresh_token ו-token_url. השדה scopes הוא אופציונלי:
Python
credential = client.credentials.create(
id="jira-oauth",
type="oauth2",
client_id="my-client-id",
client_secret="my-client-secret",
token_url="https://auth.atlassian.com/oauth/token",
refresh_token="rt_xxxxxxxxxxxxxxxxxxxx",
scopes=["read:jira-work", "write:jira-work"],
)
JavaScript
const credential = await client.credentials.create({
id: "jira-oauth",
type: "oauth2",
client_id: "my-client-id",
client_secret: "my-client-secret",
token_url: "https://auth.atlassian.com/oauth/token",
refresh_token: "rt_xxxxxxxxxxxxxxxxxxxx",
scopes: ["read:jira-work", "write:jira-work"],
});
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/credentials" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"id": "jira-oauth",
"type": "oauth2",
"client_id": "my-client-id",
"client_secret": "my-client-secret",
"token_url": "https://auth.atlassian.com/oauth/token",
"refresh_token": "rt_xxxxxxxxxxxxxxxxxxxx",
"scopes": ["read:jira-work", "write:jira-work"]
}'
יצירת פרטי כניסה של OAuth2 מבצעת החלפת אסימונים בזמן אמת מול token_url כדי לוודא שההגדרה פועלת. האישורים נשמרים רק אם הספק מחזיר תגובה מוצלחת של אסימון שמכילה access_token. המערכת מקבלת תגובות בפורמט JSON וגם בפורמט form-urlencoded.
כלומר, צריך שיהיה לכם טוקן רענון תקף שלא פג התוקף שלו בזמן היצירה. אם הספק דוחה את ההמרה, השגיאה מוחזרת אליכם:
{
"error": {
"message": "OAuth token validation failed with HTTP 403: {\"error\":\"unauthorized_client\",\"error_description\":\"refresh_token is invalid\"}",
"code": "invalid_request"
}
}
אחרי שהם נשמרים, ה-proxy מרענן את אסימוני הגישה כשהתוקף שלהם פג. אם הספק מבצע רוטציה של טוקנים לרענון ומחזיר טוקן חדש במהלך רענון, הטוקן החדש מחליף את הטוקן השמור באופן אוטומטי.
משתנה הסביבה
פרטי כניסה של environment_variable דורשים value ו-injection_location:
Python
credential = client.credentials.create(
id="slack-bot-token",
type="environment_variable",
value="xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx",
trusted_domains=["*.slack.com", "slack.com"],
injection_location="header",
)
JavaScript
const credential = await client.credentials.create({
id: "slack-bot-token",
type: "environment_variable",
value: "xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx",
trusted_domains: ["*.slack.com", "slack.com"],
injection_location: "header",
});
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/credentials" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"id": "slack-bot-token",
"type": "environment_variable",
"value": "xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx",
"trusted_domains": ["*.slack.com", "slack.com"],
"injection_location": "header"
}'
השדה injection_location מציין לשרת ה-Proxy איפה בבקשה היוצאת להחליף את הסוד. היא מקבלת את הערכים header, query או body, כמחרוזת אחת או כמערך אם שירות מסוים צריך יותר מאחד:
"injection_location": ["header", "query"]
ההחלפה מתבצעת רק במיקומים שציינתם. בקשה שכוללת את ה-placeholder במקום אחר נדחית ולא נשלחת.
במאמר שימוש בפרטי כניסה כמשתני סביבה מוסבר איך לקשר את פרטי הכניסה לשם של משתנה.
מזהים שנוצרו
השדה id הוא אופציונלי. משמיטים אותו והשירות יוצר UUID:
{
"id": "9e545973-4330-49bb-9a44-930cea9fbe3c",
"type": "bearer_token",
"status": "active",
"create_time": "2026-07-15T10:00:00.000000000Z",
"update_time": "2026-07-15T10:00:00.000000000Z"
}
אתם יכולים לספק מזהה משלכם אם אתם רוצים הפניה קבועה וקריאה לשימוש באינטראקציות. המזהה מופיע בנתיב המשאב, ולכן מומלץ להשתמש באותיות קטנות, בספרות, במקפים או בקווים תחתונים.
הצגת רשימה של פרטי כניסה
מציגים ברשימה את פרטי הכניסה ששייכים לפרויקט. אפשר להשתמש בפרמטרים של חלוקה לדפים כדי לשלוט בגודל אצווה של התגובות.
Python
response = client.credentials.list(page_size=10)
for credential in response.credentials:
print(f"Credential ID: {credential.id}, Type: {credential.type}")
JavaScript
const response = await client.credentials.list({ page_size: 10 });
for (const credential of response.credentials) {
console.log(`Credential ID: ${credential.id}, Type: ${credential.type}`);
}
REST
curl -X GET "https://generativelanguage.googleapis.com/v1beta/credentials?page_size=10" \
-H "x-goog-api-key: $GEMINI_API_KEY"
התשובה מכילה מטא-נתונים בלבד:
{
"credentials": [
{
"id": "github-production",
"type": "bearer_token",
"status": "active",
"create_time": "2026-07-15T10:00:00.000000000Z",
"update_time": "2026-07-15T10:00:00.000000000Z"
},
{
"id": "jira-oauth",
"type": "oauth2",
"status": "active",
"create_time": "2026-07-15T10:05:00.000000000Z",
"update_time": "2026-07-15T10:05:00.000000000Z"
}
],
"next_page_token": "Cj...5aE="
}
מעבירים את next_page_token בחזרה כ-page_token כדי לאחזר את הדף הבא. השדה
מושמט כשאין תוצאות נוספות.
| פרמטר | סוג | תיאור |
|---|---|---|
page_size |
מספר שלם | המספר המקסימלי של פרטי כניסה בכל דף. |
page_token |
מחרוזת | טוקן מתוך next_page_token של תשובה קודמת. |
קבלת פרטי כניסה
אחזור מטא-נתונים של פרטי כניסה ספציפיים לפי המזהה שלהם.
Python
credential = client.credentials.get(id="github-production")
print(f"Credential ID: {credential.id}, Status: {credential.status}")
JavaScript
const credential = await client.credentials.get("github-production");
console.log(`Credential ID: ${credential.id}, Status: ${credential.status}`);
REST
curl -X GET "https://generativelanguage.googleapis.com/v1beta/credentials/github-production" \
-H "x-goog-api-key: $GEMINI_API_KEY"
התגובה אמורה להיראות כך:
{
"id": "github-production",
"type": "bearer_token",
"status": "active",
"create_time": "2026-07-15T10:00:00.000000000Z",
"update_time": "2026-08-01T14:30:00.000000000Z"
}
בקשה של פרטי כניסה שלא קיימים מחזירה את השגיאה 404:
{
"error": {
"message": "Result not found.; GetCredential call failed",
"code": "not_found"
}
}
עדכון של פרטי הכניסה
להחליף סוד בלי לשנות כלל ברשימת ההיתרים, הגדרת כלי או משתנה סביבתי שמפנה אליו. הרוטציה נכנסת לתוקף ברזולוציית ה-proxy הבאה.
הבקשה צריכה לכלול את type, בנוסף לשדות שרוצים לשנות. הערכים הנוכחיים של השדות שלא מציינים נשמרים.
סיבוב של אסימון למוכ"ז:
Python
credential = client.credentials.update(
id="github-production",
type="bearer_token",
token="ghp_new_xxxxxxxxxxxxxxxxxxxx",
)
JavaScript
const credential = await client.credentials.update("github-production", {
type: "bearer_token",
token: "ghp_new_xxxxxxxxxxxxxxxxxxxx",
});
REST
curl -X PATCH "https://generativelanguage.googleapis.com/v1beta/credentials/github-production" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"type": "bearer_token",
"token": "ghp_new_xxxxxxxxxxxxxxxxxxxx"
}'
החלפת טוקן רענון של OAuth2:
Python
credential = client.credentials.update(
id="jira-oauth",
type="oauth2",
refresh_token="rt_new_xxxxxxxxxxxxxxxxxxxx",
)
JavaScript
const credential = await client.credentials.update("jira-oauth", {
type: "oauth2",
refresh_token: "rt_new_xxxxxxxxxxxxxxxxxxxx",
});
REST
curl -X PATCH "https://generativelanguage.googleapis.com/v1beta/credentials/jira-oauth" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"type": "oauth2",
"refresh_token": "rt_new_xxxxxxxxxxxxxxxxxxxx"
}'
התשובה משקפת את update_time החדש:
{
"id": "jira-oauth",
"type": "oauth2",
"status": "active",
"create_time": "2026-07-15T10:05:00.000000000Z",
"update_time": "2026-08-01T14:30:00.000000000Z"
}
הערך של type בפרטי כניסה נקבע בזמן היצירה. כדי לשנות את האישורים, צריך למחוק אותם וליצור אישורים חדשים.
מחיקת פרטי כניסה
למחוק פרטי כניסה ואת הסוד שמאוחסן בהם כשאין בהם יותר צורך.
Python
client.credentials.delete(id="github-production")
JavaScript
await client.credentials.delete("github-production");
REST
curl -X DELETE "https://generativelanguage.googleapis.com/v1beta/credentials/github-production" \
-H "x-goog-api-key: $GEMINI_API_KEY"
אם המחיקה בוצעה בהצלחה, מוחזר אובייקט ריק:
{}
כל כלל, כלי או משתנה סביבה ברשימת ההיתרים שמפנים עדיין למזהה לא יפעלו, ולכן צריך לעדכן אותם קודם.
הפניה לשדה
שדות שמשותפים לכל פרטי הכניסה:
| שדה | סוג | נדרש | תיאור |
|---|---|---|---|
id |
מחרוזת | לא | מזהה ייחודי. אם לא מציינים ערך, המערכת יוצרת מזהה ייחודי אוניברסלי (UUID). |
type |
מחרוזת | כן | אחד מהערכים bearer_token, oauth2, environment_variable. |
status |
מחרוזת | קריאה בלבד | הסטטוס הנוכחי של פרטי הכניסה. |
create_time |
מחרוזת | קריאה בלבד | חותמת הזמן של היצירה בפורמט RFC 3339. |
update_time |
מחרוזת | קריאה בלבד | חותמת הזמן של העדכון האחרון בפורמט RFC 3339. |
שדות ל-bearer_token:
| שדה | סוג | נדרש | תיאור |
|---|---|---|---|
token |
מחרוזת | כן | כתיבה בלבד. ערך הטוקן. |
header_name |
מחרוזת | לא | הכותרת להחדרה. ברירת המחדל היא Authorization. |
prefix |
מחרוזת | לא | קידומת ערך. ברירת המחדל היא Bearer. אם לא רוצים להגדיר אף אחד מהם, בוחרים באפשרות "". |
שדות ל-oauth2:
| שדה | סוג | נדרש | תיאור |
|---|---|---|---|
client_id |
מחרוזת | כן | מזהה לקוח ב-OAuth2. |
client_secret |
מחרוזת | כן | כתיבה בלבד. סוד לקוח OAuth2. |
refresh_token |
מחרוזת | כן | כתיבה בלבד. אסימון רענון שמשמש להשגת טוקנים של גישה. |
token_url |
מחרוזת | כן | נקודת הקצה של הטוקן של הספק. |
scopes |
מערך | לא | היקפי הרשאות OAuth לבקשה. |
שדות ל-environment_variable:
| שדה | סוג | נדרש | תיאור |
|---|---|---|---|
value |
מחרוזת | כן | כתיבה בלבד. ערך הסוד. |
injection_location |
מחרוזת או מערך | כן | איפה להחליף את הסוד. אחת או יותר מהאפשרויות הבאות: header, query, body. |
trusted_domains |
מערך | לא | תבניות דומיין שמורשות להחלפה. |
שגיאות
שגיאות מחזירות אובייקט JSON עם message ו-code:
{
"error": {
"message": "Credential 'github-production' already exists.; CreateCredential call failed",
"code": "aborted"
}
}
| סטטוס HTTP | code |
סיבה |
|---|---|---|
| 400 | invalid_request |
שדה חובה חסר, שדה לא ידוע, type לא נתמך או אימות OAuth2 נכשל. |
| 404 | not_found |
לא נמצאו פרטי כניסה עם המזהה הזה. |
| 409 | aborted |
כבר קיימים פרטי כניסה עם המזהה הזה. |
שדות לא מוכרים נדחים ולא מתעלמים מהם, והשגיאה מציינת את השדה:
{
"error": {
"message": "Unknown parameter 'headerName'. Did you mean 'header_name'?",
"code": "invalid_request"
}
}
המאמרים הבאים
- סביבות: מידע על האופן שבו סוכנים מריצים קוד ושומרים קבצים.
- סקירה כללית על סוכנים: מידע על המושגים המרכזיים של סוכנים מנוהלים.
- יצירת סוכנים בהתאמה אישית: הגדרת סוכנים משלכם באמצעות
AGENTS.mdו-SKILL.md.