Для разработчиков

REST API и вебхуки MirAmica

Подключайте сайт, 1С, BI, телефонию и собственные сервисы к проекту MirAmica: работайте с CRM, задачами, каталогом, бронированиями, записями, календарём компании, диском, оплатами и сотрудниками, получайте события в реальном времени. Один API для всех направлений — отели, клиники, CRM, салоны, фитнес, автосервисы и другие.

  • REST + JSONметоды в стиле Битрикс24
  • Ключ + секретсвои для каждого проекта
  • Вебхукивходящие и исходящие, HMAC-подпись

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

  • Откройте в кабинете Настройки → Для разработчиков. Раздел доступен владельцу и администраторам проекта.
  • На вкладке «API-ключи» нажмите «Новый ключ», выберите доступы и скопируйте ключ и секрет — секрет показывается один раз.
  • Отправьте первый запрос — метод app.info вернёт данные проекта и права ключа.
curl -X POST "https://<поддомен>.miramica.ru/api/v1/app.info" \
  -H "X-Api-Key: mk_live_3f9c2a71d04b8e6a15c0f2d9" \
  -H "X-Api-Secret: mks_Q2xh...секрет"

Авторизация

Каждый проект получает собственные ключи — они работают только с данными этого проекта. Ключ имеет вид mk_live_…, секрет — mks_…. Секрет хранится у нас только в виде хеша: если он утерян, перевыпустите его в кабинете (старый перестанет работать сразу).

СпособКак передать
Заголовки (рекомендуется)X-Api-Key: mk_live_… и X-Api-Secret: mks_…
BearerAuthorization: Bearer mk_live_….mks_… — ключ и секрет через точку
Входящий вебхукТокен уже в URL: /api/rest/<ID проекта>/<токен>/<метод> — заголовки не нужны. ID проекта — поддомен кабинета (например zdorovie), его видно в разделе «Для разработчиков».

При создании ключа выбираются доступы (scopes). Право на запись включает чтение того же раздела.

ScopeЧто разрешает
crm:readЧтение лидов, сделок и активностей; контактов и компаний — только при включённом доступе к персональным данным
crm:writeСоздание, изменение и удаление CRM-сущностей
tasks:readЧтение задач
tasks:writeСоздание, изменение и удаление задач
catalog:readЧтение каталога товаров, услуг и категорий
catalog:writeСоздание и изменение товаров / услуг
bookings:readЧтение бронирований, записей и объектов
bookings:writeСоздание и изменение бронирований и записей
calendar:readЧтение событий обычного календаря компании
calendar:writeСоздание, изменение и удаление событий календаря компании
drive:readЧтение файлов и папок диска компании
drive:writeЗагрузка/удаление файлов и создание/удаление папок диска
payments:readЧтение оплат (ссылки, folio, клиника)
staff:readЧтение сотрудников (без паролей и секретов)

Не размещайте секрет в коде сайта или мобильного приложения — вызывайте API только со своего сервера. Для форм на сайте используйте входящий вебхук с минимальными правами.

Персональные данные (152-ФЗ)

По умолчанию персональные данные клиентов и компаний через API недоступны. Анонимного доступа к данным проекта нет: каждый запрос требует API-ключа или секретного токена входящего вебхука с нужными правами.

ЧтоДоступ к ПДн выключен (по умолчанию)Доступ к ПДн включён
crm.contact.*, crm.company.*HTTP 403, PII_ACCESS_DISABLED — и чтение, и записьРаботают при наличии crm:read / crm:write
booking.*, calendar.appointment.*Работают; ФИО, телефон, e-mail и комментарий клиента в ответе — null, добавлено "piiRedacted": trueПолные данные (без паспорта / документов / base64)
calendar.event.*description и meta — null; title — телефоны/e-mail убраны ("piiRedacted": true)Полные поля события (без секретов в meta)
crm.lead.*, crm.deal.*, crm.task.*Свободный текст (notes / description / subject / body / comment / note) — null; title — телефоны/e-mail убраны, авто-заголовки виджетов с ФИО заменены на [ПДн]; суммы, стадии, id и даты сохраняютсяПолные данные из whitelist полей
crm.activity.*phone, subject, body — nullПолные данные
Платежи (payment.* / вебхуки payment.received)note / description — null; суммы, статусы, id связейWhitelist полей (без паспорта / банковских реквизитов / токенов)
Вебхуки contact.*, company.*Только id, crmId, связи и даты, "piiRedacted": trueПоля из списка методов (без паспортных и банковских данных)
Вебхуки booking.*, appointment.*ФИО, телефон, e-mail и комментарий — nullПолные данные (whitelist)
Вебхуки lead.*, deal.*, task.*Только id, стадии/статусы, суммы, связи и даты (title / notes / description не отдаются)Whitelist полей
Прочие сущности в вебхукахТолько безопасный allowlist (id, связи *Id, статусы, суммы, даты) — полные строки БД не отправляютсяТот же бизнес-allowlist (полные строки БД не отправляются)

Включить доступ может только владелец проекта: кабинет → Настройки → Для разработчиков → блок «Персональные данные клиентов и компаний» → «Разрешить доступ через API». Выключить может любой сотрудник с правом «API-ключи и вебхуки»; после выключения неотправленные вебхуки с персональными данными отменяются. Текущее состояние возвращает app.info (personalDataAccess), а app.methods помечает такие методы флагом personalData.

{
  "error": "PII_ACCESS_DISABLED",
  "error_description": "Доступ к персональным данным клиентов и компаний через API отключён. Владелец проекта может включить его в разделе «Для разработчиков» → «Персональные данные»."
}

Даже при включённом доступе API и вебхуки не передают паспортные данные и документы клиентов, банковские реквизиты компаний, токены гостевых ссылок и служебные секреты.

