Учетные данные — это управляемые сервером секреты, которые позволяют вашим агентам обращаться к сторонним сервисам, не допуская попадания секрета в среду агента. Вы сохраняете учетные данные один раз, обращаетесь к ним по идентификатору, а исходящий прокси-сервер разрешает и внедряет их во время запроса.
Секретные значения доступны только для записи. После сохранения они никогда не возвращаются ни одной конечной точкой, поэтому скомпрометированный агент не сможет прочитать используемые им токены.
В первую очередь учетные данные используются в списке разрешенных сетей (nodelist) в файле 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}`);
ОТДЫХ
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: "*" },
],
},
},
});
ОТДЫХ
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 , определяющий, какие поля они принимают и как прокси-сервер их применяет.
| Тип | Вариант использования | Поведение |
|---|---|---|
bearer_token | Персональные токены доступа, токены ботов, статические ключи API | Прокси-сервер внедряет токен в заголовок запроса. Логика обновления отсутствует. |
oauth2 | Приложения OAuth и потоки, делегируемые пользователем | Прокси-сервер обменивает токен обновления на токены доступа и обновляет их по мере истечения срока действия. |
environment_variable | Клиентские SDK, считывающие секреты из среды процесса. | В среду агента поступает заполнитель. Прокси-сервер подставляет настоящий секретный ключ в исходящие запросы. |
Используйте учетные данные из списка разрешенных сетей.
Добавьте 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" },
],
},
},
});
ОТДЫХ
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 , который устанавливает заголовки непосредственно в правиле. Оба механизма применяются исходящим прокси-сервером в сети, поэтому в обоих случаях значение заголовка никогда не существует внутри песочницы. Оба поля могут отображаться в одном и том же правиле.
| Настройка правил | Поведение |
|---|---|
только 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 , и прокси-сервер будет внедрять заголовок аутентификации в каждый запрос к этому серверу:
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",
}],
});
ОТДЫХ
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 и замените запись auth в headers на credential . Остальные заголовки оставьте без изменений.
Используйте учетные данные в качестве переменных среды.
Некоторые клиентские библиотеки считывают секретные данные из среды выполнения процесса, а не принимают их в качестве заголовков запроса. Чаще всего это клиенты, работающие в режиме сокета или использующие длительное опросное соединение.
Привяжите учетные данные 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" },
},
},
});
ОТДЫХ
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 принимает одновременно строковые литералы и ссылки на учетные данные. Строковый литерал внедряется в контейнер как обычная текстовая переменная.
Ссылка на учетные данные — нет. Переменная получает заполнитель __GEMINI_CRED_<credential-id>__ , и прокси-сервер заменяет его реальным секретом только для исходящих запросов, идущих к домену из списка trusted_domains учетных данных. Запрос к любому другому домену отклоняется, поэтому секрет никогда не покидает периметр, и заполнитель не отправляется вместо него.
Установите trusted_domains для всех учетных данных, environment_variable . Он определяет область действия секретного ключа.
Создать учетные данные
Для каждого запроса на создание требуется указать type , а также все поля, необходимые для этого типа.
При прямом вызове REST все имена полей используют стиль snake_case. Отправка поля в стиле camelCase возвращает ошибку 400 .
Токен предъявителя
Для использования токена носителя требуется только 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",
});
ОТДЫХ
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"
}
По умолчанию прокси отправляет 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: "",
});
ОТДЫХ
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"],
});
ОТДЫХ
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"
}
}
После сохранения прокси-сервер обновляет токены доступа по мере истечения их срока действия. Если провайдер обновляет токены обновления и возвращает новый во время обновления, новый токен автоматически заменяет сохраненный.
Переменная окружающей среды
Для использования 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",
});
ОТДЫХ
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 указывает прокси-серверу, в какой части исходящего запроса следует заменить секретный ключ. Оно принимает header , query или body запроса либо в виде одной строки, либо в виде массива, если сервису требуется более одного параметра:
"injection_location": ["header", "query"]
Замена происходит только в указанных вами местах. Запрос, содержащий заполнитель в любом другом месте, будет отклонен, а не отправлен дальше.
Чтобы привязать учетные данные к имени переменной, см. раздел «Использование учетных данных в качестве переменных среды» .
Сгенерированные идентификаторы
Поле 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}`);
}
ОТДЫХ
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}`);
ОТДЫХ
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"
}
}
Повернуть учетные данные
Замените секретный ключ, не затрагивая ни одно правило списка разрешенных адресов, определение инструмента или переменную среды, которая на него ссылается. Ротация вступит в силу при следующем разрешении прокси-сервера.
Запрос должен включать 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",
});
ОТДЫХ
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",
});
ОТДЫХ
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");
ОТДЫХ
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.