Документация API

REST API ко всем объявлениям недвижимости России из 8 источников. Базовый адрес: https://api.metrapi.ru
Документация обновлена: 12.09.2026, 03:00 МСК

Введение

Metrapi отдаёт объявления о продаже и аренде недвижимости, собранные из 8 источников (Avito, ЦИАН, ДомКлик, Яндекс.Недвижимость, FarPost, Move.ru, sob.ru, Юла) — в единой нормализованной схеме, с готовыми фильтрами и склейкой дублей одной квартиры с разных площадок. Один запрос — данные со всех источников сразу. Актуальный список всегда отдаёт /v1/sources.

API входит в полный доступ. Все запросы — обычный HTTP GET с заголовком X-Api-Key, ответы — JSON. Никаких SDK не нужно, подойдёт curl, Python requests, любой HTTP-клиент.

API отдаёт данные объявлений целиком, включая координаты (lat/lon) — см. таблицу «Поля объявления». Аналитика рынка, интерактивная карта и наш внутренний геокодер через API не доступны — это инструменты личного кабинета, не публичного API.

Быстрый старт

  1. Получите ключ — подключите полный доступ в личном кабинете или напишите на info@metrapi.ru. Ключ выглядит как metrapi_xxxxxxxx.
  2. Добавьте его в заголовок X-Api-Key каждого запроса.
  3. Шлите запросы на https://api.metrapi.ru.

Первый запрос

# Двушки в Москве до 15 млн
curl -H "X-Api-Key: ВАШ_КЛЮЧ" \
  "https://api.metrapi.ru/v1/items?city=msk&deal_type=sale&rooms=2&price_max=15000000"

Ответ

{
  "count": 128,
  "items": [
    {
      "source": "avito",
      "deal_type": "sale",
      "realty_type": "flat",
      "address": "Москва, ул. Тверская, 12",
      "city": "msk",
      "price": 14200000,
      "rooms": 2, "area_total": 54.0,
      "floor": 5, "floors_total": 9,
      "metro": "Тверская",
      "metro_minutes": 7, "metro_mode": "walk",
      "lat": 55.7645, "lon": 37.6062,
      "url": "https://www.avito.ru/...",
      "published_at": "2026-06-18"
    }
  ]
}

Хотите потыкать запросы прямо в браузере — откройте интерактивную песочницу: нажмите Authorize, вставьте ключ один раз — и он подставится во все запросы.

Авторизация

Все рабочие эндпоинты требуют заголовок X-Api-Key с вашим персональным ключом. Без ключа сервер вернёт 401, с неверным — 403.

Ключ — секрет. Держите его на своём сервере, не вставляйте в код страницы в браузере или в мобильное приложение, откуда его легко достать.

curl -H "X-Api-Key: metrapi_xxxxxxxx" "https://api.metrapi.ru/v1/items?city=msk"

Лимиты

Частота ограничена по-разному для разных ручек — чтение наших данных не трогает источники объявлений, поэтому лимит там мягче, чем у ручек, которые идут за свежими данными к первоисточнику.

ЧтоЗначение
Чтение объявлений/v1/items, /v1/item/{...} — не чаще 1 раза в 2 секунды на ключ (общий счётчик на обе ручки).
Запрос телефона/v1/phone/refresh/{...} — не чаще 1 раза в 5 секунд на ключ.
Актуализация/v1/item/{...}/refresh — не чаще 1 раза в 10 секунд на ключ.
При превышении429 с телом {"detail":{"reason":"too_soon","retry_after":N}}retry_after говорит, через сколько секунд повторить. Отдельного заголовка Retry-After ответ не содержит — берите значение из тела.
Запросов в суткидо 100 000 на ключ, суммарно по всем ручкам. При превышении — 429.
Объём за ответдо 1000 объявлений. В пробном периоде — до 50. Больше — постранично через offset.
Повтор по одному объявлениюАктуализация одного и того же объявления — не чаще 1 раза в 5 минут, телефон одного объявления — не чаще 1 раза в час (в пределах этого окна отдаём уже собранное значение, к источнику повторно не идём).

Пагинация

limit — сколько объявлений вернуть (по умолчанию 50, максимум 1000), offset — сколько пропустить. Чтобы выгрузить всю выборку, идите страницами, пока count не станет меньше limit:

