API
Документация бесплатного и открытого API системы аутентификации. Интегрируйте единую систему идентификации в ваши сервисы и приложения через OAuth 2.0, REST API и SDK.
https://id.tokenpay.space/api/v1
API использует JSON для всех запросов и ответов. Все запросы должны содержать заголовок Content-Type: application/json.
Быстрый старт
Для начала работы с API вам нужно:
1. Создать аккаунт TOKEN PAY ID
2. Получить API ключи в личном кабинете
3. Использовать секретный ключ для серверных запросов
curl -X GET https://id.tokenpay.space/api/v1/users/me \ -H "Authorization: Bearer tpid_sk_your_secret_key" \ -H "Content-Type: application/json"
Аутентификация
TOKEN PAY ID API поддерживает два метода аутентификации:
API ключи
Используйте секретный ключ (tpid_sk_...) в заголовке Authorization:
Authorization: Bearer tpid_sk_7f3a9b2ce4d18...
OAuth 2.0 Bearer Token
Для пользовательских запросов используйте access_token полученный через OAuth 2.0 flow:
Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
Лимиты запросов
API имеет следующие ограничения:
| Тарифный план | Запросов/мин | Запросов/день |
|---|---|---|
| Free | 60 | 10,000 |
| Pro | 300 | 100,000 |
| Enterprise | 1,000 | Unlimited |
Заголовки ответа содержат информацию о лимитах:
X-RateLimit-Limit: 60 X-RateLimit-Remaining: 45 X-RateLimit-Reset: 1678886400
Коды ошибок
API возвращает стандартные HTTP коды и JSON-объект ошибки:
{
"error": {
"code": "invalid_token",
"message": "The access token is invalid or expired",
"status": 401
}
}
| Код | Описание |
|---|---|
| 400 | Некорректный запрос |
| 401 | Неавторизован — неверный или отсутствующий токен |
| 403 | Запрещено — недостаточно прав |
| 404 | Ресурс не найден |
| 429 | Превышен лимит запросов |
| 500 | Внутренняя ошибка сервера |
OAuth 2.0 — Авторизация
TOKEN PAY ID поддерживает стандартный OAuth 2.0 Authorization Code flow для безопасной авторизации пользователей в сторонних сервисах.
Шаг 1: Redirect к авторизации
Перенаправьте пользователя на страницу авторизации:
https://id.tokenpay.space/oauth/authorize? client_id=tpid_pk_your_public_key& redirect_uri=https://yourapp.com/callback& response_type=code& scope=profile email& state=random_csrf_token
Шаг 2: Обмен кода на токен
После авторизации пользователь будет перенаправлен на ваш redirect_uri с параметром code. Обменяйте его на access_token:
POST /oauth/token
Обмен authorization code на access token.
| Параметр | Тип | Описание |
|---|---|---|
| grant_type | string | required — authorization_code или refresh_token |
| code | string | required — Authorization code |
| client_id | string | required — Ваш публичный ключ |
| client_secret | string | required — Ваш секретный ключ |
| redirect_uri | string | required — Должен совпадать с исходным |
curl -X POST https://id.tokenpay.space/api/v1/oauth/token \ -H "Content-Type: application/json" \ -d '{ "grant_type": "authorization_code", "code": "abc123...", "client_id": "tpid_pk_...", "client_secret": "tpid_sk_...", "redirect_uri": "https://yourapp.com/callback" }'
Ответ
{
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "tpid_rt_8a7b6c5d...",
"scope": "profile email",
"user": {
"id": "tpid_usr_a1b2c3d4",
"email": "[email protected]",
"name": "Иван",
"email_verified": true
}
}
POST /oauth/revoke
Отзыв access или refresh токена.
| Параметр | Тип | Описание |
|---|---|---|
| token | string | required — Токен для отзыва |
| token_type_hint | string | access_token или refresh_token |
Пользователи
GET /users/me
Получить профиль текущего авторизованного пользователя.
{
"id": "tpid_usr_a1b2c3d4",
"email": "[email protected]",
"name": "Иван Чернов",
"email_verified": true,
"two_factor_enabled": false,
"telegram_linked": true,
"created_at": "2025-01-15T10:30:00Z",
"last_login": "2026-03-13T09:45:00Z"
}
PUT /users/me
Обновить профиль пользователя.
| Параметр | Тип | Описание |
|---|---|---|
| name | string | Имя пользователя |
| avatar_url | string | URL аватара |
GET /users/activity
История активности пользователя: входы, API вызовы, изменения безопасности.
| Параметр | Тип | Описание |
|---|---|---|
| limit | integer | Количество записей (по умолчанию 50, максимум 200) |
| offset | integer | Смещение для пагинации |
| type | string | Фильтр: auth, api, security |
GET /users/sessions
Список активных сессий пользователя.
{
"sessions": [
{
"id": "ses_abc123",
"device": "Chrome — Windows",
"ip": "192.168.1.1",
"location": "Saint Petersburg, RU",
"last_active": "2026-03-13T12:00:00Z",
"current": true
}
]
}
Auth
POST /auth/verify
Верификация access токена. Используется сторонними сервисами для проверки авторизации пользователя.
| Параметр | Тип | Описание |
|---|---|---|
| token | string | required — Access token для проверки |
{
"valid": true,
"user_id": "tpid_usr_a1b2c3d4",
"email": "[email protected]",
"scopes": ["profile", "email"],
"expires_at": 1678886400
}
POST /auth/register
Регистрация нового пользователя.
| Параметр | Тип | Описание |
|---|---|---|
| string | required | |
| password | string | required — Минимум 8 символов |
| name | string | required |
POST /auth/login
Авторизация пользователя по email и паролю.
| Параметр | Тип | Описание |
|---|---|---|
| string | required | |
| password | string | required |
| two_factor_code | string | TOTP код, если 2FA включена |
POST /auth/refresh
Обновление access токена с помощью refresh токена.
| Параметр | Тип | Описание |
|---|---|---|
| refresh_token | string | required |
API ключи
GET /keys
Получить список API ключей пользователя.
POST /keys
Создать новый API ключ.
| Параметр | Тип | Описание |
|---|---|---|
| name | string | required — Название ключа |
| scopes | string[] | Массив разрешений |
DELETE /keys/:id
Отозвать (удалить) API ключ. Все запросы с этим ключом немедленно перестанут работать.
Webhooks
Webhooks позволяют получать уведомления о событиях TOKEN PAY ID в реальном времени. Настройте URL вашего сервера в личном кабинете.
Каждый webhook запрос содержит подпись в заголовке X-TPID-Signature для верификации подлинности.
{
"event": "user.login",
"timestamp": "2026-03-13T12:00:00Z",
"data": {
"user_id": "tpid_usr_a1b2c3d4",
"ip": "192.168.1.1",
"device": "Chrome — Windows"
}
}
Доступные события
| Событие | Описание |
|---|---|
| user.register | Новая регистрация пользователя |
| user.login | Успешный вход в аккаунт |
| user.logout | Выход из аккаунта |
| user.updated | Профиль обновлён |
| user.deleted | Аккаунт удалён |
| user.2fa.enabled | 2FA включена |
| user.2fa.disabled | 2FA отключена |
| key.created | Создан новый API ключ |
| key.revoked | API ключ отозван |
| session.created | Новая сессия |
| session.revoked | Сессия завершена |
| token.refreshed | Токен обновлён |
SDK — JavaScript (Кнопка входа)
Подключите скрипт с CDN и добавьте кнопку «Войти через TOKEN PAY» на ваш сайт за 3 строки.
https://tokenpay.space/sdk/tokenpay-auth.js
1. Подключение и рендер кнопки
<!-- Контейнер для кнопки --> <div id="tokenpay-login"></div> <!-- Подключение SDK --> <script src="https://tokenpay.space/sdk/tokenpay-auth.js"></script> <script> TokenPayAuth.init({ clientId: 'tpid_pk_ваш_публичный_ключ', redirectUri: 'https://ваш-сайт.com/callback', scope: 'profile', locale: 'ru', // 'ru' | 'en' theme: 'dark', // 'dark' | 'light' size: 'large', // 'small' | 'medium' | 'large' onSuccess: function(data) { console.log('Код авторизации:', data.code); // Отправьте data.code на ваш сервер для обмена на токен }, onError: function(err) { console.error('Ошибка:', err); } }); // Отрисовать кнопку TokenPayAuth.renderButton('#tokenpay-login'); </script>
2. Обмен кода на токен (серверная сторона)
curl -X POST https://tokenpay.space/api/v1/oauth/token \ -H "Content-Type: application/json" \ -d '{ "grant_type": "authorization_code", "code": "tpid_code_...", "client_id": "tpid_pk_...", "client_secret": "tpid_sk_...", "redirect_uri": "https://ваш-сайт.com/callback" }'
3. Получение профиля пользователя
curl -X GET https://tokenpay.space/api/v1/oauth/userinfo \ -H "Authorization: Bearer ACCESS_TOKEN"
{
"id": "tpid_usr_a1b2c3d4e5f6",
"email": "[email protected]",
"name": "Иван",
"email_verified": true,
"created_at": "2026-01-15T12:00:00Z"
}
Параметры init()
| Параметр | Тип | Описание |
|---|---|---|
| clientId | string | required — Публичный ключ API (tpid_pk_...) |
| redirectUri | string | required — URL для редиректа после авторизации |
| scope | string | Разрешения (по умолчанию profile) |
| locale | string | Язык: ru или en |
| theme | string | Тема: dark или light |
| size | string | Размер: small, medium, large |
| onSuccess | function | Callback при успешной авторизации ({code, state}) => {} |
| onError | function | Callback при ошибке |
SDK — Python
pip install tokenpay-id
from tokenpay_id import TokenPayID client = TokenPayID( client_id="tpid_pk_your_public_key", client_secret="tpid_sk_your_secret_key" ) # Verify a user's token result = client.verify(access_token) print(result.user_id) # tpid_usr_... # Get user profile user = client.get_user(access_token) print(user.email) # [email protected] # Webhook signature verification is_valid = client.verify_webhook( payload=request.body, signature=request.headers["X-TPID-Signature"] )
SDK — Go
go get github.com/tokenpay/id-go
package main import ( tpid "github.com/tokenpay/id-go" ) func main() { client := tpid.NewClient(tpid.Config{ ClientID: "tpid_pk_your_public_key", ClientSecret: "tpid_sk_your_secret_key", }) // Verify token result, err := client.Verify(accessToken) if err != nil { log.Fatal(err) } fmt.Println(result.UserID) // tpid_usr_... }