Kredencialet në agjentët e menaxhuar

Kredencialet janë sekrete të menaxhuara nga serveri që u lejojnë agjentëve tuaj të arrijnë shërbime të palëve të treta pa hyrë sekreti në mjedisin e agjentit. Ju e ruani një kredencial një herë, e referoni atë me ID dhe proxy-ja e daljes e zgjidh dhe e injekton atë në kohën e kërkesës.

Vlerat sekrete janë vetëm për shkrim. Pasi ruhen, ato nuk kthehen kurrë nga asnjë pikë fundore, kështu që një agjent i kompromentuar nuk mund t'i lexojë mbrapsht tokenët që po përdor.

Vendi kryesor ku përdorni një kredencial është lista e lejuar e rrjetit në environment.network . Ruani sekretin së pari:

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}`);

PUSHTIM

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"
}'

Pastaj bashkëngjiteni atë në domenin që autentifikon:

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: "*" },
            ],
        },
    },
});

PUSHTIM

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": "*" }
            ]
        }
    }
}'

Agjenti tani bën kërkesa të autentifikuara te api.github.com , dhe tokeni nuk ekziston kurrë brenda sandbox-it.

Llojet e kredencialeve

Çdo kredencial ka një type që përcakton se cilat fusha pranon dhe si e zbaton atë proxy.

Lloji Rast përdorimi Sjellje
bearer_token Shenjat e aksesit personal, shenjat e robotëve, çelësat statikë të API-t Proxy-ja e injekton tokenin si kokë kërkese. Nuk ka logjikë rifreskimi.
oauth2 Aplikacionet OAuth dhe rrjedhat e deleguara nga përdoruesi Proxy-ja shkëmben tokenin e rifreskimit me tokenët e aksesit dhe i rifreskon ato ndërsa skadojnë.
environment_variable SDK-të e klientit që lexojnë sekrete nga mjedisi i procesit Mjedisi i agjentit merr një vendmbajtës. Proxy zëvendëson sekretin e vërtetë në kërkesat dalëse.

Përdor kredencialet në listën e lejuar të rrjetit

Shtoni credential në një rregull të listës së lejimeve dhe ndërmjetësi (proxy) autentifikon çdo kërkesë dalëse në atë domen. Kjo është mënyra e rekomanduar për t'i dhënë një agjenti qasje në një API private, një depo private ose një "kofshë" private.

Mund të kombinoni rregulla të autentifikuara dhe të paautentifikuara në të njëjtën listë lejimesh:

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" },
            ],
        },
    },
});

PUSHTIM

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" }
            ]
        }
    }
}'

Meqenëse ndërmjetësi (proxy) e zgjidh kredencialin sipas kërkesës, një kredencial oauth2 e rifreskon tokenin e tij të qasjes në mënyrë transparente. Një bashkëveprim afatgjatë nuk ndërpritet kur skadon tokeni i qasjes.

Kombinimi i credential dhe transform

Rregullat e listës së lejimeve pranojnë gjithashtu një objekt transform në linjë që vendos titrat direkt në rregull. Të dy mekanizmat zbatohen nga proxy i daljes në tel, kështu që në të dyja rastet vlera e titrit nuk ekziston kurrë brenda sandbox-it. Të dy fushat mund të shfaqen në të njëjtin rregull.

Konfigurimi i rregullave Sjellje
vetëm credential Proxy-ja zgjidh kredencialet dhe injekton kokën e tyre në çdo kërkesë drejtuar domenit.
vetëm transform Injektim statik i header-it. Titujt që shkruani dërgohen siç janë.
Të dyja Kredencialet zbatohen së pari, pastaj transform bashkohet sipër. Një kokë transform e qartë fiton nëse të dy vendosin të njëjtin çelës.
Asnjëra Domeni lejohet dhe nuk injektohen tituj.

Një kredencial ia vlen të përdoret kur doni të ruani një sekret një herë dhe ta referoni atë nga çdo mjedis, agjent dhe shkaktar në projektin tuaj, dhe kur dëshironi që rifreskimi dhe rrotullimi i tokenit të qasjes të trajtohen për ju. Një transform në linjë përshtatet kur vlera i përket një thirrjeje të vetme, për shembull një token që e gjeneroni vetë pak para krijimit të ndërveprimit.

Kombinimi i të dyjave është i zakonshëm. Kredencialet mbartin kokën e vërtetimit dhe transform shton çdo gjë tjetër që shërbimi i rrjedhës së sipërme pret në të njëjtën kërkesë:

{
    "domain": "api.atlassian.com",
    "credential": "jira-oauth",
    "transform": {
        "X-Atlassian-Workspace": "my-workspace-id"
    }
}

Për të zhvendosur një sekret nga një transform në linjë dhe në një kredencial, ruajeni atë me POST /credentials , zëvendësoni kokën e autorizimit në transform me "credential": "<id>" dhe lëreni pjesën tjetër të objektit të transform të qetë.

Përdorni kredencialet me serverat MCP

Serverët e largët MCP marrin të njëjtën fushë credential . Vendoseni atë në një mjet mcp_server dhe proxy injekton kokën e autorizimit në çdo kërkesë drejtuar atij serveri:

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",
    }],
});

PUSHTIM

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 dhe headers ndjekin të njëjtin rregull përparësie si lista e lejimeve. Kredencialet zbatohen së pari dhe headers bashkohen sipër, kështu që një kokë e qartë fiton nëse të dyja vendosin të njëjtin çelës:

{
    "type": "mcp_server",
    "name": "jira",
    "url": "https://jira.atlassian.com/mcp",
    "credential": "jira-oauth",
    "headers": {
        "X-Atlassian-Workspace": "my-workspace-id"
    }
}

Për të zhvendosur një sekret nga headers e brendshëm në një kredencial, ruajeni atë me POST /credentials dhe zëvendësoni hyrjen e autorizimit në headers me credential . Mbani titujt e tjerë aty ku janë.

Përdorni kredencialet si variabla mjedisi

Disa biblioteka klientësh lexojnë sekrete nga mjedisi i procesit në vend që t'i pranojnë ato si tituj kërkesash. Klientët në modalitetin Socket dhe klientët me sondazh të gjatë janë rastet e zakonshme.

Lidh një kredencial environment_variable me një emër variabli nën 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" },
        },
    },
});

PUSHTIM

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 pranon vargje literale dhe referenca kredencialesh krah për krah. Një varg literal injektohet në kontejner si një variabël normal teksti i thjeshtë.

Një referencë kredenciali nuk është. Variabli merr mbajtësin e vendit __GEMINI_CRED_<credential-id>__ , dhe proxy ndërron në sekretin real vetëm për kërkesat dalëse që shkojnë në një domen në trusted_domains të kredencialit. Një kërkesë për çdo domen tjetër refuzohet, kështu që sekreti nuk largohet kurrë nga perimetri dhe mbajtësi i vendit nuk dërgohet në vendin e tij.

Cakto trusted_domains në çdo kredencial environment_variable . Është kontrolli që përcakton se ku mund të përdoret sekreti.

Krijo një kredencial

Çdo kërkesë krijimi ka nevojë për një type , plus fushat që kërkon ai lloj.

Kur thirret REST direkt, të gjithë emrat e fushave përdorin snake_case. Dërgimi i një fushe camelCase kthen një 400 .

Simbol për mbajtësin

Një kredencial token-i për bartësin ka nevojë vetëm 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",
});

PUSHTIM

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"
}'

Përgjigja kthen vetëm metadatat, kurrë tokenin:

{
  "id": "github-production",
  "type": "bearer_token",
  "status": "active",
  "create_time": "2026-07-15T10:00:00.000000000Z",
  "update_time": "2026-07-15T10:00:00.000000000Z"
}

Si parazgjedhje, proksi dërgon Authorization: Bearer <token> . Mbivendos header_name dhe prefix për të synuar një shërbim që pret diçka tjetër:

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: "",
});

PUSHTIM

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": ""
}'

Ky konfigurim prodhon kokën x-goog-api-key: key_xxxxxxxxxxxx .

Tabela e mëposhtme tregon se si kombinohen header_name dhe prefix :

Konfigurimi Kokë e injektuar
{"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

Një kredencial OAuth2 kërkon client_id , client_secret , refresh_token dhe token_url . Fusha scopes është opsionale:

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"],
});

PUSHTIM

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"]
}'

Krijimi i një kredenciali OAuth2 kryen një shkëmbim të drejtpërdrejtë të token-ave kundrejt token_url për të konfirmuar që konfigurimi funksionon. Kredenciali ruhet vetëm nëse ofruesi kthen një përgjigje të suksesshme të token-ave që përmban një access_token . Pranohen përgjigjet si në JSON ashtu edhe në ato të koduara nga form-urlen.

Kjo do të thotë që ju nevojitet një token rifreskimi i vlefshëm dhe i paskaduar në kohën e krijimit. Nëse ofruesi e refuzon shkëmbimin, gabimi ju kthehet:

{
  "error": {
    "message": "OAuth token validation failed with HTTP 403: {\"error\":\"unauthorized_client\",\"error_description\":\"refresh_token is invalid\"}",
    "code": "invalid_request"
  }
}

Pasi të ruhen, proxy-ja rifreskon tokenët e aksesit ndërsa ato skadojnë. Nëse ofruesi i ndërron tokenët e rifreskimit dhe kthen një të ri gjatë një rifreskimi, tokeni i ri zëvendëson automatikisht atë të ruajtur.

Variabli i mjedisit

Një kredencial environment_variable kërkon value dhe 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",
});

PUSHTIM

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"
}'

Fusha injection_location i tregon proxy-t se ku në kërkesën dalëse duhet të zëvendësojë sekretin. Ajo pranon header , query ose body , qoftë si një varg të vetëm ose si një varg kur një shërbim ka nevojë për më shumë se një:

"injection_location": ["header", "query"]

Zëvendësimi ndodh vetëm në vendet që renditni. Një kërkesë që e mbart zëvendësuesin diku tjetër refuzohet në vend që të dërgohet më tej.

Për të lidhur kredencialet me një emër variabli, shihni Përdorni kredencialet si variabla mjedisi .

ID-të e gjeneruara

Fusha e id është opsionale. Nëse e lini jashtë, shërbimi gjeneron një 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"
}

Jepni ID-në tuaj kur dëshironi një referencë të qëndrueshme dhe të lexueshme për ta përdorur në të gjitha ndërveprimet. Meqenëse ID-ja shfaqet në shtegun e burimit, preferoni shkronja të vogla alfanumerike me viza lidhëse ose nënvizime.

Listoni kredencialet

Renditni kredencialet që i përkasin projektit tuaj. Përdorni parametrat e faqezimit për të kontrolluar madhësinë e grupit të përgjigjeve.

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}`);
}

