RealtyCloud API Documentation

Introduction

Для начала работы вам нужно зарегистрироваться на https://lkrc.ru.
Получить API-Key в личном кабинете https://lkrc.ru/user/settings.
Выбрать один из представленных пакетов https://lkrc.ru/tariff.
Детальные схемы ответов по отдельным продуктам вынесены в дополнительные справочники в этой же директории: ./doc_owner.html, ./doc_credit_rating.html, ./doc_risk.html, ./doc_check_owner.html.

Что где смотреть:

Authorization

Во всех запросах необходимо передавать ключ в заголовке API-Key. Значением этого заголовка является ваш персональный API-ключ, полученный в личном кабинете.

curl -X GET "https://apirc.ru/balance" \
-H "API-Key: YOUR_API_KEY"

Quick Start

Если нужно быстро запустить интеграцию, обычно достаточно пройти этот сценарий. Он покрывает большинство продуктов с асинхронной моделью работы.

1. Проверьте доступ

Сделайте запрос к /balance. Если получили баланс, ключ валиден и можно продолжать интеграцию.

2. Создайте заказ

Отправьте POST /order, сохраните order_item_id для каждого продукта в заказе.

3. Получите статус

Запрашивайте POST /orders с массивом order_item_ids, пока статус не станет done.

4. Скачайте результат

Если продукт отдает файл, используйте /download. Если результат встроен в JSON, читайте поле data.

Минимальный сценарий для обычного заказа

curl -X GET "https://apirc.ru/balance" \
-H "API-Key: YOUR_API_KEY"

curl -X POST "https://apirc.ru/order" \
-H "Content-Type: application/json" \
-H "API-Key: YOUR_API_KEY" \
-d '{
  "order_items": [
    {
      "product_name": "CheckOwnerV2",
      "metadata": {
        "ownersData": [
          {
            "first": "Иван",
            "surname": "Иванов",
            "birthday": "1997-04-07T00:01:00.0Z",
            "passport": "9217285273"
          }
        ]
      }
    }
  ]
}'

curl -X POST "https://apirc.ru/orders" \
-H "Content-Type: application/json" \
-H "API-Key: YOUR_API_KEY" \
-d '{
  "order_item_ids": ["YOUR_ORDER_ITEM_ID"]
}'

Минимальный сценарий для подписок

curl -X GET "https://apirc.ru/subscriptions/current?only_active=true&has_requests_left=true" \
-H "API-Key: YOUR_API_KEY"

curl -X GET "https://apirc.ru/subscriptions/usage?limit=20" \
-H "API-Key: YOUR_API_KEY"
Практика: если интеграция новая, сначала проверьте один продукт end-to-end на тестовых данных: создание заказа, ожидание статуса, получение результата и обработка пустого ответа.

Сценарии интеграции

Ниже короткая карта типовых сценариев. Она помогает быстро понять, какой метод использовать и чего ожидать от результата.

Сценарий Основной метод Что обязательно сохранить Где смотреть результат Особенность
Обычный продукт с заказом POST /order order_item_id POST /orders, затем /download или data Основной сценарий для большинства продуктов
Проверка физлица POST /order с CheckOwnerV2 order_item_id POST /orders Качество результата зависит от полноты входных данных
Проверка контрагента POST /order с CounterAgent order_item_id POST /orders Лучше передавать корректный ИНН и регион
Риск-отчёт по объекту POST /order с RiskAssessmentV2 order_item_id POST /orders и дочерние risk-методы После создания заказа можно добавлять участников сделки
Поиск кадастрового номера GET /search Кадастровый номер Number Результат возвращается сразу в ответе Это синхронный метод, order_item_id не создаётся
Работа по подписке GET /subscriptions/current subscription_id, plan_code, kind GET /subscriptions/usage Нужно следить за оставшимся лимитом запросов
Рекомендация: для UI и CRM полезно хранить не только order_item_id, но и product_name, время создания заказа и последний известный статус. Это упрощает поддержку и повторные запросы.

Статусы заказов

