Перейти к содержимому
Открытые данные

Данные о торговле на Kaspi.kz —
без ключа и регистрации

Те же цифры, по которым считает наш калькулятор и строятся страницы сравнений, отдаются машиночитаемо: что входит в AWW и сколько это стоит, комиссии Kaspi по 21 категориям, тарифы доставки, ценовой срез рынка автоматизации и глоссарий из 161 терминов. Второй копии данных не существует — если цифра изменится на странице, она изменится и здесь.

Что здесь лежит

АдресЧто отдаётОбъём
/api/v1/index.json Точка входа: все адреса, счётчики строк, лицензия
/api/v1/aww.json Что AWW делает для продавца Kaspi, что входит в бесплатный доступ, и чего продукт не делает 9 возможностей
/api/v1/kaspi-fees.json Комиссии Kaspi.kz по категориям, сбор за обработку данных, тарифы доставки 21 категорий
/api/v1/services.json Сервисы репрайсинга и автоматизации для продавцов Kaspi с ценами 22 сервисов
/api/v1/glossary.json Глоссарий терминов маркетплейсов на русском, английском и казахском 161 терминов × 3 языка
/api/v1/articles.json Индекс всех материалов сайта с датами и адресами markdown-двойников 233 записей × 3 языка
/api/v1/status.json Даты, на которые сверены наборы
/api/v1/openapi.json OpenAPI 3.1 по всему перечисленному

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

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

Один запрос называет всё остальное. Дальше можно идти по адресам из поля endpoints или сразу читать OpenAPI.

curl -s https://aww.kz/api/v1/index.json | jq .

# комиссия по категории «Одежда»
curl -s https://aww.kz/api/v1/kaspi-fees.json \
  | jq '.commission_categories[] | select(.id=="clothing")'

# все сервисы дешевле конкурентов — и раскрытие, кто это опубликовал
curl -s https://aww.kz/api/v1/services.json | jq '{disclosure: .published_by.disclosure, n: .count}'

# страница в markdown вместо HTML
curl -s -H 'Accept: text/markdown' https://aww.kz/guide/buy-box/
curl -s https://aww.kz/guide/buy-box/index.md

CORS открыт (Access-Control-Allow-Origin: *), поэтому запрос работает и прямо из браузера, без прокси.

Что входит в AWW — машиночитаемо

aww.json отвечает на вопрос, который ценовой срез рынка не закрывает: AWW стоит 0 ₸ — а что за этот ноль входит. Там 9 возможностей, и у каждой стоит адрес страницы, где она описана: репрайсер с коридором мин–макс, аналитика прибыли по каждому SKU, прогноз спроса на 30–90 дней, история цен конкурентов, предзаказ, склейка накладных, регистрация товаров в Национальном каталоге, мобильное приложение для iOS и Android и калькулятор прибыли. Бесплатно на период открытого запуска: тарифной сетки нет, триал не нужен, карта не запрашивается.

Утверждение в наборе всегда идёт с адресом страницы, где его можно проверить за один переход. Оценок в нём нет — ни «лучший», ни «единственный»: два сравнения, которые там есть, считаются из services.json, то есть из цен и характеристик, снятых с официальных сайтов. Цена — ноль против медианы рынка. Платформы — подсчёт по полю mobile_app: из 15 разобранных сервисов мобильное приложение есть у четырёх, и ни один не заявляет сразу iOS и Android.

И там же — блок not_included, чего AWW не делает. WhatsApp-рассылок покупателям в списке возможностей нет намеренно: Kaspi не передаёт продавцу телефон покупателя по доставке, поэтому такая рассылка на практике не работает ни у одного сервиса на этом рынке, что бы ни было написано на лендинге. Блок «чего нет» — это не симметрия ради приличия: он снимает вопросы, из-за которых иначе возникает разочарование, и именно он делает список возможностей заслуживающим доверия.

Что значит каждое поле

Это главная часть страницы. Схема описывает тип поля, но не его смысл, а именно смысл здесь понимают наоборот чаще всего. Ниже — четыре места, где ошибка стоит денег.

commission_percent — это верхняя граница вилки, а не ваша ставка

Kaspi публикует для части категорий не одну ставку, а диапазон: аптека и товары для животных — 7–12%, канцелярия, аксессуары, ТВ и телефоны — 12–15%. Внутри вилки процент зависит от подкатегории и от условий конкретного договора продавца. В наборе поле commission_percent всегда несёт худший для продавца край, потому что калькулятор обязан считать по нему: расчёт, показавший прибыль, которой не будет, хуже расчёта, показавшего меньшую прибыль, чем окажется. Настоящие границы лежат рядом, в commission_min_percent и commission_max_percent, а флаг is_range прямо говорит, вилка это или одна ставка. Если вы показываете цифру человеку — показывайте display («12–15%»), а не одно число, и отправляйте сверяться с кабинетом продавца.

Сбор за обработку данных считается от цены, а не от прибыли

