amx.run
amx.run
Главная Каталог Бесплатное Новости Статьи
0 Вход Регистрация
Магазин
  • Главная
  • Все товары
  • Бесплатное
  • Новости
  • Статьи и гайды
  • Бот для Telegram
Категории
  • Counter-Strike 1.61
    • Плагины0
      • Привилегии и донат0
      • Администрирование0
      • Игровые режимы0
      • Геймплей0
      • Статистика0
      • Карты и голосования0
      • Развлечения0
      • Защита сервера0
      • Управление сервером0
      • Для разработчиков0
      • Сборки и пакеты0
    • Модули1
      • Метамод1
    • Модели0
      • Модели игроков0
      • Модели оружия0
      • Объекты0
    • Карты0
      • Карты cs_0
      • Карты de_0
      • Карты aim_0
      • Карты fy_0
      • Карты ze_0
      • Карты zm_0
      • Карты $0
    • Готовые сборки0
      • ZM сборки0
      • Public сборки0
      • DeathRun сборки0
      • Jail сборки0
      • GunGame сборки0
      • Knife сборки0
    • Звуки0
    • Спрайты и HUD0
    • Модели игроков0
    • Модели оружия0
  • GameCMS0
Аккаунт
  • Вход
  • Регистрация
  • Корзина
API amx.run Быстрый старт Ключи и доступ Ответы и ошибки Лимиты Публичные методы Ключ покупателя Ключ продавца Добавление товара Ключ админа Примеры и бот Мои ключи
REST API · JSON · v1

API магазина

Получайте каталог, свои покупки, лицензии, продажи и всё из админ-центра из своего Telegram-бота, сайта или скрипта.

Адресhttps://amx.run/api/v1/
# без ключа - каталог
curl https://amx.run/api/v1/products?limit=5

# с ключом - ваши лицензии
curl -H "Authorization: Bearer amx_ваш_ключ" https://amx.run/api/v1/me/licenses
ПубличноеКаталог, категории, отзывы, новости, статьи. Без ключа.
ПокупательПокупки, лицензии, баланс, уведомления, поддержка. Ключ - в профиле.
ПродавецТовары, продажи, лицензии покупателей, заявки, отзывы. Ключ - в кабинете продавца.
АдминЛюбое действие админ-центра в пределах ваших прав. Ключ - в админ-центре, раздел «API».

Ключи и доступ

Ключ создаётся на сайте: покупатель - в профиле, продавец - в кабинете продавца на вкладке «API», сотрудник - в админ-центре в разделе «API». Ключей может быть несколько, и у каждого свои настройки:

  • Права - к каким разделам ключ имеет доступ. Ключ админа никогда не получит больше прав, чем есть у его владельца, и теряет их вместе с владельцем.
  • Можно изменять - без этой галочки ключ только читает данные. Безопасный выбор для бота-информатора.
  • Разрешённые IP - ключ работает только с этих адресов и подсетей (например, с сервера бота).
  • Срок действия и выключатель - ключ можно временно выключить или удалить навсегда.

Ключ передаётся в заголовке. Сам ключ виден только при создании: на сайте хранится его отпечаток, поэтому потерянный ключ нельзя посмотреть - только создать новый.

Authorization: Bearer amx_0123456789abcdef0123456789abcdef01234567
# или
X-Api-Key: amx_0123456789abcdef0123456789abcdef01234567

Не передавайте ключ в адресе (?key=) - такой запрос будет отклонён, чтобы ключ не попал в журналы серверов. Никому не показывайте ключ: с ним действуют от вашего имени.

GET/key
Какой ключ сейчас используется: вид, права, режим записи, владелец, лимит.

Ответы и ошибки

Ответ всегда в JSON и UTF-8. Даты - Unix-время в секундах, деньги - числа в валюте магазина (₽). Изменения - методом POST, поля можно слать формой или JSON-объектом (Content-Type: application/json).

{
  "ok": true,
  "data": [ … ],
  "meta": { "page": 1, "limit": 20,
            "total": 57, "pages": 3 }
}
{
  "ok": false,
  "error": {
    "code": "scope_denied",
    "message": "У ключа нет доступа «Лицензии»"
  }
}

Списки листаются параметрами page (с 1) и limit (1-100).

HTTPcodeЧто значит
401auth_required invalid_key key_disabled key_expiredНет ключа, ключ удалён, выключен или истёк
403scope_denied read_only wrong_key_kind ip_deniedУ ключа нет права, он только для чтения, это метод для другого вида ключа или запрос с неразрешённого IP
404not_foundНет такого метода или записи
405method_not_allowedИзменения - только POST
409 / 422разныеДействие сейчас невозможно или поле заполнено неверно - текст в message
429rate_limitedСлишком часто - подождите (заголовок Retry-After)