Большинство асинхронных продуктов работают через создание заказа и последующий опрос статуса. Эти статусы стоит интерпретировать одинаково во всех интеграциях.

Статус Что означает Что делать клиенту
done Заказ завершён, результат готов. Заберите данные из data или скачайте файл через /download.
in_progress Заказ ещё обрабатывается. Повторите опрос позже. Практически разумный интервал: от 1 до 3 минут.
waiting_for_payment Недостаточно средств или оплата ещё не прошла. Проверьте баланс и факт списания, затем повторите запрос.
action_required Заказ требует вмешательства или завис на внешнем источнике. Если статус не меняется более 3 рабочих дней, можно инициировать возврат или обратиться в поддержку.
refund По заказу произведён возврат. Не продолжайте polling; зафиксируйте возврат в своей системе.
deleted Заказ удалён и больше недоступен. Проверьте историю действий и не пытайтесь повторно скачать результат.
Важно: слишком частый polling не ускоряет обработку. Если нужен оперативный пуш-канал, стоит отдельно обсуждать вебхук-интеграцию.

Ошибки и диагностика

Ниже список типовых проблем, которые чаще всего встречаются на этапе интеграции и в боевой эксплуатации.

Ситуация Частая причина Что проверить
401 / 403 Неверный API-ключ или доступ запрещён для владельца ключа. Проверьте заголовок API-Key, окружение, пробелы и актуальность ключа в личном кабинете.
400 / 422 Ошибка в структуре JSON или обязательных полях. Сверьте тело запроса с примерами и убедитесь, что переданы поля нужного формата.
404 при скачивании Некорректный order_item_id, неверный fileType или файл ещё не готов. Сначала запросите статус через POST /orders и убедитесь, что заказ в статусе done.
not_enough_money = true На балансе недостаточно средств для создания заказа. Запросите /balance, пополните баланс или смените тариф/пакет.
Пустой результат По входным данным ничего не найдено или реестр не вернул данных. Проверьте корректность ФИО, ИНН, адреса, кадастрового номера и полноту входных атрибутов.
Подписка есть, но запросы не проходят Лимит закончился, подписка неактивна или фильтр выбран не по тому kind. Проверьте /subscriptions/current: активность, остаток лимита, kind и связанный продукт.
Практика поддержки: сохраняйте у себя исходный request, response и время обращения. Это резко ускоряет разбор спорных кейсов и обращений в поддержку.

Глоссарий

Эти термины стоит одинаково трактовать и в коде интеграции, и в интерфейсе для операторов.

Термин Что означает Зачем нужен
product_name Техническое имя продукта, которое передаётся при создании заказа. Определяет, какую именно проверку или отчёт вы заказываете.
order_item_id Уникальный идентификатор конкретного элемента заказа. По нему запрашиваются статус, результат и скачивание файла.
kind Тип подписки или категория subscription-продукта. Помогает понять, к какому классу запросов относится подписка.
plan_code Код тарифного плана подписки. Используется для различения пакетов, лимитов и условий биллинга.
task_type Тип внутренней задачи в сложном продукте, например в risk-отчёте. Позволяет отличать блоки результата друг от друга.
job_name Название отдельной проверки или источника внутри задачи. Нужно для интерпретации конкретного ответа по источнику.
data Основной контейнер результата. В зависимости от продукта может содержать JSON-ответ, массив объектов или ссылки на файлы.
file_pdf_url, file_signed_zip_url Ссылки на готовые файлы отчёта. Используются после получения статуса done.

Обязательные поля и качество результата

Чтобы снизить количество пустых или спорных результатов, важно разделять: что необходимо для технического принятия запроса и что повышает точность проверки.

