Anmeldedaten sind serververwaltete Secrets, mit denen Ihre KI-Agenten auf Drittanbieterdienste zugreifen können, ohne dass das Secret jemals in die Umgebung des KI-Agenten gelangt. Sie speichern ein Anmeldedatenpaar einmal, verweisen per ID darauf und der Egress-Proxy löst es zur Anfragezeit auf und fügt es ein.
Secret-Werte können nur geschrieben werden. Nachdem sie gespeichert wurden, werden sie von keinem Endpunkt zurückgegeben. Ein kompromittierter Agent kann die verwendeten Tokens also nicht auslesen.
Die primäre Stelle, an der Sie Anmeldedaten verwenden, ist die Netzwerk-Zulassungsliste unter environment.network. Speichern Sie das Secret zuerst:
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"
}'
Hängen Sie es dann an die Domain an, für die es authentifiziert wird:
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": "*" }
]
}
}
}'
Der Agent sendet jetzt authentifizierte Anfragen an api.github.com und das Token ist nie in der Sandbox vorhanden.
Qualifikationstypen
Jede Anmeldedaten haben eine type, die bestimmt, welche Felder akzeptiert werden und wie der Proxy sie anwendet.
| Typ | Anwendungsfall | Verhalten |
|---|---|---|
bearer_token |
Persönliche Zugriffstokens, Bot-Tokens, statische API-Schlüssel | Der Proxy fügt das Token als Anfrageheader ein. Keine Aktualisierungslogik. |
oauth2 |
OAuth-Apps und nutzerdelegierte Abläufe | Der Proxy tauscht das Aktualisierungstoken gegen Zugriffstokens ein und aktualisiert sie, wenn sie ablaufen. |
environment_variable |
Client-SDKs, die Secrets aus der Prozessumgebung lesen | Die Umgebung des Agents erhält einen Platzhalter. Der Proxy ersetzt das tatsächliche Secret in ausgehenden Anfragen. |
Anmeldedaten in der Zulassungsliste für Netzwerke verwenden
Wenn Sie credential einer Zulassungslistenregel hinzufügen, authentifiziert der Proxy jede ausgehende Anfrage an diese Domain. Dies ist die empfohlene Methode, um einem Agent Zugriff auf eine private API, ein privates Repository oder einen privaten Bucket zu gewähren.
Sie können authentifizierte und nicht authentifizierte Regeln in derselben Zulassungsliste kombinieren:
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" }
]
}
}
}'
Da der Proxy die Anmeldedaten pro Anfrage auflöst, wird das Zugriffstoken für oauth2-Anmeldedaten transparent aktualisiert. Eine lang andauernde Interaktion wird nicht unterbrochen, wenn das Zugriffstoken abläuft.
credential und transform kombinieren
In Allowlist-Regeln kann auch ein Inline-transform-Objekt verwendet werden, mit dem Header direkt in der Regel festgelegt werden. Beide Mechanismen werden vom Egress-Proxy auf der Leitung angewendet. In beiden Fällen ist der Header-Wert also nie in der Sandbox vorhanden. Beide Felder können in derselben Regel vorkommen.
| Regelkonfiguration | Verhalten |
|---|---|
Nur credential |
Der Proxy löst die Anmeldedaten auf und fügt den Header in jede Anfrage an die Domain ein. |
Nur transform |
Statische Header-Injection. Die von Ihnen geschriebenen Headern werden unverändert gesendet. |
| Beides | Die Anmeldedaten werden zuerst angewendet, dann werden transform darüber zusammengeführt. Ein expliziter transform-Header hat Vorrang, wenn beide denselben Schlüssel festlegen. |
| Weder noch | Die Domain ist zulässig und es werden keine Header eingefügt. |
Anmeldedaten sind nützlich, wenn Sie ein Secret einmal speichern und von jeder Umgebung, jedem Agent und jedem Trigger in Ihrem Projekt darauf verweisen möchten und wenn Sie möchten, dass die Aktualisierung und Rotation von Zugriffstokens für Sie übernommen wird. Ein Inline-transform ist geeignet, wenn der Wert zu einem einzelnen Aufruf gehört, z. B. ein Token, das Sie selbst kurz vor dem Erstellen der Interaktion generieren.
Die Kombination der beiden ist üblich. Die Anmeldedaten enthalten den Authentifizierungsheader und transform fügt alles hinzu, was der Upstream-Dienst für dieselbe Anfrage erwartet:
{
"domain": "api.atlassian.com",
"credential": "jira-oauth",
"transform": {
"X-Atlassian-Workspace": "my-workspace-id"
}
}
Wenn Sie ein Secret aus einem Inline-transform in Anmeldedaten verschieben möchten, speichern Sie es mit POST /credentials, ersetzen Sie den Auth-Header in transform durch "credential": "<id>" und lassen Sie den Rest des transform-Objekts unverändert.
Anmeldedaten mit MCP-Servern verwenden
Remote-MCP-Server verwenden dasselbe credential-Feld. Legen Sie ihn in einem mcp_server-Tool fest. Der Proxy fügt den Autorisierungsheader in jede Anfrage an diesen Server ein:
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"
}
]
}'
Für credential und headers gilt dieselbe Vorrangregel wie für die Zulassungsliste.
Die Anmeldedaten werden zuerst angewendet und headers wird darüber eingefügt. Ein expliziter Header hat also Vorrang, wenn beide denselben Schlüssel festlegen:
{
"type": "mcp_server",
"name": "jira",
"url": "https://jira.atlassian.com/mcp",
"credential": "jira-oauth",
"headers": {
"X-Atlassian-Workspace": "my-workspace-id"
}
}
Wenn Sie ein Secret aus dem Inline-headers in Anmeldedaten verschieben möchten, speichern Sie es mit POST /credentials und ersetzen Sie den Authentifizierungseintrag in headers durch credential.
Die anderen Überschriften bleiben an ihrem Platz.
Anmeldedaten als Umgebungsvariablen verwenden
Einige Clientbibliotheken lesen Secrets aus der Prozessumgebung, anstatt sie als Anfrageheader zu akzeptieren. Socket-Modus- und Long-Polling-Clients sind der häufigste Fall.
Binden Sie Anmeldedaten vom Typ environment_variable an einen Variablennamen unter 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 akzeptiert sowohl Stringliterale als auch Anmeldedatenreferenzen. Ein Literalstring wird als normale Nur-Text-Variable in den Container eingefügt.
Eine Anmeldedatenreferenz ist das nicht. Die Variable erhält den Platzhalter __GEMINI_CRED_<credential-id>__ und der Proxy setzt das tatsächliche Secret nur für ausgehende Anfragen ein, die an eine Domain in der trusted_domains der Anmeldedaten gesendet werden. Eine Anfrage an eine andere Domain wird abgelehnt. Das Secret verlässt also nie den Perimeter und der Platzhalter wird nicht an seiner Stelle gesendet.
Legen Sie trusted_domains für jede environment_variable-Anmeldedaten fest. Damit wird festgelegt, wo das Secret verwendet werden kann.
Anmeldedaten erstellen
Für jede Erstellungsanfrage ist ein type-Objekt sowie die für diesen Typ erforderlichen Felder erforderlich.
Bei direkten REST-Aufrufen wird für alle Feldnamen die Snake-Case-Schreibweise verwendet. Wenn Sie ein Feld im CamelCase-Format senden, wird 400 zurückgegeben.
Inhabertoken
Für Anmeldedaten mit einem Bearer-Token ist nur Folgendes erforderlich: 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"
}'
In der Antwort werden nur Metadaten zurückgegeben, niemals das Token:
{
"id": "github-production",
"type": "bearer_token",
"status": "active",
"create_time": "2026-07-15T10:00:00.000000000Z",
"update_time": "2026-07-15T10:00:00.000000000Z"
}
Standardmäßig sendet der Proxy Authorization: Bearer <token>. Überschreiben Sie header_name und prefix, um einen Dienst anzusprechen, der etwas anderes erwartet:
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": ""
}'
Mit dieser Konfiguration wird der Header x-goog-api-key: key_xxxxxxxxxxxx erstellt.
In der folgenden Tabelle sehen Sie, wie header_name und prefix kombiniert werden:
| Konfiguration | Eingefügter Header |
|---|---|
{"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
Für OAuth2-Anmeldedaten sind client_id, client_secret, refresh_token und token_url erforderlich. Das Feld scopes ist optional:
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"]
}'
Beim Erstellen von OAuth2-Anmeldedaten wird ein Live-Token-Austausch mit token_url durchgeführt, um zu bestätigen, dass die Konfiguration funktioniert. Die Anmeldedaten werden nur gespeichert, wenn der Anbieter eine erfolgreiche Token-Antwort mit einem access_token zurückgibt. Sowohl JSON- als auch form-urlencoded-Antworten sind zulässig.
Das bedeutet, dass Sie beim Erstellen ein gültiges, nicht abgelaufenes Aktualisierungstoken benötigen. Wenn der Anbieter den Tausch ablehnt, wird der Fehler an Sie zurückgegeben:
{
"error": {
"message": "OAuth token validation failed with HTTP 403: {\"error\":\"unauthorized_client\",\"error_description\":\"refresh_token is invalid\"}",
"code": "invalid_request"
}
}
Nach dem Speichern aktualisiert der Proxy Zugriffstokens, wenn sie ablaufen. Wenn der Anbieter Aktualisierungstokens rotiert und bei einer Aktualisierung ein neues zurückgibt, wird das gespeicherte Token automatisch durch das neue ersetzt.
Umgebungsvariable
Für environment_variable-Anmeldedaten sind value und injection_location erforderlich:
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"
}'
Das Feld injection_location gibt an, wo im Proxy das Secret in der ausgehenden Anfrage ersetzt werden soll. Es werden header, query oder body akzeptiert, entweder als einzelner String oder als Array, wenn ein Dienst mehr als einen benötigt:
"injection_location": ["header", "query"]
Die Substitution erfolgt nur an den von Ihnen angegebenen Stellen. Eine Anfrage, die den Platzhalter an einer anderen Stelle enthält, wird abgelehnt und nicht weitergeleitet.
Informationen zum Binden der Anmeldedaten an einen Variablennamen finden Sie unter Anmeldedaten als Umgebungsvariablen verwenden.
Generierte IDs
Das Feld id ist optional. Lassen Sie sie weg und der Dienst generiert eine 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"
}
Geben Sie eine eigene ID an, wenn Sie eine stabile, lesbare Referenz für alle Interaktionen benötigen. Da die ID im Ressourcenpfad enthalten ist, sollten Sie Kleinbuchstaben, Ziffern, Bindestriche oder Unterstriche verwenden.
Anmeldedaten auflisten
Anmeldedaten für Ihr Projekt auflisten. Mit Paginierungsparametern können Sie die Batchgröße der Antwort steuern.
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"
Die Antwort enthält nur Metadaten:
{
"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="
}
Übergeben Sie next_page_token als page_token zurück, um die nächste Seite abzurufen. Das Feld wird weggelassen, wenn es keine weiteren Ergebnisse gibt.
| Parameter | Typ | Beschreibung |
|---|---|---|
page_size |
integer | Maximale Anzahl von Anmeldedaten pro Seite. |
page_token |
String | Token aus dem next_page_token einer vorherigen Antwort. |
Anmeldedaten abrufen
Metadaten für bestimmte Anmeldedaten anhand der ID abrufen.
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"
Die Antwort sieht dann ungefähr so aus:
{
"id": "github-production",
"type": "bearer_token",
"status": "active",
"create_time": "2026-07-15T10:00:00.000000000Z",
"update_time": "2026-08-01T14:30:00.000000000Z"
}
Wenn Sie Anmeldedaten anfordern, die nicht vorhanden sind, wird 404 zurückgegeben:
{
"error": {
"message": "Result not found.; GetCredential call failed",
"code": "not_found"
}
}
Anmeldedaten rotieren
Ersetzen Sie ein Secret, ohne eine Zulassungslistenregel, Tool-Definition oder Umgebungsvariable zu ändern, die darauf verweist. Die Rotation wird bei der nächsten Proxy-Auflösung wirksam.
Die Anfrage muss type sowie die Felder enthalten, die Sie ändern möchten. Für Felder, die Sie nicht angeben, werden die aktuellen Werte beibehalten.
So rotieren Sie ein Inhabertoken:
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"
}'
So rotieren Sie ein OAuth2-Aktualisierungstoken:
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"
}'
Die Antwort spiegelt die neue update_time wider:
{
"id": "jira-oauth",
"type": "oauth2",
"status": "active",
"create_time": "2026-07-15T10:05:00.000000000Z",
"update_time": "2026-08-01T14:30:00.000000000Z"
}
Die type einer Anmeldedaten wird bei der Erstellung festgelegt. Wenn Sie es ändern möchten, löschen Sie die Anmeldedaten und erstellen Sie neue.
Qualifikation löschen
Löschen Sie Anmeldedaten und das zugehörige gespeicherte Secret, wenn sie nicht mehr benötigt werden.
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"
Bei einem erfolgreichen Löschvorgang wird ein leeres Objekt zurückgegeben:
{}
Alle Zulassungslistenregeln, Tools oder Umgebungsvariablen, die noch auf die ID verweisen, können nicht aufgelöst werden. Aktualisieren Sie diese daher zuerst.
Feldverweis
Felder, die für alle Anmeldedaten gelten:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
id |
String | Nein | Eindeutige Kennung. Wird als UUID generiert, wenn sie weggelassen wird. |
type |
String | Ja | Entweder bearer_token, oauth2 oder environment_variable. |
status |
String | Schreibgeschützt | Der aktuelle Status des Berechtigungsnachweises. |
create_time |
String | Schreibgeschützt | Zeitstempel der Erstellung im RFC 3339-Format. |
update_time |
String | Schreibgeschützt | RFC 3339-Zeitstempel der letzten Aktualisierung. |
Felder für bearer_token:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
token |
String | Ja | Nur Schreibzugriff. Der Tokenwert. |
header_name |
String | Nein | Einzufügender Header. Die Standardeinstellung ist Authorization. |
prefix |
String | Nein | Wertpräfix. Die Standardeinstellung ist Bearer. Legen Sie diese Option auf "" fest, wenn Sie keine verwenden möchten. |
Felder für oauth2:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
client_id |
String | Ja | OAuth2-Client-ID. |
client_secret |
String | Ja | Nur Schreibzugriff. OAuth2-Clientschlüssel. |
refresh_token |
String | Ja | Nur Schreibzugriff. Aktualisierungstoken, das zum Abrufen von Zugriffstokens verwendet wird. |
token_url |
String | Ja | Token-Endpunkt des Anbieters. |
scopes |
Array | Nein | OAuth-Bereiche, die angefordert werden sollen. |
Felder für environment_variable:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
value |
String | Ja | Nur Schreibzugriff. Der Secret-Wert. |
injection_location |
String oder Array | Ja | Wo das Secret ersetzt werden soll. Einer oder mehrere der folgenden Werte: header, query, body. |
trusted_domains |
Array | Nein | Für die Substitution autorisierte Domainmuster. |
Fehler
Bei Fehlern wird ein JSON-Objekt mit einem message und einem code zurückgegeben:
{
"error": {
"message": "Credential 'github-production' already exists.; CreateCredential call failed",
"code": "aborted"
}
}
| HTTP-Status | code |
Ursache |
|---|---|---|
| 400 | invalid_request |
Ein erforderliches Feld fehlt, ein unbekanntes Feld, ein nicht unterstütztes type oder eine fehlgeschlagene OAuth2-Validierung. |
| 404 | not_found |
Es gibt keine Anmeldedaten mit dieser ID. |
| 409 | aborted |
Ein Anmeldedatenpaar mit dieser ID ist bereits vorhanden. |
Unbekannte Felder werden abgelehnt und nicht ignoriert. Der Fehler gibt das Feld an:
{
"error": {
"message": "Unknown parameter 'headerName'. Did you mean 'header_name'?",
"code": "invalid_request"
}
}
Nächste Schritte
- Umgebungen: Hier erfahren Sie, wie Agents Code ausführen und Dateien speichern.
- Übersicht über Agents: Hier finden Sie Informationen zu den wichtigsten Konzepten von verwalteten Agents.
- Benutzerdefinierte KI-Agenten erstellen: Definieren Sie Ihre eigenen KI-Agenten mit
AGENTS.mdundSKILL.md.