API Tier1.shop для ИИ-агентов
Один отзывной ключ работает с любым агентом, который умеет выполнять HTTPS-запросы: облачной моделью, локальным агентом, IDE или собственной интеграцией. Отдельно регистрировать каждую модель не требуется.
- API base
https://tier1.shop/wp-json/tier1-api/v1- OpenAPI
https://tier1.shop/openapi.json- MCP
https://mcp-v2.tier1.shop/mcp
Новый клиент: регистрация без посещения кабинета
- Агент запрашивает email и Telegram. Telegram можно пропустить и привязать позже.
- Агент создаёт registration intent. Аккаунт на этом шаге ещё не создаётся.
- Клиент открывает письмо и сам нажимает «Подтвердить email». GET из почтового preview ничего не подтверждает.
- На странице один раз показывается API-ключ. Клиент передаёт его агенту, после чего агент получает тарифы, собирает заказ и возвращает защищённую ссылку на оплату.
curl -X POST 'https://tier1.shop/wp-json/tier1-api/v1/registration-intents' \
-H 'Content-Type: application/json' \
-d '{"email":"client@example.com","telegram_username":"@client","locale":"ru","issue_api_key":true}'POST https://tier1.shop/wp-json/tier1-api/v1/api-key-requests с его email. Письмо не раскрывает, существует ли адрес, а ключ создаётся только после ручного подтверждения.Авторизация и разрешения
Передавайте ключ только в HTTPS-заголовке. Не помещайте его в URL, query string, логи или публичный промпт.
Authorization: Bearer t1c_sk_…profile:readПрофиль и состояние подключенийbalance:readБалансы услуг и кошельковorders:readПросмотр заказовlinks:readПросмотр ссылокcatalog:readКаталоги и тарифыorders:writeМассовое заполнение и отправка заказовlinks:writeURL, анкоры, окружающий текст и отправка в работуcheckout:createСоздание защищённых ссылок на оплатуСтандартный ключ не умеет списывать внутренний баланс. Его можно немедленно отозвать в «API и подключения»; plaintext хранится только у клиента и показывается один раз.
Методы API
Все пути ниже добавляются к https://tier1.shop/wp-json/tier1-api/v1. Для PATCH/PUT/POST после авторизации обязателен уникальный заголовок Idempotency-Key длиной 8–128 символов.
/capabilities—
GET/openapi.json—
POST/registration-intents—
GET/registration-intents/{id}?status_token={token}—
POST/api-key-requests—
GET/profileprofile:read
GET/balances?geo=allbalance:read
GET/orders?geo=all&page=1&per_page=20orders:read
GET/orders/{id}orders:read
GET/links?geo=all&page=1&per_page=20links:read
GET/catalog/tariffs?geo=rucatalog:read
GET/catalog/burzh-igamingcatalog:read
PATCH/links/{id}links:write
PUT/links/{id}links:write
POST/orders/{id}/bulk-updateorders:write
POST/links/{id}/submitlinks:write
POST/orders/{id}/submit-allorders:write
POST/checkout-intentscheckout:create
GET/capabilitiesВозможности API и актуальные ссылки подключения.
- Группа
- Обнаружение
- Авторизация
- Нет
- Scope
—
Пример ответа
{
"name": "Tier1.shop API",
"api_enabled": true,
"public_registration": true
}GET/openapi.jsonПолный контракт OpenAPI 3.1.
- Группа
- Обнаружение
- Авторизация
- Нет
- Scope
—
Пример ответа
{
"openapi": "3.1.0",
"info": {
"title": "Tier1.shop Client API"
}
}POST/registration-intentsНачать регистрацию нового клиента с обязательным подтверждением email.
- Группа
- Регистрация
- Авторизация
- Нет
- Scope
—
JSON запроса
{
"email": "client@example.com",
"telegram_username": "@client",
"locale": "ru",
"issue_api_key": true
}Пример ответа
{
"accepted": true,
"request_id": "…",
"status_token": "…",
"status": "pending_email",
"expires_in": 86400
}GET/registration-intents/{id}?status_token={token}Проверить состояние конкретной регистрации.
- Группа
- Регистрация
- Авторизация
- Status token
- Scope
—
Пример ответа
{
"status": "pending_email|email_verified|expired",
"email_verified": false,
"telegram_status": "not_requested|pending_bot_message|verified"
}POST/api-key-requestsЗапросить одноразовую ссылку создания ключа для существующего аккаунта.
- Группа
- Регистрация
- Авторизация
- Нет
- Scope
—
JSON запроса
{
"email": "client@example.com",
"name": "Мой агент"
}Пример ответа
{
"accepted": true,
"next_action": "…"
}GET/profileПрофиль, подтверждение email и Telegram.
- Группа
- Аккаунт
- Авторизация
- Bearer
- Scope
profile:read
Пример ответа
{
"account": {
"email": "client@example.com",
"email_verified": true,
"telegram_username": "@client"
}
}GET/balances?geo=allКошельки ₽/$ и неиспользованные услуги RU/intl.
- Группа
- Аккаунт
- Авторизация
- Bearer
- Scope
balance:read
Пример ответа
{
"wallets": {
"rub": {
"currency": "RUB",
"amount_minor": 0
},
"usd": {
"currency": "USD",
"amount_minor": 0
}
},
"service_balances": []
}GET/orders?geo=all&page=1&per_page=20Постраничный список принадлежащих клиенту заказов.
- Группа
- Заказы
- Авторизация
- Bearer
- Scope
orders:read
Пример ответа
{
"orders": [],
"page": 1,
"per_page": 20,
"total": 0,
"pages": 0
}GET/orders/{id}Один заказ, прогресс и все его ссылки.
- Группа
- Заказы
- Авторизация
- Bearer
- Scope
orders:read
Пример ответа
{
"order": {
"id": 123,
"geo": "ru"
},
"links": []
}GET/links?geo=all&page=1&per_page=20Ссылки с фильтрами geo, status и link_type.
- Группа
- Ссылки
- Авторизация
- Bearer
- Scope
links:read
Пример ответа
{
"links": [],
"page": 1,
"per_page": 20,
"total": 0,
"pages": 0
}GET/catalog/tariffs?geo=ruАктуальные товары, цены, валюты и точный состав слотов.
- Группа
- Каталог
- Авторизация
- Bearer
- Scope
catalog:read
Пример ответа
{
"geo": "ru",
"currency": "RUB",
"tariffs": [
{
"product_id": 3708,
"name": "…",
"price": {
"amount_minor": 200000
}
}
]
}GET/catalog/burzh-igamingАнонимизированные iGaming-доноры, метрики, цена и свободные слоты.
- Группа
- Каталог
- Авторизация
- Bearer
- Scope
catalog:read
Пример ответа
{
"donors": [],
"count": 0,
"price": {
"currency": "USD",
"amount_minor": 9400
}
}PATCH/links/{id}Изменить URL, анкор, окружающий текст или расписание, не отправляя ссылку в работу.
- Группа
- Черновики
- Авторизация
- Bearer + Idempotency-Key
- Scope
links:write
JSON запроса
{
"url": "https://example.com/page",
"anchor": "пример",
"context_text": "Окружающий текст с анкором пример.",
"scheduled_at": "2026-09-01T09:00:00Z"
}Пример ответа
{
"link": {
"id": 456,
"status": "awaiting_confirmation"
}
}PUT/links/{id}Алиас PATCH для клиентов, которые отправляют частичный набор изменяемых полей.
- Группа
- Черновики
- Авторизация
- Bearer + Idempotency-Key
- Scope
links:write
JSON запроса
{
"anchor": "новый анкор"
}Пример ответа
{
"link": {
"id": 456,
"status": "awaiting_confirmation"
}
}POST/orders/{id}/bulk-updateМассово заполнить строки заказа без отправки в работу.
- Группа
- Черновики
- Авторизация
- Bearer + Idempotency-Key
- Scope
orders:write
JSON запроса
{
"links": [
{
"url": "https://example.com/a",
"anchor": "ключ"
},
{
"url": "https://example.com/b",
"anchor": "другой ключ"
}
]
}Пример ответа
{
"updated": 2,
"errors": []
}POST/links/{id}/submitПосле подтверждения клиента отправить одну готовую ссылку в работу.
- Группа
- Отправка
- Авторизация
- Bearer + Idempotency-Key
- Scope
links:write
JSON запроса
[]Пример ответа
{
"link": {
"id": 456,
"status": "in_progress"
}
}POST/orders/{id}/submit-allПосле подтверждения клиента отправить все готовые строки заказа.
- Группа
- Отправка
- Авторизация
- Bearer + Idempotency-Key
- Scope
orders:write
JSON запроса
[]Пример ответа
{
"submitted": 2,
"skipped": 0
}POST/checkout-intentsСоздать защищённую одноразовую ссылку на штатный checkout; деньги не списываются.
- Группа
- Оплата
- Авторизация
- Bearer + Idempotency-Key
- Scope
checkout:create
JSON запроса
{
"geo": "ru",
"items": [
{
"product_id": 3708,
"quantity": 1
}
],
"links": [
{
"type": "yearly",
"url": "https://example.com/page",
"anchor": "пример"
}
]
}Пример ответа
{
"checkout_url": "https://tier1.shop/?t1c_agent_checkout=…",
"expires_at": "…",
"summary": {
"currency": "RUB",
"total_minor": 200000
}
}Ошибки, повторные запросы и безопасность
| HTTP | Что означает | Действие агента |
|---|---|---|
| 400/422 | Некорректные параметры или бизнес-валидация | Исправить данные; не повторять вслепую. |
| 401 | Ключ отсутствует, отозван или истёк | Попросить новый ключ. |
| 403 | Нет scope или аккаунт недоступен | Не пытаться обходить ограничение. |
| 404 | Объект не найден или принадлежит другому клиенту | Проверить ID; чужие данные не раскрываются. |
| 409 | Конфликт состояния/идемпотентности | Получить свежие данные и согласовать действие. |
| 429 | Превышен лимит | Подождать и повторить с тем же Idempotency-Key. |
| 5xx | Временная серверная ошибка | Повторить с backoff; mutation — только с тем же Idempotency-Key. |
Одинаковый Idempotency-Key разрешён только для точного повтора того же запроса. Другой payload с тем же ключом получит конфликт и не будет выполнен.
Тот же ключ в MCP
MCP-клиенту не нужна отдельная регистрация модели. Укажите endpoint https://mcp-v2.tier1.shop/mcp и статический заголовок Authorization: Bearer t1c_sk_…. Gateway проверяет ключ и scope, после чего WordPress повторяет проверку на бизнес-маршруте.



