REST API · OpenAPI 3.1

API Tier1.shop

Подключите свой сервис или ИИ-агента: регистрация, тарифы, заказы, ссылки и статус оплаты через один API. Данные клиента доступны только по его отзывному ключу.

Базовый адрес API
https://tier1.shop/wp-json/tier1-api/v1

С чего начать

Аккаунт уже есть

Создайте ключ

Откройте «API и подключения» в кабинете или запросите ссылку создания ключа по email через POST /api-key-requests.

Новый клиент

Подтвердите email

Агент вызывает POST /registration-intents. Вы переходите по письму и подтверждаете адрес; только после этого создаются аккаунт и ключ. Telegram можно добавить позже.

Первый заказ — пять шагов

  1. Выберите тариф.GET /catalog/tariffs и GET /balances покажут актуальные цены и остатки.
  2. Подтвердите состав.Согласуйте с агентом количество, URL, анкоры и валюту до создания checkout.
  3. Получите ссылку на оплату.POST /checkout-intents вернёт одноразовый URL; оплата происходит только на сайте.
  4. Проверьте оплату.GET /checkout-intents/{id} покажет статус и номер покупки WooCommerce.
  5. Откройте ссылки.GET /orders/by-wc/{id} найдёт внутренние заказы; placement_progress покажет выполнение.
Важно: номер покупки из письма и ID заказа кабинета — разные значения. Для номера из письма используйте /orders/by-wc/{id}, для внутреннего ID — /orders/{id}.

Авторизация

Передавайте ключ в HTTPS-заголовке. Не вставляйте его в адрес ссылки, общедоступный промпт или логи. Ключ можно отозвать в кабинете; его полный текст показывается только при создании.

Authorization: Bearer t1c_sk_ВАШ_КЛЮЧ
Разрешения ключа (scopes)8
profile:readПрофиль и состояние подключений
balance:readБалансы услуг и кошельков
orders:readПросмотр заказов
links:readПросмотр ссылок
catalog:readКаталоги и тарифы
orders:writeМассовое заполнение и отправка заказов
links:writeURL, анкоры, окружающий текст и отправка в работу
checkout:createСоздание защищённых ссылок на оплату

Ключ не даёт агенту напрямую списывать деньги с кошелька. Для изменяющих запросов нужен случайный Idempotency-Key длиной 8–128 символов. Если ответ потерян, повторите тот же запрос с тем же ключом; для нового действия создайте новый.

Методы API

Методы собраны в 9 группах. Откройте нужный для параметров и примера ответа; полный машинный контракт — в OpenAPI JSON.

20 методов

Обнаружение 2

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"
    }
}

Регистрация 3

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 tokenScope: —

Пример ответа

{
    "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": "…"
}

Аккаунт 2

GET/profileПрофиль, подтверждение email и все Telegram-каналы.
Доступ: BearerScope: profile:read

Пример ответа

{
    "account": {
        "email": "client@example.com",
        "email_verified": true,
        "telegram_username": "@client",
        "telegram_usernames": [
            "@client",
            "@manager"
        ]
    }
}
GET/balances?geo=allКошельки ₽/$ и неиспользованные услуги RU/intl.
Доступ: BearerScope: balance:read

Пример ответа

{
    "wallets": {
        "rub": {
            "currency": "RUB",
            "amount_minor": 0
        },
        "usd": {
            "currency": "USD",
            "amount_minor": 0
        }
    },
    "service_balances": []
}

Заказы 3

GET/orders?geo=all&page=1&per_page=20Постраничный список заказов кабинета. per_page ограничен 50: продолжайте по next_page.
Доступ: BearerScope: orders:read

Пример ответа

{
    "orders": [
        {
            "cabinet_order_id": 123,
            "wc_order_id": 456,
            "placement_progress": {
                "completed": 2,
                "total": 3,
                "fully_placed": false
            }
        }
    ],
    "page": 1,
    "per_page": 20,
    "has_more": false,
    "next_page": null
}
GET/orders/{id}Один заказ и ссылки по cabinet_order_id, не по номеру WooCommerce из письма.
Доступ: BearerScope: orders:read

Пример ответа

{
    "order": {
        "cabinet_order_id": 123,
        "wc_order_id": 456,
        "geo": "ru"
    },
    "links": []
}
GET/orders/by-wc/{id}Все внутренние заказы и ссылки по принадлежащему клиенту номеру WooCommerce.
Доступ: BearerScope: orders:read

Пример ответа

{
    "wc_order_id": 456,
    "count": 2,
    "orders": [
        {
            "order": {
                "cabinet_order_id": 123
            },
            "links": []
        }
    ]
}

