$0.00 Пополнить
Уведомления
Уведомлений нет Здесь появятся заказы, выплаты и ответы поддержки

Документация API

20+ эндпоинтов, готовые SDK на 8 языках, OpenAPI 3.0 спека.

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

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

    Вкладка «Обзор» → Создать ключ

  2. Сохраните токен

    Полный skz_... показывается один раз

  3. Делайте запросы

    Bearer token в заголовке Authorization

curl https://skyziro.shop/api/v1/account \
  -H "Authorization: Bearer skz_..."
const r = await fetch("https://skyziro.shop/api/v1/account", {
  headers: { Authorization: "Bearer skz_..." }
});
const { data } = await r.json();
console.log(data.balance, data.available_balance);
import requests
r = requests.get("https://skyziro.shop/api/v1/account",
    headers={"Authorization": "Bearer skz_..."})
print(r.json()["data"])
$r = file_get_contents("https://skyziro.shop/api/v1/account", false, stream_context_create([
    "http" => ["header" => "Authorization: Bearer skz_..."]
]));
$data = json_decode($r, true)["data"];

SDK на любом языке

Сгенерируйте клиент из OpenAPI-спеки

Базовый URL
https://skyziro.shop/api/v1
Авторизация
Authorization: Bearer skz_…
Эндпоинтов
37
python javascript go php ruby java csharp swift
npx @openapitools/openapi-generator-cli \
  generate \
  -i https://skyziro.shop/api/v1/openapi.json \
  -g python -o ./skyziro-sdk
Скачать openapi.json →

Эндпоинты по группам

Информация об аккаунте

Возвращает профиль пользователя, баланс с разбивкой на свободные и зарезервированные средства, а также метаданные текущего токена.

Auth: Bearer (scope: dashboard:read) Rate: 30/мин 200 401 403 429

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "id": 1,
    "username": "shop",
    "balance": 1000.00,
    "reserve": 60.00,
    "available_balance": 1000.00,
    "currency": "USD",
    "token": { "name": "Bot", "abilities": ["*"] }
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: dashboard:read"
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

История транзакций

Все движения по балансу пользователя: пополнения (credit), списания (debit), возвраты. Поддерживает фильтр и пагинацию.

Auth: Bearer (scope: transactions:read) Rate: 30/мин 200 401 403 422 429

Query параметры