PUSHTIM

curl -X GET "https://generativelanguage.googleapis.com/v1beta/credentials?page_size=10" \
-H "x-goog-api-key: $GEMINI_API_KEY"

Përgjigja përmban vetëm meta të dhëna:

{
  "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="
}

Kaloni next_page_token përsëri si page_token për të marrë faqen tjetër. Fusha lihet jashtë kur nuk ka rezultate të mëtejshme.

Parametri Lloji Përshkrimi
page_size numër i plotë Numri maksimal i kredencialeve për faqe.
page_token varg Token nga next_page_token i një përgjigjeje të mëparshme.

Merrni një kredencial

Merrni meta të dhënat për një kredencial specifik sipas ID-së së tij.

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}`);

PUSHTIM

curl -X GET "https://generativelanguage.googleapis.com/v1beta/credentials/github-production" \
-H "x-goog-api-key: $GEMINI_API_KEY"

Përgjigja duket e ngjashme me sa vijon:

{
  "id": "github-production",
  "type": "bearer_token",
  "status": "active",
  "create_time": "2026-07-15T10:00:00.000000000Z",
  "update_time": "2026-08-01T14:30:00.000000000Z"
}

Kërkesa për një kredencial që nuk ekziston kthen 404 :

{
  "error": {
    "message": "Result not found.; GetCredential call failed",
    "code": "not_found"
  }
}

Rrotulloni një kredencial

Zëvendësoni një sekret pa prekur asnjë rregull të listës së lejimeve, përkufizim të mjetit ose ndryshore mjedisi që i referohet atij. Rrotullimi hyn në fuqi në zgjidhjen tjetër të proxy-t.

Kërkesa duhet të përfshijë type , plus fushat që dëshironi të ndryshoni. Fushat që hiqni dorë i ruajnë vlerat e tyre aktuale.

Rrotulloni një token bartës:

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",
});

PUSHTIM

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"
}'

Rrotulloni një token rifreskimi 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",
});

PUSHTIM

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"
}'

Përgjigja pasqyron update_time in e ri:

{
  "id": "jira-oauth",
  "type": "oauth2",
  "status": "active",
  "create_time": "2026-07-15T10:05:00.000000000Z",
  "update_time": "2026-08-01T14:30:00.000000000Z"
}

type i një kredenciali është i fiksuar gjatë krijimit. Për ta ndryshuar atë, fshini kredencialin dhe krijoni një të ri.

Fshi një kredencial

Fshini një kredencial dhe sekretin e ruajtur në të kur nuk nevojitet më.

Python

client.credentials.delete(id="github-production")

JavaScript

await client.credentials.delete("github-production");

PUSHTIM

curl -X DELETE "https://generativelanguage.googleapis.com/v1beta/credentials/github-production" \
-H "x-goog-api-key: $GEMINI_API_KEY"

Një fshirje e suksesshme kthen një objekt bosh:

{}

Çdo rregull, mjet ose variabël mjedisi i listës së lejimeve që ende i referohet ID-së nuk do të zgjidhet, prandaj përditësojini ato më parë.

Referenca e fushës

Fushat e përbashkëta për çdo kredencial:

Fushë Lloji E detyrueshme Përshkrimi
id varg Jo Identifikues unik. Gjenerohet si UUID kur lihet jashtë.
type varg Po Një nga bearer_token , oauth2 , environment_variable .
status varg Vetëm për lexim Statusi aktual i kredencialit.
create_time varg Vetëm për lexim Vula kohore e krijimit RFC 3339.
update_time varg Vetëm për lexim Vula kohore RFC 3339 e përditësimit të fundit.

Fushat për bearer_token :

Fushë Lloji E detyrueshme Përshkrimi
token varg Po Vetëm për shkrim. Vlera e tokenit.
header_name varg Jo Titulli për t'u injektuar. Parazgjedhja është Authorization .
prefix varg Jo Parashtesa e vlerës. Parazgjedhja është Bearer . Vendoset në "" për asnjë.

Fushat për oauth2 :

Fushë Lloji E detyrueshme Përshkrimi
client_id varg Po ID-ja e klientit OAuth2.
client_secret varg Po Vetëm për shkrim. Sekreti i klientit OAuth2.
refresh_token varg Po Vetëm për shkrim. Tokeni i rifreskimit përdoret për të marrë tokenët e aksesit.
token_url varg Po Pika fundore e tokenit të ofruesit.
scopes varg Jo Fushat e OAuth për t'u kërkuar.

Fushat për environment_variable :

Fushë Lloji E detyrueshme Përshkrimi
value varg Po Vetëm për shkrim. Vlera sekrete.
injection_location varg ose matricë Po Ku të zëvendësohet sekreti. Një ose më shumë nga header , query , body .
trusted_domains varg Jo Modelet e domeneve të autorizuara për zëvendësim.

Gabime

Gabimet kthejnë një objekt JSON me një message dhe një code :

{
  "error": {
    "message": "Credential 'github-production' already exists.; CreateCredential call failed",
    "code": "aborted"
  }
}
Statusi i HTTP-së code Shkak
400 invalid_request Mungon një fushë e detyrueshme, fushë e panjohur, type pambështetur ose një validim OAuth2 i dështuar.
404 not_found Nuk ka kredenciale me atë dokument identifikimi.
409 aborted Një kredencial me atë ID ekziston tashmë.

Fushat e panjohura refuzohen në vend që të injorohen, dhe gabimi e emërton fushën:

{
  "error": {
    "message": "Unknown parameter 'headerName'. Did you mean 'header_name'?",
    "code": "invalid_request"
  }
}

Çfarë vjen më pas