# Публичный API Newflora

API доступен без авторизации, ключа, cookies и JavaScript. Он ищет публичные товары
с фильтрами каталога. Запрос не добавляет товары в корзину и не оформляет заказ.

- [OpenAPI](https://newflora.ru/wp-json/nf/v1/public/openapi.json): параметры, ответы и ошибки.
- [Каталог API](https://newflora.ru/.well-known/api-catalog): стандартное обнаружение API.

## Поиск товаров

`GET https://newflora.ru/wp-json/nf/v1/public/products`

Поиск красных роз до 5000 ₽:

```sh
curl -G 'https://newflora.ru/wp-json/nf/v1/public/products' \
  --data-urlencode 'filter_search=роза' \
  --data-urlencode 'color=red' \
  --data-urlencode 'price_to=5000' \
  --data-urlencode 'sorting=price_asc'
```

`filter_search` можно не указывать: работают запросы только с фильтрами.
`categoryId` — ID раздела каталога с учётом подразделов.
`sorting`: popular, new, price\_asc, price\_desc; по умолчанию `popular`.
`page`: 1–1000, по умолчанию 1.
`per_page`: 1–50, по умолчанию 20.
Поисковая строка ограничена 200 символами.

## Фильтры каталога

Разные фильтры применяются одновременно (И). Несколько вариантов одного фильтра
применяются через ИЛИ: `color=red,white` или `color[]=red&color[]=white`.
Используйте значения ниже, а не русские подписи.
Для числовых границ `*_from` и `*_to` применяется включительное сравнение.
`price_from` и `price_to` ограничивают текущую цену со скидкой в рублях;
`from` и `to` — старые равнозначные имена. Разные значения двух имён одной границы — ошибка.

### Цена

Параметры: `price_from`, `price_to` (₽).
### Цвет

Параметр: `color`.
- `red`: Красный.
- `white`: Белый.
- `black`: Черный.
- `brown`: Коричневый.
- `rainbow`: Радуга.
- `blue`: Синий.
- `yellow`: Желтый / золотой.
- `purple`: Фиолетовый.
- `orange`: Оранжевый.
- `pink`: Розовый.
- `peach`: Персиковый.
- `bordeaux`: Бордо.
- `green`: Зеленый.
- `multi`: Разноцветный.
- `coral`: Коралловый.
В интерфейсе каталога не предлагается для разделов: pot.
### Сезон

Параметр: `season`.
- `summer`: Лето.
- `winter`: Зима.
- `autumn`: Осень.
- `spring`: Весна.
- `all`: Все сезоны.
В интерфейсе каталога не предлагается для разделов: pot.
### Тип

Параметр: `type`.
- `classic`: Классика.
- `exotics`: Экзотика.
- `exclusive`: Эксклюзив.
- `dryblossoms`: Сухоцветы.
В интерфейсе каталога не предлагается для разделов: pot, belye-rozy.
### Срок жизни

Параметр: `flower-life`.
- `7`: Более 7 дней.
В интерфейсе каталога не предлагается для разделов: pot.
### Состав букетов

Параметр: `consist`.
- `mono`: Монобукет.
- `mix`: Микс букет.
В интерфейсе каталога не предлагается для разделов: rozy, pot.
### Предзаказ

Параметр: `order`. `true`, `1`, `yes`, `on` включают условие;
`false`, `0`, `no`, `off` или пустое значение отключают его.
Отключение не означает поиск только товаров без этого свойства.
### Высота букета

Параметры: `bouquet_height_from`, `bouquet_height_to` (см).
В интерфейсе каталога используется для разделов: bukety, cvety.
### Высота растения общая

Параметры: `height_with_pot_from`, `height_with_pot_to` (см).
В интерфейсе каталога используется для разделов: pot.
### Высота растения без горшка

Параметры: `height_without_pot_from`, `height_without_pot_to` (см).
В интерфейсе каталога используется для разделов: pot.
### Диаметр горшка

Параметры: `pot_diameter_num_from`, `pot_diameter_num_to` (см).
В интерфейсе каталога используется для разделов: pot.
### Полив

Параметр: `watering`.
- `often`: Часто.
- `rare`: Редко.
В интерфейсе каталога используется для разделов: pot.
### Сложность ухода

Параметр: `care_difficulty`.
- `simple`: Неприхотливый.
- `difficult`: Требовательный.
В интерфейсе каталога используется для разделов: pot.
### Необходимость в освещении

Параметр: `lighting`.
- `high`: Требовательное.
- `small`: Не требовательное.
В интерфейсе каталога используется для разделов: pot.
### Тип

Параметр: `plant_type`.
- `palm`: Пальма.
- `flowers`: Цветущее.
- `ficus`: Фикусы.
- `cacti`: Кактусы.
- `tropical`: Тропические.
В интерфейсе каталога используется для разделов: pot.
### Выбор знаменитостей

Параметр: `celebrities`. `true`, `1`, `yes`, `on` включают условие;
`false`, `0`, `no`, `off` или пустое значение отключают его.
Отключение не означает поиск только товаров без этого свойства.

## Ответ

JSON содержит `items`, `total`, `page`, `per_page` и `next`.
`total` — количество совпадений. `next` — абсолютная ссылка на следующую страницу
с текущими фильтрами либо `null`; после страницы 1000 продолжение недоступно.
Если совпадений нет или страница исчерпана, `items` — пустой массив.

Товар содержит `id`, `title`, `url`, `image_url`, `currency`, `price`, `min_price`,
`min_order_quantity`, `is_preorder`. Цены — целые рубли, валюта `RUB`.
`image_url` может быть `null`. Для свободной цены `price=null`, а `min_price` —
минимальная цена; для фиксированной цены `min_price=null`.
Персональные и сессионные акции не учитываются. Предзаказ не подтверждает складское
наличие и не обещает доставку к определённой дате.

Полное описание читайте по `url` с `Accept: text/markdown` на поддерживаемых страницах.
Поиск не включает рекомендации вне результатов и не резервирует товары.
Расчёта доставки в этом API пока нет.

## Ошибки и наблюдение

Некорректные параметры дают HTTP 400 и JSON с `code`, `message`, `data.status`,
`data.params`. Недоступность поиска даёт 503; ошибка формирования ответа — 500.
Неизвестные фильтры, значения, вложенные массивы и обратные диапазоны отклоняются.
Параметры WP_Query, `_fields`, `_embed` и JSONP не поддерживаются.
HEAD возвращает заголовки без тела. Другие методы поиска не выполняют изменений.

Анонимные GET поиска, включая ошибки, сохраняются в журнале запросов на семь дней
с ограниченным снимком query, сырых байтов тела, UA, IP, referrer и признаками сессии.
HEAD и чтение этих документов не записываются этим сборщиком.