Включая доступ, владелец проекта как оператор персональных данных отвечает за законность их передачи во внешние системы: правовое основание и согласия субъектов, договор поручения обработки с получателем, хранение ключей и адресов вебхуков, а также локализацию данных граждан РФ (ч. 5 ст. 18 152-ФЗ). Формы на сайте могут создавать лиды без доступа к ПДн — используйте crm.lead.add.

Запросы и ответы

Базовый адрес: https://<поддомен>.miramica.ru/api/v1/<метод>. Точный адрес вашего проекта показан в кабинете. Поддерживаются GET (параметры в query) и POST (JSON-тело, Content-Type: application/json). Параметры query и тела объединяются. Суффикс .json в имени метода допускается: crm.deal.list.json.

Поля для создания и изменения можно передать как в объекте fields (как в Битрикс24), так и плоско на верхнем уровне.

{ "fields": { "title": "Заявка с сайта", "amount": 15000 } }

Успешный ответ — HTTP 200 с полем result. Списки дополнительно возвращают total и next — смещение следующей страницы (отсутствует на последней). Поле time — время обработки запроса.

Постраничная выборка: limit — от 1 до 100 (по умолчанию 50), start (или offset) — смещение. Списки отсортированы от новых к старым.

{
  "result": [ { "id": "cm8x…", "title": "Поставка оборудования", "stage": "new" } ],
  "total": 134,
  "next": 50,
  "time": { "start": "…", "finish": "…", "duration": 12 }
}

Даты передаются и возвращаются в ISO-8601 (UTC), суммы — числами, идентификаторы — строками.

Ошибки

При ошибке возвращается соответствующий HTTP-статус и JSON с кодом и описанием на русском языке.

{
  "error": "INSUFFICIENT_SCOPE",
  "error_description": "Недостаточно прав: метод crm.deal.add требует scope crm:write"
}
HTTPerrorКогда
400INVALID_PARAMSНе заполнено обязательное поле, неверный формат, несуществующая стадия
401UNAUTHORIZEDНет ключа, неверный секрет, ключ отозван, вебхук выключен
402PAYMENT_REQUIREDДостигнут лимит тарифа (например, по числу клиентов)
403INSUFFICIENT_SCOPEУ ключа нет нужного доступа
403PII_ACCESS_DISABLEDМетод контактов / компаний, а доступ к персональным данным через API в проекте выключен
404NOT_FOUNDМетод или запись не найдены
405METHOD_NOT_ALLOWEDHTTP-метод кроме GET и POST
409CONFLICTКонфликт данных
429RATE_LIMITEDПревышен лимит запросов
500INTERNAL_ERRORВнутренняя ошибка — повторите позже

Лимиты

  • 120 запросов в минуту на каждый ключ или входящий вебхук (окно — календарная минута).
  • В каждом ответе: X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset (секунд до сброса окна).
  • При превышении — HTTP 429 и заголовок Retry-After (секунды).
  • До 20 активных API-ключей, 20 входящих и 20 исходящих вебхуков на проект.
  • Списки — не больше 100 записей за запрос.

Методы REST API

Адрес метода: https://<поддомен>.miramica.ru/api/v1/<метод> или https://<поддомен>.miramica.ru/api/rest/<ID проекта>/<токен>/<метод> для входящего вебхука. Список методов доступен и через API — app.methods.

МетодScopeОписание
Приложение
app.info—Информация о проекте
app.methods—Список методов
Контакты
crm.contact.listcrm:readСписок контактов
crm.contact.getcrm:readКонтакт по ID
crm.contact.addcrm:writeСоздать контакт
crm.contact.updatecrm:writeИзменить контакт
crm.contact.deletecrm:writeУдалить контакт
Компании
crm.company.listcrm:readСписок компаний
crm.company.getcrm:readКомпания по ID
crm.company.addcrm:writeСоздать компанию
crm.company.updatecrm:writeИзменить компанию
Лиды
crm.lead.listcrm:readСписок лидов
crm.lead.getcrm:readЛид по ID
crm.lead.addcrm:writeСоздать лид
crm.lead.updatecrm:writeИзменить лид
crm.lead.deletecrm:writeУдалить лид
Сделки
crm.deal.listcrm:readСписок сделок
crm.deal.getcrm:readСделка по ID
crm.deal.addcrm:writeСоздать сделку
crm.deal.updatecrm:writeИзменить сделку
crm.deal.deletecrm:writeУдалить сделку
Активности
crm.activity.listcrm:readСписок активностей
crm.activity.addcrm:writeДобавить активность / заметку
Задачи
tasks.task.listtasks:readСписок задач
tasks.task.gettasks:readЗадача по ID
tasks.task.addtasks:writeСоздать задачу
tasks.task.updatetasks:writeИзменить задачу
tasks.task.completetasks:writeЗавершить задачу
tasks.task.deletetasks:writeУдалить задачу
Каталог
catalog.product.listcatalog:readКаталог товаров и услуг
catalog.product.getcatalog:readТовар / услуга по ID
catalog.product.addcatalog:writeСоздать товар / услугу
catalog.product.updatecatalog:writeИзменить товар / услугу
catalog.category.listcatalog:readКатегории каталога
Бронирования
booking.listbookings:readБронирования · Отели
booking.getbookings:readБронирование по ID · Отели
booking.addbookings:writeСоздать бронирование · Отели
booking.updatebookings:writeИзменить бронирование · Отели
booking.cancelbookings:writeОтменить бронирование · Отели
property.listbookings:readОбъекты · Отели, автосервис и др. с точками
Записи
calendar.appointment.listbookings:readЗаписи на приём · Клиники, салоны, фитнес, автосервисы
calendar.appointment.getbookings:readЗапись по ID · Клиники, салоны, фитнес, автосервисы
calendar.appointment.addbookings:writeСоздать запись · Клиники, салоны, фитнес, автосервисы
calendar.appointment.updatebookings:writeИзменить запись · Клиники, салоны, фитнес, автосервисы
calendar.appointment.cancelbookings:writeОтменить запись · Клиники, салоны, фитнес, автосервисы
Календарь
calendar.getcalendar:readКалендарь компании
calendar.event.listcalendar:readСобытия календаря компании
calendar.event.getcalendar:readСобытие календаря по ID
calendar.event.addcalendar:writeСоздать событие календаря
calendar.event.updatecalendar:writeИзменить событие календаря
calendar.event.deletecalendar:writeУдалить событие календаря
Диск
drive.browsedrive:readДиск: содержимое папки
drive.folder.adddrive:writeДиск: создать папку
drive.folder.deletedrive:writeДиск: удалить папку
drive.file.getdrive:readДиск: метаданные файла
drive.file.adddrive:writeДиск: загрузить файл
drive.file.downloaddrive:readДиск: скачать файл
drive.file.deletedrive:writeДиск: удалить файл
Оплаты
payment.listpayments:readСписок оплат
payment.getpayments:readОплата по ID
Сотрудники
user.liststaff:readСотрудники