Сценарий Технически обязательные поля Поля, повышающие качество Что будет, если не передавать
Проверка физлица (CheckOwnerV2) first, surname + корректная оболочка order_items/metadata birthday, passport, inn, snils, patronymic, region Запрос может пройти, но возрастает риск неполного совпадения, пустых ответов и ложных совпадений.
Проверка юрлица (CounterAgent) first, inn, region, owner_type Полное наименование компании, дополнительные идентификаторы и корректный регион Повышается вероятность, что данные будут неполными или не совпадут с нужным контрагентом.
Риск-отчёт (RiskAssessmentV2) product_name, object_key, базовые данные участника object_address, registration_number, паспорт/дата рождения/ИНН участника Часть risk-задач может отработать с меньшей детализацией или вернуть неполный набор найденных рисков.
Поиск кадастрового номера (/search) query Полный и структурированный адрес: город, улица, дом, корпус, квартира Чем менее точный адрес, тем больше шумных результатов или вероятность пустой выдачи.
Практика: если интеграция пользовательская, лучше валидировать поля на своей стороне и подсвечивать, какие атрибуты не обязательны технически, но влияют на качество результата.

Хорошие и плохие запросы

Один хороший и один плохой пример обычно ускоряют интеграцию лучше, чем длинный текстовый список ограничений.

Проверка физлица: хороший пример

{
  "order_items": [
    {
      "product_name": "CheckOwnerV2",
      "metadata": {
        "ownersData": [
          {
            "first": "Иван",
            "surname": "Петров",
            "patronymic": "Александрович",
            "birthday": "1978-08-01T00:00:00.000Z",
            "passport": "1809370925",
            "inn": "123456789012",
            "region": "50",
            "owner_type": 0
          }
        ]
      }
    }
  ]
}

Почему хорошо: есть базовые идентификаторы и дата рождения, что уменьшает количество ложных совпадений.

Проверка физлица: плохой пример

{
  "order_items": [
    {
      "product_name": "CheckOwnerV2",
      "metadata": {
        "ownersData": [
          {
            "first": "Иван",
            "surname": "Иванов"
          }
        ]
      }
    }
  ]
}

Почему плохо: запрос может быть принят, но точность будет низкой, особенно для распространённых ФИО.

Проверка юрлица: хороший пример

{
  "order_items": [
    {
      "product_name": "CounterAgent",
      "metadata": {
        "ownersData": [
          {
            "first": "АО Компания",
            "inn": "1640011322",
            "region": "16",
            "owner_type": 1
          }
        ]
      }
    }
  ]
}

Почему хорошо: заполнены ключевые поля для точной идентификации контрагента.

Проверка юрлица: плохой пример

{
  "order_items": [
    {
      "product_name": "CounterAgent",
      "metadata": {
        "ownersData": [
          {
            "first": "Компания"
          }
        ]
      }
    }
  ]
}

Почему плохо: отсутствуют ИНН и регион, из-за чего вероятность релевантного результата резко падает.

Поиск по адресу: хороший и плохой варианты

# Хорошо:
GET /search?query=Москва,+пр-кт.+Рязанский,+д.+97,+корп.+2,+кв.+74

# Плохо:
GET /search?query=Рязанский

Почему плохо: короткий и неструктурированный запрос возвращает шум или слишком широкий список объектов.

Риск-отчёт: хороший и плохой варианты

{
  "order_items": [
    {
      "product_name": "RiskAssessmentV2",
      "object_key": "50:11:0050501:2982",
      "object_address": "Московская область, ...",
      "metadata": {
        "ownersData": [
          {
            "owner_type": 0,
            "first": "Иван",
            "surname": "Петров",
            "passport": "1809370925",
            "birthday": "1978-08-01T00:00:00.000Z",
            "region": "50",
            "registration_number": "50-50/011-50/011/002/2016-5561/1"
          }
        ]
      }
    }
  ]
}
{
  "order_items": [
    {
      "product_name": "RiskAssessmentV2",
      "object_key": "50:11:0050501:2982"
    }
  ]
}

Почему второй вариант хуже: отчёт может построиться, но часть проверок по участникам сделки будет недоступна или неполна.

Как работать с подписками

Раздел нужен для нового интегратора, чтобы быстро понять, активна ли подписка, есть ли лимит, и когда лучше использовать подписочный сценарий.

