Ключи Management API
Программное управление обычными API-ключами GonkaGate, доступными через /api/v1/keys, через отдельные ключи управления.
Используйте gpm-... ключ Management API с /api/v1/keys, чтобы программно смотреть, создавать, обновлять и удалять обычные gp-... API-ключи, доступные через этот API. Это ключи для служебной автоматизации внутри одного аккаунта GonkaGate. Для /v1/* запросов к моделям они не подходят.
Ограничение совместимости
/api/v1/keysработает только с обычными ключами, у которых уже есть внешнийdata.hash. Старые ключи могут не появляться в списке и не находиться по:hash. Если такой ключ нужно вести через этот API, создайте новый или ротируйте текущий.
Выберите правильный тип ключа
- Обычные
gp-...API-ключи аутентифицируют запросы к/v1/*. - Ключи Management API
gpm-...аутентифицируют маршруты/api/v1/keys*. - Ключи управления могут управлять только обычными API-ключами того же аккаунта GonkaGate, которые доступны через
/api/v1/keys. - Ключи
read_writeмогут смотреть список, создавать, получать, обновлять и удалять такие ключи. - Ключи
read_onlyмогут только смотреть список и получать отдельный ключ.
Используйте ключи управления, когда нужно:
- выдавать отдельный обычный API-ключ на клиента, workspace или environment
- ротировать или отзывать обычные API-ключи из автоматизации
- управлять индивидуальными USD-лимитами
- разделять staging, production, CI и внутренний трафик
Создайте ключ управления один раз
- Войдите в dashboard.
- Откройте Management Keys.
- Нажмите Create.
- Укажите отображаемое название и подтвердите создание.
- Скопируйте секрет
gpm-...и сохраните его в безопасном месте.
Важные правила:
- В текущем dashboard create flow можно указать только отображаемое название. Настроек access mode и срока действия в этом UI нет.
- GonkaGate показывает полный секрет
gpm-...только один раз. - Для создания ключей управления и работы с
/api/v1/keysу аккаунта должен быть подтверждённый email. - На один аккаунт разрешено до
25активных management keys. - Для production, staging, CI и внутренних инструментов лучше создавать отдельные ключи управления, а не делить один credential.
Вызывайте /api/v1/keys с ключом gpm-...
В production GonkaGate используйте такой base URL:
https://api.gonkagate.com/api/v1/keysНа другом deployment оставьте /api/v1/keys и замените только host.
Передавайте ключ управления в Bearer header:
Authorization: Bearer gpm-YOUR_MANAGEMENT_KEYПоддерживаемые операции
| Метод | Маршрут | Что делает |
|---|---|---|
GET | /api/v1/keys | Возвращает список до 100 обычных API-ключей, доступных через этот API. |
POST | /api/v1/keys | Создаёт обычный API-ключ и один раз возвращает сырой секрет gp-.... |
GET | /api/v1/keys/:hash | Возвращает один ключ по внешнему hash. |
PATCH | /api/v1/keys/:hash | Переименовывает ключ, отключает или включает его, меняет лимиты и срок действия. |
DELETE | /api/v1/keys/:hash | Удаляет ключ по внешнему hash. |
hash — это 64-символьный идентификатор из data.hash. Это не сырой gp-... ключ.
Управляйте обычными ключами программно
const MANAGEMENT_API_KEY = "gpm-YOUR_MANAGEMENT_KEY";
const BASE_URL = "https://api.gonkagate.com/api/v1/keys";
const headers = {
Authorization: `Bearer ${MANAGEMENT_API_KEY}`,
"Content-Type": "application/json",
};
const listResponse = await fetch(BASE_URL, { headers });
const listWithDisabledResponse = await fetch(
`${BASE_URL}?offset=100&include_disabled=true`,
{ headers },
);
const createResponse = await fetch(BASE_URL, {
method: "POST",
headers,
body: JSON.stringify({
name: "Customer Production Key",
limit: 50,
limit_reset: "monthly",
expires_at: "2026-12-31T23:59:59Z",
}),
});
const created = await createResponse.json();
const keyHash = created.data.hash;
const getResponse = await fetch(`${BASE_URL}/${keyHash}`, { headers });
const updateResponse = await fetch(`${BASE_URL}/${keyHash}`, {
method: "PATCH",
headers,
body: JSON.stringify({
name: "Customer Production Key v2",
disabled: true,
limit: null,
expires_at: null,
}),
});
const deleteResponse = await fetch(`${BASE_URL}/${keyHash}`, {
method: "DELETE",
headers,
});После создания сохраните оба значения:
key— одноразовый сырой секрет нового обычногоgp-...API-ключа.data.hash—64-символьный внешний идентификатор дляGET,PATCHиDELETE.
Правила запросов, которые меняют поведение
| Тема | Правило |
|---|---|
| Покрытие | /api/v1/keys возвращает и ищет только обычные ключи, у которых уже есть внешний data.hash. Старые ключи могут не появляться здесь, пока вы не создадите новый или не ротируете текущий. |
| Список ключей | offset по умолчанию равен 0, максимум — 10000, а include_disabled по умолчанию равен false. Ответы отсортированы от новых к старым. |
| Лимиты | limit — это положительная сумма в USD. limit_reset принимает daily, weekly или monthly. Если указать limit, но не указать limit_reset, ключ получает пожизненный total limit. |
| Валидация лимитов | limit_reset без limit возвращает 400. Передайте limit: null в PATCH, чтобы снять лимит и очистить limit_reset. |
| Срок действия | expires_at должен быть future RFC 3339 / ISO 8601 timestamp с timezone. Передайте expires_at: null в PATCH, чтобы убрать срок действия. |
| Режим доступа | read_only management keys могут вызывать только GET-маршруты. Записи возвращают 403 Management API key is read-only. |
| Формат ответов | Успешные ответы /api/v1/keys используют OpenRouter-style поля. Ошибки при этом остаются в стандартном GonkaGate /api/* error envelope. |
| BYOK | include_byok_in_limit намеренно не поддерживается и возвращает 400. |
Что возвращают успешные вызовы
Успешные вызовы /api/v1/keys используют OpenRouter-style field names:
GET /api/v1/keys:{ data: OpenRouterKey[] }GETиPATCH /api/v1/keys/:hash:{ data: OpenRouterKey }POST /api/v1/keys:{ key: "gp-...", data: OpenRouterKey }DELETE /api/v1/keys/:hash:{ deleted: true }
Все limit* и usage* значения выражены в USD.
{
"hash": "4f2f5b6f0b0e16eab8c2e55d4f2f0ce4c6f5b91f2a28f8e93b0f8c3b8b112233",
"label": "gp-AbCd...WXYZ",
"name": "Customer Production Key",
"disabled": false,
"limit": 50,
"limit_remaining": 50,
"limit_reset": "monthly",
"usage": 0,
"usage_daily": 0,
"usage_weekly": 0,
"usage_monthly": 0,
"created_at": "2026-03-16T10:00:00.000Z",
"updated_at": "2026-03-16T10:00:00.000Z",
"expires_at": "2026-12-31T23:59:59.000Z"
}Частые ошибки
Даже на OpenRouter-совместимом маршруте ошибки остаются в стандартном GonkaGate /api/* error envelope:
{
"success": false,
"error": {
"message": "Management API key is read-only",
"statusCode": 403,
"requestId": "req_abc123",
"timestamp": "2026-03-16T10:00:00.000Z"
}
}| Ответ | Что проверить сначала |
|---|---|
401 Unauthorized | Проверьте, что в Bearer header передаётся валидный активный gpm-... ключ, а не обычный gp-.... Этот маршрут возвращает 401 для отсутствующего, неизвестного, отключённого, истёкшего и любого другого невалидного ключа управления. |
403 Management API key is read-only | Для POST, PATCH и DELETE используйте read_write management key. |
403 Please verify your email address to access this feature | Подтвердите email владельца аккаунта и повторите запрос. |
400 limit_reset requires limit | Передавайте limit вместе с limit_reset. |
400 expires_at must be ... или BYOK fields are not supported | Исправьте payload и отправьте запрос заново. Повтор того же payload не поможет. |
404 API key not found | Проверьте data.hash. Ключ мог быть удалён или принадлежать другому аккаунту. |
См. также
- Обработка ошибок API, когда автоматизация выходит в прод и нужны понятные retry boundaries, request ID и support-ready сценарий разбора сбоев.
- Аутентификация и API-ключи для обычных
gp-...ключей на/v1/*. - Quickstart, если нужен первый запрос к модели, а не автоматизация управления ключами.
- Обзор API Reference для публичного
/v1контракта после того, как ключи уже выдаются автоматически.