{"openapi":"3.1.0","info":{"title":"Мына API","version":"1.0.0","description":"Партнёрское API площадки объявлений Мына. Обращение по ключу: Authorization: Bearer myna_live_…","x-description-ky":"Мына жарыялар аянтчасынын өнөктөш API. Кайрылуу ачкыч менен: Authorization: Bearer myna_live_…"},"servers":[{"url":"https://api.myna.kg","description":"Боевой адрес"}],"tags":[{"name":"listings","x-title":"Объявления","x-title-ky":"Жарыялар"},{"name":"sellers","x-title":"Продавцы и витрины","x-title-ky":"Сатуучулар жана аянтчалар"},{"name":"photos","x-title":"Фотографии","x-title-ky":"Сүрөттөр"},{"name":"batches","x-title":"Пачки","x-title-ky":"Топтомдор"},{"name":"import","x-title":"Импорт из файла","x-title-ky":"Файлдан импорт"},{"name":"ai","x-title":"Черновик с ИИ","x-title-ky":"ЖИ долбоору"},{"name":"messages","x-title":"Сообщения","x-title-ky":"Жазышуулар"},{"name":"stats","x-title":"Статистика","x-title-ky":"Статистика"},{"name":"account","x-title":"Профиль и тариф","x-title-ky":"Профиль жана тариф"},{"name":"api-keys","x-title":"Ключи API","x-title-ky":"API ачкычтары"},{"name":"catalog","x-title":"Справочники","x-title-ky":"Тизмелер"},{"name":"geo","x-title":"Адреса и карта","x-title-ky":"Даректер жана карта"}],"paths":{"/v1/me":{"get":{"operationId":"getMe","tags":["account"],"summary":"Кто я","x-summary-ky":"Мен кимминмин","description":"Человек, от имени которого работает ключ. Первый вызов любой интеграции: если он ответил 200, заголовок собран верно и ключ жив.","x-description-ky":"Ачкыч кимдин атынан иштеп жатканы. Ар кандай интеграциянын биринчи чакырыгы: 200 келсе, аталыш туура жыйналган жана ачкыч тирүү.","x-scope":"account:read","responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getMeResponse"},"example":{"user":{"id":"0f4b7e2c-9a1d-4a55-9d0e-4c1d2b3a5f60","phone":"+996700123456","email":null,"displayName":"Автосалон «Ала-Тоо»","accountType":"business","assuranceLevel":"phone_sms","actor":{"id":"0f4b7e2c-9a1d-4a55-9d0e-4c1d2b3a5f60","role":null,"displayName":"Автосалон «Ала-Тоо»"}}}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право account:read или его отобрал тариф","x-description-ky":"Ачкычка account:read укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/plans":{"get":{"operationId":"getPlans","tags":["account"],"summary":"Тариф и его пределы","x-summary-ky":"Тариф жана анын чектөөлөрү","description":"Действующая подписка и числа, по которым живёт интеграция: запросов в минуту, ключей, объявлений в одной пачке, черновиков с ИИ в сутки. Их стоит прочитать до того, как упереться в 429.","x-description-ky":"Учурдагы жазылуу жана интеграция жашаган сандар: мүнөтүнө суроо-талап, ачкыч, бир топтомдогу жарыя, суткасына ЖИ долбоору. 429га такалганга чейин окуп коюу керек.","x-scope":"account:read","parameters":[{"name":"order","in":"query","required":false,"description":"спросить состояние оплаты тарифа, а не витрину; номер вида SB_business_monthly_8f3a91c2","schema":{"description":"спросить состояние оплаты тарифа, а не витрину; номер вида SB_business_monthly_8f3a91c2","type":"string"}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getPlansResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право account:read или его отобрал тариф","x-description-ky":"Ачкычка account:read укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/api-keys":{"get":{"operationId":"listApiKeys","tags":["api-keys"],"summary":"Список ключей","x-summary-ky":"Ачкычтардын тизмеси","description":"Ключи человека вместе с тем, сколько их даёт тариф и как часто ими пользовались. Только по токену сессии: ключом ключи не читаются.","x-description-ky":"Адамдын ачкычтары, тариф канчасын берери жана канчалык колдонулганы менен бирге. Сессия токени менен гана: ачкыч менен ачкычтар окулбайт.","parameters":[{"name":"days","in":"query","required":false,"description":"глубина графика обращений","schema":{"default":14,"description":"глубина графика обращений","type":"integer","minimum":1,"maximum":90}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listApiKeysResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"issueApiKey","tags":["api-keys"],"summary":"Выдать ключ","x-summary-ky":"Ачкыч берүү","description":"Секрет приходит в ответе ОДИН раз: в базе лежит только его SHA-256, и повторно показать его нельзя технически. Не сохранил — отзови и выдай новый.","x-description-ky":"Купуя жооптo БИР жолу келет: базада анын SHA-256 гана жатат, аны кайра көрсөтүү техникалык жактан мүмкүн эмес. Сактабасаң — кайтарып алып, жаңысын бер.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/issueApiKeyRequest"},"example":{"name":"CRM агентства","scopes":["listings:read","listings:write"],"expiresInDays":365}}}},"responses":{"201":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/issueApiKeyResponse"}}}},"400":{"description":"Отказ detail: badName, badScopes","x-description-ky":"Баш тартуу detail: badName, badScopes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Отказ detail: planRequired, tooMany","x-description-ky":"Баш тартуу detail: planRequired, tooMany","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Отказ","x-description-ky":"Баш тартуу","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/api-keys/{id}":{"delete":{"operationId":"revokeApiKey","tags":["api-keys"],"summary":"Отозвать ключ","x-summary-ky":"Ачкычты кайтарып алуу","description":"Гасится немедленно: следующий же запрос этим секретом получит 401. Строка ключа остаётся — в журнале обращений должно быть видно, чей он был.","x-description-ky":"Дароо өчүрүлөт: ушул купуя менен кийинки суроо-талап 401 алат. Ачкычтын сабы калат — кайрылуулар журналында анын кимдики болгону көрүнүшү керек.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/revokeApiKeyResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Отказ","x-description-ky":"Баш тартуу","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/bootstrap":{"get":{"operationId":"getBootstrap","tags":["catalog"],"summary":"Рубрики, города и районы","x-summary-ky":"Бөлүмдөр, шаарлар жана райондор","description":"Полное дерево рубрик, список городов и районов на языке запроса. Район привязан к городу полем cityId, и слаг района уникален только внутри города: в фильтре ленты district принимается вместе с city. Поле version — отпечаток состава, а не дата: по нему видно, изменились ли справочники, и перечитывать их после каждого выката не нужно.","x-description-ky":"Толук бөлүмдөр дарагы, суроо-талап тилиндеги шаарлар жана райондор тизмеси. Район шаарга cityId талаасы аркылуу байланат, райондун слагы шаардын ичинде гана уникалдуу: тасманын чыпкасында district city менен бирге кабыл алынат. version талаасы — курамдын изи, күн эмес: ал боюнча тизмелер өзгөргөнү көрүнөт жана ар бир жаңылоодон кийин кайра окуунун кереги жок.","x-scope":"public","responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getBootstrapResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/cities":{"get":{"operationId":"getCities","tags":["catalog"],"summary":"Города","x-summary-ky":"Шаарлар","description":"Справочник городов на языке запроса: cityId объявления берётся отсюда.","x-description-ky":"Суроо-талап тилиндеги шаарлар тизмеси: жарыянын cityId ушул жерден алынат.","x-scope":"public","responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getCitiesResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/categories/{slug}/form":{"get":{"operationId":"getCategoryForm","tags":["catalog"],"summary":"Характеристики рубрики","x-summary-ky":"Бөлүмдүн мүнөздөмөлөрү","description":"Что рубрика спрашивает у объявления: типы полей, единицы, обязательность и списки опций. Ключ характеристики (key) и есть то имя, которое можно слать в attributes вместо uuid.","x-description-ky":"Бөлүм жарыядан эмнени сурайт: талаа түрлөрү, бирдиктер, милдеттүүлүгү жана варианттардын тизмеси. Мүнөздөмөнүн ачкычы (key) — attributes ичине uuid ордуна жиберсе болгон ат.","x-scope":"public","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getCategoryFormResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Отказ","x-description-ky":"Баш тартуу","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/openapi.json":{"get":{"operationId":"getOpenapi","tags":["catalog"],"summary":"Описание API (OpenAPI 3.1)","x-summary-ky":"API сүрөттөмөсү (OpenAPI 3.1)","description":"Тот же документ, из которого построен этот справочник. Postman и Insomnia строят по нему коллекцию, генераторы — клиента на любом языке.","x-description-ky":"Ушул маалымдама курулган документтин өзү. Postman жана Insomnia ал боюнча коллекция, генераторлор ар кандай тилдеги кардар курат.","x-scope":"public","responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getOpenapiResponse"}}}}}}},"/v1/geo/suggest":{"get":{"operationId":"getGeoSuggest","tags":["geo"],"summary":"Подсказки адреса","x-summary-ky":"Даректин кеңештери","description":"Улицы, дома, сёла и ориентиры по началу набранного текста, с опечатками и на двух языках: «панфи» находит «Панфилова», а кыргызское «Панфилов көчөсү» и русское «улица Панфилова» считаются одной улицей. Параметр cityId сужает поиск до города — без него «Токтогула» приводит одноимённые улицы из десяти городов сразу. Меньше трёх букв — пустой список. Не больше сорока запросов в минуту с адреса.","x-description-ky":"Терилген тексттин башталышы боюнча көчөлөр, үйлөр, айылдар жана багыттар — ката терилсе да, эки тилде: «панфи» «Панфиловду» табат, кыргызча «Панфилов көчөсү» менен орусча «улица Панфилова» бир көчө деп эсептелет. cityId параметри издөөнү шаарга чейин тарытат — ансыз «Токтогула» он шаардагы аттаташ көчөлөрдү бирден алып келет. Үч тамгадан аз болсо — бош тизме. Бир мүнөттө бир даректен кырк суроодон ашык эмес.","x-scope":"public","parameters":[{"name":"q","in":"query","required":true,"description":"набранный текст; короче трёх букв — пустой список","schema":{"type":"string","description":"набранный текст; короче трёх букв — пустой список"}},{"name":"cityId","in":"query","required":false,"description":"сузить поиск до города","schema":{"description":"сузить поиск до города","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},{"name":"lang","in":"query","required":false,"description":"язык подписей; по умолчанию — из Accept-Language","schema":{"description":"язык подписей; по умолчанию — из Accept-Language","type":"string","enum":["ru","ky"]}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getGeoSuggestResponse"},"example":{"places":[{"kind":"address","label":"Киев көчөсү, 39","hint":"Свердловский район","lat":42.8741,"lng":74.6127,"cityId":"00000000-0000-0000-0000-000000000000"}],"attribution":"© OpenStreetMap contributors"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/geo/reverse":{"get":{"operationId":"getGeoReverse","tags":["geo"],"summary":"Адрес по точке на карте","x-summary-ky":"Картадагы чекит боюнча дарек","description":"Точка превращается в подпись и в справочные идентификаторы города и района. Лестница от точного к общему: дом ближе 60 метров, иначе улица ближе 250, иначе ориентир ближе 80, иначе населённый пункт ближе 5 километров. Город и район берутся границами, а не ближайшим центром: село в двадцати километрах от Бишкека остаётся без города, и это ответ, а не отказ. place = null означает «вокруг ничего нет» — половина страны это горы. Не больше двадцати запросов в минуту с адреса.","x-description-ky":"Чекит жазууга жана шаар менен райондун идентификаторлоруна айланат. Тактан жалпыга карай тепкич: 60 метрден жакын үй, болбосо 250 метрден жакын көчө, болбосо 80 метрден жакын багыт, болбосо 5 километрден жакын калктуу конуш. Шаар менен район эң жакын борбор боюнча эмес, чек аралар боюнча алынат: Бишкектен жыйырма километр алыстагы айыл шаарсыз калат, бул баш тартуу эмес, жооп. place = null — «айланада эч нерсе жок» дегени, өлкөнүн жарымы тоо. Бир мүнөттө бир даректен жыйырма суроодон ашык эмес.","x-scope":"public","parameters":[{"name":"lat","in":"query","required":true,"description":"широта","schema":{"type":"number","description":"широта"}},{"name":"lng","in":"query","required":true,"description":"долгота","schema":{"type":"number","description":"долгота"}},{"name":"lang","in":"query","required":false,"description":"язык подписей; по умолчанию — из Accept-Language","schema":{"description":"язык подписей; по умолчанию — из Accept-Language","type":"string","enum":["ru","ky"]}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getGeoReverseResponse"},"example":{"place":{"kind":"address","label":"Чүй проспекти, 96","hint":"Свердловский район","distanceM":15,"cityId":"00000000-0000-0000-0000-000000000000","districtId":"00000000-0000-0000-0000-000000000000","city":"Бишкек","district":"Свердловский район","region":"Бишкек"},"attribution":"© OpenStreetMap contributors"}}}},"400":{"description":"Отказ detail: badPoint","x-description-ky":"Баш тартуу detail: badPoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/my/listings":{"get":{"operationId":"listMyListings","tags":["listings"],"summary":"Мои объявления","x-summary-ky":"Менин жарыяларым","description":"Вкладки те же, что в кабинете: активные, на проверке, отклонённые, истёкшие, проданные, снятые, черновики. Незнакомое значение tab не роняет запрос — берётся вкладка по умолчанию. branch=resume отдаёт только живые резюме короткой карточкой (id, shortId, title, category) — для выбора резюме в отклике.","x-description-ky":"Кыстырмалар кабинеттегидей: активдүү, текшерүүдө, четке кагылган, мөөнөтү өткөн, сатылган, алынган, долбоорлор. Тааныш эмес tab суроо-талапты жыкпайт — демейки кыстырма алынат. branch=resume жандуу резюмелерди гана кыска карточка менен берет (id, shortId, title, category) — кайрылууда резюме тандоо үчүн.","x-scope":"listings:read","parameters":[{"name":"tab","in":"query","required":false,"schema":{"default":"active","type":"string","enum":["active","pending","rejected","expired","sold","archived","draft"]}},{"name":"branch","in":"query","required":false,"schema":{"type":"string","enum":["resume"]}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listMyListingsResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право listings:read или его отобрал тариф","x-description-ky":"Ачкычка listings:read укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/my/listings/{id}":{"get":{"operationId":"getMyListing","tags":["listings"],"summary":"Своё объявление целиком","x-summary-ky":"Өз жарыям толугу менен","description":"Всё, чем объявление можно пересобрать: идентификаторы рубрики, города, района и характеристик, цена сомами и тыйынами, снимки. Значения характеристик приходят в том же виде, в каком их принимает PATCH.","x-description-ky":"Жарыяны кайра чогултуучу нерселердин баары: бөлүмдүн, шаардын, райондун жана мүнөздөмөлөрдүн идентификаторлору, сом жана тыйын менен баа, сүрөттөр. Мүнөздөмөлөрдүн маанилери PATCH кабыл алган түрдө келет.","x-scope":"listings:read","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getMyListingResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право listings:read или его отобрал тариф","x-description-ky":"Ачкычка listings:read укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Отказ","x-description-ky":"Баш тартуу","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/listings":{"post":{"operationId":"createListing","tags":["listings"],"summary":"Создать объявление","x-summary-ky":"Жарыя түзүү","description":"По умолчанию создаётся черновик: чужая система ошибается в рубрике и цене чаще человека. Публикация — это intent: \"publish\" или отдельное действие publish. Проверки те же, что у формы на сайте: квота тарифа, стоп-лист, обязательные характеристики.","x-description-ky":"Демейки боюнча долбоор түзүлөт: башка система бөлүмдө жана баада адамга караганда көп жаңылат. Жарыялоо — бул intent: \"publish\" же өзүнчө publish аракети. Текшерүүлөр сайттагы форма менен бирдей: тарифтин квотасы, токтотуу тизмеси, милдеттүү мүнөздөмөлөр.","x-scope":"listings:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createListingRequest"},"example":{"categorySlug":"phones","title":"iPhone 13 128 ГБ","description":"Состояние отличное, чек и коробка.","price":"38000","cityId":"00000000-0000-0000-0000-000000000000","condition":"used","attributes":{"brand":"apple","memory":"128"},"photoUrls":["https://example.com/iphone-1.jpg"],"intent":"draft"}}}},"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/createListingResponse"},"example":{"listingId":"9c1e…","shortId":"BSH1005","status":"draft"}}}},"400":{"description":"Отказ detail: badBody, categoryUnknown, categoryProhibited, categoryBusinessOnly","x-description-ky":"Баш тартуу detail: badBody, categoryUnknown, categoryProhibited, categoryBusinessOnly","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Отказ detail: limitReached","x-description-ky":"Баш тартуу detail: limitReached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/listings/{id}":{"patch":{"operationId":"updateListing","tags":["listings"],"summary":"Изменить объявление","x-summary-ky":"Жарыяны өзгөртүү","description":"Присланные поля кладутся поверх сохранённых: не присланное остаётся как было. Черновик правится черновиком, живое объявление — публикацией, поэтому правка цены не снимает объявление из ленты.","x-description-ky":"Жиберилген талаалар сакталгандардын үстүнө коюлат: жиберилбегени мурдакыдай калат. Долбоор долбоор бойдон, тирүү жарыя жарыялоо менен оңдолот, ошондуктан бааны өзгөртүү жарыяны тасмадан алып салбайт.","x-scope":"listings:write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/updateListingRequest"},"example":{"price":"35000","isNegotiable":true}}}},"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/updateListingResponse"}}}},"400":{"description":"Отказ detail: badBody, statusNotEditable, liveDraft","x-description-ky":"Баш тартуу detail: badBody, statusNotEditable, liveDraft","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Отказ detail: limitReached","x-description-ky":"Баш тартуу detail: limitReached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Отказ","x-description-ky":"Баш тартуу","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/listings/{id}/{action}":{"post":{"operationId":"listingAction","tags":["listings"],"summary":"Опубликовать, снять, продлить, продано, удалить","x-summary-ky":"Жарыялоо, алып салуу, узартуу, сатылды, өчүрүү","description":"publish — это полноценная подача черновика: те же проверки, что у формы. Остальные действия меняют состояние объявления и проверяют, что оно вообще допускает такой переход.","x-description-ky":"publish — бул долбоорду толук берүү: формадагыдай текшерүүлөр. Калган аракеттер жарыянын абалын өзгөртүп, ал мындай өтүүгө жол берерин текшерет.","x-scope":"listings:write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","enum":["publish","archive","renew","sold","delete"]}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listingActionResponse"}}}},"400":{"description":"Отказ detail: statusNotAllowed, alreadySold","x-description-ky":"Баш тартуу detail: statusNotAllowed, alreadySold","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Отказ detail: limitReached","x-description-ky":"Баш тартуу detail: limitReached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Отказ","x-description-ky":"Баш тартуу","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/sellers/{id}":{"get":{"operationId":"getSeller","tags":["sellers"],"summary":"Продавец и его витрина","x-summary-ky":"Сатуучу жана анын аянтчасы","description":"Кто продаёт: имя, стаж, рейтинг, уровень проверки, отзывы, объявления и оформление витрины — контакты, часы работы, соцсети, галерея. Витрина приходит уже отфильтрованной по тарифу продавца: то, за что он не платит, приезжает пустым.","x-description-ky":"Ким сатат: аты, тажрыйбасы, рейтинги, текшерүү деңгээли, пикирлер, жарыялары жана аянтчанын жасалгасы — байланыштар, иш убактысы, социалдык тармактар, галерея. Аянтча сатуучунун тарифи боюнча чыпкаланып келет: төлөнбөгөнү бош келет.","x-scope":"listings:read","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getSellerResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право listings:read или его отобрал тариф","x-description-ky":"Ачкычка listings:read укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/showcase/{slug}":{"get":{"operationId":"resolveShowcaseSlug","tags":["sellers"],"summary":"Чей это адрес витрины","x-summary-ky":"Бул кимдин аянтча дареги","description":"Превращает адрес myna.kg/<slug> в идентификатор продавца. Прежнее имя витрины отвечает вместе с redirectTo — новым именем: визитки уже напечатаны, и переименование не должно стоить продавцу входящих.","x-description-ky":"myna.kg/<slug> дарегин сатуучунун идентификаторуна айландырат. Аянтчанын мурунку аты redirectTo — жаңы аты менен кошо жооп берет: визиткалар басылып калган, кайра аталуу сатуучуга кайрылууларды жоготпошу керек.","x-scope":"listings:read","parameters":[{"name":"slug","in":"path","required":true,"description":"имя из адреса myna.kg/<slug>","schema":{"type":"string","description":"имя из адреса myna.kg/<slug>"}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/resolveShowcaseSlugResponse"},"example":{"userId":"0f4b7e2c-9a1d-4a55-9d0e-4c1d2b3a5f60","redirectTo":null}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право listings:read или его отобрал тариф","x-description-ky":"Ачкычка listings:read укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Отказ detail: notFound","x-description-ky":"Баш тартуу detail: notFound","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/listings/{shortId}/seller-listings":{"get":{"operationId":"getSellerListings","tags":["sellers"],"summary":"Другие объявления продавца","x-summary-ky":"Сатуучунун башка жарыялары","description":"Восемь других живых объявлений автора этого объявления, само оно из списка исключено. Спрашивать стоит тогда, когда карточка вернула ownListings = true: на таком тарифе внизу страницы стоит этот блок, а не похожие объявления конкурентов.","x-description-ky":"Ушул жарыянын авторунун башка сегиз тирүү жарыясы, өзү тизмеден чыгарылган. Карточка ownListings = true кайтарганда суроо керек: мындай тарифте барактын ылдый жагында атаандаштардын окшош жарыялары эмес, ушул блок турат.","x-scope":"public","parameters":[{"name":"shortId","in":"path","required":true,"description":"короткий код объявления, не uuid","schema":{"type":"string","description":"короткий код объявления, не uuid"}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getSellerListingsResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/uploads":{"post":{"operationId":"uploadPhoto","tags":["photos"],"summary":"Загрузить снимок","x-summary-ky":"Сүрөт жүктөө","description":"Один снимок за вызов, не больше 8 МБ. Ответ кладётся в photos при создании или правке объявления.","x-description-ky":"Бир чакырыкка бир сүрөт, 8 МБдан ашпайт. Жооп жарыя түзүүдө же оңдоодо photos ичине коюлат.","x-scope":"listings:write","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/uploadPhotoRequest"}}}},"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/uploadPhotoResponse"}}}},"400":{"description":"Отказ detail: photoMissing, photoFormat, photoTooBig, photoUpload","x-description-ky":"Баш тартуу detail: photoMissing, photoFormat, photoTooBig, photoUpload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право listings:write или его отобрал тариф","x-description-ky":"Ачкычка listings:write укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/uploads/url":{"post":{"operationId":"uploadPhotoByUrl","tags":["photos"],"summary":"Снимок по ссылке","x-summary-ky":"Шилтеме боюнча сүрөт","description":"Снимок, который уже лежит в каталоге интеграции: сервер скачает его сам. Только http и https, не приватные адреса, без переадресаций, не больше 8 МБ и не дольше 15 секунд.","x-description-ky":"Интеграциянын каталогунда жаткан сүрөт: сервер аны өзү жүктөп алат. http жана https гана, жеке даректер эмес, багыттоосуз, 8 МБдан жана 15 секунддан ашпайт.","x-scope":"listings:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/uploadPhotoByUrlRequest"},"example":{"url":"https://example.com/photo.jpg"}}}},"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/uploadPhotoByUrlResponse"}}}},"400":{"description":"Отказ detail: urlMissing, badUrl, privateAddress, redirect, http, notAnImage, tooBig, timeout, network, photoUpload","x-description-ky":"Баш тартуу detail: urlMissing, badUrl, privateAddress, redirect, http, notAnImage, tooBig, timeout, network, photoUpload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право listings:write или его отобрал тариф","x-description-ky":"Ачкычка listings:write укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/listings/batches":{"post":{"operationId":"createBatch","tags":["batches"],"summary":"Отправить пачку объявлений","x-summary-ky":"Жарыялар топтомун жөнөтүү","description":"Ответ 202 приходит сразу: объявлений ещё нет, есть номер пачки. Сколько позиций можно за раз, говорит limits.bulkCreate из GET /v1/plans.","x-description-ky":"202 жообу дароо келет: жарыялар али жок, топтомдун номери бар. Бир жолу канча позиция болорун GET /v1/plans ичиндеги limits.bulkCreate айтат.","x-scope":"listings:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createBatchRequest"}}}},"responses":{"202":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/createBatchResponse"}}}},"400":{"description":"Отказ detail: itemsMissing, empty, badItem","x-description-ky":"Баш тартуу detail: itemsMissing, empty, badItem","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Отказ detail: planRequired, tooMany","x-description-ky":"Баш тартуу detail: planRequired, tooMany","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Отказ","x-description-ky":"Баш тартуу","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/listings/batches/{id}":{"get":{"operationId":"getBatch","tags":["batches"],"summary":"Отчёт по пачке","x-summary-ky":"Топтом боюнча отчёт","description":"Состояние пачки и каждой позиции. Опрашивать имеет смысл, пока status равен queued или running; done означает, что все позиции дошли до конца — с ошибками или без.","x-description-ky":"Топтомдун жана ар бир позициянын абалы. status queued же running болгончо суроо мааниси бар; done бардык позициялар аягына жеткенин билдирет — ката менен же катасыз.","x-scope":"listings:read","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getBatchResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право listings:read или его отобрал тариф","x-description-ky":"Ачкычка listings:read укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Отказ","x-description-ky":"Баш тартуу","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/listings/import":{"post":{"operationId":"importListings","tags":["import"],"summary":"Импорт объявлений из файла","x-summary-ky":"Файлдан жарыяларды импорттоо","description":"CSV, XLSX, XML (YML), JSON или свободный текст. Формат определяется по расширению и содержимому, столбцы — по заголовкам; непонятный заголовок разбирает модель. Ответ говорит, как поняты столбцы и какие строки отброшены, — это стоит прочитать до того, как появятся полсотни неверных черновиков.","x-description-ky":"CSV, XLSX, XML (YML), JSON же эркин текст. Формат кеңейтүү жана мазмун боюнча, тилкелер аталыштар боюнча аныкталат; түшүнүксүз аталышты модель талдайт. Жооп тилкелер кандай түшүнүлгөнүн жана кайсы саптар ташталганын айтат — элүү туура эмес долбоор пайда болгонго чейин окуу керек.","x-scope":"listings:write","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/importListingsRequest"}}}},"responses":{"202":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/importListingsResponse"}}}},"400":{"description":"Отказ detail: fileMissing, notMultipart, tooBig, unknownFormat, empty, tooManyRows, unreadable","x-description-ky":"Баш тартуу detail: fileMissing, notMultipart, tooBig, unknownFormat, empty, tooManyRows, unreadable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Отказ detail: planRequired, tooMany","x-description-ky":"Баш тартуу detail: planRequired, tooMany","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Отказ detail: importDisabled","x-description-ky":"Баш тартуу detail: importDisabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/ai/listing-draft":{"post":{"operationId":"draftListingWithAi","tags":["ai"],"summary":"Собрать черновик по подсказке и фото","x-summary-ky":"Кеңеш жана сүрөт боюнча долбоор чогултуу","description":"Модель выбирает рубрику из дерева и заполняет заголовок, описание, состояние и характеристики. Цена сверяется с рынком площадки: вышедшая за разумные границы возвращается как null с пояснением в note. Суточный предел — limits.aiDrafts из GET /v1/plans.","x-description-ky":"Модель бөлүмдү дарактан тандап, аталышты, сүрөттөмөнү, абалын жана мүнөздөмөлөрдү толтурат. Баа аянтчанын рыногу менен салыштырылат: акылга сыярлык чектен чыкканы note түшүндүрмөсү менен null болуп кайтат. Суткалык чеги — GET /v1/plans ичиндеги limits.aiDrafts.","x-scope":"listings:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/draftListingWithAiRequest"},"example":{"hint":"Продаю Camry 2015, автомат, 180 тысяч пробег","photoUrls":[]}}}},"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/draftListingWithAiResponse"}}}},"400":{"description":"Отказ detail: hintOrPhotoRequired, unclear","x-description-ky":"Баш тартуу detail: hintOrPhotoRequired, unclear","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Отказ detail: planRequired","x-description-ky":"Баш тартуу detail: planRequired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Отказ detail: aiDisabled","x-description-ky":"Баш тартуу detail: aiDisabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Отказ detail: quota, rateLimited","x-description-ky":"Баш тартуу detail: quota, rateLimited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/conversations":{"get":{"operationId":"listConversations","tags":["messages"],"summary":"Список переписок","x-summary-ky":"Жазышуулардын тизмеси","description":"Двумя списками, а не одним: «покупаю» и «продаю» — разные роли, и общий items их бы схлопнул. Собеседник здесь без id: его отдаёт только карточка переписки.","x-description-ky":"Бир эмес, эки тизме менен: «сатып алам» жана «сатам» — ар башка ролдор, жалпы items аларды бириктирип салмак. Маектеш бул жерде id-сиз: аны жазышуунун картасы гана берет.","x-scope":"messages:read","parameters":[{"name":"archived","in":"query","required":false,"description":"'1' — архив","schema":{"description":"'1' — архив","type":"string"}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listConversationsResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право messages:read или его отобрал тариф","x-description-ky":"Ачкычка messages:read укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/conversations/{id}":{"get":{"operationId":"getConversation","tags":["messages"],"summary":"Переписка целиком","x-summary-ky":"Жазышуу толугу менен","description":"Сообщения и то, о чём они: объявление, собеседник, взаимные блокировки. Чтение переписки помечает её прочитанной — отдельного действия «прочитано» нет ни на сайте, ни здесь.","x-description-ky":"Билдирүүлөр жана алар эмне жөнүндө экени: жарыя, маектеш, өз ара бөгөттөөлөр. Жазышууну окуу аны окулду деп белгилейт — «окулду» деген өзүнчө аракет сайтта да, бул жерде да жок.","x-scope":"messages:read","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getConversationResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право messages:read или его отобрал тариф","x-description-ky":"Ачкычка messages:read укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Отказ","x-description-ky":"Баш тартуу","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"sendMessage","tags":["messages"],"summary":"Ответить в переписке","x-summary-ky":"Жазышууга жооп берүү","description":"Идёт через тот же фильтр опасных сообщений, что и сайт: просьбу о предоплате не доставят и по ключу. status = blocked означает, что сообщение сохранено, но собеседнику не показано. При id = new предмет задаётся listingId (разговор о вещи) либо sellerId (разговор с витрины продавца).","x-description-ky":"Сайттагыдай эле кооптуу билдирүүлөрдүн чыпкасы аркылуу өтөт: алдын ала төлөм суроосу ачкыч менен да жеткирилбейт. status = blocked билдирүү сакталганын, бирок маектешке көрсөтүлбөгөнүн билдирет. id = new болгондо предмет listingId (буюм жөнүндө) же sellerId (сатуучунун витринасынан) менен берилет.","x-scope":"messages:write","parameters":[{"name":"id","in":"path","required":true,"description":"uuid переписки либо литерал 'new'","schema":{"type":"string","description":"uuid переписки либо литерал 'new'"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/sendMessageRequest"}}}},"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/sendMessageResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право messages:write или его отобрал тариф","x-description-ky":"Ачкычка messages:write укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/analytics":{"get":{"operationId":"getAnalytics","tags":["stats"],"summary":"Просмотры, обращения, сравнение с рынком","x-summary-ky":"Көрүүлөр, кайрылуулар, рынок менен салыштыруу","description":"Считается теми же функциями, что и кабинет: повторять расчёт у себя значило бы завести вторую медиану того же рынка. Поле analytics приходит NULL, если тариф не даёт расширенной статистики, — тогда смотри upgrade.","x-description-ky":"Кабинет менен бирдей функциялар эсептейт: эсепти өзүңдө кайталоо ошол эле рыноктун экинчи медианасын түзмөк. Тариф кеңейтилген статистиканы бербесе, analytics талаасы NULL келет — анда upgrade карап көр.","x-scope":"stats:read","parameters":[{"name":"days","in":"query","required":false,"description":"глубина отчёта в сутках","schema":{"description":"глубина отчёта в сутках","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}],"responses":{"200":{"description":"Успех","x-description-ky":"Ийгилик","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getAnalyticsResponse"}}}},"401":{"description":"Токена нет, он истёк или отозван","x-description-ky":"Токен жок, мөөнөтү бүткөн же кайтарылып алынган","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Ключу не выдано право stats:read или его отобрал тариф","x-description-ky":"Ачкычка stats:read укугу берилген эмес же аны тариф алып койгон","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Превышен предел запросов ключа в минуту","x-description-ky":"Ачкычтын мүнөттүк чеги ашып кетти","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}}},"components":{"schemas":{"Error":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"error":{"type":"string","enum":["badRequest","unauthorized","forbidden","notFound","conflict","rateLimited","server"]},"detail":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["error","detail"],"additionalProperties":false,"description":"Общий конверт отказа: код в error, уточнение машинным словом в detail","x-description-ky":"Жалпы баш тартуу каты: код error ичинде, машиналык тактоо detail ичинде"},"getMeResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"NULL у вошедшего через Google или Apple"},"email":{"anyOf":[{"type":"string"},{"type":"null"}]},"displayName":{"type":"string"},"accountType":{"type":"string","enum":["private","business"]},"assuranceLevel":{"type":"string","enum":["none","email","phone_provider","phone_sms"]},"actor":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"role":{"anyOf":[{"type":"string","enum":["admin","manager","editor"]},{"type":"null"}]},"displayName":{"type":"string"}},"required":["id","role","displayName"],"additionalProperties":false}},"required":["id","phone","email","displayName","accountType","assuranceLevel","actor"],"additionalProperties":false},"unread":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"непрочитанных сообщений — значок на вкладке «Сообщения»"}},"required":["user","unread"],"additionalProperties":false},"getPlansResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"plans":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"audience":{"type":"string","enum":["individual","business"]},"isDefault":{"type":"boolean"},"isFree":{"type":"boolean"},"isCurrent":{"type":"boolean"},"priceMonthlyTyiyn":{"anyOf":[{"type":"string","pattern":"^\\d+$","description":"деньги в тыйынах строкой: bigint не переживает JSON, double теряет точность"},{"type":"null"}]},"priceYearlyTyiyn":{"anyOf":[{"type":"string","pattern":"^\\d+$","description":"деньги в тыйынах строкой: bigint не переживает JSON, double теряет точность"},{"type":"null"}]}},"required":["code","name","description","audience","isDefault","isFree","isCurrent","priceMonthlyTyiyn","priceYearlyTyiyn"],"additionalProperties":false}},"limits":{"type":"object","properties":{"apiRate":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"запросов в минуту на один ключ"},"apiKeys":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"живых ключей на человека"},"bulkCreate":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"объявлений в одной пачке или импорте"},"aiDrafts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"черновиков с ИИ в сутки"}},"required":["apiRate","apiKeys","bulkCreate","aiDrafts"],"additionalProperties":false},"subscription":{"anyOf":[{"type":"object","properties":{"planCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"planName":{"anyOf":[{"type":"string"},{"type":"null"}]},"period":{"type":"string","enum":["monthly","yearly"]},"status":{"type":"string"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"endsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"autoRenew":{"type":"boolean"}},"required":["planCode","planName","period","status","startsAt","endsAt","autoRenew"],"additionalProperties":false},{"type":"null"}]}},"required":["plans","limits","subscription"],"additionalProperties":false},"listApiKeysResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","description":"как человек назвал ключ: «CRM агентства»"},"prefix":{"type":"string","description":"«myna_live_ab12» — узнать ключ в списке, не раскрывая его"},"scopes":{"type":"array","items":{"type":"string","enum":["listings:read","listings:write","messages:read","messages:write","stats:read","account:read"]}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"NULL — бессрочный"},"revokedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"не NULL — ключ погашен и больше не пускает"}},"required":["id","name","prefix","scopes","createdAt","lastUsedAt","expiresAt","revokedAt"],"additionalProperties":false}},"days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"usage":{"type":"object","propertyNames":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"additionalProperties":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","description":"сутки по Asia/Bishkek, YYYY-MM-DD"},"requests":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"rejected":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"сколько ушло с 403 и 429"}},"required":["day","requests","rejected"],"additionalProperties":false}},"description":"по живым ключам: id ключа → дни"},"plan":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"allowed":{"type":"boolean","description":"тариф даёт ключи вообще"},"keys":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"ratePerMinute":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"canIssue":{"type":"boolean","description":"место под ещё один ключ есть"}},"required":["code","name","allowed","keys","ratePerMinute","canIssue"],"additionalProperties":false},"scopes":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","enum":["listings:read","listings:write","messages:read","messages:write","stats:read","account:read"]},"title":{"type":"string"},"isDefault":{"type":"boolean"}},"required":["scope","title","isDefault"],"additionalProperties":false}}},"required":["keys","days","usage","plan","scopes"],"additionalProperties":false},"issueApiKeyRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","maxLength":64},"scopes":{"minItems":1,"type":"array","items":{"type":"string","enum":["listings:read","listings:write","messages:read","messages:write","stats:read","account:read"]}},"expiresInDays":{"description":"NULL — бессрочный","anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["name","scopes"]},"issueApiKeyResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"key":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","description":"как человек назвал ключ: «CRM агентства»"},"prefix":{"type":"string","description":"«myna_live_ab12» — узнать ключ в списке, не раскрывая его"},"scopes":{"type":"array","items":{"type":"string","enum":["listings:read","listings:write","messages:read","messages:write","stats:read","account:read"]}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"NULL — бессрочный"},"revokedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"не NULL — ключ погашен и больше не пускает"}},"required":["id","name","prefix","scopes","createdAt","lastUsedAt","expiresAt","revokedAt"],"additionalProperties":false},"secret":{"type":"string","description":"myna_live_<43 знака base64url>; больше нигде не появится"}},"required":["key","secret"],"additionalProperties":false},"revokeApiKeyResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"done":{"type":"boolean","const":true}},"required":["done"],"additionalProperties":false},"getBootstrapResponse__schema0":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"},"lifetimeDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"selectable":{"type":"boolean","description":"лист дерева: подавать можно только в него"},"children":{"type":"array","items":{"$ref":"#/components/schemas/getBootstrapResponse__schema0"}}},"required":["id","slug","name","lifetimeDays","selectable","children"],"additionalProperties":false},"getBootstrapResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"version":{"type":"string"},"categories":{"type":"array","items":{"$ref":"#/components/schemas/getBootstrapResponse__schema0"}},"cities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}]},"lng":{"anyOf":[{"type":"number"},{"type":"null"}]},"isMajor":{"type":"boolean"}},"required":["id","slug","name","lat","lng","isMajor"],"additionalProperties":false}},"districts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"cityId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"город, к которому относится район"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","cityId","slug","name"],"additionalProperties":false}},"ipCity":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"source":{"type":"string","const":"ip"}},"required":["id","source"],"additionalProperties":false},{"type":"null"}],"description":"подсказка города по адресу обращения; null — заголовков нет или город далеко"}},"required":["version","categories","cities","districts","ipCity"],"additionalProperties":false},"getCitiesResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"cities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false}}},"required":["cities"],"additionalProperties":false},"getCategoryFormResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"category":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"},"priceMode":{"type":"string","enum":["required","optional","none"]},"listingLifetimeDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"allowsShipping":{"type":"boolean"},"pointRequired":{"type":"boolean","description":"true у недвижимости: без точки на карте не опубликовать"},"rootSlug":{"type":"string"},"parentSlug":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","slug","name","priceMode","listingLifetimeDays","allowsShipping","pointRequired","rootSlug","parentSlug"],"additionalProperties":false},"attributes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"key":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["string","int","decimal","bool","select","multiselect"]},"unit":{"anyOf":[{"type":"string"},{"type":"null"}]},"isRequired":{"type":"boolean"},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"value":{"type":"string"},"label":{"type":"string"}},"required":["id","value","label"],"additionalProperties":false}}},"required":["id","key","name","type","unit","isRequired","options"],"additionalProperties":false}}},"required":["category","attributes"],"additionalProperties":false},"getOpenapiResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"openapi":{"type":"string"},"info":{"type":"object","properties":{},"additionalProperties":{}},"paths":{"type":"object","properties":{},"additionalProperties":{}}},"required":["openapi","info","paths"],"additionalProperties":false},"getGeoSuggestResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"places":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["address","street","poi","place"],"description":"address — дом, street — улица, poi — ориентир, place — населённый пункт"},"label":{"type":"string","description":"подпись: «Киев көчөсү, 39»"},"hint":{"type":"string","description":"вторая строка: район или село; пустая, если границы нет"},"lat":{"type":"number"},"lng":{"type":"number"},"cityId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"наш город, если точка внутри его границ"}},"required":["kind","label","hint","lat","lng","cityId"],"additionalProperties":false}},"attribution":{"type":"string","description":"условие лицензии ODbL: показывать рядом с выдачей, «© OpenStreetMap contributors»"}},"required":["places","attribution"],"additionalProperties":false},"getGeoReverseResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"place":{"anyOf":[{"type":"object","properties":{"kind":{"anyOf":[{"type":"string","enum":["address","street","poi","place"],"description":"address — дом, street — улица, poi — ориентир, place — населённый пункт"},{"type":"null"}],"description":"null — вокруг ничего нет в разумном радиусе"},"label":{"type":"string","description":"готовая подпись: «Киев көчөсү, 39», «улица Панфилова», «у ЦУМа»"},"hint":{"type":"string","description":"вторая строка: район или населённый пункт"},"distanceM":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"метры до найденного объекта"},"cityId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"наш город, если точка внутри его границ"},"districtId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"city":{"type":"string"},"district":{"type":"string"},"region":{"type":"string"}},"required":["kind","label","hint","distanceM","cityId","districtId","city","district","region"],"additionalProperties":false},{"type":"null"}],"description":"null — координаты не разбираются вовсе"},"attribution":{"type":"string","description":"условие лицензии ODbL: показывать рядом с выдачей, «© OpenStreetMap contributors»"}},"required":["place","attribution"],"additionalProperties":false},"listMyListingsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"shortId":{"type":"string","description":"короткий код объявления, не uuid"},"title":{"type":"string"},"priceTyiyn":{"anyOf":[{"type":"string","pattern":"^\\d+$","description":"деньги в тыйынах строкой: bigint не переживает JSON, double теряет точность"},{"type":"null"}]},"status":{"type":"string"},"city":{"type":"string"},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"viewCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","shortId","title","priceTyiyn","status","city","image","viewCount"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"getMyListingResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"listing":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"shortId":{"type":"string","description":"короткий код объявления, не uuid"},"status":{"type":"string"},"categoryId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"categorySlug":{"type":"string"},"category":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"contentLanguage":{"type":"string","enum":["ru","ky"]},"priceTyiyn":{"anyOf":[{"type":"string","pattern":"^\\d+$","description":"деньги в тыйынах строкой: bigint не переживает JSON, double теряет точность"},{"type":"null"}]},"price":{"type":"string","description":"те же деньги сомами — их и возвращают в PATCH"},"isNegotiable":{"type":"boolean"},"condition":{"anyOf":[{"type":"string","enum":["new","used"]},{"type":"null"}]},"cityId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"districtId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"lat":{"anyOf":[{"type":"number"},{"type":"null"}]},"lng":{"anyOf":[{"type":"number"},{"type":"null"}]},"handover":{"type":"array","items":{"type":"string","enum":["pickup","meetup","shipping"]}},"photos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"width":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"height":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"blurhash":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"размытая заглушка; считает сервер при загрузке"}},"required":["url","width","height","blurhash"],"additionalProperties":false}},"attributes":{"type":"array","items":{"type":"object","properties":{"attributeId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"key":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["string","int","decimal","bool","select","multiselect"]},"unit":{"anyOf":[{"type":"string"},{"type":"null"}]},"values":{"type":"array","items":{"type":"string"}}},"required":["attributeId","key","name","type","unit","values"],"additionalProperties":false}},"publishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"viewCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"contactCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","shortId","status","categoryId","categorySlug","category","title","description","contentLanguage","priceTyiyn","price","isNegotiable","condition","cityId","districtId","address","lat","lng","handover","photos","attributes","publishedAt","expiresAt","createdAt","viewCount","contactCount"],"additionalProperties":false}},"required":["listing"],"additionalProperties":false},"createListingRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"categoryId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"categorySlug":{"description":"вместо categoryId: рубрику ищут по слагу, а не по uuid","type":"string"},"title":{"type":"string","maxLength":120},"description":{"type":"string","maxLength":5000},"price":{"description":"СОМЫ, не тыйыны: «12 500», «45,5» или число","anyOf":[{"anyOf":[{"type":"string","description":"цена сомами строкой; сервер выдёргивает цифры и умножает на 100"},{"type":"number"}]},{"type":"null"}]},"cityId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"districtId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"address":{"type":"string","maxLength":255},"lat":{"description":"обязательна недвижимости при публикации","anyOf":[{"type":"number"},{"type":"null"}]},"lng":{"anyOf":[{"type":"number"},{"type":"null"}]},"condition":{"type":"string","enum":["new","used",""]},"isNegotiable":{"type":"boolean"},"contentLanguage":{"type":"string","enum":["ru","ky"]},"attributes":{"description":"ключ — id характеристики ИЛИ её key из рубрики; у select значение — id опции","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"number"}]}}]}},"photos":{"description":"уже загруженные снимки","maxItems":10,"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"width":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"height":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"blurhash":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"размытая заглушка; считает сервер при загрузке"}},"required":["url","width","height","blurhash"]}},"photoUrls":{"description":"адреса: сервер скачает и обработает сам","maxItems":10,"type":"array","items":{"type":"string"}},"handover":{"type":"array","items":{"type":"string","enum":["pickup","meetup","shipping"]}},"intent":{"default":"draft","type":"string","enum":["draft","publish"]}}},"createListingResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"listingId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"shortId":{"anyOf":[{"type":"string","description":"короткий код объявления, не uuid"},{"type":"null"}]},"status":{"type":"string","enum":["draft","published","edited"],"description":"edited — правка ушла на проверку"}},"required":["listingId","shortId","status"],"additionalProperties":false},"updateListingRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"categoryId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"categorySlug":{"description":"вместо categoryId: рубрику ищут по слагу, а не по uuid","type":"string"},"title":{"type":"string","maxLength":120},"description":{"type":"string","maxLength":5000},"price":{"description":"СОМЫ, не тыйыны: «12 500», «45,5» или число","anyOf":[{"anyOf":[{"type":"string","description":"цена сомами строкой; сервер выдёргивает цифры и умножает на 100"},{"type":"number"}]},{"type":"null"}]},"cityId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"districtId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"address":{"type":"string","maxLength":255},"lat":{"description":"обязательна недвижимости при публикации","anyOf":[{"type":"number"},{"type":"null"}]},"lng":{"anyOf":[{"type":"number"},{"type":"null"}]},"condition":{"type":"string","enum":["new","used",""]},"isNegotiable":{"type":"boolean"},"contentLanguage":{"type":"string","enum":["ru","ky"]},"attributes":{"description":"ключ — id характеристики ИЛИ её key из рубрики; у select значение — id опции","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"number"}]}}]}},"photos":{"description":"уже загруженные снимки","maxItems":10,"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"width":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"height":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"blurhash":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"размытая заглушка; считает сервер при загрузке"}},"required":["url","width","height","blurhash"]}},"photoUrls":{"description":"адреса: сервер скачает и обработает сам","maxItems":10,"type":"array","items":{"type":"string"}},"handover":{"type":"array","items":{"type":"string","enum":["pickup","meetup","shipping"]}},"intent":{"default":"draft","type":"string","enum":["draft","publish"]}}},"updateListingResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"listingId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"shortId":{"anyOf":[{"type":"string","description":"короткий код объявления, не uuid"},{"type":"null"}]},"status":{"type":"string","enum":["draft","published","edited"],"description":"edited — правка ушла на проверку"}},"required":["listingId","shortId","status"],"additionalProperties":false},"listingActionResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"listingId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"shortId":{"anyOf":[{"type":"string","description":"короткий код объявления, не uuid"},{"type":"null"}]},"status":{"type":"string","enum":["draft","published","edited"],"description":"edited — правка ушла на проверку"}},"required":["listingId","shortId","status"],"additionalProperties":false},{"type":"object","properties":{"done":{"type":"boolean"},"action":{"type":"string"}},"required":["done","action"],"additionalProperties":false}]},"getSellerResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"accountType":{"type":"string","enum":["private","business"]},"badge":{"anyOf":[{"type":"object","properties":{"label":{"type":"string"}},"required":["label"],"additionalProperties":false},{"type":"null"}],"description":"значок тарифа у имени: «Бизнес», «PRO». null — тариф значка не даёт"},"showcase":{"anyOf":[{"type":"object","properties":{"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"адрес myna.kg/<slug>"},"badge":{"anyOf":[{"type":"object","properties":{"label":{"type":"string"}},"required":["label"],"additionalProperties":false},{"type":"null"}],"description":"значок тарифа у имени: «Бизнес», «PRO». null — тариф значка не даёт"},"accent":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"фирменный цвет, #rrggbb"},"accentInk":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"каким цветом писать по акценту: #000000 или #ffffff, по яркости WCAG"},"bannerUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"tagline":{"anyOf":[{"type":"string"},{"type":"null"}]},"about":{"anyOf":[{"type":"string"},{"type":"null"}]},"contacts":{"anyOf":[{"type":"object","properties":{"phones":{"type":"array","items":{"type":"object","properties":{"phone":{"type":"string"},"hasWhatsapp":{"type":"boolean"},"hasTelegram":{"type":"boolean"}},"required":["phone","hasWhatsapp","hasTelegram"],"additionalProperties":false}},"email":{"anyOf":[{"type":"string"},{"type":"null"}]},"website":{"anyOf":[{"type":"string"},{"type":"null"}]},"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"cityName":{"anyOf":[{"type":"string"},{"type":"null"}]},"lat":{"anyOf":[{"type":"number"},{"type":"null"}]},"lng":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["phones","email","website","address","cityName","lat","lng"],"additionalProperties":false},{"type":"null"}]},"socials":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},{"type":"null"}],"description":"канонические адреса профилей; ключи instagram, facebook, tiktok, youtube, telegram, whatsapp"},"hours":{"anyOf":[{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"weekday":{"type":"integer","minimum":0,"maximum":6,"description":"0 — понедельник"},"opens":{"type":"integer","minimum":0,"maximum":1440,"description":"минуты от полуночи; 1440 = «24:00», сравнение всегда целыми"},"closes":{"type":"integer","minimum":0,"maximum":1440,"description":"минуты от полуночи; 1440 = «24:00», сравнение всегда целыми"}},"required":["weekday","opens","closes"],"additionalProperties":false}},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"now":{"type":"object","properties":{"open":{"type":"boolean"},"until":{"anyOf":[{"type":"integer","minimum":0,"maximum":1440,"description":"минуты от полуночи; 1440 = «24:00», сравнение всегда целыми"},{"type":"null"}],"description":"когда закроется; null — сейчас закрыто"},"nextOpen":{"anyOf":[{"type":"object","properties":{"weekday":{"type":"integer","minimum":0,"maximum":6,"description":"0 — понедельник"},"opens":{"type":"integer","minimum":0,"maximum":1440,"description":"минуты от полуночи; 1440 = «24:00», сравнение всегда целыми"}},"required":["weekday","opens"],"additionalProperties":false},{"type":"null"}],"description":"ближайшее открытие; null — часов работы нет вовсе"}},"required":["open","until","nextOpen"],"additionalProperties":false}},"required":["rows","note","now"],"additionalProperties":false},{"type":"null"}]},"gallery":{"anyOf":[{"type":"object","properties":{"albums":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string"},"photos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"подпись на языке запроса"}},"required":["id","url","width","height","caption"],"additionalProperties":false}}},"required":["id","title","photos"],"additionalProperties":false}},"loose":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"подпись на языке запроса"}},"required":["id","url","width","height","caption"],"additionalProperties":false},"description":"снимки без альбома: общая сетка"},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["albums","loose","total"],"additionalProperties":false},{"type":"null"}]},"ownListings":{"type":"boolean","description":"внизу страницы объявления — другие объявления продавца вместо похожих"},"responses":{"type":"object","properties":{"ratePercent":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"доля отвеченных диалогов за 30 дней; null — выборка мала"},"speed":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ступень скорости ответа; null — выборка мала"}},"required":["ratePercent","speed"],"additionalProperties":false}},"required":["slug","badge","accent","accentInk","bannerUrl","tagline","about","contacts","socials","hours","gallery","ownListings","responses"],"additionalProperties":false},{"type":"null"}]},"memberSince":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"activeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"soldCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"rating":{"type":"object","properties":{"average":{"anyOf":[{"type":"number"},{"type":"null"}]},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["average","count"],"additionalProperties":false},"blocked":{"type":"boolean","description":"заблокирован ли этот продавец спрашивающим"},"isMe":{"type":"boolean"},"listings":{"type":"array","items":{"type":"object","properties":{"shortId":{"type":"string"},"title":{"type":"string"},"priceTyiyn":{"anyOf":[{"type":"string","pattern":"^\\d+$","description":"деньги в тыйынах строкой: bigint не переживает JSON, double теряет точность"},{"type":"null"}]},"city":{"type":"string"},"image":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["shortId","title","priceTyiyn","city","image"],"additionalProperties":false}}},"required":["id","name","accountType","badge","showcase","memberSince","activeCount","soldCount","rating","blocked","isMe","listings"],"additionalProperties":false},"resolveShowcaseSlugResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"userId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"redirectTo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"новый адрес витрины; null — спрошенный адрес действующий"}},"required":["userId","redirectTo"],"additionalProperties":false},"getSellerListingsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"всего живых объявлений продавца"},"items":{"type":"array","items":{"type":"object","properties":{"shortId":{"type":"string"},"title":{"type":"string"},"priceTyiyn":{"anyOf":[{"type":"string","pattern":"^\\d+$","description":"деньги в тыйынах строкой: bigint не переживает JSON, double теряет точность"},{"type":"null"}]},"isNegotiable":{"type":"boolean"},"city":{"type":"string"},"category":{"type":"string"},"categorySlug":{"type":"string"},"publishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"showsAdLabel":{"type":"boolean"},"isUrgent":{"type":"boolean"}},"required":["shortId","title","priceTyiyn","isNegotiable","city","category","categorySlug","publishedAt","image","imageCount","showsAdLabel","isUrgent"],"additionalProperties":false}}},"required":["total","items"],"additionalProperties":false},"uploadPhotoRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"photo":{"type":"string","description":"файл поля photo"}},"required":["photo"]},"uploadPhotoResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"photo":{"type":"object","properties":{"url":{"type":"string","description":"адрес основной ступени — он и уходит в photos"},"width":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"height":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"blurhash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["url","width","height","blurhash"],"additionalProperties":false}},"required":["photo"],"additionalProperties":false},"uploadPhotoByUrlRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"uploadPhotoByUrlResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"photo":{"type":"object","properties":{"url":{"type":"string","description":"адрес основной ступени — он и уходит в photos"},"width":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"height":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"blurhash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["url","width","height","blurhash"],"additionalProperties":false}},"required":["photo"],"additionalProperties":false},"createBatchRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"intent":{"default":"draft","type":"string","enum":["draft","publish"]},"locale":{"type":"string","enum":["ru","ky"]},"cityId":{"description":"город по умолчанию для позиций без своего","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"items":{"minItems":1,"type":"array","items":{"type":"object","properties":{"hint":{"description":"своими словами: по ней ИИ соберёт недостающее","type":"string"},"title":{"type":"string"},"description":{"type":"string"},"price":{"description":"СОМЫ строкой","type":"string"},"categoryId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"categorySlug":{"type":"string"},"photos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"blurhash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["url","width","height","blurhash"]}},"photoUrls":{"maxItems":10,"type":"array","items":{"type":"string"}},"attributes":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"condition":{"type":"string","enum":["new","used"]},"cityId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"externalId":{"description":"идентификатор в системе партнёра; вернётся в отчёте как есть","type":"string"}}}}},"required":["items"]},"createBatchResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"batchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accepted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"сколько позиций встало в очередь"}},"required":["batchId","accepted"],"additionalProperties":false},"getBatchResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"batch":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"source":{"type":"string","enum":["bulk","import","api"]},"status":{"type":"string","enum":["queued","running","done","failed","cancelled"]},"intent":{"type":"string","enum":["draft","publish"]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"done":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fileName":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"items":{"type":"array","items":{"type":"object","properties":{"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["queued","running","draft","published","failed","skipped"]},"listingId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"shortId":{"anyOf":[{"type":"string","description":"короткий код объявления, не uuid"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}]},"errorCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"errorDetail":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["position","status","listingId","shortId","title","externalId","errorCode","errorDetail"],"additionalProperties":false}}},"required":["id","source","status","intent","total","done","failed","fileName","createdAt","finishedAt","items"],"additionalProperties":false}},"required":["batch"],"additionalProperties":false},"importListingsRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"file":{"type":"string","description":"файл, не больше 20 МБ"},"intent":{"type":"string","enum":["draft","publish"]},"cityId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"locale":{"type":"string","enum":["ru","ky"]}},"required":["file"]},"importListingsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"batchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accepted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"сколько позиций встало в очередь"},"format":{"type":"string","enum":["csv","xlsx","xml","json","text"]},"columns":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},{"type":"null"}],"description":"заголовок файла → поле объявления"},"skipped":{"type":"array","items":{"type":"object","properties":{"row":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"reason":{"type":"string"}},"required":["row","reason"],"additionalProperties":false}}},"required":["batchId","accepted","format","columns","skipped"],"additionalProperties":false},"draftListingWithAiRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"hint":{"description":"своими словами: что продают","type":"string","maxLength":2000},"photos":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"blurhash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["url","width","height","blurhash"]}},"photoUrls":{"maxItems":5,"type":"array","items":{"type":"string"}},"categoryId":{"description":"рубрика известна — модель её не выбирает, только заполняет","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"draftListingWithAiResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"draft":{"type":"object","properties":{"categoryId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"categorySlug":{"type":"string"},"title":{"type":"string","maxLength":120},"description":{"type":"string"},"contentLanguage":{"type":"string","enum":["ru","ky"]},"priceTyiyn":{"anyOf":[{"type":"string","pattern":"^\\d+$","description":"деньги в тыйынах строкой: bigint не переживает JSON, double теряет точность"},{"type":"null"}],"description":"NULL — модель не решилась; причина в note"},"isNegotiable":{"type":"boolean"},"condition":{"type":"string","enum":["new","used",""]},"attributes":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"description":"по id характеристики; у select — id опции"},"confidence":{"type":"number","minimum":0,"maximum":1,"description":"уверенность в рубрике; ниже 0.5 стоит перепроверить"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"что модель не смогла определить, на языке запроса"}},"required":["categoryId","categorySlug","title","description","contentLanguage","priceTyiyn","isNegotiable","condition","attributes","confidence","note"],"additionalProperties":false}},"required":["draft"],"additionalProperties":false},"listConversationsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"buying":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"peer":{"type":"object","properties":{"name":{"type":"string"},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","avatar"],"additionalProperties":false},"listing":{"anyOf":[{"type":"object","properties":{"shortId":{"type":"string"},"title":{"type":"string"},"priceTyiyn":{"anyOf":[{"type":"string","pattern":"^\\d+$","description":"деньги в тыйынах строкой: bigint не переживает JSON, double теряет точность"},{"type":"null"}]}},"required":["shortId","title","priceTyiyn"],"additionalProperties":false},{"type":"null"}],"description":"null — разговор начат с витрины продавца: объявления у него нет"},"lastMessage":{"type":"object","properties":{"body":{"type":"string"},"mine":{"type":"boolean"},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"blocked":{"type":"boolean","description":"своё, задержанное фильтром: собеседник его не видел"}},"required":["body","mine","at","blocked"],"additionalProperties":false},"unread":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"activeAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"pinned":{"type":"boolean"},"starred":{"type":"boolean"},"archived":{"type":"boolean"}},"required":["id","peer","listing","lastMessage","unread","activeAt","pinned","starred","archived"],"additionalProperties":false}},"selling":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"peer":{"type":"object","properties":{"name":{"type":"string"},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","avatar"],"additionalProperties":false},"listing":{"anyOf":[{"type":"object","properties":{"shortId":{"type":"string"},"title":{"type":"string"},"priceTyiyn":{"anyOf":[{"type":"string","pattern":"^\\d+$","description":"деньги в тыйынах строкой: bigint не переживает JSON, double теряет точность"},{"type":"null"}]}},"required":["shortId","title","priceTyiyn"],"additionalProperties":false},{"type":"null"}],"description":"null — разговор начат с витрины продавца: объявления у него нет"},"lastMessage":{"type":"object","properties":{"body":{"type":"string"},"mine":{"type":"boolean"},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"blocked":{"type":"boolean","description":"своё, задержанное фильтром: собеседник его не видел"}},"required":["body","mine","at","blocked"],"additionalProperties":false},"unread":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"activeAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"pinned":{"type":"boolean"},"starred":{"type":"boolean"},"archived":{"type":"boolean"}},"required":["id","peer","listing","lastMessage","unread","activeAt","pinned","starred","archived"],"additionalProperties":false}}},"required":["buying","selling"],"additionalProperties":false},"getConversationResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"peer":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","avatar"],"additionalProperties":false},"blockedByMe":{"type":"boolean"},"blockedMe":{"type":"boolean","description":"писать нельзя; кто именно заблокировал, не сообщаем"},"pinned":{"type":"boolean"},"starred":{"type":"boolean"},"archived":{"type":"boolean"},"listing":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"shortId":{"type":"string"},"title":{"type":"string"},"priceTyiyn":{"anyOf":[{"type":"string","pattern":"^\\d+$","description":"деньги в тыйынах строкой: bigint не переживает JSON, double теряет точность"},{"type":"null"}]}},"required":["id","shortId","title","priceTyiyn"],"additionalProperties":false},{"type":"null"}],"description":"null — разговор с витрины: спор из такого треда открыть нельзя"},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"body":{"type":"string"},"mine":{"type":"boolean"},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"readAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"только у своих: когда прочитал собеседник"},"withheld":{"type":"boolean","description":"задержано фильтром, собеседнику не показано"},"automatic":{"type":"boolean","description":"автоответ продавца, а не человек"},"attachments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["image","video","file","voice"]},"url":{"type":"string"},"mime":{"type":"string"},"sizeBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"width":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"только у снимка: место под него до загрузки"},"height":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"durationMs":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"только у голосового"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"только у файла"}},"required":["id","kind","url","mime","sizeBytes","width","height","durationMs","name"],"additionalProperties":false},"description":"пустой список у текстового сообщения"}},"required":["id","body","mine","at","readAt","withheld","automatic","attachments"],"additionalProperties":false}}},"required":["id","peer","blockedByMe","blockedMe","pinned","starred","archived","listing","messages"],"additionalProperties":false},"sendMessageRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"body":{"type":"string"},"listingId":{"description":"предмет разговора при id = 'new'; вне 'new' игнорируется","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"sellerId":{"description":"при id = 'new' и без listingId — разговор с витрины продавца","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"attachments":{"description":"вложения из /v1/conversations/uploads, до десяти","maxItems":10,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["image","video","file","voice"]},"url":{"type":"string"},"mime":{"type":"string"},"sizeBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"width":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"только у снимка: место под него до загрузки"},"height":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"durationMs":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"только у голосового"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"только у файла"}},"required":["kind","url","mime","sizeBytes","width","height","durationMs","name"]}}},"required":["body"]},"sendMessageResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","enum":["sent","blocked","warned"]},"conversationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["status","conversationId"],"additionalProperties":false},"getAnalyticsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"plan":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"isPaid":{"type":"boolean"},"canAnalytics":{"type":"boolean"},"canBulk":{"type":"boolean"},"canShop":{"type":"boolean"},"features":{"type":"array","items":{"type":"string"}}},"required":["code","name","isPaid","canAnalytics","canBulk","canShop","features"],"additionalProperties":false},"upgrade":{"anyOf":[{},{"type":"null"}],"description":"предложение тарифа, когда возможности не хватает"},"days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"analytics":{"anyOf":[{"type":"object","properties":{"totals":{"type":"object","properties":{},"additionalProperties":{},"description":"просмотры, обращения, начатые переписки за период"},"previous":{"type":"object","properties":{},"additionalProperties":{},"description":"те же числа за предыдущий такой же период"},"series":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}},"description":"по суткам"},"sources":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}},"description":"откуда приходили"},"benchmarks":{"type":"array","items":{"type":"object","properties":{"categoryId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"category":{"type":"string"},"myMedianViews":{"type":"number"},"marketMedianViews":{"type":"number"},"sample":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["categoryId","category","myMedianViews","marketMedianViews","sample"],"additionalProperties":false}},"top":{"type":"array","items":{"type":"object","properties":{"shortId":{"type":"string","description":"короткий код объявления, не uuid"},"title":{"type":"string"},"status":{"type":"string"},"priceTyiyn":{"anyOf":[{"type":"string","pattern":"^\\d+$","description":"деньги в тыйынах строкой: bigint не переживает JSON, double теряет точность"},{"type":"null"}]},"views":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"contacts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["shortId","title","status","priceTyiyn","views","contacts"],"additionalProperties":false}},"quiet":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}},"description":"те же карточки, но с самым слабым откликом"}},"required":["totals","previous","series","sources","benchmarks","top","quiet"],"additionalProperties":false},{"type":"null"}]}},"required":["plan","upgrade","days","analytics"],"additionalProperties":false}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Ключ интеграции (myna_live_…) или токен сессии человека — заголовок один и тот же.","x-description-ky":"Интеграциянын ачкычы (myna_live_…) же адамдын сессия токени — аталыш бирдей."}}}}