Выполняет поиск мастеров с поддержкой текстового поиска, фильтрации по категории, диапазону цен и одному географическому режиму.
Особенности:
qнеобязателен; пустое значение считается отсутствующимcategory_idвключает выбранную категорию и все её подкатегории; для конечной категории ищется только она- одновременно разрешён только один географический режим: точка, адрес, метро или районы
- режим по профилю: если георежим не передан, используется геолокация профиля и сортировка от ближайших
- режим точки:
lat+lon+radius_m; мастера фильтруются по радиусу и сортируются согласноsort - один мастер может иметь до трёх локаций:
AT_MASTER_PLACE,IN_SALON,CLIENT_PLACE; наружу всегда возвращается один результат наuser_id - для
AT_MASTER_PLACEиIN_SALONв режиме точки применяется переданныйradius_mв метрах (100..10000) - для
CLIENT_PLACEточка пользователя должна находиться внутри собственногоradius_kmмастера (1,5,10или20км); переданныйradius_mэту локацию не ограничивает - варианты одного мастера устраняются по
user_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 - несколько метро поддерживают только сортировки
RELEVANCEиDISTANCE_ASC - для поиска по районам сортировки
DISTANCE_ASCиDISTANCE_DESCнедоступны, аdistance_metersравенnull - районная принадлежность вычисляется по полигонам и хранится во внутреннем
districtIds - если гео профиля отсутствует и явный георежим не передан, возвращается
400 invalid_body - для каждого мастера возвращается ближайшая дата и все свободные часовые слоты этой даты в пределах 60 дней (сегодня и следующие 59 дней)
- часовые слоты рассчитываются по календарю мастера без привязки к длительности конкретной услуги
price_toдолжен быть больше или равенprice_from- требуется JWT
- при превышении лимита поиска возвращается
429 too_many_requestсdata.TTL
Security
bearerAuth or jwtCookie
- https://felmee.comhttps://felmee.com/api/search/masters
- http://localhost:8080http://localhost:8080/api/search/masters
curl -i -X GET \
'https://felmee.com/api/search/masters?q=hair&category_id=10&lat=53.9&lon=27.56&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=1000&price_to=6000&sort=PRICE_ASC&offset=0&limit=20' \
-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": "Masters retrieved successfully", "error_code": null, "data": { "items": [ … ], "has_more": true } }