Лимиты

  • Без ключа - до 60 запросов в минуту с одного IP.
  • По ключу - до 300 запросов в минуту на ключ.
  • После 30 запросов с неверным ключом за 10 минут адрес временно блокируется.

Каждый запрос по ключу записывается в журнал ключа: его видно в настройках ключа на сайте.

Публичные методы

Работают без ключа и с любым ключом.

GET/ping
Проверка связи: название магазина, время сервера, каким ключом сделан запрос.
GET/stats
Сколько товаров (и бесплатных), категорий, новостей и статей.
GET/categories
Категории каталога с числом товаров. Список идёт деревом: за категорией - её подкатегории (до 4 уровней). parent_id - id родителя (у основных 0), depth - уровень (0 - основная), products - товаров вместе со всеми подкатегориями.
GET/products
Товары на витрине.
category - slug или id (основная категория - вместе с подкатегориями) · q - поиск · price = free | paid | sale · seller - id продавца · updated_since - Unix-время · sort = new | updated | popular | price_asc | price_desc | name · page, limit
GET/products/{id}
Карточка товара целиком: описание, история изменений, требования, галерея и разделы страницы sections: install и req - текст, commands (c, d, a), cvars (n, v, d), sounds и sprites (p, d, preview) - списки.
GET/products/{id}/reviews
Одобренные отзывы о товаре.
GET/news
Новости; /news/{id} - новость с текстом.
GET/articles
Статьи (category - рубрика); /articles/{id} - статья с текстом.
Пример товара
{
  "id": 2, "name": "Advanced Bans", "url": "https://amx.run/product/2-advanced-bans",
  "category": { "id": 1, "slug": "plugins", "name": "Плагины", "parent_id": 0 },
  "seller": null, "price": 199, "old_price": 0, "currency": "₽",
  "is_free": false, "is_protected": true, "version": "1.2", "author": "amx.run",
  "short_desc": "…", "tags": ["бан", "admin"], "image": "https://amx.run/uploads/…",
  "rating": { "value": 4.8, "count": 12 }, "sales": 140, "downloads": 310,
  "created_at": 1760000000, "updated_at": 1760300000
}

Ключ покупателя

Всё - про владельца ключа. Ключ создаётся в профиле.

GET/meprofile
Профиль: логин, имя, e-mail, баланс, группы, продавец ли.
GET/me/purchasespurchases
Купленные товары с текущей версией (удобно, чтобы бот сообщал об обновлениях).
GET/me/orderspurchases
Заказы с позициями, скидкой и промокодом.
GET/me/licenseslicenses
Лицензии: ключ, товар, статус, привязка к серверу, последняя проверка. /me/licenses/{id} - одна.
POST/me/licenses/{id}/unbindlicensesзапись
Сбросить привязку к серверу (не чаще, чем разрешено на сайте).
GET/me/balancebalance
Баланс и история операций.
GET/me/notificationsnotifications
Уведомления и число непрочитанных.
unread=1 - только новые · since - новее этого Unix-времени (удобно для опроса раз в минуту)
POST/me/notifications/readnotificationsзапись
Отметить прочитанными все или ids=1,2,3.
GET/me/ticketstickets
Обращения в поддержку (status = open | answered | closed); /me/tickets/{id} - с перепиской.
POST/me/ticketsticketsзапись
Новое обращение.
subject, text, category, product_id
POST/me/tickets/{id}/replyticketsзапись
Ответить в обращении (поле text).
POST/me/tickets/{id}/closeticketsзапись
Закрыть обращение.
GET/me/favoritesfavorites
Избранные товары.

Ключ продавца

Только ваши товары и их покупатели. Ключ создаётся в кабинете продавца на вкладке «API».

GET/seller/statsseller.sales
Сводка: товары, продажи и выручка за всё время, 30 дней и сегодня, активные лицензии, заявки на проверке.
GET/seller/productsseller.products
Ваши товары со статусом (active | hidden | draft), продажами, просмотрами и заявками; /seller/products/{id} - карточка целиком.
GET/seller/salesseller.sales
Продажи и сумма выручки за выборку.
from, to - Unix-время · product_id · page, limit
GET/seller/licensesseller.licenses
Лицензии покупателей.
product_id · status = active | revoked · q - ключ, логин или IP
GET/seller/requestsseller.requests
Заявки на проверку и решения модератора (status = pending | approved | rejected | canceled); /seller/requests/{id} - одна.
POST/seller/requests/{id}/cancelseller.requestsзапись
Отменить заявку, пока её не рассмотрели.
GET/seller/reviewsseller.reviews
Отзывы о ваших товарах (product_id).

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