Ссылки 1

GET/links?geo=all&page=1&per_page=20Ссылки с фильтрами geo, status и link_type; продолжение по next_page.
Доступ: BearerScope: links:read

Пример ответа

{
    "links": [],
    "page": 1,
    "per_page": 20,
    "total": 0,
    "has_more": false,
    "next_page": null
}

Каталог 2

GET/catalog/tariffs?geo=ruАктуальные товары, цены, валюты и точный состав слотов.
Доступ: BearerScope: catalog:read

Пример ответа

{
    "geo": "ru",
    "currency": "RUB",
    "tariffs": [
        {
            "product_id": 3708,
            "name": "…",
            "price": {
                "amount_minor": 200000
            }
        }
    ]
}
GET/catalog/burzh-igamingАнонимизированные iGaming-доноры, метрики, цена и свободные слоты.
Доступ: BearerScope: catalog:read

Пример ответа

{
    "donors": [],
    "count": 0,
    "price": {
        "currency": "USD",
        "amount_minor": 9400
    }
}

Черновики 3

PATCH/links/{id}Изменить URL, анкор, окружающий текст или расписание, не отправляя ссылку в работу.
Доступ: Bearer + Idempotency-KeyScope: 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-KeyScope: links:write

JSON запроса

{
    "anchor": "новый анкор"
}

Пример ответа

{
    "link": {
        "id": 456,
        "status": "awaiting_confirmation"
    }
}
POST/orders/{id}/bulk-updateМассово заполнить строки заказа без отправки в работу.
Доступ: Bearer + Idempotency-KeyScope: orders:write

JSON запроса

{
    "links": [
        {
            "url": "https://example.com/a",
            "anchor": "ключ"
        },
        {
            "url": "https://example.com/b",
            "anchor": "другой ключ"
        }
    ]
}

Пример ответа

{
    "updated": 2,
    "errors": []
}

Отправка 2

POST/links/{id}/submitПосле подтверждения клиента отправить одну готовую ссылку в работу.
Доступ: Bearer + Idempotency-KeyScope: links:write

JSON запроса

[]

Пример ответа

{
    "link": {
        "id": 456,
        "status": "in_progress"
    }
}
POST/orders/{id}/submit-allПосле подтверждения клиента отправить все готовые строки заказа.
Доступ: Bearer + Idempotency-KeyScope: orders:write

JSON запроса

[]

Пример ответа

{
    "submitted": 2,
    "skipped": 0
}

Оплата 2

POST/checkout-intentsСоздать защищённую одноразовую ссылку на штатный checkout; деньги не списываются.
Доступ: Bearer + Idempotency-KeyScope: checkout:create

JSON запроса

{
    "geo": "ru",
    "items": [
        {
            "product_id": 3708,
            "quantity": 1
        }
    ],
    "links": [
        {
            "type": "yearly",
            "url": "https://example.com/page",
            "anchor": "пример"
        }
    ]
}

Пример ответа

{
    "intent_id": "32-символьный ID",
    "checkout_url": "https://tier1.shop/?t1c_agent_checkout=…",
    "expires_at": "…",
    "summary": {
        "currency": "RUB",
        "total_minor": 200000
    },
    "payment_preview": {
        "wallet_available_minor": 0,
        "nominal_wallet_gap_minor": 200000,
        "final_amount_at_checkout": true
    }
}
GET/checkout-intents/{id}Проверить оплату и появление заказов кабинета по intent_id без повторного открытия одноразовой ссылки.
Доступ: BearerScope: checkout:create

Пример ответа

{
    "intent_id": "…",
    "state": "paid",
    "wc_order_id": 456,
    "cabinet_order_ids": [
        123
    ],
    "fulfilment_pending": false
}

Если запрос не прошёл

400 / 422Исправьте параметры. Не повторяйте тот же неверный запрос.
401 / 403Проверьте ключ и его разрешения; при необходимости создайте новый.
404Проверьте номер и тип ID. Чужие заказы не раскрываются.
409Обновите состояние заказа или используйте новый ключ для нового действия.
429 / 5xxПодождите и повторите. Для изменяющего запроса сохраните тот же Idempotency-Key и JSON.

Списки отдают максимум 50 строк за страницу. Если has_more=true, переходите к next_page. Предварительная сумма в API не заменяет итоговую сумму и доступные способы оплаты на checkout.

Нужен MCP, а не REST API?

Тот же отзывной ключ подходит для MCP-клиента с HTTP-заголовками. Можно также подключиться через OAuth, если приложение это поддерживает.

Открыть инструкцию MCP