Вопрос Что проверить Как интерпретировать
Подписка активна? is_active, expires_at в GET /subscriptions/current Если is_active=true и срок не истек, подписка доступна для запросов.
Лимит закончился? limit_reached, requests_left, is_unlimited Если limit_reached=true или requests_left=0 (при is_unlimited=false), лимит исчерпан.
kind и продукт — это одно и то же? kind + product_name kind — тип подписки, product_name — конкретный продукт в API.
Где смотреть историю расходования? GET /subscriptions/usage По usage видно, какие запросы прошли, с каким результатом и каким payload.

Когда использовать подписку, а когда обычный заказ

Быстрая проверка статуса подписки

curl -X GET "https://apirc.ru/subscriptions/current?only_active=true&has_requests_left=true" \
-H "API-Key: YOUR_API_KEY"

Ожидания по результату

Часть интеграционных проблем возникает из-за ожидания «всегда полный ответ». Ниже практическая норма по поведению API.

Ситуация Это нормально? Комментарий
Пустой массив в поиске по адресу Да Означает, что по текущему запросу объект не найден в источнике, а не ошибку API.
Часть полей в data отсутствует или null Да Некоторые поля зависят от внешних реестров и могут отсутствовать для конкретного кейса.
Долгий статус in_progress Да Срок зависит от внешних источников. Нужен polling с разумным интервалом, не слишком частый.
Разная полнота результатов для похожих кейсов Да Качество зависит от полноты входных данных и актуальности внешних источников на момент запроса.
В usage нет распарсенного payload/response Да JSON-поля возвращаются только при include_result=true и валидном JSON в хранилище.
Важно: если результат выглядит неполным, сначала проверьте качество входных данных, затем повторите запрос на обновлённых атрибутах и только потом эскалируйте в поддержку.

Webhooks: интеграция

Webhook отправляет событие order.final_status_changed, когда order_item переходит в терминальный статус: DONE, REFUND, DELETED, ACTION_REQUIRED.

Кроме событий по заказам, для продуктов мониторинга объекта доступны отдельные webhook-события семейства objectinfo_monitoring.*.

Текущий и планируемый путь интеграции

Сценарий Статус Как использовать
Личный кабинет /user/webhooks Планируется UI-управление webhook подписками на странице https://lkrc.ru/user/webhooks.
Интеграция через API Доступно сейчас Используйте API-Key и методы /webhooks.

Минимальный flow через API-Key (доступен уже сейчас)

  1. Создайте/получите API-ключ в личном кабинете.
  2. Создайте подписку: POST /webhooks.
  3. Сохраните secret и настройте проверку подписи на своей стороне.
  4. Проверьте endpoint командой POST /webhooks/{webhookID}/ping.
  5. Мониторьте GET /webhooks и при авто-отключении вызывайте POST /webhooks/{webhookID}/reset.

Быстрые команды

# 1) Создать подписку
curl -X POST "https://apirc.ru/webhooks" \
  -H "API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target_url": "https://client.example.com/hooks/realtycloud",
    "active": true
  }'

# 2) Тестовый вызов (ping)
curl -X POST "https://apirc.ru/webhooks/{webhookID}/ping" \
  -H "API-Key: YOUR_API_KEY"

# 3) Проверить состояние подписок
curl -X GET "https://apirc.ru/webhooks" \
  -H "API-Key: YOUR_API_KEY"
Важно: клиентский endpoint должен принимать POST c JSON и быстро возвращать 2xx. Для безопасной обработки используйте X-RC-Webhook-Id/Idempotency-Key как ключ дедупликации и проверяйте подпись X-RC-Webhook-Signature.

Какие события и для каких продуктов приходят

