> ## Documentation Index
> Fetch the complete documentation index at: https://docs.toapis.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Создать API токен

> Создание нового API токена через API

> [!NOTE]
>
> **Для пользователей из материкового Китая:** используйте `https://toapis.cn` в качестве эндпоинта (Base URL). Замените `https://toapis.com` на `https://toapis.cn` во всех примерах этого документа.

* Создание нового API токена через API
* Настройка имени токена и времени истечения
* Настройка лимитов квоты и ограничений моделей
* Ключ токена возвращается только один раз при создании

> [!WARNING]
>
> **Уведомление о безопасности**
>
> Пожалуйста, надежно сохраните возвращенный ключ токена (поле `key`). Он отображается только один раз при создании и не может быть получен позже.

## Авторизация

**Authorization** `string` *required*

Все конечные точки требуют аутентификации Bearer Token

Получите ваш API Key:

Посетите [страницу управления API Key](https://toapis.com/console/token) чтобы получить ваш API Key

Добавьте его в заголовок запроса:

```
Authorization: Bearer YOUR_API_KEY
```

## Тело запроса

**name** `string` *required*

Имя токена, максимум 50 символов

Пример: `"Мой новый токен"`

**expired\_time** `integer` (default: -1)

Время истечения токена (Unix timestamp в секундах)

* Установите `-1` для бессрочного токена
* Установите конкретный timestamp для истечения в это время

Пример: `1738483200` (2025-02-02 00:00:00 UTC)

**remain\_quota** `integer` (default: 0)

Оставшаяся квота токена (внутренние единицы)

Конвертация: `500000` = \$1 USD

Пример: `500000` (эквивалент \$1)

**remain\_credits** `float` (default: 0)

Оставшиеся credits токена. Если передано, это поле переопределяет `remain_quota`

Конвертация: `200` credits = \$1 USD = `500000` внутренних единиц квоты

Пример: `200` (эквивалент \$1)

**daily\_credits** `float` (default: 0)

Дневной лимит токена в credits. Если передано, автоматически конвертируется в `daily_quota`

Пример: `100` (эквивалент дневного лимита \$0.5)

**monthly\_credits** `float` (default: 0)

Месячный лимит токена в credits. Если передано, автоматически конвертируется в `monthly_quota`

Пример: `1000` (эквивалент месячного лимита \$5)

**unlimited\_quota** `boolean` (default: false)

Имеет ли токен неограниченную квоту

* `true`: Неограниченная квота, без ограничений
* `false`: Ограниченная квота, используется значение `remain_quota`

Пример: `false`

**model\_limits\_enabled** `boolean` (default: false)

Включить ли ограничения моделей

* `true`: Включить ограничения, доступны только модели из `model_limits`
* `false`: Без ограничений моделей

Пример: `false`

**model\_limits** `string`

Список разрешенных моделей (через запятую)

Действует только когда `model_limits_enabled` равно `true`

Пример: `"gpt-4o,gpt-4o-mini,claude-3-5-sonnet"`

**group** `string`

Имя группы токена

Используется для указания группы каналов для этого токена

Пример: `"default"`

## Ответ

**success** `boolean`

Успешен ли запрос

**message** `string`

Сообщение об ошибке (возвращается только при неудаче)

**data** `object`

Информация о созданном токене (возвращается при успехе)

**Детали поля data**

**id** `integer`

ID токена

**key** `string`

Ключ токена (возвращается только один раз при создании, сохраните надежно)

Формат - случайная строка из 48 символов, используйте с префиксом `sk-`

**name** `string`

Имя токена

**status** `integer`

Статус токена

* `1`: Включен
* `2`: Отключен
* `3`: Истек
* `4`: Квота исчерпана

**user\_id** `integer`

ID владельца

**created\_time** `integer`

Время создания (Unix timestamp)

**expired\_time** `integer`

Время истечения (Unix timestamp), -1 означает бессрочный

**remain\_quota** `integer`

Оставшаяся квота

**remain\_credits** `float`

Оставшиеся credits, рассчитанные по курсу `1 USD = 200 credits`

**unlimited\_quota** `boolean`

Неограниченная ли квота

**used\_quota** `integer`

Использованная квота

**used\_credits** `float`

Использованные credits

**daily\_credits** `float`

Дневной лимит в credits

**monthly\_credits** `float`

Месячный лимит в credits

**model\_limits\_enabled** `boolean`

Включены ли ограничения моделей

**model\_limits** `string`

Список ограничений моделей

**group** `string`

Имя группы

```bash cURL theme={null}
curl --request POST \
  --url 'https://toapis.com/v1/tokens' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "Мой новый токен",
    "expired_time": -1,
    "remain_credits": 200,
    "unlimited_quota": false
  }'
```

```python Python theme={null}
import requests

API_BASE = 'https://toapis.com'
API_KEY = 'sk-xxxxxxxxxxxxxxxxxxxxxx'

headers = {
    'Authorization': f'Bearer {API_KEY}',
    'Content-Type': 'application/json'
}

def create_token():
    payload = {
        'name': 'Мой новый токен',
        'expired_time': -1,  # Бессрочный
        'remain_credits': 200,
        'unlimited_quota': False
    }
    
    response = requests.post(
        f'{API_BASE}/v1/tokens',
        headers=headers,
        json=payload
    )
    data = response.json()
    
    if data.get('success'):
        token_data = data['data']
        print(f"Токен успешно создан!")
        print(f"Имя токена: {token_data['name']}")
        print(f"Ключ токена: sk-{token_data['key']}")
        print("Сохраните этот ключ надежно, он показывается только один раз!")
    else:
        print(f"Ошибка создания: {data.get('message')}")
    
    return data

create_token()
```

```javascript JavaScript theme={null}
const API_BASE = 'https://toapis.com';
const API_KEY = 'sk-xxxxxxxxxxxxxxxxxxxxxx';

async function createToken() {
  const payload = {
    name: 'Мой новый токен',
    expired_time: -1, // Бессрочный
    remain_credits: 200,
    unlimited_quota: false
  };

  const response = await fetch(`${API_BASE}/v1/tokens`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(payload)
  });
  
  const data = await response.json();
  
  if (data.success) {
    const tokenData = data.data;
    console.log('Токен успешно создан!');
    console.log(`Имя токена: ${tokenData.name}`);
    console.log(`Ключ токена: sk-${tokenData.key}`);
    console.log('Сохраните этот ключ надежно, он показывается только один раз!');
  } else {
    console.error('Ошибка создания:', data.message);
  }
  
  return data;
}

createToken();
```

```go Go theme={null}
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
)

type CreateTokenRequest struct {
    Name           string  `json:"name"`
    ExpiredTime    int64   `json:"expired_time"`
    RemainCredits  float64 `json:"remain_credits"`
    UnlimitedQuota bool    `json:"unlimited_quota"`
}

type TokenResponse struct {
    Success bool   `json:"success"`
    Message string `json:"message,omitempty"`
    Data    struct {
        Id             int    `json:"id"`
        Key            string `json:"key"`
        Name           string `json:"name"`
        Status         int    `json:"status"`
        CreatedTime    int64  `json:"created_time"`
        ExpiredTime    int64  `json:"expired_time"`
        RemainQuota    int    `json:"remain_quota"`
        UnlimitedQuota bool   `json:"unlimited_quota"`
    } `json:"data"`
}

func main() {
    url := "https://toapis.com/v1/tokens"
    apiKey := "sk-xxxxxxxxxxxxxxxxxxxxxx"

    payload := CreateTokenRequest{
        Name:           "Мой новый токен",
        ExpiredTime:    -1,
        RemainCredits:  200,
        UnlimitedQuota: false,
    }

    jsonData, _ := json.Marshal(payload)

    req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
    req.Header.Set("Authorization", "Bearer "+apiKey)
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := ioutil.ReadAll(resp.Body)

    var result TokenResponse
    json.Unmarshal(body, &result)

    if result.Success {
        fmt.Println("Токен успешно создан!")
        fmt.Printf("Имя токена: %s\n", result.Data.Name)
        fmt.Printf("Ключ токена: sk-%s\n", result.Data.Key)
        fmt.Println("Сохраните этот ключ надежно, он показывается только один раз!")
    } else {
        fmt.Printf("Ошибка создания: %s\n", result.Message)
    }
}
```

```php PHP theme={null}
<?php

$api_key = 'sk-xxxxxxxxxxxxxxxxxxxxxx';

$payload = [
    'name' => 'Мой новый токен',
    'expired_time' => -1,
    'remain_credits' => 200,
    'unlimited_quota' => false
];

$ch = curl_init('https://toapis.com/v1/tokens');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $api_key",
    "Content-Type: application/json"
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);

if ($data['success']) {
    echo "Токен успешно создан!\n";
    echo "Имя токена: " . $data['data']['name'] . "\n";
    echo "Ключ токена: sk-" . $data['data']['key'] . "\n";
    echo "Сохраните этот ключ надежно, он показывается только один раз!\n";
} else {
    echo "Ошибка создания: " . $data['message'] . "\n";
}
?>
```

```json 200 - Успех theme={null}
{
  "success": true,
  "message": "",
  "credits_per_usd": 200,
  "data": {
    "id": 123,
    "user_id": 456,
    "key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "status": 1,
    "name": "Мой новый токен",
    "created_time": 1738483200,
    "accessed_time": 1738483200,
    "expired_time": -1,
    "remain_quota": 500000,
    "remain_credits": 200,
    "unlimited_quota": false,
    "used_quota": 0,
    "used_credits": 0,
    "daily_credits": 0,
    "monthly_credits": 0,
    "model_limits_enabled": false,
    "model_limits": "",
    "group": "",
    "cross_group_retry": false
  }
}
```

```json 200 - Имя слишком длинное theme={null}
{
  "success": false,
  "message": "令牌名称过长"
}
```

```json 401 - Ошибка аутентификации theme={null}
{
  "error": {
    "code": 401,
    "message": "Ошибка аутентификации, проверьте ваш API ключ",
    "type": "authentication_error"
  }
}
```

```json 429 - Превышен лимит запросов theme={null}
{
  "error": {
    "code": 429,
    "message": "Слишком много запросов, попробуйте позже",
    "type": "rate_limit_error"
  }
}
```

## Сценарии использования

* Автоматизация создания нескольких API токенов
* Создание отдельных токенов для разных приложений или сервисов
* Пакетное управление жизненным циклом токенов через скрипты

> [!NOTE]
>
> **Формат ключа токена**
>
> Поле `key`, возвращаемое при успехе - случайная строка из 48 символов. При использовании добавьте префикс `sk-` для полного формата: `sk-xxxxxxxx...`

> [!TIP]
>
> **Лучшие практики**
>
> * Создавайте разные токены для разных целей для удобства отслеживания и управления
> * Устанавливайте разумное время истечения и регулярно ротируйте токены
> * Включайте ограничения моделей, если вам нужен доступ только к определенным моделям для повышения безопасности

## Частые ошибки

| Сообщение об ошибке | Причина | Решение |
| - | - | - |
| 令牌名称过长 | Имя превышает 50 символов | Используйте более короткое имя токена |
| 生成令牌失败 | Внутренняя ошибка системы | Повторите позже или обратитесь в поддержку |
| Ошибка аутентификации | API Key недействителен или истек | Проверьте правильность API Key |

> [!WARNING]
>
> **Уведомление о безопасности**
>
> * Созданный ключ токена возвращается только один раз в ответе, сохраните его немедленно
> * Не храните API Keys в клиентском коде
> * Всегда используйте HTTPS в продакшене
> * Создавайте отдельные токены для каждого приложения для удобства управления и отзыва


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.