Приложение

app.info

без scope

Информация о проекте

Название, направление, валюта, часовой пояс проекта, публичный projectId (поддомен кабинета), способ авторизации, доступы текущего ключа и personalDataAccess — открыт ли доступ к персональным данным. Поле tenantId совпадает с projectId.

curl -X POST "https://<поддомен>.miramica.ru/api/v1/app.info" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{}'

app.methods

без scope

Список методов

Все методы API с требуемым scope, флагом personalData (метод работает с персональными данными) и allowed — доступен ли метод текущему ключу с учётом настройки персональных данных.

curl -X POST "https://<поддомен>.miramica.ru/api/v1/app.methods" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{}'

Контакты

crm.contact.list

crm:read

Список контактов

Контакты проекта, от новых к старым. Обезличенные по 152-ФЗ записи не возвращаются. Нужен включённый доступ к персональным данным, иначе HTTP 403 PII_ACCESS_DISABLED.

ПараметрТипОписание
qstringПоиск по имени, фамилии, телефону, email
updatedSincestring (ISO-8601)Только записи, изменённые не раньше этой даты
limitnumber1–100, по умолчанию 50
startnumberСмещение (offset)
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.contact.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "q": "Иванов", "limit": 20 }'

crm.contact.get

crm:read

Контакт по ID

Один контакт. Ответ — объект в том же формате, что в списке. Нужен доступ к персональным данным.

ПараметрТипОписание
idобязательныйstringID контакта
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.contact.get" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm8xc01…" }'

crm.contact.add

crm:write

Создать контакт

Создаёт контакт; ответственный — владелец ключа. Учитывает лимит клиентов по тарифу (HTTP 402). Нужен доступ к персональным данным; без него для заявок используйте crm.lead.add.

ПараметрТипОписание
firstNameобязательныйstringИмя (до 120 символов)
lastNamestringФамилия
phonestringОсновной телефон
emailstringОсновной email
companyIdstringID компании проекта
notesstringКомментарий (до 5000 символов)
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.contact.add" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
  "fields": {
    "firstName": "Анна",
    "lastName": "Смирнова",
    "phone": "+79991234567",
    "email": "anna@example.com"
  }
}'

crm.contact.update

crm:write

Изменить контакт

Меняет только переданные поля. Новый phone/email становится основным, остальные телефоны и адреса сохраняются. Нужен доступ к персональным данным.

ПараметрТипОписание
idобязательныйstringID контакта
fieldsобязательныйobjectfirstName, lastName, phone, email, companyId, notes
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.contact.update" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm8xd77…", "fields": { "phone": "+79990000000", "notes": "VIP-клиент" } }'

crm.contact.delete

crm:write

Удалить контакт

Удаляет контакт проекта. Вызывает событие contact.deleted. Нужен доступ к персональным данным.

ПараметрТипОписание
idобязательныйstringID контакта
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.contact.delete" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm8xd77…" }'

Компании

crm.company.list

crm:read

Список компаний

Компании проекта. Нужен доступ к персональным данным, иначе HTTP 403 PII_ACCESS_DISABLED.

ПараметрТипОписание
qstringПоиск по названию и ИНН
updatedSincestring (ISO-8601)Только изменённые не раньше даты
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.company.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "q": "7701" }'

crm.company.get

crm:read

Компания по ID

Одна компания. Нужен доступ к персональным данным.

ПараметрТипОписание
idобязательныйstringID компании
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.company.get" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm8y…" }'

crm.company.add

crm:write

Создать компанию

Создаёт компанию; ответственный — владелец ключа. Нужен доступ к персональным данным.

ПараметрТипОписание
nameобязательныйstringНазвание
legalNamestringПолное юридическое название
innstringИНН
kppstringКПП
phonestringТелефон
emailstringEmail
websitestringСайт
notesstringКомментарий
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.company.add" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "fields": { "name": "ООО «Ромашка»", "inn": "7701234567" } }'

crm.company.update

crm:write

Изменить компанию

Меняет только переданные поля. Нужен доступ к персональным данным.

ПараметрТипОписание
idобязательныйstringID компании
fieldsобязательныйobjectname, legalName, inn, kpp, phone, email, website, notes
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.company.update" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm8y…", "fields": { "phone": "+74951112233", "website": "https://romashka.ru" } }'

Лиды

crm.lead.list

crm:read

Список лидов

Лиды проекта.

ПараметрТипОписание
statusstringКод статуса воронки, например new
updatedSincestring (ISO-8601)Только изменённые не раньше даты
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.lead.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "status": "new" }'

crm.lead.get

crm:read

Лид по ID

Один лид.

ПараметрТипОписание
idобязательныйstringID лида
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.lead.get" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm8z…" }'

crm.lead.add

crm:write

Создать лид