?limit=1000&offset=0      # первая 1000
?limit=1000&offset=1000   # следующая 1000
?limit=1000&offset=2000   # и так далее

Склейка дублей

Одна и та же квартира часто размещена на нескольких площадках. Параметр dedupe=true схлопывает такие записи в одну, а в поле sources[] перечисляет все площадки, где она есть, и цену на каждой — это и есть суть агрегатора.

{
  "address": "Москва, ул. Тверская, 12",
  "price": 14200000,
  "sources": [
    {"source": "avito", "price": 14200000, "url": "https://www.avito.ru/..."},
    {"source": "cian",  "price": 14500000, "url": "https://www.cian.ru/..."}
  ],
  "sources_count": 2
}

У каждого объявления есть group_id — идентификатор его группы дублей. Он приходит и без dedupe: тогда вы получаете все публикации по отдельности и группируете их у себя, ничего не теряя. group_id стабилен — не меняется при изменении цены, поэтому по нему можно связывать выгрузки, сделанные в разные дни. null означает, что группу определить нельзя (в адресе нет номера дома или неизвестна площадь) — такое объявление считается отдельным объектом.

Рядом идёт group_spread_m — расстояние в метрах между самыми удалёнными объявлениями группы. Это мера уверенности: 0 — площадки указали одну и ту же точку, несколько сотен метров — объявления связаны по адресу, а координаты у площадок расходятся.

Фильтры

Параметры запроса /v1/items. Комбинируются по логическому И. Коды зон обхода — /v1/cities, районы и метро города — /v1/facets.

Мультивыбор. Параметры city, realty_type, rooms, source, district, metro, microdistrict, locality, settlement, seller_type, land_status, build_status, house_type, renovation, bathroom, balcony принимают несколько значений — просто повторите параметр: ?rooms=2&rooms=3. Значения внутри одного параметра объединяются по ИЛИ.

ПараметрЧто фильтруетПример
cityзона обхода: город сбора и его окрестности (код), можно несколько. Для конкретного города — localitycity=msk&city=spb
deal_typeтип сделкиsale — продажа, rent — аренда
realty_typeтип объекта, можно несколько. Земельный участок — отдельный тип land: house участков не возвращает, а без параметра в выдачу попадают квартиры, дома и участкиflat — квартира, house — дом, land — земельный участок, room — комната
roomsчисло комнат, можно несколькоrooms=1&rooms=2
price_min / price_maxцена, ₽price_max=15000000
area_min / area_maxплощадь, м²area_min=40
floor_min / floor_maxэтажfloor_min=2
floors_min / floors_maxэтажность домаfloors_max=9
districtрайон, можно несколькоdistrict=Тверской
metroметро, можно несколькоmetro=Тверская
regionсубъект РФregion=Московская область
localityнаселённый пункт точным именем — конкретный город или селоlocality=Химки
sourceконкретный источникsource=avito
published_daysразмещено за N днейpublished_days=3
qпоиск по адресу/текстуq=Тверская
seller_typeтип продавцаprivate / agency / developer
land_statusстатус участка (дома и земельные участки)land_status=ИЖС
price_changedтолько с изменением ценыprice_changed=1
with_photoтолько с фотоwith_photo=1
date_from / date_toдата размещения, от / доdate_from=2026-06-01
dedupeсклейка дублейdedupe=true
archived1 = включить снятые с публикации (по умолчанию их нет в выдаче)archived=1
settlementнаселённый пункт внутри города/района (село, посёлок, СНТ), можно несколькоsettlement=Парголово
microdistrictмикрорайон, можно несколькоmicrodistrict=Северный
floor_bracketsэтажность дома диапазонами, можно несколькоfloor_brackets=1-4&floor_brackets=17-24
area_living_min / area_living_maxжилая площадь, м²area_living_min=30
area_kitchen_min / area_kitchen_maxплощадь кухни, м²area_kitchen_min=9
build_year_min / build_year_maxгод постройкиbuild_year_min=2010
build_statusновостройка / вторичка, можно несколькоnew / secondary
exclude_build_statusисключить тип застройкиexclude_build_status=new — только вторичка
house_typeтип дома, можно несколькоКирпичный / Панельный / Монолитный / Монолитно-кирпичный / Блочный / Деревянный
renovationремонт, можно несколькоКосметический / Евроремонт / Дизайнерский / Требует ремонта / Без отделки
bathroomсанузел, можно несколькоСовмещённый / Раздельный / 2 и более
balconyбалкон, можно несколькоБалкон / Лоджия / Балкон и лоджия / Нет
metro_maxдо метро не более N минутmetro_max=15
metro_mode_fспособ до метро (по умолчанию пешком)walk / transport
rent_periodсрок арендыlong — длительная. Посуточные в выдачу не попадают, см. ниже
comm_fаренда: комиссияnone — без комиссии, lt50 — менее 50%
land_area_min / land_area_maxплощадь участка, сотки (загородная)land_area_min=6
house_wcсанузел загородного домаВ доме / На улице
sewerageканализация (загородная)Центральная / Септик / Выгребная яма / Нет
water_supplyводоснабжение (загородная)Центральное / Скважина / Колодец / Нет
price_historyвернуть историю цены у каждого объявления (до 20 записей)price_history=1
limit / offsetпагинацияlimit=1000&offset=0