type string credit | debit (фильтр)
page int по умолчанию 1
limit int по умолчанию 25, макс 100

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "items": [
      { "id": 38, "type": "credit", "amount": 100.00,
        "balance_before": 0, "balance_after": 100.00,
        "description": "Пополнение TOP-...", "created_at": "..." }
    ],
    "page": 1, "limit": 25, "total": 1, "totalPages": 1
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: transactions:read"
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "Validation error",
  "errors": [
    { "field": "<field>", "message": "<description>" }
  ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Список товаров

Все доступные товары: ключи, аккаунты, top-up'ы. Поддерживает поиск, фильтр по категории/стране/цене/наличию и сортировку.

Auth: Bearer (scope: catalog:read) Rate: 60/мин 200 401 403 422 429

Query параметры

search string поиск по названию
category string slug категории
country string код страны (us, ru, eu)
min_price number минимальная цена
max_price number максимальная цена
in_stock bool только в наличии
sort string name | price_asc | price_desc | popular
page int
limit int макс 100

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "items": [
      { "id": "ab12-...", "source": "shop",
        "name": "Forza Horizon 6", "category": "games",
        "platform": "Steam", "country": "CIS",
        "activation_countries": ["RU","BY","KZ","UA"],
        "image_url": "...",
        "price_from": 49.69, "in_stock": 19, "items_count": 4 }
    ],
    "page": 1, "limit": 50, "total": 1, "totalPages": 1
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: catalog:read"
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "Validation error",
  "errors": [
    { "field": "<field>", "message": "<description>" }
  ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Список категорий

Все категории каталога — slug и человекочитаемое название. Полезно для построения навигации и фильтров на стороне клиента.

Auth: Bearer (scope: catalog:read) Rate: 60/мин 200 401 403 429

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "items": [
      { "slug": "games",         "label": "Игры" },
      { "slug": "giftcards",     "label": "Gift Cards" },
      { "slug": "subscriptions", "label": "Подписки" }
    ]
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: catalog:read"
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Товары категории

Shortcut для /catalog?category={slug}. Возвращает только товары указанной категории. Принимает те же query-параметры что /catalog.

Auth: Bearer (scope: catalog:read) Rate: 60/мин 200 401 403 422 429

Path параметры

slug string slug из /catalog/categories

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: catalog:read"
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "Validation error",
  "errors": [
    { "field": "<field>", "message": "<description>" }
  ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Детали товара

Полная информация о товаре: описание, варианты (items) с ценами и наличием, поля для DTU-аккаунта если нужны.

Auth: Bearer (scope: catalog:read) Rate: 60/мин 200 401 403 404 429

Path параметры

id string id из /catalog (формат: ab12-... или cp_N)

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "id": "ab12-...", "source": "shop",
    "name": "Forza Horizon 6", "category": "games",
    "fields": [],
    "items": [
      { "id": "var1", "name": "Standard Edition", "price": 49.69, "in_stock": 19 },
      { "id": "var2", "name": "Premium Edition",  "price": 87.41, "in_stock": 5 }
    ]
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: catalog:read"
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "Not Found"
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Список заказов

История заказов пользователя с пагинацией. Можно фильтровать по статусу (pending, processing, completed, failed).

Auth: Bearer (scope: orders:read) Rate: 120/мин 200 401 403 429

Query параметры

status string pending | processing | completed | failed | refunded
page int
limit int макс 100
reference_id string ваш referenceId / external_id из POST /orders или ID транзакции из кабинета — найти заказ после таймаута
transaction_id string ID транзакции из личного кабинета

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: orders:read"
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Детали заказа

Полная информация о конкретном заказе включая ключи доставки (если статус completed).

Auth: Bearer (scope: orders:read) Rate: 120/мин 200 401 403 404 429

Path параметры

uid string ORD-XXXXXX

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "uid": "ORD-K2M3WF", "product_name": "Forza Horizon 6 — Premium",
    "category": "games", "quantity": 1,
    "price": 87.41, "total": 87.41, "status": "completed",
    "delivery": [ { "code": "PPH49-J2C9G-..." } ],
    "created_at": "2026-05-20T18:32:47+00:00"
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: orders:read"
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "Not Found"
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Создать заказ (покупка / DTU-пополнение)

Универсальный эндпоинт создания заказа. Если у item-а есть поля (fields) — это DTU (direct top-up): прямое пополнение игрового аккаунта по логину/UID без выдачи кода (Steam, Mobile Legends, Free Fire, Telegram Stars и т.п.). Если fields пустые — обычная покупка ключа/ваучера. Деньги списываются атомарно с lockForUpdate, поддерживается Idempotency-Key и referenceId для защиты от двойных списаний.

Auth: Bearer (scope: orders:write) Rate: 30/мин 200 202 401 403 415 422 429 502

Дополнительные заголовки

Idempotency-Key string опционально (8-128 симв). Повтор с тем же ключом и тем же body — вернёт кэшированный ответ + header Idempotent-Replay: true. Тот же ключ + другое body — 409 Conflict. Кэш живёт 24 часа.
referenceId (body) string ваш ID запроса (синоним: external_id; если не передан — используется Idempotency-Key). После таймаута повторите ТОТ ЖЕ запрос с тем же referenceId: второй заказ не создастся — придут заказы первого запроса с duplicate: true, а пока первый ещё выполняется — 409 in_progress с Retry-After. Пока первый запрос не завершён, GET /orders?reference_id=… может вернуть пустой список — это не значит, что заказа нет. Если первый заказ завершился ошибкой, для новой попытки нужен новый referenceId.
Content-Type application/json обязателен для JSON-body

Тело запроса (JSON)

{
  "referenceId": "my-order-001",
  "checkOnly": false,
  "items": [
    {
      "item_id": "<DENOMINATION_ID>",
      "quantity": 1,
      "fields": [
        { "key": "account_number", "value": "<ACCOUNT>" },
        { "key": "amount",         "value": "100" }
      ]
    }
  ]
}

200 — успешный ответ

{
  "status": "SUCCESS",
  "statusCode": 0,
  "statusMessage": "OK",
  "data": {
    "orders": [
      {
        "uid": "ORD-A7K3PMX9",
        "product_name": "Mobile Legends — Diamonds",
        "quantity": 1,
        "price": 1.50,
        "total": 1.50,
        "status": "completed",
        "delivery": [{ "dtu": true }],
        "reference_id": "my-order-001",
        "transaction_id": "my-order-001",
        "created_at": "2026-06-05T12:00:00+00:00"
      }
    ],
    "status": "completed",
    "total": 1.50
  },
  "errors": null
}

Другие ответы

// В теле — точная копия первого ответа (statusCode: 0).
// Отличается только response-header: Idempotent-Replay: true
// Используйте этот header, чтобы отличить повтор от первого запроса.

{
  "status": "SUCCESS",
  "statusCode": 0,
  "statusMessage": "OK",
  "data": { /* тот же payload что и в первом запросе */ },
  "errors": null
}
{
  "status": "SUCCESS",
  "statusCode": 0,
  "data": {
    "valid": true,
    "canRecharge": true,
    "price": 1.50,
    "currency": "USD",
    "attributes": { "nickname": "PlayerOne" }
  }
}
{
  "status": "SUCCESS",
  "statusCode": 1,
  "statusMessage": "Accepted",
  "data": { "orderId": "ORD-A7K3PMX9", "status": "processing" }
}
{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: orders:write"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "Unsupported media type"
}
{
  "status": "ERROR",
  "statusCode": 9,
  "statusMessage": "Insufficient stock"
}
{
  "status": "ERROR",
  "statusCode": 10,
  "statusMessage": "Insufficient balance"
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "Validation error",
  "errors": [
    { "field": "items.0.item_id", "message": "Item not found: bad-uuid" },
    { "field": "items.0.fields",  "message": "checkOnly requires fields" }
  ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 11,
  "statusMessage": "Provider error",
  "errors": [{ "field": "provider", "message": "Account not found" }]
}

Запрос

Проверка DTU-аккаунта (без списания)

Проверяет существование игрового аккаунта (UID/логин) и возможность пополнения у поставщика ДО создания заказа. Возвращает имя игрока, цену и валюту. Списания НЕ происходит (quote-only / checkOnly режим).

Auth: Bearer (scope: orders:write) Rate: 30/мин 200 401 403 422 429 502

Тело запроса (JSON)

{
  "item_id": "<DENOMINATION_ID>",
  "fields": [
    { "key": "account_number", "value": "<ACCOUNT>" },
    { "key": "amount",            "value": "100" }
  ]
}

200 — успешный ответ

{
  "status": "SUCCESS",
  "statusCode": 0,
  "data": {
    "valid": true,
    "canRecharge": true,
    "price": 1.50,
    "currency": "USD",
    "attributes": { "nickname": "PlayerOne" }
  }
}

Другие ответы

{
  "status": "SUCCESS",
  "statusCode": 0,
  "data": { "valid": false, "reason": "Account not found" }
}
{
  "status": "ERROR", "statusCode": 1, "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR", "statusCode": 2,
  "statusMessage": "Token is missing required scope: orders:write"
}
{
  "status": "ERROR", "statusCode": 4,
  "statusMessage": "Validation error",
  "errors": [{ "field": "fields", "message": "fields must contain at least one key/value" }]
}
{
  "status": "ERROR", "statusCode": 11,
  "statusMessage": "Provider unavailable"
}

Запрос

Способы оплаты

Доступные методы пополнения с поддерживаемыми валютами, сетями и лимитами.

Auth: Bearer (scope: funds:read) Rate: 30/мин 200 401 403 429

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "items": [
      { "code": "crypto", "name": "Cryptocurrency",
        "currencies": ["USDT","USDC","BTC","ETH"],
        "networks":   ["TRON","ETH","BSC","POLYGON"],
        "min_amount": 5, "max_amount": 10000, "currency": "USD" }
    ]
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: funds:read"
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Список инвойсов

История пополнений пользователя с пагинацией и фильтром по статусу.

Auth: Bearer (scope: funds:read) Rate: 30/мин 200 401 403 429

Query параметры

status string pending | completed | failed | expired
page int
limit int макс 100

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: funds:read"
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Детали инвойса

Статус конкретного пополнения. Используется для поллинга после создания инвойса до его подтверждения.

Auth: Bearer (scope: funds:read) Rate: 30/мин 200 401 403 404 429

Path параметры

uid string TOP-XXXXXXXX

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: funds:read"
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "Not Found"
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Создать инвойс

Создаёт крипто-инвойс через платёжный шлюз. Возвращает адрес кошелька и QR-код для оплаты. Поддерживает Idempotency-Key.

Auth: Bearer (scope: funds:write) Rate: 10/мин 200 401 403 409 422 429 502

Тело запроса (JSON)

{
  "amount":   100,
  "method":   "crypto",
  "currency": "USDT",
  "network":  "TRON"
}

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "invoice": { "uid": "TOP-XXXXXXXX", "status": "pending", ... },
    "payment": {
      "address":     "TXxx...",
      "qr_code_url": "https://...",
      "amount":      100.0,
      "currency":    "USDT",
      "network":     "TRON",
      "expires_at":  "2026-..."
    }
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: funds:write"
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "Validation error",
  "errors": [
    { "field": "<field>", "message": "<description>" }
  ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 11,
  "statusMessage": "Provider unavailable"
}
{
  "status": "ERROR",
  "statusCode": 7,
  "statusMessage": "Conflict: idempotency key in use"
}

Запрос

Список webhook'ов

Все зарегистрированные webhook'и пользователя + список доступных событий для подписки.

Auth: Bearer (scope: webhooks:read) Rate: 30/мин 200 401 403 429

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "items": [ { "id": 1, "url": "https://example.com/hook",
                 "events": ["order.completed"], "is_active": true } ],
    "allowed_events": ["order.created","order.completed",
                       "order.failed","topup.completed"]
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: webhooks:read"
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Подписаться

Регистрирует URL для получения событий. Возвращает секрет для HMAC-валидации входящих доставок (показывается ОДИН раз).

Auth: Bearer (scope: webhooks:write) Rate: 30/мин 200 401 403 422 429

Тело запроса (JSON)

{
  "url": "https://example.com/hook",
  "events": ["order.completed", "topup.completed"]
}

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "id": 1, "url": "...", "events": [...],
    "secret": "whsec_..." // показано один раз!
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: webhooks:write"
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "Validation error",
  "errors": [
    { "field": "<field>", "message": "<description>" }
  ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Изменить

Обновить URL, список событий или включить/выключить webhook.

Auth: Bearer (scope: webhooks:write) Rate: 30/мин 200 401 403 404 422 429

Path параметры

id int webhook id

Тело запроса (JSON)

{ "is_active": false }

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: webhooks:write"
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "Not Found"
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "Validation error",
  "errors": [
    { "field": "<field>", "message": "<description>" }
  ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Удалить

Удаляет webhook. События перестают доставляться.

Auth: Bearer (scope: webhooks:write) Rate: 30/мин 204 401 403 404 429

Path параметры

id int webhook id

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: webhooks:write"
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "Not Found"
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Тестовая отправка

Отправляет на URL webhook'а тестовое событие "ping" с корректной HMAC-подписью — для проверки что ваш сервер правильно валидирует подпись.

Auth: Bearer (scope: webhooks:write) Rate: 30/мин 200 401 403 404 429

Path параметры

id int webhook id

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Token is missing required scope: webhooks:write"
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "Not Found"
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Каталог игр и дополнений

Все игры (и по желанию дополнения), которые можно отправить подарком. Поиск по названию, App ID или ссылке Steam, пагинация.

  • price_from — ваша минимальная цена по всем регионам, для витрины. Точная цена издания в регионе — в GET /steam-gifts/catalog/{app_id} и POST /steam-gifts/price.
  • editions=1 — к каждой игре сразу её издания с вашими ценами по регионам. regions=RU,KZ — оставить в изданиях только нужные регионы.
  • Весь каталог с ценами: editions=1&limit=200, страницы 1…totalPages — около 24 запросов вместо запроса на каждую игру.
  • Дальше — только изменения: updated_since = server_time из прошлого ответа. Придут игры, у которых с тех пор менялись цены или доступность (обновляется раз в 10 минут), и removed_app_ids — снятые с продажи. Первый раз передайте server_time из ответа, с которого начали полную выгрузку.
  • Поиск не зависит от регистра, ™ и пунктуации: «fc 26» находит «EA SPORTS FC™ 26».
  • Ответ с ETag: пришлите его в If-None-Match — если ничего не изменилось, получите 304 без тела.
Auth: Bearer (scope: steamgifts:read) Rate: 60/мин 200 304 401 403 422 429 503

Query параметры

q string поиск: название, App ID или ссылка store.steampowered.com/app/…
type string game (по умолчанию), dlc или all
app_ids string только эти App ID, через запятую (до 100)
editions bool 1 — добавить к каждой игре издания с ценами по регионам
updated_since string ISO 8601 (лучше server_time прошлого ответа) — только изменившиеся с этого момента + removed_app_ids
regions string с editions=1: только эти регионы, через запятую (RU,KZ)
page int страница, с 1
limit int на странице, до 200 (по умолчанию 25)

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "items": [
      { "app_id": 3405690, "name": "EA SPORTS FC 26", "type": "game",
        "image": "https://…/header.jpg", "editions_count": 1, "available": true,
        "price_from": 7.82, "currency": "USD",
        "editions": [
          { "sub_id": 1204710, "name": "EA SPORTS FC 26", "is_primary": true,
            "regions": [ { "region": "RU", "available": true, "price": 8.50, "requires_quick_invite": false } ] }
        ] },
      { "app_id": 4496550, "name": "Assassin's Creed Black Flag Resynced - Hellfire Naval Pack", "type": "dlc",
        "available": true, "price_from": 6.27, "currency": "USD",
        "base_game": { "app_id": 3751950, "name": "Assassin's Creed Black Flag Resynced" } }
    ],
    "page": 1, "limit": 25, "total": 4756, "totalPages": 191,
    "server_time": "2026-10-12T21:40:00+00:00"
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "Validation Error",
  "errors": [ { "code": "validation_error", "field": "region", "message": "…" } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "the catalog is being refreshed — retry in a minute",
  "errors": [ { "code": "catalog_unavailable", "message": "the catalog is being refreshed — retry in a minute", "retryable": true } ]
}

Запрос

Игра: издания, регионы, ваши цены

Издания игры и по каждому региону: доступность и ВАША цена — ровно столько спишется с баланса за один подарок.

  • Цену в заказе передавать не нужно: мы всегда берём текущую. Чтобы не купить дороже ожидаемого, передайте в заказе max_price_usd.
  • requires_quick_invite = true — этот регион дарится только по ссылке-приглашению s.team/p/…: укажите её в recipient.
  • type = dlc — дополнение; base_game — игра, без которой его не принять. Покупатель должен владеть ею.
  • Если издание одно, sub_id в заказе можно не передавать — возьмём основное (is_primary).
  • details=1 — описание из магазина Steam: скриншоты, короткое описание, жанры, дата выхода, разработчик и издатель (lang=ru по умолчанию или en). Мы храним его неделю; details = null — Steam сейчас не ответил, повторите позже.
Auth: Bearer (scope: steamgifts:read) Rate: 60/мин 200 304 401 403 404 429 502

Path параметры

app_id int Steam App ID (из каталога)

Query параметры

details bool 1 — добавить описание из магазина Steam (скриншоты, жанры, дата выхода…)
lang string язык описания: ru (по умолчанию) или en

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "app_id": 3405690, "name": "EA SPORTS FC 26", "type": "game",
    "image": "https://…/header.jpg", "primary_sub_id": 1204710,
    "editions": [
      { "sub_id": 1204710, "name": "EA SPORTS FC 26", "is_primary": true,
        "regions": [
          { "region": "RU", "name": "Россия",    "available": true, "price": 8.50, "currency": "USD", "requires_quick_invite": false },
          { "region": "KZ", "name": "Казахстан", "available": true, "price": 8.50, "currency": "USD", "requires_quick_invite": false }
        ] }
    ],
    "details": {
      "available": true,
      "short_description": "…",
      "genres": ["Спортивные игры", "Симуляторы"],
      "release_date": "26 сен. 2025",
      "coming_soon": false,
      "developers": ["EA Canada & EA Romania"],
      "publishers": ["Electronic Arts"],
      "header_image": "https://…/header.jpg",
      "screenshots": [ { "thumbnail": "https://…/ss_….600x338.jpg", "full": "https://…/ss_….1920x1080.jpg" } ],
      "store_url": "https://store.steampowered.com/app/3405690/"
    }
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "supplier temporarily unavailable — retry shortly",
  "errors": [ { "code": "supplier_unavailable", "message": "supplier temporarily unavailable — retry shortly", "retryable": true } ]
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "app_id 123 is not in the catalog",
  "errors": [ { "code": "game_not_found", "message": "app_id 123 is not in the catalog", "retryable": false } ]
}

Запрос

Регионы

Коды и названия регионов доставки. Регион заказа — страна аккаунта Steam получателя.

Auth: Bearer (scope: steamgifts:read) Rate: 60/мин 200 304 401 403 429 502

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": { "regions": [ { "region": "RU", "name": "Россия", "group": null }, { "region": "KZ", "name": "Казахстан", "group": null } ] }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "supplier temporarily unavailable — retry shortly",
  "errors": [ { "code": "supplier_unavailable", "message": "supplier temporarily unavailable — retry shortly", "retryable": true } ]
}

Запрос

Точная цена сейчас

Сколько спишется за один подарок прямо сейчас (цена берётся у поставщика в момент запроса) и хватает ли баланса. Ничего не списывает.

Auth: Bearer (scope: steamgifts:read) Rate: 60/мин 200 401 403 404 422 429 502

Поля тела запроса

app_id int обязательно
sub_id int издание; без него — основное
region string обязательно, код из /steam-gifts/regions

Тело запроса (JSON)

{ "app_id": 3405690, "region": "RU" }

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "app_id": 3405690, "sub_id": 1204710, "region": "RU",
    "game": "EA SPORTS FC 26", "edition": "EA SPORTS FC 26",
    "price": 8.50, "currency": "USD", "available": true,
    "balance": 120.00, "enough_balance": true
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "supplier temporarily unavailable — retry shortly",
  "errors": [ { "code": "supplier_unavailable", "message": "supplier temporarily unavailable — retry shortly", "retryable": true } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "edition not available in region TR",
  "errors": [ { "code": "region_unavailable", "message": "edition not available in region TR", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "game or edition not found",
  "errors": [ { "code": "game_not_found", "message": "game or edition not found", "retryable": false } ]
}

Запрос

Проверить получателя

Проверяет у поставщика, что ссылка ведёт на существующий профиль Steam. Ничего не списывает.

  • Принимаем две формы: ссылку на профиль https://steamcommunity.com/id/ник или /profiles/7656119…, либо ссылку-приглашение https://s.team/p/xxxx-xxxx.
  • Ссылки «на себя» вроде steamcommunity.com/my не подходят — нужна ссылка на чужой профиль.
  • Лучший вариант для покупателя — ссылка-приглашение: она сама добавляет нашего отправителя в друзья, доставка быстрее.
Auth: Bearer (scope: steamgifts:read) Rate: 60/мин 200 401 403 422 429 502

Поля тела запроса

recipient string ссылка на профиль или s.team/p/…

Тело запроса (JSON)

{ "recipient": "https://steamcommunity.com/id/buyer" }

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": { "valid": true, "type": "vanity_url", "steam_id": null, "reason": null }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "Validation Error",
  "errors": [ { "code": "validation_error", "field": "region", "message": "…" } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "supplier temporarily unavailable — retry shortly",
  "errors": [ { "code": "supplier_unavailable", "message": "supplier temporarily unavailable — retry shortly", "retryable": true } ]
}

Запрос

Создать заказ (купить и отправить подарок)

Списывает цену с баланса и запускает отправку подарка. Ответ приходит сразу со status = processing; итог — вебхуком или в GET заказа.

  • reference_id обязателен — это ваш ID заказа. Повтор запроса с тем же reference_id (например, после таймаута) вернёт тот же заказ без второго списания: ответ 200 и заголовок Idempotent-Replayed: true. Новый заказ — новый reference_id.
  • Тот же reference_id с другой игрой, регионом или получателем — ошибка 409 reference_id_conflict, ничего не списывается.
  • dry_run: true — пробный заказ: проверяем цену, баланс, лимит ключа и получателя у поставщика, но ничего не покупаем. Удобно для тестов и предпросмотра.
  • max_price_usd — потолок: если наша цена выше, заказ не создаётся (409 price_above_max).
  • resale_usd — за сколько вы продали подарок покупателю. Если это меньше нашей цены, заказ придерживается без списания (status = on_hold) — решите, доставлять ли в минус.
  • Если доставка не удастся, деньги вернутся на баланс автоматически (status = failed).
Auth: Bearer (scope: steamgifts:write) Rate: 30/мин 200 201 401 402 403 409 422 429 502

Дополнительные заголовки

Idempotency-Key string необязательно — дополнительная защита от дублей на уровне HTTP; основная — reference_id

Поля тела запроса

app_id int обязательно — игра
sub_id int издание; без него — основное
region string обязательно — регион из /steam-gifts/regions (страна аккаунта получателя)
recipient string обязательно — ссылка на профиль Steam или s.team/p/…
reference_id string обязательно — ваш уникальный ID заказа, 1–128 печатных ASCII без пробелов
max_price_usd number не покупать, если цена выше
resale_usd number ваша цена продажи покупателю, USD — защита от продажи в минус
note string заметка к заказу, до 500 символов
dry_run boolean true — только проверить, ничего не покупать

Тело запроса (JSON)

{
  "app_id": 3405690,
  "region": "RU",
  "recipient": "https://s.team/p/abcd-1234",
  "reference_id": "shop-1042",
  "max_price_usd": 9.00,
  "resale_usd": 12.00
}

201 — заказ создан (200 — повтор того же reference_id)

{
  "status": "SUCCESS",
  "data": { "uid": "ORD-K2M3WF", "reference_id": "shop-1042", "status": "processing", … }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "Validation Error",
  "errors": [ { "code": "validation_error", "field": "region", "message": "…" } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "supplier temporarily unavailable — retry shortly",
  "errors": [ { "code": "supplier_unavailable", "message": "supplier temporarily unavailable — retry shortly", "retryable": true } ]
}
{
  "status": "SUCCESS",
  "data": {
    "dry_run": true, "ok": true,
    "would_charge": 8.50, "currency": "USD",
    "app_id": 3405690, "sub_id": 1204710, "region": "RU", "game": "EA SPORTS FC 26",
    "balance": 120.00, "balance_after": 111.50,
    "spending_limit_left": null,
    "recipient_check": { "valid": true, "type": "vanity_url", "steam_id": null }
  }
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "insufficient SkyZiro balance: the order costs $8.50, your balance is $3.20",
  "errors": [ { "code": "insufficient_balance", "message": "insufficient SkyZiro balance: the order costs $8.50, your balance is $3.20", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "the spending limit of this API key does not cover the order: $8.50 needed, $2.00 left",
  "errors": [ { "code": "spending_limit_exceeded", "message": "the spending limit of this API key does not cover the order: $8.50 needed, $2.00 left", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "reference_id "shop-1042" was already used for another order (ORD-K2M3WF) with different app_id/sub_id/region/recipient",
  "errors": [ { "code": "reference_id_conflict", "message": "reference_id "shop-1042" was already used for another order (ORD-K2M3WF) with different app_id/sub_id/region/recipient", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "recipient must be a Steam profile URL (steamcommunity.com/id/… or /profiles/…) or an s.team/p invite link",
  "errors": [ { "code": "invalid_recipient", "message": "recipient must be a Steam profile URL (steamcommunity.com/id/… or /profiles/…) or an s.team/p invite link", "retryable": false } ]
}

Запрос

Список заказов

Ваши заказы, созданные через API, — новые сверху. Заказы с площадок (Digiseller, GGsel) и ручные здесь не показываются.

  • Не дошёл ответ на создание? Найдите заказ по reference_id.
  • Синхронизация без вебхуков: запоминайте время последнего опроса и запрашивайте updated_since — получите только изменившиеся заказы, от старых к новым.
Auth: Bearer (scope: steamgifts:read) Rate: 120/мин 200 304 401 403 422 429

Query параметры

status string processing | delivered | failed | awaiting_recipient | needs_quick_invite | on_hold
reference_id string найти заказ по вашему ID
updated_since string ISO 8601 — только изменившиеся с этого момента, по возрастанию updated_at
page int страница, с 1
limit int до 100 (по умолчанию 25)

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "items": [ { "uid": "ORD-K2M3WF", "reference_id": "shop-1042", "status": "delivered", … } ],
    "page": 1, "limit": 25, "total": 1, "totalPages": 1
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "Validation Error",
  "errors": [ { "code": "validation_error", "field": "region", "message": "…" } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Заказ: статус и что делать

Текущее состояние заказа (при запросе сверяем его с поставщиком). Ветвитесь по status, partner_phase и actions — таблицы в разделе «Как работает заказ».

  • partner_phase = needs_partner_action — ваш ход: что можно сделать, перечислено в actions (кнопки покупателю — строго из этого списка).
  • reason.text_ru — готовый текст для покупателя, его можно показывать как есть.
  • Опрашивайте не чаще раза в 10–15 секунд, а лучше подпишитесь на вебхуки.
Auth: Bearer (scope: steamgifts:read) Rate: 120/мин 200 304 401 403 404 429

Path параметры

uid string номер заказа, ORD-XXXXXX

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": {
    "uid": "ORD-K2M3WF",
    "reference_id": "shop-1042",
    "status": "processing",
    "app_id": 3405690, "sub_id": 1204710,
    "game": "EA SPORTS FC 26", "edition": "EA SPORTS FC 26",
    "region": "RU",
    "recipient": "https://steamcommunity.com/id/buyer",
    "price": 8.50, "currency": "USD",
    "sender_profile_url": "https://steamcommunity.com/profiles/76561199…",
    "recipient_steam_id": null,
    "steam_transid": null,
    "delivered_at": null,
    "fail_reason": null,
    "loss": null,
    "reason": {
      "code": "awaiting_friend_accept", "cause": null, "final": false,
      "buyer_action": "accept_friend",
      "message": "Our sender has sent the recipient a Steam friend request…",
      "text_ru": "Мы отправили вам заявку в друзья в Steam. Примите её: Steam → Друзья → Заявки в друзья.",
      "not_before": null
    },
    "operator_handling": false,
    "needs_recipient": false,
    "awaiting_friend_accept": true,
    "actions": ["change_recipient", "cancel"],
    "partner_phase": "needs_partner_action",
    "cancel_state": null,
    "delivered_after_cancel": false,
    "created_at": "2026-10-12T16:40:11+00:00",
    "updated_at": "2026-10-12T16:41:02+00:00"
  }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "order ORD-XXXXXX not found among your API orders",
  "errors": [ { "code": "order_not_found", "message": "order ORD-XXXXXX not found among your API orders", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

Сменить получателя

Новая ссылка на получателя. Когда доступно: в actions есть change_recipient, или status = awaiting_recipient.

  • Заказ в работе (processing) — новый получатель уходит в тот же заказ, без нового списания.
  • status = awaiting_recipient — поставщик не нашёл получателя при создании, подарок не куплен и деньги уже вернулись. Вызов создаёт заказ заново и снова списывает цену.
  • Если цена с момента заказа изменилась — 409 price_changed с новой ценой; повторите запрос с accept_price, чтобы согласиться.
  • Если заявку в друзья не приняли — лучше всего прислать ссылку-приглашение s.team/p/…: она добавляет в друзья сама.
Auth: Bearer (scope: steamgifts:write) Rate: 30/мин 200 401 402 403 404 409 422 429 502

Path параметры

uid string номер заказа, ORD-XXXXXX

Поля тела запроса

recipient string обязательно — ссылка на профиль или s.team/p/…
accept_price number согласие на новую цену после 409 price_changed (только для awaiting_recipient)

Тело запроса (JSON)

{ "recipient": "https://s.team/p/abcd-1234" }

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": { "uid": "ORD-K2M3WF", "reference_id": "shop-1042", "status": "processing", … }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "order ORD-XXXXXX not found among your API orders",
  "errors": [ { "code": "order_not_found", "message": "order ORD-XXXXXX not found among your API orders", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "Validation Error",
  "errors": [ { "code": "validation_error", "field": "region", "message": "…" } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "supplier temporarily unavailable — retry shortly",
  "errors": [ { "code": "supplier_unavailable", "message": "supplier temporarily unavailable — retry shortly", "retryable": true } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "supplier price changed from $8.50 to $9.10 — repeat the request with accept_price=9.10 to proceed",
  "errors": [ { "code": "price_changed", "message": "supplier price changed from $8.50 to $9.10 — repeat the request with accept_price=9.10 to proceed", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "insufficient SkyZiro balance: this costs $8.50, your balance is $3.20",
  "errors": [ { "code": "insufficient_balance", "message": "insufficient SkyZiro balance: this costs $8.50, your balance is $3.20", "retryable": false } ]
}

Запрос

Прислать ссылку-приглашение

Игру в этот регион дарят только по ссылке-приглашению (status = needs_quick_invite или в actions есть send_quick_link). Пришлите свежую ссылку s.team/p/… — доставка продолжится в том же заказе, без нового списания.

  • Ссылку покупатель берёт в Steam: Друзья → Добавить друга → «Ссылка для быстрого приглашения». Она действует 30 дней и один раз.
Auth: Bearer (scope: steamgifts:write) Rate: 30/мин 200 401 403 404 409 422 429 502

Path параметры

uid string номер заказа, ORD-XXXXXX

Поля тела запроса

link string обязательно — https://s.team/p/…

Тело запроса (JSON)

{ "link": "https://s.team/p/abcd-1234/WXYZ" }

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": { "uid": "ORD-K2M3WF", "reference_id": "shop-1042", "status": "processing", … }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "order ORD-XXXXXX not found among your API orders",
  "errors": [ { "code": "order_not_found", "message": "order ORD-XXXXXX not found among your API orders", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "supplier temporarily unavailable — retry shortly",
  "errors": [ { "code": "supplier_unavailable", "message": "supplier temporarily unavailable — retry shortly", "retryable": true } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "the supplier would not accept this action for this order right now — see actions in GET /steam-gifts/orders/{uid}",
  "errors": [ { "code": "action_not_allowed", "message": "the supplier would not accept this action for this order right now — see actions in GET /steam-gifts/orders/{uid}", "retryable": false } ]
}

Запрос

Покупатель принял заявку в друзья

Наш отправитель (sender_profile_url) прислал покупателю заявку в друзья, а покупатель принял её уже после того, как поставщик перестал ждать. Доступно, когда в actions есть friend_accepted. Доставка продолжится в том же заказе.

  • Пока заказ просто ждёт заявку (awaiting_friend_accept = true), вызывать не нужно — поставщик увидит принятие сам.
Auth: Bearer (scope: steamgifts:write) Rate: 30/мин 200 401 403 404 409 422 429 502

Path параметры

uid string номер заказа, ORD-XXXXXX

Поля тела запроса

confirmed_by string необязательно: кто подтвердил (покупатель, ваш оператор) — останется в журнале заказа

Тело запроса (JSON)

{ "confirmed_by": "buyer" }

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": { "uid": "ORD-K2M3WF", "reference_id": "shop-1042", "status": "processing", … }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "order ORD-XXXXXX not found among your API orders",
  "errors": [ { "code": "order_not_found", "message": "order ORD-XXXXXX not found among your API orders", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "supplier temporarily unavailable — retry shortly",
  "errors": [ { "code": "supplier_unavailable", "message": "supplier temporarily unavailable — retry shortly", "retryable": true } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "the supplier would not accept this action for this order right now — see actions in GET /steam-gifts/orders/{uid}",
  "errors": [ { "code": "action_not_allowed", "message": "the supplier would not accept this action for this order right now — see actions in GET /steam-gifts/orders/{uid}", "retryable": false } ]
}

Запрос

Подтвердить, что основная игра есть

Дополнение, а поставщик не видит у получателя основную игру (в actions есть confirm_base_game). Если покупатель подтверждает, что игра у него есть, — вызовите: проверка снимется и заказ продолжится.

  • Подтверждайте только после явного ответа покупателя: если игры на самом деле нет, подарок принять не смогут и деньги пропадут.
  • reason.not_before — раньше этого времени повторно не проверить (409 base_game_recheck_too_soon).
Auth: Bearer (scope: steamgifts:write) Rate: 30/мин 200 401 403 404 409 422 429 502

Path параметры

uid string номер заказа, ORD-XXXXXX

Поля тела запроса

confirmed_by string необязательно: кто подтвердил (покупатель, ваш оператор) — останется в журнале заказа

Тело запроса (JSON)

{ "confirmed_by": "buyer" }

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": { "uid": "ORD-K2M3WF", "reference_id": "shop-1042", "status": "processing", … }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "order ORD-XXXXXX not found among your API orders",
  "errors": [ { "code": "order_not_found", "message": "order ORD-XXXXXX not found among your API orders", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "supplier temporarily unavailable — retry shortly",
  "errors": [ { "code": "supplier_unavailable", "message": "supplier temporarily unavailable — retry shortly", "retryable": true } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "the supplier would not accept this action for this order right now — see actions in GET /steam-gifts/orders/{uid}",
  "errors": [ { "code": "action_not_allowed", "message": "the supplier would not accept this action for this order right now — see actions in GET /steam-gifts/orders/{uid}", "retryable": false } ]
}

Запрос

Подтвердить, что игры у покупателя нет

Проверка поставщика решила, что игра у получателя уже есть (reason.code = already_owned, в actions есть confirm_ownership), а покупатель говорит, что нет. Вызов снимает проверку и продолжает заказ.

  • Если «уже есть» ответила сама касса Steam — 409 ownership_refused_by_steam: это окончательно, нужен другой получатель или отмена.
Auth: Bearer (scope: steamgifts:write) Rate: 30/мин 200 401 403 404 409 422 429 502

Path параметры

uid string номер заказа, ORD-XXXXXX

Поля тела запроса

confirmed_by string необязательно: кто подтвердил (покупатель, ваш оператор) — останется в журнале заказа

Тело запроса (JSON)

{ "confirmed_by": "buyer" }

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": { "uid": "ORD-K2M3WF", "reference_id": "shop-1042", "status": "processing", … }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "order ORD-XXXXXX not found among your API orders",
  "errors": [ { "code": "order_not_found", "message": "order ORD-XXXXXX not found among your API orders", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "supplier temporarily unavailable — retry shortly",
  "errors": [ { "code": "supplier_unavailable", "message": "supplier temporarily unavailable — retry shortly", "retryable": true } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "the supplier would not accept this action for this order right now — see actions in GET /steam-gifts/orders/{uid}",
  "errors": [ { "code": "action_not_allowed", "message": "the supplier would not accept this action for this order right now — see actions in GET /steam-gifts/orders/{uid}", "retryable": false } ]
}

Запрос

Покупатель сменил страну аккаунта

Издатель не продаёт игру в стране аккаунта получателя (в actions есть confirm_region_change). После того как покупатель сменил страну аккаунта Steam на регион заказа — вызовите, и заказ продолжится.

  • Доставка возможна только в регион заказа. region можно не передавать; если передан — он должен совпадать с регионом заказа (иначе 422 region_mismatch). Для другой страны оформите новый заказ.
Auth: Bearer (scope: steamgifts:write) Rate: 30/мин 200 401 403 404 409 422 429 502

Path параметры

uid string номер заказа, ORD-XXXXXX

Поля тела запроса

region string необязательно — код страны, должен совпадать с регионом заказа

Тело запроса (JSON)

{ "region": "KZ" }

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": { "uid": "ORD-K2M3WF", "reference_id": "shop-1042", "status": "processing", … }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "order ORD-XXXXXX not found among your API orders",
  "errors": [ { "code": "order_not_found", "message": "order ORD-XXXXXX not found among your API orders", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "supplier temporarily unavailable — retry shortly",
  "errors": [ { "code": "supplier_unavailable", "message": "supplier temporarily unavailable — retry shortly", "retryable": true } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "the supplier would not accept this action for this order right now — see actions in GET /steam-gifts/orders/{uid}",
  "errors": [ { "code": "action_not_allowed", "message": "the supplier would not accept this action for this order right now — see actions in GET /steam-gifts/orders/{uid}", "retryable": false } ]
}

Запрос

Отменить заказ

Отменяет заказ и возвращает его стоимость на баланс. Если заказ уже у поставщика, он сначала отменяется там — после этого подарок не уйдёт.

  • 200 — отменён, в ответе refunded — сколько вернулось на баланс; status = failed. Повторная отмена отменённого заказа тоже отвечает 200.
  • 202 — поставщик прямо сейчас доставляет: отмена принята, мы повторяем её сами раз в минуту до часа, cancel_state = pending. Деньги вернутся, когда поставщик подтвердит (придёт вебхук steamgifts.order.failed).
  • 409 order_cancel_too_late — деньги у поставщика уже двинулись: заказ ещё может быть доставлен или вернётся возвратом, cancel_state = awaiting_supplier. Дождитесь итога.
Auth: Bearer (scope: steamgifts:write) Rate: 30/мин 200 202 401 403 404 409 429 503

Path параметры

uid string номер заказа, ORD-XXXXXX

Поля тела запроса

reason string необязательно — причина, до 200 символов

Тело запроса (JSON)

{ "reason": "покупатель передумал" }

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": { "uid": "ORD-K2M3WF", "status": "failed", …, "refunded": 8.50 }
}

Другие ответы

{
  "status": "SUCCESS",
  "data": { "uid": "ORD-K2M3WF", "status": "processing", …, "cancel_state": "pending", "refunded": 0 }
}
{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "order ORD-XXXXXX not found among your API orders",
  "errors": [ { "code": "order_not_found", "message": "order ORD-XXXXXX not found among your API orders", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "money at the supplier has already moved — the order may still be delivered or refunded; wait for the outcome",
  "errors": [ { "code": "order_cancel_too_late", "message": "money at the supplier has already moved — the order may still be delivered or refunded; wait for the outcome", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "the supplier did not confirm the cancellation — nothing was changed, retry later",
  "errors": [ { "code": "supplier_unavailable", "message": "the supplier did not confirm the cancellation — nothing was changed, retry later", "retryable": true } ]
}

Запрос

Доставить в минус

Заказ на удержании (status = on_hold): вы продали подарок дешевле нашей цены (resale_usd). Вызов списывает цену и отправляет подарок — вы осознанно уходите в минус. Не хотите — отмените заказ.

  • Если цена изменилась с момента заказа — 409 price_changed; повторите с accept_price.
Auth: Bearer (scope: steamgifts:write) Rate: 30/мин 200 401 402 403 404 409 429 502

Path параметры

uid string номер заказа, ORD-XXXXXX

Поля тела запроса

accept_price number согласие на новую цену после 409 price_changed

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": { "uid": "ORD-K2M3WF", "reference_id": "shop-1042", "status": "processing", … }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 1,
  "statusMessage": "Unauthenticated"
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "Steam Gifts is not enabled for your account",
  "errors": [ { "code": "steamgifts_access_denied", "message": "Steam Gifts is not enabled for your account", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 3,
  "statusMessage": "order ORD-XXXXXX not found among your API orders",
  "errors": [ { "code": "order_not_found", "message": "order ORD-XXXXXX not found among your API orders", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}
{
  "status": "ERROR",
  "statusCode": 6,
  "statusMessage": "supplier temporarily unavailable — retry shortly",
  "errors": [ { "code": "supplier_unavailable", "message": "supplier temporarily unavailable — retry shortly", "retryable": true } ]
}
{
  "status": "ERROR",
  "statusCode": 2,
  "statusMessage": "insufficient SkyZiro balance: this costs $8.50, your balance is $3.20",
  "errors": [ { "code": "insufficient_balance", "message": "insufficient SkyZiro balance: this costs $8.50, your balance is $3.20", "retryable": false } ]
}
{
  "status": "ERROR",
  "statusCode": 4,
  "statusMessage": "order is not awaiting a loss decision",
  "errors": [ { "code": "not_on_hold", "message": "order is not awaiting a loss decision", "retryable": false } ]
}

Запрос

Healthcheck

Лёгкий эндпоинт для мониторинга — возвращает текущее серверное время. Не требует токена.

Auth: не требуется Rate: 60/мин (по IP) 200 429

200 — успешный ответ

{
  "status": "SUCCESS",
  "data": { "pong": true, "time": "2026-..." }
}

Другие ответы

{
  "status": "ERROR",
  "statusCode": 5,
  "statusMessage": "Too Many Requests"
}

Запрос

OpenAPI 3.0 спека

Полная OpenAPI 3.0 спецификация всех эндпоинтов. Используется для автогенерации SDK через openapi-generator.

Auth: не требуется Rate: 60/мин (по IP) 200 429

Запрос

Esc
Ничего не нашлось