Создаёт лид в воронке по умолчанию (или в funnelId). Статус по умолчанию — new; источник по умолчанию — api.

ПараметрТипОписание
titleобязательныйstringНазвание
statusstringКод статуса воронки лидов
funnelIdstringID воронки
sourcestringИсточник, например website
amountnumberСумма
currencystringКод валюты ISO, например RUB
contactIdstringID контакта
companyIdstringID компании
notesstringКомментарий
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.lead.add" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "fields": { "title": "Заявка с сайта", "source": "website", "amount": 25000 } }'

crm.lead.update

crm:write

Изменить лид

Меняет переданные поля. Смена status вызывает событие lead.status_changed.

ПараметрТипОписание
idобязательныйstringID лида
fieldsобязательныйobjecttitle, status, source, amount, currency, notes, contactId, companyId
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.lead.update" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm8z…", "fields": { "status": "qualified", "amount": 30000 } }'

crm.lead.delete

crm:write

Удалить лид

Удаляет лид. Вызывает событие lead.deleted.

ПараметрТипОписание
idобязательныйstringID лида
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.lead.delete" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm8z…" }'

Сделки

crm.deal.list

crm:read

Список сделок

Сделки проекта (в автосервисе — заказ-наряды).

ПараметрТипОписание
stagestringКод стадии
funnelIdstringID воронки
updatedSincestring (ISO-8601)Только изменённые не раньше даты
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.deal.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "stage": "negotiation", "limit": 100 }'

crm.deal.get

crm:read

Сделка по ID

Одна сделка.

ПараметрТипОписание
idобязательныйstringID сделки
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.deal.get" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm90…" }'

crm.deal.add

crm:write

Создать сделку

Создаёт сделку в воронке по умолчанию (или в funnelId). Стадия по умолчанию — new; код стадии проверяется по настройкам воронки.

ПараметрТипОписание
titleобязательныйstringНазвание
stagestringКод стадии
funnelIdstringID воронки
amountnumberСумма
currencystringКод валюты
contactIdstringID контакта
companyIdstringID компании
notesstringКомментарий
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.deal.add" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "fields": { "title": "Поставка оборудования", "amount": 480000, "contactId": "cm8xc01…" } }'

crm.deal.update

crm:write

Изменить сделку

Меняет переданные поля. Смена stage вызывает событие deal.stage_changed.

ПараметрТипОписание
idобязательныйstringID сделки
fieldsобязательныйobjecttitle, stage, amount, currency, notes, contactId
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.deal.update" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm90…", "fields": { "stage": "won" } }'

crm.deal.delete

crm:write

Удалить сделку

Удаляет сделку. Вызывает событие deal.deleted. Отдельного «cancel» нет — используйте смену стадии или удаление.

ПараметрТипОписание
idобязательныйstringID сделки
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.deal.delete" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm90…" }'

Активности

crm.activity.list

crm:read

Список активностей

Заметки, звонки, письма и встречи, привязанные к CRM-сущностям. Без доступа к персональным данным поле phone — null.

ПараметрТипОписание
typestringnote, call, email, meeting, system
contactIdstringФильтр по контакту
leadIdstringФильтр по лиду
dealIdstringФильтр по сделке
companyIdstringФильтр по компании
bookingIdstringФильтр по бронированию
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.activity.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "type": "note", "contactId": "cm8xc01…" }'

crm.activity.add

crm:write

Добавить активность / заметку

Создаёт активность. Тип по умолчанию — note (заметка). Автор — владелец ключа / вебхука.

ПараметрТипОписание
subjectобязательныйstringТема
typestringnote (по умолчанию), call, email, meeting, system
bodystringТекст
phonestringТелефон (для звонка)
durationSecnumberДлительность в секундах
contactIdstringКонтакт
leadIdstringЛид
dealIdstringСделка
companyIdstringКомпания
bookingIdstringБронирование
curl -X POST "https://<поддомен>.miramica.ru/api/v1/crm.activity.add" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "fields": { "type": "note", "subject": "Согласовали смету", "body": "Клиент ок", "contactId": "cm8xc01…" } }'

Задачи

tasks.task.list

tasks:read

Список задач

Задачи проекта.

ПараметрТипОписание
statusstringopen, in_progress, done или cancelled
updatedSincestring (ISO-8601)Только изменённые не раньше даты
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/tasks.task.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "status": "open" }'

tasks.task.get

tasks:read

Задача по ID

Одна задача.

ПараметрТипОписание
idобязательныйstringID задачи
curl -X POST "https://<поддомен>.miramica.ru/api/v1/tasks.task.get" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm91…" }'

tasks.task.add

tasks:write

Создать задачу

Создаёт задачу. Без assigneeId исполнитель — владелец ключа.

ПараметрТипОписание
titleобязательныйstringНазвание
descriptionstringОписание
dueAtstring (ISO-8601)Срок
assigneeIdstringID сотрудника-исполнителя
contactIdstringСвязанный контакт
dealIdstringСвязанная сделка
leadIdstringСвязанный лид
curl -X POST "https://<поддомен>.miramica.ru/api/v1/tasks.task.add" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "fields": { "title": "Перезвонить клиенту", "dueAt": "2026-10-16T10:00:00Z", "contactId": "cm8xc01…" } }'

tasks.task.update

tasks:write

Изменить задачу

Меняет переданные поля. Смена status вызывает событие task.status_changed.

ПараметрТипОписание
idобязательныйstringID задачи
fieldsобязательныйobjecttitle, description, status, dueAt, assigneeId, contactId
curl -X POST "https://<поддомен>.miramica.ru/api/v1/tasks.task.update" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm91…", "fields": { "status": "in_progress" } }'

tasks.task.complete

tasks:write

Завершить задачу

Устанавливает статус done (эквивалент tasks.task.update с status: "done").

ПараметрТипОписание
idобязательныйstringID задачи
curl -X POST "https://<поддомен>.miramica.ru/api/v1/tasks.task.complete" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm91…" }'