Событие Когда приходит На какие продукты действует Какой payload приходит
order.final_status_changed Когда любой order_item переходит в терминальный статус DONE, REFUND, DELETED или ACTION_REQUIRED. На все API-продукты, которые создаются через заказ и имеют order_item: например, CheckOwnerV2, CreditRating, IndependentReportAI, CounterAgent, CheckAuto, EGRN-продукты и другие. Точный продукт всегда можно определить по полю order.item.product_name. Снимок заказа и конкретного order_item на момент доставки webhook.
webhook.ping Только при ручной проверке через POST /webhooks/{webhookID}/ping. Техническое событие, не зависит от продукта. Минимальный тестовый payload без заказа.
objectinfo_monitoring.* Когда срабатывают события мониторинга объекта: изменения, ошибки настройки, ошибки источника, нехватка баланса, напоминания об окончании, окончание подписки. Только на продукты/сценарии мониторинга объекта (ObjectInfo). Payload с блоками monitoring и, при наличии проверки, check.

JSON-модель: order.final_status_changed

{
  "delivery_id": "f1f33ec5-3645-4b31-bc4a-1df2bb1b4267",
  "type": "order.final_status_changed",
  "occurred_at": "2026-03-04T18:20:00Z",
  "order_id": "e2e0e58d-cf26-48fe-8b1d-7f533ef455a4",
  "order_item_id": "30947b06-3eb1-4c4c-8f13-2cc53ff63c93",
  "person_id": "e9d99ec7-1b8f-4f19-bb4c-206cc8404c65",
  "status": "DONE",
  "order": {
    "order_id": "e2e0e58d-cf26-48fe-8b1d-7f533ef455a4",
    "owner_id": "e9d99ec7-1b8f-4f19-bb4c-206cc8404c65",
    "owner_email": "client@example.com",
    "owner_phone": "+79990000000",
    "paid": true,
    "created_at": "2026-03-04T17:55:00Z",
    "source": "https://partner.example.com",
    "transaction_id": "7d2b73b8-a4fb-4a40-9f7a-f1f8db8829c8",
    "transaction_status_id": 4,
    "item": {
      "order_item_id": "30947b06-3eb1-4c4c-8f13-2cc53ff63c93",
      "order_id": "e2e0e58d-cf26-48fe-8b1d-7f533ef455a4",
      "product_id": "30b9fa1e-27e7-4976-ba73-b4c4b03a1559",
      "product_name": "CheckOwnerV2",
      "amount": 1,
      "price": "249",
      "discount": "0",
      "status": "done",
      "comment": "",
      "metadata": {
        "ownersData": [
          {
            "first": "Иван",
            "surname": "Иванов",
            "patronymic": "Иванович",
            "birthday": "1997-04-07T00:01:00.0Z",
            "passport": "9217285273",
            "region": "16",
            "owner_type": 0
          }
        ]
      },
      "rosreestr_request_id": "",
      "item_metadata": {
        "order_item_id": "30947b06-3eb1-4c4c-8f13-2cc53ff63c93"
      },
      "is_order_paid": true,
      "download_link_pdf": "https://apirc.ru/download?orderID=30947b06-3eb1-4c4c-8f13-2cc53ff63c93&fileType=pdf",
      "download_link_zip": "https://apirc.ru/download?orderID=30947b06-3eb1-4c4c-8f13-2cc53ff63c93&fileType=signed_zip",
      "item_statuses": [
        {
          "status": "done",
          "created_at": "2026-03-04T18:20:00Z"
        }
      ]
    }
  }
}

Поля payload для order.final_status_changed

Поле Тип Описание
delivery_id UUID Уникальный идентификатор доставки webhook. Используйте как ключ идемпотентности.
type string Тип события. Для этого сценария всегда order.final_status_changed.
occurred_at datetime Время формирования payload в UTC.
order_id, order_item_id, person_id UUID Идентификаторы заказа, позиции заказа и владельца заказа.
status string Нормализованный терминальный API-статус: DONE, REFUND, DELETED, ACTION_REQUIRED.
order object Снимок заказа на момент доставки webhook.
order.item.product_name string Название продукта, по которому можно маршрутизировать обработку на своей стороне.
order.item.metadata object Исходные metadata заказа. Полезно для построения собственных DTO и повторной идентификации входных параметров.
order.item.item_metadata object|null Результирующие метаданные по продукту, если они доступны для данного типа отчёта.
order.item.download_link_pdf, order.item.download_link_zip string Ссылки на выгрузку готовых файлов, если они уже сформированы.

