Выполняет поиск услуг с поддержкой текстового поиска, фильтрации по категории, цене и одному географическому режиму.
Особенности:
qнеобязателен; пустое значение считается отсутствующимcategory_idвключает выбранную категорию и все её подкатегории; для конечной категории ищется только она- одновременно разрешён только один географический режим: точка, адрес, метро или районы
- режим по профилю: если георежим не передан, используется геолокация профиля и сортировка от ближайших
- режим точки:
lat+lon+radius_m; услуги фильтруются по радиусу и сортируются согласноsort - одна услуга может иметь до трёх локаций:
AT_MASTER_PLACE,IN_SALON,CLIENT_PLACE; наружу всегда возвращается один логический результат с обычным числовымid - для
AT_MASTER_PLACEиIN_SALONв режиме точки применяется переданныйradius_mв метрах (100..10000) - для
CLIENT_PLACEточка пользователя должна находиться внутри собственногоradius_kmуслуги (1,5,10или20км); переданныйradius_mэту локацию не ограничивает - варианты одной услуги устраняются по логическому ID; поля
address,distance_meters,service_location,salon_nameиradius_kmотносятся к выбранному варианту - при
RELEVANCE, сортировке по цене или рейтингу вариант выбирается по приоритетуAT_MASTER_PLACE→IN_SALON→CLIENT_PLACE; приDISTANCE_ASC/DISTANCE_DESCсначала учитывается расстояние в выбранном направлении, затем приоритет - режим адреса:
address; адрес геокодируется, а найденная точка используется для сортировки от ближайших - режим метро:
city+ один или несколько параметровmetro;metro_minutesнеобязателен - если
metro_minutesпередан, вокруг каждой станции применяется радиусmetro_minutes * 80метров; без него услуги только сортируются по близости - при нескольких метро расстояние услуги равно минимуму расстояний до выбранных станций; результаты объединяются без дублей
- режим районов:
city+ один или несколько параметровdistrict - для метро и районов можно передать любое количество значений, в том числе все значения города
- несуществующая станция, район или город не игнорируются: возвращается
400 invalid_body - для режима адреса, метро и профиля сортировка по расстоянию выполняется от ближайших; для районов
distance_metersравенnull - несколько метро поддерживают только сортировки
RELEVANCEиDISTANCE_ASC - для поиска по районам обязателен
city; сортировкиDISTANCE_ASCиDISTANCE_DESCнедоступны - районная принадлежность вычисляется по полигонам и хранится во внутреннем
districtIds - в режиме районов
distance_metersравенnull - если гео профиля отсутствует и явный георежим не передан, возвращается
400 invalid_body price_toдолжен быть больше или равенprice_from- требуется JWT
- при превышении лимита поиска возвращается
429 too_many_requestсdata.TTL
Security
bearerAuth or jwtCookie
- https://felmee.comhttps://felmee.com/api/search/services
- http://localhost:8080http://localhost:8080/api/search/services
curl -i -X GET \
'https://felmee.com/api/search/services?q=massage&category_id=20&lat=53.91&lon=27.53&radius_m=5000&address=%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0%2C%20%D0%A2%D0%B2%D0%B5%D1%80%D1%81%D0%BA%D0%B0%D1%8F%20%D1%83%D0%BB%D0%B8%D1%86%D0%B0%2C%2010&city=%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&metro=%D0%9A%D1%83%D1%80%D1%81%D0%BA%D0%B0%D1%8F%2C%D0%91%D0%B0%D1%83%D0%BC%D0%B0%D0%BD%D1%81%D0%BA%D0%B0%D1%8F&metro_minutes=15&district=%D0%90%D1%80%D0%B1%D0%B0%D1%82%2C%D0%A5%D0%B0%D0%BC%D0%BE%D0%B2%D0%BD%D0%B8%D0%BA%D0%B8&price_from=2000&price_to=7000&sort=PRICE_DESC&offset=2&limit=8' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'Услуги успешно найдены
Устаревший camelCase-alias поля error_code; при ошибке оба поля содержат одинаковое значение.
Код ошибки. Для успешных ответов всегда null.
Enum:"invalid_body""unauthorized""not_found""conflict""object_modified_by_another_thread""action_too_late""too_many_request""code_is_gone""forbidden""user_blocked"
Response
{ "success": true, "message": "Services retrieved successfully", "error_code": null, "data": { "items": [ … ], "has_more": true } }