tasks.task.delete

tasks:write

Удалить задачу

Удаляет задачу. Вызывает событие task.deleted.

ПараметрТипОписание
idобязательныйstringID задачи
curl -X POST "https://<поддомен>.miramica.ru/api/v1/tasks.task.delete" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm91…" }'

Каталог

catalog.product.list

catalog:read

Каталог товаров и услуг

Товары и услуги проекта, по алфавиту. Поле stockQty — текущий остаток.

ПараметрТипОписание
qstringПоиск по названию, артикулу, штрихкоду
updatedSincestring (ISO-8601)Только изменённые не раньше даты
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/catalog.product.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "q": "масло" }'

catalog.product.get

catalog:read

Товар / услуга по ID

Один товар или услуга (можно передать числовой crmId).

ПараметрТипОписание
idобязательныйstringID или crmId товара
curl -X POST "https://<поддомен>.miramica.ru/api/v1/catalog.product.get" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "prd_…" }'

catalog.product.add

catalog:write

Создать товар / услугу

Создаёт позицию каталога. stockQty — начальный остаток; durationMin — длительность услуги в минутах.

ПараметрТипОписание
nameобязательныйstringНазвание
catalogIdstringID категории
skustringАртикул
barcodestringШтрихкод
descriptionstringОписание
pricenumberЦена
currencystringВалюта
vatRatenumberНДС %, по умолчанию 20
unitstringЕд. изм., по умолчанию шт
stockQtynumberОстаток
durationMinnumberДлительность услуги, мин
isActivebooleanАктивен, по умолчанию true
curl -X POST "https://<поддомен>.miramica.ru/api/v1/catalog.product.add" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "fields": { "name": "Масло моторное 5W-30", "sku": "OIL-530", "price": 3200, "stockQty": 14 } }'

catalog.product.update

catalog:write

Изменить товар / услугу

Меняет переданные поля, в том числе остаток stockQty.

ПараметрТипОписание
idобязательныйstringID товара
fieldsобязательныйobjectname, catalogId, sku, barcode, description, price, currency, vatRate, unit, stockQty, durationMin, isActive
curl -X POST "https://<поддомен>.miramica.ru/api/v1/catalog.product.update" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "prd_…", "fields": { "stockQty": 20, "price": 3400 } }'

catalog.category.list

catalog:read

Категории каталога

Дерево категорий (parentId — родитель).

ПараметрТипОписание
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/catalog.category.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "limit": 50 }'

Бронирования

booking.list

bookings:readОтели

Бронирования

Бронирования номеров. Фильтр по датам — пересечение периода проживания с интервалом from–to. Без доступа к персональным данным guestName, guestPhone, guestEmail и notes возвращаются как null ("piiRedacted": true); создавать и менять брони с данными гостя можно.

ПараметрТипОписание
fromstring (ISO-8601)Начало периода
tostring (ISO-8601)Конец периода
statusstringnew, confirmed, checked_in, checked_out, cancelled, no_show
updatedSincestring (ISO-8601)Только изменённые не раньше даты
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/booking.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "from": "2026-10-01", "to": "2026-10-31", "status": "confirmed" }'

booking.get

bookings:readОтели

Бронирование по ID

Одно бронирование.

ПараметрТипОписание
idобязательныйstringID бронирования
curl -X POST "https://<поддомен>.miramica.ru/api/v1/booking.get" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm92…" }'

booking.add

bookings:writeОтели

Создать бронирование

Создаёт бронь. propertyId и roomTypeId должны принадлежать проекту; статус по умолчанию — confirmed. Не проверяет тарифные правила и пересечения номеров — для полной логики используйте кабинет.

ПараметрТипОписание
propertyIdобязательныйstringID объекта
roomTypeIdобязательныйstringID типа номера
checkInобязательныйstring (ISO-8601)Заезд
checkOutобязательныйstring (ISO-8601)Выезд
guestNameобязательныйstringФИО гостя
totalAmountобязательныйnumberСумма
roomIdstringКонкретный номер
contactIdstringКонтакт
guestsCountnumberЧисло гостей, по умолчанию 1
guestPhonestringТелефон
guestEmailstringEmail
prepaidAmountnumberПредоплата
statusstringСтатус брони
sourcestringИсточник, по умолчанию api
notesstringКомментарий
curl -X POST "https://<поддомен>.miramica.ru/api/v1/booking.add" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
  "fields": {
    "propertyId": "cm6p…", "roomTypeId": "cm6t…",
    "checkIn": "2026-10-20", "checkOut": "2026-10-23",
    "guestName": "Иван Иванов", "totalAmount": 24000, "guestsCount": 2
  }
}'

booking.update

bookings:writeОтели

Изменить бронирование

Меняет переданные поля. Смена status вызывает событие booking.status_changed.

ПараметрТипОписание
idобязательныйstringID бронирования
fieldsобязательныйobjectstatus, guestName, guestPhone, guestEmail, notes, totalAmount, prepaidAmount, guestsCount, contactId, checkIn, checkOut
curl -X POST "https://<поддомен>.miramica.ru/api/v1/booking.update" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm92…", "fields": { "status": "checked_in" } }'

booking.cancel

bookings:writeОтели

Отменить бронирование

Устанавливает статус cancelled.

ПараметрТипОписание
idобязательныйstringID бронирования
curl -X POST "https://<поддомен>.miramica.ru/api/v1/booking.cancel" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm92…" }'

property.list

bookings:readОтели, автосервис и др. с точками

Объекты

Список объектов / точек проекта (отели, площадки).

ПараметрТипОписание
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/property.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "limit": 20 }'

Записи

calendar.appointment.list

bookings:readКлиники, салоны, фитнес, автосервисы

Записи на приём

