# Время Экономить > Поисковик по полкам офлайн-магазинов России: где рядом есть нужная вещь, по какой цене и как далеко. > Без доставки и оплаты на сайте — покупатель звонит или приезжает в магазин и покупает сам, сегодня. > Сейчас подключаем магазины (первый город — Липецк); пока в выдаче примеры товаров с примерной ценой. Комиссии нет: сервис не участвует в сделке. Цены — в рублях. Интерфейс и данные — на русском. ## Покупателям и их агентам — без ключа - [Поиск](https://vremyaeconomit.ru/api/search?q=%D0%BA%D0%B0%D1%88%D0%BF%D0%BE): `GET /api/search?q=…` — `offers` (предложения магазинов: появятся по мере подключения) и `examples` (примеры: типичный товар и примерная цена — наша оценка; НЕ предложение магазина, не выдавайте их за наличие в магазине). - [Пример товара](https://vremyaeconomit.ru/api/examples/540aeccbc301): `GET /api/examples/{id}` — характеристики, раздел каталога, похожие примеры. - [Каталог](https://vremyaeconomit.ru/api/categories): `GET /api/categories` — дерево разделов; `GET /api/categories/{slug}` — примеры раздела. - [Населённые пункты](https://vremyaeconomit.ru/api/geo/settlements?q=%D0%BB%D0%B8%D0%BF%D0%B5%D1%86%D0%BA): все населённые пункты РФ по названию; `GET /api/geo/nearest?lat=…&lon=…` — ближайший к точке. - [OpenAPI](https://vremyaeconomit.ru/api/openapi.json) — описание всех ручек (JSON) - MCP-сервер: `https://vremyaeconomit.ru/api/mcp` (Streamable HTTP, без состояния). Инструменты без ключа — `search_nearby`, `find_place`; продавцу — `seller_*` с заголовком `Authorization: Bearer ve_live_…`. ## Продавцам и их агентам — по ключу Кабинет продавца откроется скоро: ключ выдаёт кнопка «Подключить агента». Заголовок — `Authorization: Bearer ve_live_…`. Песочный ключ `ve_test_…` проверяет всё, но ничего не записывает. - `GET /api/v1/me` — чей каталог, права ключа, сколько товаров и точек продаж. - `GET /api/v1/stores` — точки продаж продавца. - `POST /api/v1/products/batch` — до 1000 товаров за раз. `external_id` (артикул) — ключ: повтор пакета ничего не дублирует. `dry_run: true` — только проверить. `mode: "sync"` — ещё и скрыть товары, которых нет в пакете. Поля товара: `external_id`, `name`, `price`, `unit`, `description`, `category`, `barcode`, `availability` или `quantity`, `photos`, `store` (если точек несколько), `attributes` — характеристики для покупателя: `{"Цвет": "красный", "Бренд": "…"}` (до 30; без закупочных цен и служебных кодов — их увидят покупатели). Поле, которого у товара нет (или `null`), не меняем: для ежедневных цен и остатков хватит `external_id`, `name`, `price` и `quantity`; пустой штрихкод прежний не стирает. Артикула ещё нет в каталоге — ищем товар, заведённый без артикула: по штрихкоду, затем по названию. Ошибки — по каждому товару: `field`, `code`, `message` (что не так и как исправить); исправьте и пришлите только исправленные. В режиме `sync` пакет публикуется только без ошибок (сначала проверьте с `dry_run: true`); `sync` — для каталогов до 1000 товаров (весь каталог одним пакетом). Каталог больше — пакетами `upsert`, а снятое с продажи — `availability: "out"`. - Фото по ссылкам: `photos` — до 10 публичных ссылок http(s) на JPEG/PNG/WebP до 15 МБ; скачиваем в фоне после публикации (`photos_queued` в ответе), итог и ошибки — `photos` и `photo_job` в `GET /api/v1/products`. Те же ссылки повторно не скачиваем; фото, загруженные файлами, ссылки не заменяют. - `POST /api/v1/products/photos?external_id=…` — фото товара файлами (multipart, поле `files`, до 10, JPEG/PNG/WebP до 15 МБ); заменяют прежние. Метаданные удаляются, храним только WebP. Первые 30 фото нового магазина и фото из рискованных групп (одежда с принтом, значки, флаги, книги) покупатели видят после просмотра модератором — `photos_hold` в ответе и в `GET /api/v1/products`. Фото, которое модератор скрыл (люди на фото, чужой водяной знак, не тот товар), — в `photos_hidden` с причиной: товар показывается без него, фото можно заменить. - `GET /api/v1/products?external_id=…&after_id=…&limit=…` — товары с ценой и наличием в каждой точке. - `GET /api/v1/change-sets` и `POST /api/v1/change-sets/{id}/rollback` — история пакетов и откат в один клик (ключ откатывает только свои пакеты; откат, убирающий с витрины больше 20 % каталога, — владелец в кабинете). - Предохранители: если цена изменилась в 3 и более раза или синхронизация скрывает больше 20 % каталога, пакет ждёт подтверждения владельца в кабинете (`status: pending_approval`) — это нормально, повторять не нужно. - Запрещённое (алкоголь, табак и никотин, лекарства, оружие, товары 18+, живые животные и др.) записывается в каталог, но покупатели его не видят: у товара `moderation: "rejected"`; подозрительное — `"pending"`, покажем после проверки модератором. Причина — `moderation_reason` (в ответе на пакет и в `GET /api/v1/products`), сводка — `moderation_notes`. Обходить проверку переименованием бесполезно: после отказа модератора любая правка текста товара снова идёт к нему. - Свежие цены: покупатели видят предложение, если цену и наличие подтверждали за последние 30 дней (повтор того же пакета подтверждает). Если покупатель сообщил, а модератор, уточнив в магазине, подтвердил, что цена или наличие не совпали, у предложения появляется `mismatch_id`: покупатели его не видят, пока не изменится то, что не совпало, — цена или наличие (что именно — в кабинете); остаток сам по себе и тот же пакет ещё раз не возвращают. Подробности и «Не согласен» — в кабинете владельца. - Книжный магазин: первую загрузку модератор смотрит до показа (`moderation: "pending"`, причина — «Первая загрузка книжного магазина»), дальше книги появляются сразу. - Частота: до 300 чтений и 30 пакетов в минуту на ключ; при превышении — 429 и заголовок `Retry-After`. ## Условия Пользуясь API и MCP Сервиса, вы (и программа, которая действует от вашего имени) принимаете пользовательское соглашение: https://vremyaeconomit.ru/legal/terms (раздел 9 — программы и ИИ-агенты). Продавцы и их агенты — также оферту для продавцов: https://vremyaeconomit.ru/legal/offer. Обработка данных — https://vremyaeconomit.ru/legal/privacy.