Парсер официальной OpenAPI-спецификации партнёрского API Яндекс Маркета
(api.partner.market.yandex.ru) — превращает её в локальную базу
markdown-файлов: один эндпоинт = один файл. Удобно скармливать LLM,
держать в репозитории клиента, искать grep-ом и читать без браузера.
md/
├── _README.md ← глобальный индекс
└── partner-api/
├── _README.md ← индекс API (теги + операции)
├── openapi.json ← bundled OpenAPI 3 (один файл)
├── tags/<тег>.md ← карточка раздела
└── operations/
├── orders/<METHOD путь>.md ← один файл = один эндпоинт
├── reports/...
├── shipments/...
└── ... ← группировка по первому тегу
В каждом md-файле эндпоинта:
- метод, путь, теги,
operationId, базовый URL - описание, авторизация (
security+x-auth-scopes) - параметры (table)
- тело запроса со схемой и примерами
- все коды ответов со схемами и автоматически собранными JSON-примерами
Текущий снимок: 1 API · 158 эндпоинтов · 36 тегов · 148 путей · ~1.4 MB openapi.json · 196 md-файлов · ~3.1 MB.
Документация Яндекс Маркета на yandex.ru/dev/market/partner-api рендерится
JS-ом и закрыта SmartCaptcha — копировать «в один клик» нельзя, в LLM-контекст
не положишь. А в md-формате с этим всё хорошо:
- Контекст для AI-агентов. Кладёшь
operations/orders/POST v2-...mdв промпт — модель пишет рабочий клиент сразу с правильными полями, заголовкомApi-Keyи кодами ошибок. - Версионирование документации. Чекин репо →
git diffпоказывает, что Маркет сломал/добавил между запусками парсера. - Быстрый поиск.
grep -r "campaignId"за 0.2 секунды. - Офлайн. Доки доступны без выхода в сеть.
- Источник — публичный GitHub Яндекса. Спека лежит под BSD-3 в
yandex-market/yandex-market-partner-api. Никакого playwright/антибота не нужно — скачиваем GitHub-tarball и работаем локально. - Multi-file → single bundle. Корневой
openapi/openapi.yaml— это только список путей с$refна отдельные YAML-файлы (148 файлов вpaths/, 785 + 59 + 7 вcomponents/{schemas,parameters,responses}/). Парсер рекурсивно резолвит external-ref'ы и собирает один OpenAPI 3 dict:- файлы из
components/<type>/→components.<type>.<имя>+ ссылка переписывается в стандартный internal-ref#/components/... - файлы из
paths/→ инлайнятся вpaths[<url>]целиком
- файлы из
- Глубокие цепочки
allOf. У Яндекса встречаетсяApiClientDataErrorResponse → allOf → ApiErrorResponse → allOf → ApiResponseна 3 уровня. Помимо мерджаpropertiesверхнего уровня, парсер рекурсивно сворачивает вложенныеallOf— иначе ответы 400/401/etc рендерились бы как пустые объекты. x-auth-scopes. У Яндекса каждый метод поверхsecurity: ApiKey/OAuthнесёт расширениеx-auth-scopesсо списком разрешений токена. Выводится рядом с обычной авторизацией.- Синтез JSON-примеров. Если у operation нет
example/examples, но у свойств схемы стоят inlineexampleилиenum— собираем их в один объект со скалярными дефолтами поtype/format(как это делает Redoc). - Группировка по тегам. 158 операций в плоской папке неудобны —
каждый эндпоинт раскладывается в
operations/<первый-тег>/.... Тегов в корневомopenapi.yamlнет (они только внутри методов), их имена собираются на лету и идут в индекс/папки. - Чистка YFM-разметки. Описания у Яндекса написаны в Yandex Flavored
Markdown — с конструкциями
{% include notitle [text](path) %},{% note warning %}...{% endnote %},{% cut "..." %},{% if audience %},{% list tabs %},{{ var-name }},[{#T}](path). Они нерабочие в обычном md, поэтому_clean_yfmснимает обёртки (контент сохраняется) и режет битые относительные ссылки[text](../../concepts/...md), оставляя только текст; внешниеhttps://-ссылки не трогаем.
git clone https://github.com/Slimpers/Yandex-Market-API-parser-MD.git
cd Yandex-Market-API-parser-MD
pip install -r requirements.txtЗависимости — только PyYAML и requests. Никаких браузеров.
# Сборка main-ветки репозитория Яндекса (по умолчанию):
python ya_docs_parser.py
# Конкретный тэг/sha (если Яндекс выкатит релиз):
python ya_docs_parser.py --ref v1.2.3
# Сменить имя slug-папки (по умолчанию partner-api):
python ya_docs_parser.py --slug market
# Не удалять _repo/ после сборки (для отладки):
python ya_docs_parser.py --keep-repoВремя одного полного прогона: ~5 секунд (скачивание tarball ~200 КБ +
bundling). Результат — в md/. Перезапуск полностью обновляет файлы.
md/partner-api/operations/campaigns/GET v2-campaigns.md:
# GET /v2/campaigns
**Список магазинов пользователя**
`operationId`: getCampaigns
теги: `campaigns`, `dbs`, `express`, `fbs`, `fby`, `laas`
**Базовый URL:** `https://api.partner.market.yandex.ru`
**Полный путь:** `GET https://api.partner.market.yandex.ru/v2/campaigns`
## Описание
Возвращает список магазинов в кабинете, для которого выдан токен ...
## Авторизация
**`x-auth-scopes`:** `all-methods`, `all-methods:read-only`, `settings-management`, ...
## Параметры
| Имя | В | Тип | Обязательный | Описание |
|---|---|---|---|---|
| `pageToken` | query | string | нет | Идентификатор страницы c результатами. ... |
| `limit` | query | integer (int32) | нет | ... |
## Ответы
#### 200 — Магазины пользователя.
- `campaigns` **(required)** — array<$ref: CampaignDTO>. Список магазинов.
- *(элементы)*
- `domain` — string. Название магазина.
- `id` — $ref: CampaignId
- `clientId` — integer (int64). Идентификатор плательщика.
- ...
- `pager` — $ref: FlippingPagerDTO
- `paging` — $ref: PackagingForwardScrollingPagerDTO
```json
{
"campaigns": [
{ "domain": "string", "id": 0, "clientId": 0,
"business": { "id": 0, "name": "string" },
"placementType": "FBS", "apiAvailability": "AVAILABLE" }
],
...
}
```MIT — делайте что хотите.
Документация принадлежит Яндексу (исходная спека — BSD-3); этот репозиторий служит лишь как конвертер формата для собственного использования.