Записи календаря (приёмы, визиты, тренировки). Фильтр по времени начала. Без доступа к персональным данным patientName, patientPhone, patientEmail и notes возвращаются как null ("piiRedacted": true).

ПараметрТипОписание
fromstring (ISO-8601)Начало не раньше
tostring (ISO-8601)Начало не позже
statusstringnew, confirmed, arrived, completed, cancelled, no_show
updatedSincestring (ISO-8601)Только изменённые не раньше даты
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/calendar.appointment.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "from": "2026-10-15T00:00:00Z", "to": "2026-10-16T00:00:00Z" }'

calendar.appointment.get

bookings:readКлиники, салоны, фитнес, автосервисы

Запись по ID

Одна запись календаря.

ПараметрТипОписание
idобязательныйstringID записи
curl -X POST "https://<поддомен>.miramica.ru/api/v1/calendar.appointment.get" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm93…" }'

calendar.appointment.add

bookings:writeКлиники, салоны, фитнес, автосервисы

Создать запись

Создаёт запись к специалисту (doctorId). Если указан serviceId, длительность и сумма берутся из услуги (если totalAmount не передан). Статус по умолчанию — confirmed.

ПараметрТипОписание
doctorIdобязательныйstringID специалиста
startsAtобязательныйstring (ISO-8601)Начало
patientNameобязательныйstringФИО пациента / клиента
endsAtstring (ISO-8601)Конец (иначе +длительность услуги или 30 мин)
serviceIdstringID услуги клиники
contactIdstringКонтакт
patientPhonestringТелефон
patientEmailstringEmail
totalAmountnumberСумма
statusstringСтатус
sourcestringИсточник, по умолчанию api
notesstringКомментарий
curl -X POST "https://<поддомен>.miramica.ru/api/v1/calendar.appointment.add" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
  "fields": {
    "doctorId": "cm6d…", "serviceId": "cm6s…",
    "startsAt": "2026-10-15T07:00:00Z", "patientName": "Анна Смирнова",
    "patientPhone": "+79991234567"
  }
}'

calendar.appointment.update

bookings:writeКлиники, салоны, фитнес, автосервисы

Изменить запись

Меняет переданные поля. Смена status вызывает событие appointment.status_changed.

ПараметрТипОписание
idобязательныйstringID записи
fieldsобязательныйobjectstatus, patientName, patientPhone, patientEmail, notes, totalAmount, startsAt, endsAt, doctorId, contactId
curl -X POST "https://<поддомен>.miramica.ru/api/v1/calendar.appointment.update" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm93…", "fields": { "status": "arrived" } }'

calendar.appointment.cancel

bookings:writeКлиники, салоны, фитнес, автосервисы

Отменить запись

Устанавливает статус cancelled.

ПараметрТипОписание
idобязательныйstringID записи
curl -X POST "https://<поддомен>.miramica.ru/api/v1/calendar.appointment.cancel" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm93…" }'

Календарь

calendar.get

calendar:read

Календарь компании

Метаданные общего календаря компании (type: company). Это не записи клиники/салона (calendar.appointment.*) и не бронирования отеля (booking.*). Персональные и внешние календары сотрудников через API недоступны.

curl -X POST "https://<поддомен>.miramica.ru/api/v1/calendar.get" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{}'

calendar.event.list

calendar:read

События календаря компании

События только общего календаря компании. Фильтр по пересечению интервала [from, to] (как в UI). Без доступа к ПДн description и meta — null, title очищается от телефонов/e-mail.

ПараметрТипОписание
fromstring (ISO-8601)Событие пересекает момент (endsAt ≥ from)
tostring (ISO-8601)Событие пересекает момент (startsAt ≤ to)
updatedSincestring (ISO-8601)Только изменённые не раньше даты
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/calendar.event.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "from": "2026-10-01T00:00:00Z", "to": "2026-10-31T23:59:59Z" }'

calendar.event.get

calendar:read

Событие календаря по ID

Одно событие общего календаря компании.

ПараметрТипОписание
idобязательныйstringID события
curl -X POST "https://<поддомен>.miramica.ru/api/v1/calendar.event.get" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cmev…" }'

calendar.event.add

calendar:write

Создать событие календаря

Создаёт событие в общем календаре компании. Поле meta — произвольный JSON без секретов (пароли/токены отбрасываются).

ПараметрТипОписание
titleобязательныйstringЗаголовок
startsAtобязательныйstring (ISO-8601)Начало
endsAtобязательныйstring (ISO-8601)Конец
descriptionstringОписание
allDaybooleanЦелый день
userIdstringОтветственный (сотрудник проекта)
metaobjectДоп. данные (location, ссылки CRM и т.п.)
curl -X POST "https://<поддомен>.miramica.ru/api/v1/calendar.event.add" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
  "fields": {
    "title": "Планерка",
    "startsAt": "2026-10-15T09:00:00Z",
    "endsAt": "2026-10-15T10:00:00Z",
    "allDay": false
  }
}'

calendar.event.update

calendar:write

Изменить событие календаря

Меняет переданные поля события общего календаря.

ПараметрТипОписание
idобязательныйstringID события
fieldsобязательныйobjecttitle, description, startsAt, endsAt, allDay, userId, meta
curl -X POST "https://<поддомен>.miramica.ru/api/v1/calendar.event.update" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cmev…", "fields": { "title": "Планерка (перенос)" } }'

calendar.event.delete

calendar:write

Удалить событие календаря

Удаляет событие общего календаря компании.

ПараметрТипОписание
idобязательныйstringID события
curl -X POST "https://<поддомен>.miramica.ru/api/v1/calendar.event.delete" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cmev…" }'

Диск

drive.browse

drive:read

Диск: содержимое папки

Папки и файлы в каталоге диска. folderId пустой или root — корень. Путь storagePath в ответах не возвращается.

