API для разработчиков
Программный доступ к закупкам, откликам и уведомлениям для интеграции с вашими системами.
Быстрый старт
Получите API-ключ в личном кабинете (Настройки → API) и сделайте первый запрос:
# Список активных закупок по категории «ИТ-инфраструктура»
curl https://m-dom.xyz/api/v1/tenders?category[]=ИТ-инфраструктура \
-H "Authorization: Bearer ВАШ_API_КЛЮЧ"
Все ответы приходят в формате JSON, кодировка UTF-8, даты — ISO 8601.
Авторизация
Каждый запрос должен содержать личный API-ключ в заголовке Authorization. Ключ будет выдаваться в личном кабинете после подключения тарифа с доступом к API.
GET /api/v1/tenders HTTP/1.1
Host: m-dom.xyz
Authorization: Bearer ВАШ_API_КЛЮЧ
Base URL: https://m-dom.xyz/api/v1
Лимиты запросов
| Тариф | Запросов в минуту | Запросов в день |
|---|---|---|
| Базовый | 30 | 2 000 |
| Расширенный | 120 | 20 000 |
При превышении лимита API вернёт 429 Too Many Requests.
Формат ошибок
Все ошибки возвращаются в едином формате с HTTP-кодом и телом ответа:
{
"error": {
"code": "validation_error",
"message": "Поле budget обязательно для заполнения"
}
}
| Код | Значение |
|---|---|
| 400 | Некорректный запрос (ошибка валидации) |
| 401 | Неверный или отсутствующий API-ключ |
| 403 | Ключ не имеет доступа к этому действию (например, у роли покупателя нет доступа к созданию отклика) |
| 404 | Объект не найден |
| 429 | Превышен лимит запросов |
| 500 | Внутренняя ошибка сервера |
Закупки
GET
/tenders
Список активных закупок с фильтрами — те же параметры, что в веб-каталоге.
| Параметр | Тип | Описание |
|---|---|---|
| q | string | Поиск по названию/категории |
| category[] | string[] | Фильтр по категориям |
| region | string | Фильтр по региону |
| okpd2 | string | Фильтр по коду ОКПД2 |
| budget_min / budget_max | number | Диапазон бюджета, ₽ |
| page / per_page | number | Пагинация (по умолчанию per_page=20, максимум 100) |
// Пример ответа
{
"data": [
{
"id": 9,
"ref": "BP-2026-0009",
"title": "Поставка офисной мебели",
"category": "Мебель",
"okpd2_code": "31.01",
"region": "Москва",
"budget": 500000,
"deadline_date": "2026-12-31",
"bids_count": 3
}
],
"meta": { "page": 1, "total": 42 }
}
GET
/tenders/{id}
Полная карточка одной закупки, включая описание, ТЗ и список документов.
POST
/tenders
Публикация новой закупки. Доступно только ключам с ролью «покупатель».
// Пример запроса
{
"title": "Поставка ноутбуков",
"category": "ИТ-инфраструктура",
"okpd2_code": "26.20.11",
"region": "Москва",
"description": "...",
"budget": 5000000,
"deadline_date": "2026-12-31"
}
PATCH
/tenders/{id}/close
Досрочное закрытие своей закупки.
Отклики
GET
/bids
Список своих откликов (для поставщика) или откликов по своим закупкам (для покупателя).
POST
/tenders/{id}/bids
Отклик на закупку. Доступно только ключам с ролью «поставщик». Списывает стоимость отклика с баланса — при недостатке средств вернёт
402 Payment Required.// Пример запроса
{
"price": 4800000,
"delivery_days": 15,
"comment": "Готовы поставить в срок"
}
PATCH
/bids/{id}/accept
Принятие отклика. Доступно только покупателю — владельцу закупки, к которой относится отклик.
PATCH
/bids/{id}/reject
Отклонение отклика.
Профиль компании
GET
/me
Данные компании, к которой привязан API-ключ: название, ИНН, КПП, ОГРН, юридический адрес, баланс, роль.
// Пример ответа
{
"id": 14,
"role": "supplier",
"company_name": "ООО «Пример»",
"inn": "7707083893",
"kpp": "770701001",
"ogrn": "1027700132195",
"legal_address": "г. Москва, ...",
"balance": 42000.00
}
GET
/me/balance/transactions
История операций по балансу — списания за отклики, пополнения.
Справочники
GET
/catalogs/okpd2?q=мебель
Поиск по классификатору ОКПД2 (20 979 позиций) — тот же справочник, что используется в веб-версии при создании закупки.
// Пример ответа
{
"results": [
{ "code": "31.01", "name": "Мебель для офисов и предприятий торговли" },
{ "code": "31.09", "name": "Мебель прочая" }
]
}
GET
/catalogs/regions
Список регионов, встречающихся в активных закупках — для построения фильтров у себя в интерфейсе.
Webhooks
Уведомления о событиях на ваш URL в реальном времени, без опроса API.
| Событие | Когда срабатывает |
|---|---|
| tender.bid_received | Новый отклик на вашу закупку |
| bid.status_changed | Ваш отклик приняли или отклонили |
| chat.message_received | Новое сообщение в чате по сделке |
// Тело запроса, который придёт на ваш webhook URL
{
"event": "bid.status_changed",
"bid_id": 42,
"status": "accepted",
"timestamp": "2026-12-01T10:15:00Z"
}
SDK и библиотеки
Официальные клиенты для популярных языков — оборачивают запросы к API и подписывают webhook-события.
| Язык | Пакет |
|---|---|
| PHP | composer require procurehub/api-client |
| Node.js | npm install @procurehub/api-client |
| Python | pip install procurehub-api |