Чего нет в выдаче

Часть объявлений отсекается ещё до фильтров — если не знать об этом, результат выглядит неполным без видимой причины:

Что не отдаёмПодробности
Снятые с публикацииПо умолчанию их нет. Добавьте archived=1, чтобы получить и их — у таких объявлений заполнено поле delisted_at.
Посуточная арендаИсключена полностью: в базе она есть, но в выдачу не попадает, поэтому rent_period=daily вернёт пусто. Нужна посуточная — напишите нам.
Комнаты и коммерцияНе попадают в общую выдачу, пока не запрошены явно: realty_type=room.
Аренда земельных участковНе собираем: участки есть только в продаже, поэтому realty_type=land&deal_type=rent вернёт пусто.
Новостройки от застройщикаНе собираем принципиально — только вторичный рынок и переуступки.
Отключённые площадкиЭтажи, БН.ру, N1 и Мир Квартир сейчас не собираются; их объявлений в выдаче нет. Живой список — /v1/sources.

Поля объявления

Ответ содержит только перечисленные ниже поля. Незаполненные приходят как null — полнота зависит от площадки: часть характеристик отдают не все источники.

ПолеОписание
source / source_idисточник и его внутренний id объявления
deal_type / realty_typeтип сделки / тип объекта
title, descriptionзаголовок и полный текст объявления с площадки, как есть
address, city, region, district, metroадрес и локация (city — код зоны обхода, не города)
lat, lonкоординаты объекта: широта, долгота
locality, locality_typeнаселённый пункт и его тип (город, посёлок, село, деревня)
settlement, microdistrict, address_altпоселение, микрорайон и второй адрес углового дома (через « / »)
metrosвсе станции метро объекта массивом: название, расстояние и способ (пешком / транспортом). Поля metro* ниже — ближайшая станция тем же значением
priceцена, ₽
rooms, area_total, area_living, area_kitchenкомнаты, общая / жилая / кухонная площадь, м²
floor, floors_totalэтаж / этажность дома
build_year, house_type, renovation, build_statusгод, тип дома, ремонт, новостройка/вторичка
jk, mortgage, sale_type, completion_dateжилой комплекс, доступность ипотеки, тип продажи (свободная / альтернатива / переуступка), срок сдачи
balcony, bathroom, ceiling_heightбалкон, санузел, высота потолков (м)
window_view, replan, apartmentsвид из окна, узаконенная перепланировка, статус «апартаменты»
building_series, ceiling_type, elevators, entrancesсерия дома, тип перекрытий, лифты, подъезды
garbage_chute, parking, emergency_statusмусоропровод, парковка, аварийность дома
amenitiesмассив удобств («Холодильник», «Кондиционер», «Интернет», …)
cadastral_numberкадастровый номер (формат NN:NN:NNNNNN:NN), если продавец указал его в объявлении; иначе null. Структурированно источники его не отдают — встречается редко, в основном у частных объявлений
metro_distance, metro_minutes, metro_modeдо метро: текст как в объявлении («7 мин пешком»), минуты числом, способ (walk/transport). Для расчётов берите metro_minutes, не разбирайте текст
deposit, commission, prepayment, rent_periodусловия аренды. Это строки в том виде, как их публикует площадка: "63 000 ₽", "Без залога", "50%", "Без комиссии", "за 1 месяц" — не числа
utilities_payer, kids_allowed, pets_allowed, agent_bonusкто платит ЖКУ, можно ли с детьми и с животными, бонус агенту
land_status, land_areaстатус участка и его площадь в сотках (у домов и земельных участков)
land_categoryкатегория земель участка
electricity, gas, heating, water_supply, sewerage, internet_tv, house_wcкоммуникации загородного объекта: электричество, газ, отопление, водоснабжение, канализация, интернет и ТВ, санузел в доме
village, village_classкоттеджный посёлок и его класс
highway, highway_km, railway, railway_kmшоссе и железнодорожная станция с расстоянием в км
seller_type, seller_nameчастное лицо / агентство / застройщик; имя продавца
seller_companyагентство, разместившее объявление, если оно указано на площадке
urlссылка на объявление на первоисточнике
phoneтелефон. Приходит, только если ключу открыты телефоны — иначе поля в ответе нет вовсе. У ЦИАН, Яндекс.Недвижимости и ДомКлика номер подменный (переадресация площадки), у остальных — прямой номер из объявления. Отсутствует — запросите /v1/phone/refresh
phonesвсе известные номера объявления массивом: [{"n":"+7…","r":false}], где r — признак подменного номера. Как и phone, приходит только если ключу открыты телефоны — иначе поля в ответе нет вовсе
phone_redirecttrue — номер подменный: это переадресация площадки, а не прямой номер продавца. Признак приходит вместе с номером, гадать по источнику не нужно
phone_checked_atкогда номер проверялся в последний раз. Приходит вместе с телефонами
photosмассив ссылок на фото на серверах первоисточника. Живут, пока живо объявление, — если храните долго, скачивайте к себе. Часть ссылок Avito подписана параметром ?cqp=: подпись не признак живости, снятое объявление уносит фото вместе с собой
price_prevпредыдущая цена (если менялась)
published_at, updated_atдата размещения / последнего обновления
first_seen, last_seenкогда объявление впервые увидел Metrapi и когда мы в последний раз успешно его проверили. Это не дата публикации на площадке — для неё есть published_at; срок экспозиции по first_seen считать нельзя
delisted_atдата снятия с публикации, null у живых объявлений. По умолчанию снятые объявления в выдачу не попадают вовсе — чтобы их увидеть, добавьте archived=1
sources, sources_countвсе площадки этого объекта и их число. Только при dedupe=true — без склейки этих полей в ответе нет
group_idидентификатор группы дублей: у объявлений одного и того же объекта он совпадает. Стабилен — не меняется при изменении цены. null, если группу определить нельзя (в адресе нет номера дома или неизвестна площадь). Приходит и без dedupe — тогда вы получаете все публикации и можете сгруппировать их сами
group_spread_mрасстояние в метрах между самыми удалёнными объявлениями группы — мера уверенности связи: 0 — площадки указали одну точку, 900 — связь по адресу, а координаты расходятся. null, если координат в группе меньше двух
price_historyистория изменений цены [{"old":…,"new":…,"at":…}], от свежего к старому. В списке — по параметру price_history=1 (до 20 записей), в карточке объявления — всегда, полная глубина — /v1/item/{…}/price-history. Ведётся с 13.08.2026 и содержит только движение цены: снятия и повторной публикации в ней нет
refreshed_atкогда объявление вручную актуализировали