Один запрос - и товар готов: поля карточки, описание из .md-файла, разделы страницы, файл товара, обложка и скриншоты. Ключ админа сохраняет сразу (нужны право ключа products и галочка «Можно изменять»), ключ продавца отправляет товар на проверку модератору (seller.products + «Можно изменять»).

POST/productsproducts · seller.productsзапись
Новый товар. Ответ админу - карточка целиком (201), продавцу - номер товара и заявки (202).
POST/products/{id}products · seller.productsзапись
Изменить товар: меняется только то, что прислали, остальное остаётся как было.

Поля

ПолеЧто это
markdownОписание товара в .md - текстом или файлом. Разбирается как кнопка «Заполнить из .md»: # Название, первый абзац - краткое описание, таблица «ключ | значение» - версия, цена, требования; разделы ## Установка, ## Квары, ## Команды, ## Требования, ## Звуки, ## Спрайты, ## Изменения - в свои вкладки, остальные - в описание. Разделы-заметки («Почему такая цена» …) и строка «Цена» в таблице не публикуются, пока не передан markdown_private=1. Поля ниже важнее разобранных из файла.
nameНазвание (для нового - обязательно, если нет markdown)
categoryid, адрес (plugins) или название; если названия повторяются - путь Counter-Strike 1.6 / Плагины. Список - GET /categories
short_descКраткое описание для карточки, до 250 символов
description, changelogОписание и общий список изменений - Markdown: заголовки, таблицы, списки, **жирный**, `код`
price, old_priceЦена (0 - бесплатно) и старая цена для скидки
version, version_notesВерсия (по умолчанию 1.0) и что нового в ней - для истории версий; notify_buyers=1 - сообщить купившим о новой версии
requirements, tagsСтрокой или списком: ["ReAPI", "AMXX 1.9+"], ["vip", "меню"]
authorПодпись автора
active, protected, featuredПоказывать на витрине (по умолчанию да), защита лицензией, хит продаж (только админ)
sellerТолько админ: продавец товара - id или логин, 0 - магазин
sectionsРазделы страницы, см. ниже (те же ключи можно передать и на верхнем уровне: cvars, commands …)
file, image, screenshots[]Файлы (multipart/form-data): архив товара, обложка, скриншоты (скриншоты - только админ)
dry_run=1Ничего не сохранять - показать, что получится из запроса и .md-файла

Разделы sections

install и req - текст (Markdown). Таблицы можно передать как удобнее:

"sections": {
  "install":  "1. Распакуйте архив в cstrike\n2. Допишите wphys в modules.ini",
  "commands": ["say /vip - открыть меню", {"command": "amx_givevip", "description": "выдать VIP", "access": "ADMIN_BAN"}],
  "cvars":    {"vip_hp": "100", "vip_armor": ["50", "броня при спавне"]},
  "sounds":   ["sound/vip/buy.wav - при покупке"],
  "sprites":  [{"path": "sprites/vip/crown.spr", "description": "корона над игроком"}]
}

