Client API · OpenAPI 3.1 · model-neutral

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

Новый клиент: регистрация без посещения кабинета

  1. Агент запрашивает email и Telegram. Telegram можно пропустить и привязать позже.
  2. Агент создаёт registration intent. Аккаунт на этом шаге ещё не создаётся.
  3. Клиент открывает письмо и сам нажимает «Подтвердить email». GET из почтового preview ничего не подтверждает.
  4. На странице один раз показывается 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 символов.

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 повторяет проверку на бизнес-маршруте.

Открыть полную документацию MCP →