Коды ответов

КодЗначение
200OK
401не передан X-Api-Key
403неверный ключ или функция не входит в ваш доступ
429превышена частота или исчерпана суточная квота. При частоте в теле придёт {"detail":{"reason":"too_soon","retry_after":N}} — подождите N секунд
503временная недоступность базы — повторите позже

Эндпоинты

Объявления, телефон и актуализация требуют X-Api-Key. Справочники (/v1/stats, /v1/cities, /v1/facets, /v1/land-statuses) открыты без ключа. Живые запросы — в песочнице.

GET/v1/items

Список объявлений с фильтрами. Главный эндпоинт. Все параметры — из таблицы Фильтры. Не чаще 1 раза в 2 секунды на ключ (общий счётчик с /v1/item/{...}).

curl -H "X-Api-Key: КЛЮЧ" \
  "https://api.metrapi.ru/v1/items?city=msk&deal_type=sale&rooms=2&price_max=15000000&dedupe=true"

# -> { "count": 128, "items": [ { ... } ] }
GET/v1/item/{source}/{source_id}

Одно объявление по источнику и его id. Поля те же, что в /v1/items. 404 — если объявление не найдено или скрыто из выдачи; в теле ответа при этом {"item": null, "detail": "not_found"}, поэтому проверка по полю item работает так же, как по коду ответа. Не чаще 1 раза в 2 секунды на ключ (общий счётчик с /v1/items).

