Золотое Яблоко — Seller API (реверс)
Восстановлено реверсом кабинета seller.goldapple.ru, подтверждено живыми запросами 2026-07-09. 14 рабочих эндпоинтов.
Аутентификация (cookie, не Bearer)
# 1) логин → куки access_token / refresh_token
curl -c cookies.txt -X POST https://seller.goldapple.ru/connect/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode client_id=client_web \
--data-urlencode grant_type=password \
--data-urlencode username=ЛОГИН \
--data-urlencode password=ПАРОЛЬ
# 2) вызов API с этой кукой
curl -b cookies.txt 'https://seller.goldapple.ru/api/v1/user/info'
Креды команды — в /opt/ga-collector/config.env (chmod 600) на s3. Bearer-заголовок даёт 400 Not found counterparty_id — используется ТОЛЬКО cookie.
GET-эндпоинты /api/v1/
| Endpoint | Параметры | Отдаёт |
|---|---|---|
user/info | — | профиль |
counterparty/short-info | — | контрагент |
merchant/finance-info | — | лимит / финансы |
analytics/sales/total-aggregates | startDate,endDate,dateMode=order | суммы заказов/доставок |
analytics/sales/graphs | startDate,endDate,dateMode=order | графики продаж |
analytics/sales/top-sales | currentDate,pointCount=7,topCount=1..5 | топ товаров |
analytics/stocks/total-aggregates | startDate,endDate | остатки |
analytics/stocks/buyout-aggregates | startDate,endDate | выкупы |
analytics/stocks/graphs | startDate,endDate | графики остатков |
analytics/geo/top-deliverycities | date,topCount | топ городов доставки |
analytics/geo/total-aggregates | startDate,endDate | гео-агрегаты |
POST-эндпоинты /api/v1/ (Content-Type: application/json)
| Endpoint | Тело запроса | Отдаёт |
|---|---|---|
promotion/list | {} | data.promotions — акции |
product/products | {"query":"","filters":[],"request":{"pagination":{"page":1,"limit":1000}}} | data.products — весь каталог (~599) |
price/products | {"query":"","request":{"pagination":{"page":1,"limit":1000}}} | data.products с ценами (~592) |
Грабли (проверено живьём)
analytics/sales/top-sales:topCountтолько 1..5 (больше →400 TopCount must be between 1 and 5).product/productsиprice/productsигнорируютlimitи отдают весь каталог одним ответом — пагинация НЕ нужна (иначе цикл тянет дубли).product/products:filtersобязателен и это массив[](не объект).query— строка. Пагинация в отдельном полеrequest.price/products: поляfiltersНЕТ — добавишь →400.- GET-версии
product/products/price/products/report/*отдают HTML-заглушку SPA (не API) — это только POST. analytics/price/table— висит / timeout, в наборе не используем.
Даты
ISO-8601 UTC, окно обычно 7 дней: startDate = YYYY-MM-DDT00:00:00.000Z, endDate = YYYY-MM-DDT23:59:59.999Z.
Сбор данных
Коллектор /opt/ga-collector/ga_collect.py на s3 (cron 0 */2 * * *) логинится через московский прокси и пишет сырые ответы в gwptd_intake.ga_raw (ELT-буфер: endpoint, params, http_status, ok, collected_at, payload(JSON), error).