Квары принимаются и текстом .cfg (vip_hp "100" // описание), и строками из исходника: register_cvar, create_cvar, register_clcmd, precache_sound. Раздел заменяется целиком; превью звуков и спрайтов с тем же путём сохраняются.

Примеры

# товар целиком из .md + архив и обложка (ключ админа)
curl -H "Authorization: Bearer amx_ключ_админа" \
  -F "markdown=@01-wphys-физика-оружия.md" \
  -F "category=Counter-Strike 1.6 / Модули" \
  -F "file=@wphys.zip" -F "image=@cover.png" \
  https://amx.run/api/v1/products

# сначала проверить, как разберётся файл
curl -H "Authorization: Bearer amx_ключ" -F "markdown=@описание.md" -F "dry_run=1" https://amx.run/api/v1/products

# JSON: обновить цену и квары у товара 14
curl -H "Authorization: Bearer amx_ключ" -H "Content-Type: application/json" \
  -d '{"price": 349, "old_price": 395, "sections": {"cvars": {"wphys_bounce": "0.4"}}}' \
  https://amx.run/api/v1/products/14

Ответ админу: {"ok": true, "data": {карточка товара, "status", "admin_url"}, "meta": {"message", "created", "markdown": {"used": […], "skipped": […]}, "warnings": […]}}. Продавцу: {"ok": true, "data": {"product_id", "request_id", "status": "pending", …}} - следить за решением можно через GET /seller/requests/{id}. Ошибка: {"ok": false, "error": {"code": "invalid" | "bad_category" | "no_changes" | "pending" …, "message": "…"}}.

Ключ админа

Ключ админа вызывает те же действия, что кнопки админ-центра, - с теми же проверками и записью в журнал. Действие доступно, если у ключа есть право на раздел, у владельца есть право на действие, а для изменений включена галочка «Можно изменять». Настройки сайта через API недоступны.

GET/admin
Список действий, доступных этому ключу, с методом GET или POST.
GET/admin/{действие}
Чтение: параметры - в адресе. Например /admin/orders, /admin/user_get?id=5, /admin/tickets?status=open.
POST/admin/{действие}запись
Изменение: поля - в теле. Например /admin/ticket_reply с id и text, /admin/seller_request_decide с id и decision=approve.

Ответ - в формате админ-центра: {"ok": true, …} или {"ok": false, "msg": "…"}.

Дашборд dashboard
statsdash_moreattention
Товары products
productsproduct_getproduct_toggleproduct_saveproduct_deleteproduct_bulkproduct_duplicateversion_deleteversion_restoreversion_notepfilespfile_getpfile_previewpfile_savepfile_deletepfile_sortpfile_scanpfile_import
Категории categories
categoriescategory_savecategory_deletecategory_sortcategory_toggle
Отзывы reviews
reviewsreview_statusreview_deletereview_bulkreview_replyreview_edit
Заказы и промокоды orders
ordersorder_refundpromospromo_savepromo_delete
Пользователи users
usersusers_summaryuser_getuser_saveuser_avataruser_grantuser_revokeuser_logout_alluser_impersonateuser_impersonate_stop
Статьи articles
articlesarticle_statusarticle_pinarticle_delete
Отчёты reports
reportreport_export
Рассылка broadcast
broadcastsbroadcast_countbroadcast_sendbroadcast_recall
Заявки продавцов moderation
seller_requestsseller_request_getseller_request_fileseller_request_decide
Страницы pages
pagespage_getpage_savepage_togglepage_deletepage_accesspage_access_save
Поддержка support
ticketsticket_getticket_replyticket_updateticket_statusticket_deleterepliesreply_savereply_delete
Новости news
newsnews_savenews_delete
Журнал log
logactivityactivity_sessionactivity_ipactivity_clear
Группы groups
groupsgroup_getgroup_savegroup_togglegroup_sortgroup_duplicategroup_deletegroup_member_addgroup_member_remove
Платежи payments
paymentspayment_confirmpayment_cancelpayment_synccardpayscardpay_attachcardpay_ignorerobot_test
Лицензии licenses
licenseslicense_getlicense_revokelicense_unbindlicense_savelicense_regenlicense_transferlicense_issuelicense_deletelicense_bulklicense_checkslicense_productslicense_sync_productlicense_log_clearlicense_ip_seenlicense_ip_purgelicense_exportmodule_infomodule_uploadmodule_delete

чтение (GET)   изменение (POST, нужна запись)

Примеры

<?php
$key = 'amx_ваш_ключ';
$ch = curl_init('https://amx.run/api/v1/me/licenses');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $key],
]);
$r = json_decode(curl_exec($ch), true);
if (!$r['ok']) exit($r['error']['message']);
foreach ($r['data'] as $lic) echo $lic['product']['name'], ': ', $lic['key'], PHP_EOL;
import requests

API = "https://amx.run/api/v1"
H = {"Authorization": "Bearer amx_ваш_ключ"}

r = requests.get(f"{API}/seller/stats", headers=H, timeout=10).json()
if r["ok"]:
    s = r["data"]
    print(f"Сегодня: {s['sales_today']} продаж на {s['revenue_today']} {s['currency']}")
else:
    print(r["error"]["message"])
const API = 'https://amx.run/api/v1';
const r = await fetch(`${API}/products?sort=updated&limit=5`).then(x => x.json());
r.data.forEach(p => console.log(p.name, p.version, p.url));
# Бот присылает в Telegram новые заказы и обращения (ключ админа: orders, support - только чтение)
import time, requests

API = "https://amx.run/api/v1"
H = {"Authorization": "Bearer amx_ключ_админа"}
TG = "https://api.telegram.org/bot<ТОКЕН_БОТА>/sendMessage"
CHAT = "<ID_ЧАТА>"
seen = set()

while True:
    r = requests.get(f"{API}/admin/tickets", params={"status": "open"}, headers=H, timeout=15).json()
    for t in r.get("rows", []):
        if t["id"] not in seen:
            seen.add(t["id"])
            requests.post(TG, data={"chat_id": CHAT, "text": f"🎧 #{t['id']} {t['subject']}"})
    time.sleep(30)

Для бота делайте отдельный ключ: только нужные права, без записи и с IP сервера бота. Если ключ утечёт - удалите его, остальные продолжат работать.

amx.run
СБП Карты РФ Мгновенная выдача
Каталог
Плагины Модели Карты Готовые сборки
Покупателям
Бесплатное Корзина Пополнить баланс Новости Статьи и гайды Поддержка API для разработчиков
© 2026 amx.run