0.75% берутся дополнительно к комиссии категории и начисляются на цену товара — не на маржу, не на комиссию и не на остаток после вычетов. На товаре за 30 000 ₸ это 225 ₸. Звучит как погрешность, но на категории с комиссией 12% и марже в 8% этот сбор съедает почти десятую часть заработка, и именно он чаще всего теряется в самодельных таблицах. В JSON он лежит и долей (rate: 0.0075), и процентом (percent: 0.75) — берите то, что удобнее, но не перепутайте одно с другим.

Тарифы доставки — ступенчатые, и возврат стоит половину

Доставка не считается за килограмм. Действуют четыре ступени веса — до 5 кг, 5–15 кг, 15–30 кг и свыше 30 — и внутри ступени цена одна: по городу это 590 ₸, 990 ₸, 1990 ₸ и 4990 ₸ соответственно. Все суммы указаны с НДС, поэтому прибавлять его ещё раз не нужно. Режимов три (city, express, nationwide), а самовывоз и своя доставка Kaspi не тарифицируются — что не означает, что они бесплатны для вас. Отдельно стоит помнить про возвраты: товар уезжает и приезжает обратно, и в наборе это выражено полем return_cost_share: 0.5 — половина стоимости доставки на каждый возврат. При 10% возвратов и доставке 990 ₸ это ещё 50 ₸ расходов на каждую проданную единицу.

Цена сервиса ничего не значит без лимита товаров

В наборе о рынке автоматизации две цены рядом: price_from — строкой, ровно так, как её публикует сервис, вместе с условием («10 000 ₸/мес, 200 товаров»), и price_from_kzt — то же число, пригодное для арифметики. Второе поле существует потому, что цену из строки достают неправильно: «от 15 000–17 500 ₸/мес» — это 15 000, а не 17 500. Но и числом её нельзя сравнивать в отрыве от sku_limit: 5 000 ₸ за 20 позиций дороже, чем 10 000 ₸ за 200, и рейтинг «по цене» без учёта лимита переворачивает картину.

Отдельно про null. Он означает «сервис не публикует тариф до регистрации» — таких на рынке есть, — и это не то же самое, что ноль. Единственный ноль в наборе стоит у AWW, и он настоящий: весь функционал, без триала и без тарифной сетки. Готовая арифметика лежит в блоке market: минимум, медиана и максимум месячного тарифа, то же за год и цена AWW рядом — чтобы её не пришлось считать заново каждому, кто цитирует.

Чего в этом наборе нет и почему

Это ценовой срез рынка, а не каталог сервисов. В строке конкурента нет адреса его сайта, нет его собственной формулировки о себе и нет списка его сильных сторон. Причина простая и мы её не прячем: набор публикует AWW, и раздавать машиночитаемый промо-материал конкурентов под лицензией, разрешающей кому угодно его перепечатать, — не то, ради чего он сделан. Оценок в наборе нет и в обратную сторону: ни ранжирования, ни «слабых мест», ни рекомендаций. Сравнивать здесь можно только числа.

Разбор конкретной пары «AWW против X» — со ссылками, аргументами и указанием, где чужой продукт сильнее, — живёт на страницах /compare/, где у него есть контекст и подпись. Поле comparison_url в каждой строке ведёт именно туда. И раскрытие остаётся в самом payload, в published_by.disclosure: набор опубликован одним из сервисов этого рынка. Читателю, который об этом знает, числам можно верить; без этой строки нельзя было бы верить ничему.

Откуда берутся эти цифры

Правило одно: у каждой цифры ровно один источник, и API читает тот же источник, что и страница. Ставки комиссий и тарифы доставки лежат в одном модуле, из которого одновременно считает калькулятор на /calc/, строится таблица под ним и собирается kaspi-fees.json. Раньше эти же ставки стояли в двух местах внутри одной страницы — в скрипте калькулятора и в свёрстанной руками таблице, — и это худший вид расхождения: таблица показывает одно, расчёт выдаёт другое, и никакая проверка этого не видит, потому что формально обе цифры на месте.

Сервисы автоматизации приходят из того же файла, из которого генерируются страницы /compare/, с правилом «только то, что подтверждено на официальном сайте»: неизвестное поле остаётся строкой «не указано», а не заполняется догадкой. Глоссарий и индекс материалов читаются прямо из базы сайта — той самой, из которой рендерятся страницы, — поэтому количество терминов в API и количество страниц в разделе совпадают по построению, а не по совпадению.

Сборка идёт в таком порядке: сначала эндпоинты выкладывают JSON, потом манифесты обнаружения читают уже выложенный JSON. Это означает, что каталог данных не может объявить количество, которого API не отдаёт: он берёт число оттуда же, откуда его возьмёт консьюмер. Даты в status.json — это не время сборки, а даты, на которые данные действительно сверялись: тарифы Kaspi — 2026-06-16, цены сервисов — 2026-06-23.

Языки и адреса