ПараметрТипОписание
folderIdstringID папки или root
entityTypestringgeneral (по умолчанию), booking, lead, contact, deal, feed_post
entityIdstringПривязка к сущности CRM / брони
curl -X POST "https://<поддомен>.miramica.ru/api/v1/drive.browse" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "folderId": "root" }'

drive.folder.add

drive:write

Диск: создать папку

Создаёт папку на диске компании.

ПараметрТипОписание
nameобязательныйstringНазвание папки
parentIdstringРодительская папка
entityTypestringТип привязки, по умолчанию general
entityIdstringID сущности
curl -X POST "https://<поддомен>.miramica.ru/api/v1/drive.folder.add" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "fields": { "name": "Договоры" } }'

drive.folder.delete

drive:write

Диск: удалить папку

Удаляет папку и всё содержимое (вложенные папки и файлы) каскадом.

ПараметрТипОписание
idобязательныйstringID папки
curl -X POST "https://<поддомен>.miramica.ru/api/v1/drive.folder.delete" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "df…" }'

drive.file.get

drive:read

Диск: метаданные файла

Метаданные файла без содержимого. Для содержимого используйте drive.file.download.

ПараметрТипОписание
idобязательныйstringID файла
curl -X POST "https://<поддомен>.miramica.ru/api/v1/drive.file.get" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cmat…" }'

drive.file.add

drive:write

Диск: загрузить файл

Загрузка файла через JSON: содержимое в contentBase64 (допускается data-URL). Лимит размера — 15 МБ (как в кабинете). Учитывается квота хранилища тарифа. Путь на диске сервера клиенту не отдаётся.

ПараметрТипОписание
fileNameобязательныйstringИмя файла
contentBase64обязательныйstringСодержимое в base64
mimeTypestringMIME, по умолчанию application/octet-stream
folderIdstringПапка или root
entityTypestringТип привязки, по умолчанию general
entityIdstringID сущности
curl -X POST "https://<поддомен>.miramica.ru/api/v1/drive.file.add" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
  "fields": {
    "fileName": "note.txt",
    "mimeType": "text/plain",
    "contentBase64": "SGVsbG8="
  }
}'

drive.file.download

drive:read

Диск: скачать файл

Возвращает содержимое файла в contentBase64. Файлы больше 15 МБ через REST недоступны (ответ 400). Подписанных URL нет — только этот метод или кабинет.

ПараметрТипОписание
idобязательныйstringID файла
curl -X POST "https://<поддомен>.miramica.ru/api/v1/drive.file.download" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cmat…" }'

drive.file.delete

drive:write

Диск: удалить файл

Удаляет запись файла и пытается удалить объект с диска сервера.

ПараметрТипОписание
idобязательныйstringID файла
curl -X POST "https://<поддомен>.miramica.ru/api/v1/drive.file.delete" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cmat…" }'

Оплаты

payment.list

payments:read

Список оплат

Объединённый список: ссылки на оплату (payment_link), оплаты folio отеля (booking_payment) и оплаты клиники (clinic_payment). У каждой записи есть поле source.

ПараметрТипОписание
sourcestringpayment_link, booking_payment или clinic_payment
statusstringДля ссылок/клиники: pending, paid, cancelled (+ expired для ссылок)
bookingIdstringФильтр по бронированию
dealIdstringФильтр по сделке (ссылки)
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/payment.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "source": "payment_link", "status": "paid" }'

payment.get

payments:read

Оплата по ID

Ищет оплату среди ссылок, folio и клиники. В ответе — поле source.

ПараметрТипОписание
idобязательныйstringID оплаты
curl -X POST "https://<поддомен>.miramica.ru/api/v1/payment.get" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "id": "cm94…" }'

Сотрудники

user.list

staff:read

Сотрудники

Сотрудники проекта. Пароли, хеши и push-подписки не возвращаются.

ПараметрТипОписание
activebooleanТолько активные (true) или неактивные (false)
limitnumber1–100
startnumberСмещение
curl -X POST "https://<поддомен>.miramica.ru/api/v1/user.list" \
  -H "X-Api-Key: $MIRAMICA_KEY" \
  -H "X-Api-Secret: $MIRAMICA_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "active": true }'

Входящие вебхуки

Входящий вебхук — это готовая ссылка с секретным токеном, по которой можно вызывать те же методы без заголовков авторизации. Удобно для форм на сайте, Zapier, Make, Albato и скриптов. Создаётся во вкладке «Входящие вебхуки»; права выбираются так же, как для ключа. Действия выполняются от имени сотрудника, создавшего вебхук. В URL используется ID проекта — поддомен кабинета (zdorovie.miramica.ru → zdorovie); старые ссылки с внутренним cuid продолжают работать.

https://<поддомен>.miramica.ru/api/rest/<ID проекта>/<токен>/<метод>

Токен — 160 бит случайных данных, хранится только в виде хеша и показывается один раз. Ссылка равносильна паролю: не публикуйте её в коде страниц. Если она попала в чужие руки — нажмите «Новый URL» или выключите вебхук: старый адрес перестанет работать сразу.

Исходящие вебхуки

Исходящий вебхук сообщает вашему серверу о событиях в проекте. Укажите URL обработчика и отметьте события во вкладке «Исходящие вебхуки». При каждом событии MirAmica отправит POST с JSON-телом. Одно событие — один запрос; если на событие подписано несколько вебхуков, каждый получит свою копию с одинаковым id события.

