API

Документация бесплатного и открытого API системы аутентификации. Интегрируйте единую систему идентификации в ваши сервисы и приложения через OAuth 2.0, REST API и SDK.

Base URL: https://id.tokenpay.space/api/v1

API использует JSON для всех запросов и ответов. Все запросы должны содержать заголовок Content-Type: application/json.

Быстрый старт

Для начала работы с API вам нужно:

1. Создать аккаунт TOKEN PAY ID
2. Получить API ключи в личном кабинете
3. Использовать секретный ключ для серверных запросов

cURL
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:

HTTP
Authorization: Bearer tpid_sk_7f3a9b2ce4d18...
Важно: Никогда не используйте секретный ключ (sk) в клиентском коде. Для фронтенда используйте публичный ключ (pk) и OAuth 2.0 flow.

OAuth 2.0 Bearer Token

Для пользовательских запросов используйте access_token полученный через OAuth 2.0 flow:

HTTP
Authorization: Bearer eyJhbGciOiJSUzI1NiIs...

Лимиты запросов

API имеет следующие ограничения:

Тарифный планЗапросов/минЗапросов/день
Free6010,000
Pro300100,000
Enterprise1,000Unlimited

Заголовки ответа содержат информацию о лимитах:

Headers
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1678886400

Коды ошибок

API возвращает стандартные HTTP коды и JSON-объект ошибки:

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 к авторизации

Перенаправьте пользователя на страницу авторизации:

URL
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

POST /api/v1/oauth/token

Обмен authorization code на access token.

ПараметрТипОписание
grant_typestringrequiredauthorization_code или refresh_token
codestringrequired — Authorization code
client_idstringrequired — Ваш публичный ключ
client_secretstringrequired — Ваш секретный ключ
redirect_uristringrequired — Должен совпадать с исходным
cURL
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"
  }'

Ответ

JSON — 200 OK
{
  "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

POST /api/v1/oauth/revoke

Отзыв access или refresh токена.

ПараметрТипОписание
tokenstringrequired — Токен для отзыва
token_type_hintstringaccess_token или refresh_token

Пользователи

GET /users/me

GET /api/v1/users/me

Получить профиль текущего авторизованного пользователя.

JSON — 200 OK
{
  "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

PUT /api/v1/users/me

Обновить профиль пользователя.

ПараметрТипОписание
namestringИмя пользователя
avatar_urlstringURL аватара

GET /users/activity

GET /api/v1/users/activity

История активности пользователя: входы, API вызовы, изменения безопасности.

ПараметрТипОписание
limitintegerКоличество записей (по умолчанию 50, максимум 200)
offsetintegerСмещение для пагинации
typestringФильтр: auth, api, security

GET /users/sessions

GET /api/v1/users/sessions

Список активных сессий пользователя.

JSON — 200 OK
{
  "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

POST /api/v1/auth/verify

Верификация access токена. Используется сторонними сервисами для проверки авторизации пользователя.

ПараметрТипОписание
tokenstringrequired — Access token для проверки
JSON — 200 OK
{
  "valid": true,
  "user_id": "tpid_usr_a1b2c3d4",
  "email": "[email protected]",
  "scopes": ["profile", "email"],
  "expires_at": 1678886400
}

POST /auth/register

POST /api/v1/auth/register

Регистрация нового пользователя.

ПараметрТипОписание
emailstringrequired
passwordstringrequired — Минимум 8 символов
namestringrequired

POST /auth/login

POST /api/v1/auth/login

Авторизация пользователя по email и паролю.

ПараметрТипОписание
emailstringrequired
passwordstringrequired
two_factor_codestringTOTP код, если 2FA включена

POST /auth/refresh

POST /api/v1/auth/refresh

Обновление access токена с помощью refresh токена.

ПараметрТипОписание
refresh_tokenstringrequired

API ключи

GET /keys

GET /api/v1/keys

Получить список API ключей пользователя.

POST /keys

POST /api/v1/keys

Создать новый API ключ.

ПараметрТипОписание
namestringrequired — Название ключа
scopesstring[]Массив разрешений
Важно: Секретный ключ показывается только один раз при создании. Сохраните его в безопасном месте.

DELETE /keys/:id

DEL /api/v1/keys/:key_id

Отозвать (удалить) API ключ. Все запросы с этим ключом немедленно перестанут работать.

Webhooks

Webhooks позволяют получать уведомления о событиях TOKEN PAY ID в реальном времени. Настройте URL вашего сервера в личном кабинете.

Каждый webhook запрос содержит подпись в заголовке X-TPID-Signature для верификации подлинности.

JSON — Webhook Payload
{
  "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.enabled2FA включена
user.2fa.disabled2FA отключена
key.createdСоздан новый API ключ
key.revokedAPI ключ отозван
session.createdНовая сессия
session.revokedСессия завершена
token.refreshedТокен обновлён

SDK — JavaScript (Кнопка входа)

Подключите скрипт с CDN и добавьте кнопку «Войти через TOKEN PAY» на ваш сайт за 3 строки.

CDN: https://tokenpay.space/sdk/tokenpay-auth.js

1. Подключение и рендер кнопки

HTML
<!-- Контейнер для кнопки -->
<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
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
curl -X GET https://tokenpay.space/api/v1/oauth/userinfo \
  -H "Authorization: Bearer ACCESS_TOKEN"
JSON — 200 OK
{
  "id": "tpid_usr_a1b2c3d4e5f6",
  "email": "[email protected]",
  "name": "Иван",
  "email_verified": true,
  "created_at": "2026-01-15T12:00:00Z"
}

Параметры init()

ПараметрТипОписание
clientIdstringrequired — Публичный ключ API (tpid_pk_...)
redirectUristringrequired — URL для редиректа после авторизации
scopestringРазрешения (по умолчанию profile)
localestringЯзык: ru или en
themestringТема: dark или light
sizestringРазмер: small, medium, large
onSuccessfunctionCallback при успешной авторизации ({code, state}) => {}
onErrorfunctionCallback при ошибке

SDK — Python

Install
pip install tokenpay-id
Python
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

Install
go get github.com/tokenpay/id-go
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_...
}

Нужна помощь?

Свяжитесь с нашей командой разработчиков

[email protected] Обратная связь