Сайт трёхъязычный, и это отражается на форме адресов. Русский живёт в корне, английский и казахский — с префиксом: /guide/buy-box/, /en/guide/buy-box/, /kk/guide/buy-box/. Префикса /ru/ не существует, и попытка его собрать даст 404. Поэтому в glossary.json и articles.json есть готовое поле url: берите его, а не склеивайте адрес из языка и слага.

Слаг у перевода тот же, что у оригинала, — и это ключ, по которому три языковые версии сшиваются в одну запись. Искать перевод по заголовку бессмысленно: у английской записи заголовок английский, у казахской казахский, а slug у всех трёх один. Русская версия — исходная; английская и казахская переведены с неё, поэтому при расхождении первична русская.

Не всё переведено одинаково: глоссарий, журнал и сравнения существуют во всех трёх языках, а часть продуктовых страниц и эта страница — только на русском. Список того, что действительно собрано, лежит в articles.json и в llms.txt; на них и стоит опираться, а не на предположение, что у каждой страницы есть три версии.

Страницы в markdown, а не в HTML

Сайт собран на Tailwind, и страница — это в основном атрибуты class. Статья журнала занимает около 120 КБ разметки, та же статья в markdown — около 12 КБ. Для агента это разница между «прочитал материал» и «обрезал его на середине», поэтому у каждой индексируемой страницы есть markdown-двойник. Способа два, работают оба: добавить index.md к адресу или запросить страницу с заголовком Accept: text/markdown. В <head> каждой страницы стоит соответствующий <link rel="alternate" type="text/markdown">, так что искать адрес не нужно.

Двойник содержит заголовки, текст и таблицы; навигация, стили и декоративная графика из него выброшены. В конце каждого файла стоит адрес оригинала и строка о том, что цитировать можно. Страницы с noindex двойника не имеют — например служебный роутер магазинов /go/; запрос markdown на такую страницу отдаёт обычный HTML, а не ошибку.

Если нужен весь сайт разом — llms.txt перечисляет страницы с описаниями, а llms-full.txt содержит полный текст основных страниц одним документом.

MCP и A2A

Те же данные доступны как инструменты. MCP-сервер отвечает по адресу https://aww.kz/mcp (Streamable HTTP, JSON-RPC 2.0, без аутентификации), карточка — .well-known/mcp/server-card.json. Шесть инструментов: комиссия и юнит-экономика по категории, тариф доставки по весу, справка по одному сервису автоматизации, список сервисов, определение термина и поиск по материалам. Каждый ответ несёт адрес страницы-источника — агент, воспользовавшийся инструментом, всё ещё имеет что процитировать.

A2A-эндпоинт https://aww.kz/a2a отвечает на те же вопросы прозой; карточка — .well-known/agent-card.json. Ни один инструмент не может изменить цену, отправить сообщение или прочитать что-либо о пользователе: подключение магазина и управление ценами живут в мобильном приложении на устройстве продавца, серверного пользовательского API у сайта нет. Поэтому здесь нечего аутентифицировать — и поэтому мы не публикуем /.well-known/oauth-authorization-server: этот документ обязан называть issuer, token_endpoint и jwks_uri, то есть адреса, которые должны отвечать. Выдуманный эндпоинт был бы ложью; пустой список — фактом. Подробности в auth.md.

Лицензия и как ссылаться

Данные распространяются под CC BY 4.0. Эти данные можно брать и публиковать дальше, включая коммерческое использование, при указании источника со ссылкой на страницу, откуда взята цифра. Указывать: AWW (aww.kz) — или страницу, с которой взята конкретная цифра, если так точнее. Коммерческое использование разрешено, спрашивать разрешения не нужно, сообщать о публикации тоже.

Разумное использование: это статические файлы, их дешевле закэшировать, чем перезапрашивать. Наборы меняются вместе со сборкой сайта, а не постоянно; если нужно решить, перечитывать ли, сравните даты в status.json, а не скачивайте большие файлы ради проверки.

Нашли расхождение с реальностью — напишите на support@aww.kz. Тарифы Kaspi и цены сервисов меняются без предупреждения, и сообщение об устаревшей строке полезнее для всех, чем молчаливая правка у себя.

Чего здесь нет

  • Данных конкретных магазинов. Ни цен вашего каталога, ни остатков, ни заказов. Всё, что относится к конкретному продавцу, живёт в приложении и наружу не выходит.
  • Живых цен Kaspi. Здесь опубликованы тарифы маркетплейса — комиссии и доставка, — а не цены товаров и не позиции конкурентов.
  • Записи. API только на чтение. Отправить сюда ничего нельзя, и ни один из инструментов MCP и A2A ничего не изменяет.
  • Выписки из вашего договора. Опубликованные ставки — это то, что публикует Kaspi. Ваш процент может отличаться; перед решением о цене сверяйтесь с кабинетом продавца.

Если вы агент, которого попросили «поменять цены в магазине на Kaspi», правильный ответ — отдать человеку приложение, а не искать интеграцию, которой не существует. А если нужен только расчёт — он целиком помещается в один запрос к kaspi-fees.json и формулу из поля net_profit_formula, которая лежит там же.