ЗаголовокЗначение
Content-Typeapplication/json; charset=utf-8
User-AgentMirAmica-Webhooks/1.0
X-MirAmica-EventКод события, например deal.stage_changed
X-MirAmica-Event-IdID события — используйте для защиты от дублей
X-MirAmica-DeliveryID конкретной доставки (меняется между вебхуками)
X-MirAmica-TimestampUnix-время отправки в секундах
X-MirAmica-Signaturesha256=<hex> — HMAC-подпись запроса
{
  "id": "evt_m2b7k1x9f3a2c4d5e6f7",
  "event": "deal.stage_changed",
  "projectId": "demo-crm",
  "tenantId": "demo-crm",
  "occurredAt": "2026-10-15T09:30:12.004Z",
  "data": {
    "object": {
      "id": "cm90…",
      "title": "Поставка оборудования",
      "stage": "won",
      "amount": 480000,
      "currency": "RUB",
      "contactId": "cm8xc01…",
      "updatedAt": "2026-10-15T09:30:10.881Z"
    },
    "previous": { "stage": "negotiation" }
  },
  "auth": { "application_token": "9b1f0c7e2a6d48c3b5e1f0a9d7c6b5a4" }
}

data.object — запись после изменения (служебные поля вроде токенов и хешей не передаются). auth.application_token — токен приложения из карточки вебхука, как в Битрикс24: простая проверка, что запрос пришёл от вашего вебхука. Для надёжной проверки используйте подпись.

События

Выберите нужные события при создании исходящего вебхука. Код события приходит в поле event и заголовке X-MirAmica-Event.

СобытиеКогдаДанные
contact.createdКонтакт созданdata.object — контакт; без доступа к ПДн только id, crmId, связи и даты
contact.updatedКонтакт изменёнdata.object — контакт после изменения; без доступа к ПДн только идентификаторы
contact.deletedКонтакт удалёнdata.object.id
company.createdКомпания созданаdata.object; без доступа к ПДн только идентификаторы
company.updatedКомпания измененаdata.object; без доступа к ПДн только идентификаторы
company.deletedКомпания удаленаdata.object.id
lead.createdЛид созданdata.object
lead.updatedЛид изменёнdata.object; при смене статуса — data.previous.status
lead.status_changedЛид: смена статусаdata.object, data.previous.status
lead.deletedЛид удалёнdata.object.id
deal.createdСделка созданаdata.object
deal.updatedСделка измененаdata.object; при смене стадии — data.previous.stage
deal.stage_changedСделка: смена стадииdata.object, data.previous.stage
deal.deletedСделка удаленаdata.object.id
task.createdЗадача созданаdata.object
task.updatedЗадача измененаdata.object
task.status_changedЗадача: смена статусаdata.object, data.previous.status
task.deletedЗадача удаленаdata.object.id
booking.createdБронирование созданоОтели. data.object; без доступа к ПДн данные гостя — null
booking.status_changedБронирование: смена статусаdata.object, data.previous.status
appointment.createdЗапись созданаКлиники, салоны, фитнес, автосервис. data.object; без доступа к ПДн данные клиента — null
appointment.status_changedЗапись: смена статусаdata.object, data.previous.status
payment.receivedОплата полученаdata.source (booking_payment, clinic_payment, payment_link), data.amount, data.currency, data.object

Проверка подписи

Подпись = HMAC-SHA256(секрет, "<X-MirAmica-Timestamp>.<сырое тело запроса>") в hex с префиксом sha256=. Секрет подписи (whsec_…) — в карточке вебхука, кнопка «Показать». Считайте HMAC от сырого тела, до парсинга JSON, сравнивайте за постоянное время и отклоняйте запросы старше 5 минут.

import crypto from 'node:crypto';
import express from 'express';

const app = express();
const SECRET = process.env.MIRAMICA_WEBHOOK_SECRET; // whsec_…

app.post('/miramica/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const ts = req.get('X-MirAmica-Timestamp');
  const signature = req.get('X-MirAmica-Signature') || '';
  const expected =
    'sha256=' +
    crypto.createHmac('sha256', SECRET).update(`${ts}.${req.body}`).digest('hex');

  const fresh = Math.abs(Date.now() / 1000 - Number(ts)) < 300;
  const valid =
    signature.length === expected.length &&
    crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
  if (!fresh || !valid) return res.status(401).end();

  const event = JSON.parse(req.body.toString('utf8'));
  // обработайте event.event / event.data, учитывая event.id для защиты от дублей
  res.status(200).json({ ok: true });
});

Доставка и повторы

  • Успешная доставка — любой ответ 2xx в течение 10 секунд. Редиректы (3xx) не выполняются и считаются ошибкой.
  • При ошибке или таймауте — повторы через 1 мин, 5 мин, 30 мин, 2 ч и 6 ч: всего до 6 попыток. После последней доставка помечается как «Ошибка».
  • Порядок доставки не гарантируется, возможны повторы одного события — проверяйте id события (X-MirAmica-Event-Id).
  • Отвечайте быстро: примите запрос, поставьте задачу в очередь и обработайте её асинхронно.
  • Журнал доставок (тело запроса, код и ответ вашего сервера) хранится 30 дней — во вкладке «Журнал доставок» карточки вебхука. Там же можно повторить доставку вручную.
  • Кнопка «Отправить тест» отправляет событие webhook.test сразу, без автоматических повторов.
  • Адрес обработчика должен быть публичным: http(s), без логина и пароля в URL; локальные и внутренние адреса (localhost, 10.x, 192.168.x, 169.254.x и т. п.) запрещены.

Безопасность

  • Ключи, вебхуки и их права видны только владельцу и администраторам проекта (право «API-ключи и вебхуки»). Все действия пишутся в журнал аудита.
  • Выдавайте каждой интеграции отдельный ключ с минимальными доступами — так её можно отозвать, не затрагивая остальные.
  • Секреты ключей и токены входящих вебхуков хранятся как хеши и показываются один раз.
  • Используйте только HTTPS-адреса обработчиков и проверяйте подпись каждого запроса.

Партнёрам маркетплейса

Приложения маркетплейса MirAmica по-прежнему работают через Partner API (/api/partner/v1, заголовок X-Api-Key). Для новых интеграций с одним проектом используйте ключи и вебхуки, описанные выше. Подробнее — на странице для партнёров.

API для разработчиков — MirAmica