curl -H "X-Api-Key: КЛЮЧ" "https://api.metrapi.ru/v1/item/avito/1234567890"
GET/v1/item/{source}/{source_id}/price-history

История изменений цены объявления: массив {old, new, at} от свежего к старому. Параметр limit — сколько записей вернуть (по умолчанию 50, максимум 500). Не чаще 1 раза в 2 секунды на ключ (общий счётчик с /v1/items). Несуществующее объявление отдаёт пустую историю, а не ошибку.

История ведётся с 13.08.2026 и содержит только движение цены: факта снятия с публикации и повторного размещения в ней нет. Дату снятия смотрите в поле delisted_at.

curl -H "X-Api-Key: КЛЮЧ" "https://api.metrapi.ru/v1/item/avito/1234567890/price-history?limit=50"

{"count": 2, "history": [
  {"old": 14500000, "new": 14200000, "at": "2026-08-30T11:04:12+03:00"},
  {"old": 14900000, "new": 14500000, "at": "2026-08-19T09:41:55+03:00"}
]}
GET/v1/sources

Список источников и их статус. Значение code используйте в фильтре source=.

curl -H "X-Api-Key: КЛЮЧ" "https://api.metrapi.ru/v1/sources"
# -> { "sources": [ {"code":"avito","name":"Avito","status":"live"}, ... ] }
GET/v1/stats

Сводная статистика каталога (сколько объявлений, по источникам). Удобно для дашбордов.

curl "https://api.metrapi.ru/v1/stats"
GET/v1/cities

Коды зон обхода — значения для параметра city=. Зона — это город сбора и его окрестности: city=kazan вернёт объявления и по соседним населённым пунктам Татарстана. Нужен конкретный город — фильтруйте locality.

curl "https://api.metrapi.ru/v1/cities"
GET/v1/facets

Районы и метро указанного города (с числом объявлений) — для значений district= и metro=.

curl "https://api.metrapi.ru/v1/facets?city=msk&deal_type=sale"
GET/v1/land-statuses

Список статусов участка — значения для фильтра land_status=; подходят и для домов, и для земельных участков.

curl "https://api.metrapi.ru/v1/land-statuses"
POST/v1/phone/refresh/{source}/{source_id}

Запросить актуальный телефон по одному объявлению. Не чаще 1 раза в 5 секунд на ключ; одно и то же объявление перезапрашивается у площадки не чаще раза в час — внутри этого окна отдаём уже собранный номер. Для Avito и Юлы запрос телефона недоступен — эти площадки номер не отдают.

curl -X POST -H "X-Api-Key: КЛЮЧ" \
  "https://api.metrapi.ru/v1/phone/refresh/avito/1234567890"
Обновляет только телефон. Полная актуализация всех полей — отдельный эндпоинт /v1/item/.../refresh.
POST/v1/item/{source}/{source_id}/refresh

Принудительно актуализировать объявление: сервис заново открывает страницу первоисточника и обновляет все поля (площади, характеристики дома, удобства, фото, описание, продавца, даты), кроме телефона — для него отдельный эндпоинт. Не чаще 1 раза в 10 секунд на ключ. Если это же объявление уже актуализировал (любой ключ, в том числе через личный кабинет) за последние 5 минут — источник повторно не дёргаем, отдаём тот же результат. По умолчанию конвейер не перепарсивает уже собранные объявления при их обновлении в выдаче — этот вызов нужен, когда требуется свежий снимок.

curl -X POST -H "X-Api-Key: КЛЮЧ" \
  "https://api.metrapi.ru/v1/item/cian/331124536/refresh"

# -> { "ok": true, "fields": ["area_living","ceiling_height","parking", ...], "photos": 40 }

Поддержка

Технические вопросы — support@metrapi.ru, подключение и оплата — info@metrapi.ru, или через систему тикетов в личном кабинете. Подробнее — на странице Контакты.