JSON-модель: webhook.ping

{
  "type": "webhook.ping",
  "occurred_at": "2026-03-04T18:22:00Z",
  "webhook_subscription_id": "0f58cd3c-2d8a-4f57-8d0d-a4bc570c9c62",
  "message": "ping"
}

JSON-модель: objectinfo_monitoring.changes_detected

{
  "type": "objectinfo_monitoring.changes_detected",
  "occurred_at": "2026-03-16T09:45:00Z",
  "person_id": "e9d99ec7-1b8f-4f19-bb4c-206cc8404c65",
  "monitoring": {
    "monitoring_id": "11111111-1111-1111-1111-111111111111",
    "cadastr": "77:04:0002010:1101",
    "frequency": "weekly",
    "status": "active",
    "duration_days": 0,
    "tracking_keys": ["rights", "encumbrances"],
    "has_unread_changes": true,
    "successful_checks": 7,
    "failed_checks": 1,
    "charged_total_rub": "18.72",
    "next_check_at": "2026-03-16T10:00:00Z",
    "last_success_at": "2026-03-15T09:30:00Z",
    "expires_at": "2026-04-01T00:00:00Z"
  },
  "check": {
    "check_id": "22222222-2222-2222-2222-222222222222",
    "status": "success_with_changes",
    "http_status": 200,
    "app_status": "success",
    "success": true,
    "consumed": true,
    "amount_rub": "2.16",
    "diff_summary": "Изменились права",
    "diff_result": [
      {
        "key": "rights"
      }
    ],
    "created_at": "2026-03-16T09:45:00Z"
  }
}
Подсказка для генерации моделей: для большинства интеграций достаточно завести три DTO: OrderFinalStatusChangedWebhook, WebhookPingPayload и ObjectInfoMonitoringWebhook. Разбор по бизнес-логике лучше делать по паре type + order.item.product_name.

Changelog документации

Короткий changelog помогает интеграторам быстро понимать, что изменилось и нужно ли дорабатывать клиента.

Дата Изменение Совместимость
2026-07-22 Документация и все примеры API переведены на домен apirc.ru. Подробные страницы доступны в /static/. Да: замените базовый URL https://api.realtycloud.pro на https://apirc.ru.
2026-05-04 В документации CheckOwner источники начислений Госуслуг обновлены: общий gosuslugi_bills разделён на gosuslugi_bills_driver_license, gosuslugi_bills_inn, gosuslugi_bills_passport, gosuslugi_bills_snils; источник mosgorsud удалён из списка. Breaking для клиентов, которые ожидали старый job name gosuslugi_bills или источник mosgorsud
2026-03-26 Раздел Webhooks: интеграция расширен точными JSON-моделями для order.final_status_changed, webhook.ping и objectinfo_monitoring.*, а также описанием того, на какие продукты распространяются события. Non-breaking (изменения только в документации)
2026-03-04 В doc.html добавлен раздел Webhooks: интеграция на основе webhooks_api.md с текущим flow через API-Key и пометкой о планируемой странице /user/webhooks. Non-breaking (изменения только в документации)
2026-03-04 Добавлены описания и относительные ссылки для файлов doc.html, doc_check_owner.html, doc_credit_rating.html, doc_owner.html, doc_risk.html; обновлены скрипты публикации send.sh и send.bat. Non-breaking (изменения только в документации)
2026-03-04 Добавлены разделы Quick Start, сценарии интеграции, статусы заказов, ошибки, глоссарий. Non-breaking (изменения только в документации)
2026-03-04 Добавлены пояснения по обязательным полям, качеству результата, примерам хороших/плохих запросов, UX по подпискам, ожиданиям по результату. Non-breaking (изменения только в документации)
2026-03-04 Для subscriptions задокументированы product_id, product_name, product_description и совместимость с API-Key. Backward compatible для API-клиентов