REST API для интеграции внешних сервисов с CRM-системой StomPro: телефония, мессенджеры, рекламные платформы и Marketplace-виджеты. JSON, Bearer-токен на клинику, OAuth-flow «в один клик», webhooks с HMAC-подписью и автоматическими ретраями.
StomPro — облачная CRM для стоматологий Узбекистана и СНГ: карточки пациентов, расписание, зубная карта, склад, финансы, лиды. API даёт сторонним сервисам контролируемый доступ к данным клиники с явного разрешения владельца — через scopes и отзываемые токены.
МоиЗвонки, Mango Office, Sipuni — приём звонков, всплывающая карточка пациента, авто-создание лида из неизвестного номера.
Telegram, Instagram, Facebook — отправка/приём сообщений из аккаунта клиники, автоматическое создание лида.
OAuth-flow «Подключить в один клик» прямо из интерфейса партнёра, как в amoCRM Market.
Real-time уведомления о событиях клиники: новый пациент, запись на приём, оплата, новый лид.
Свяжитесь с командой StomPro: Telegram StomPro или email legal@stompro.uz. В заявке укажите название сервиса, требуемые scopes и callback-URL. Ответ в течение одного рабочего дня. Sandbox-токен выдаём сразу для разработки.
Через OAuth Marketplace-flow (см. ниже) или напрямую от владельца клиники для одиночных интеграций. Один токен = одна клиника, бессрочный, отзывается клиникой в любой момент в разделе «Настройки → Интеграции».
curl https://app.stompro.uz/api/v1/clinic/me \
-H "Authorization: Bearer YOUR_CLINIC_TOKEN"
Все запросы к API требуют заголовок Authorization: Bearer <clinic_token>.
Токен выдаётся для конкретной клиники при подключении интеграции и действует пока клиника не отозвала доступ.
POST /api/v1/calls/event HTTP/1.1
Host: app.stompro.uz
Authorization: Bearer st_clinic_a8f3d9e2c4b1f7e6d5a4c3b2a1f0e9d8
Content-Type: application/json
{
"phone": "+998901234567",
"type": "incoming",
"started_at": "2026-04-28T14:32:15+05:00",
"duration": 0,
"status": "ringing"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"ok": false,
"error": "invalid_token",
"message": "Clinic token is invalid or has been revoked"
}
429 Too Many Requests./api/v1/clinic/me
Информация о клинике, к которой выдан токен. Используется для проверки авторизации.
{
"ok": true,
"clinic": {
"id": "clinic2026_demo",
"name": "Smile Dental Clinic",
"city": "Tashkent",
"phone": "+998 71 200 11 22",
"timezone": "Asia/Tashkent",
"plan": "pro",
"patients_count": 1685
}
}
/api/v1/patients/find?phone=+998901234567
Поиск пациента по номеру телефона. Используется для on-call popup —
моментальной карточки пациента при входящем звонке. Возвращает patient: null если номер не найден в базе.
{
"ok": true,
"patient": {
"id": "p_a1b2c3",
"name": "Каримова Мадина",
"phone": "+998 91 456-78-90",
"age": 34,
"doctor": "д-р Юсупов",
"last_visit": "2026-04-09",
"next_appt": "2026-05-12T11:00:00+05:00",
"balance": 0,
"tags": ["VIP", "имплантация"],
"url": "https://app.stompro.uz/?patient=p_a1b2c3"
}
}
/api/v1/calls/event
Регистрация события звонка: ringing, answered, missed, ended.
Звонок появится в журнале клиники в разделе «Звонки» с привязкой к карточке пациента (если найден).
incoming / outgoingringing / answered / missed / endedended){
"ok": true,
"call_id": "call_x9y8z7",
"patient_matched": true,
"patient_id": "p_a1b2c3"
}
/api/v1/leads
Создание лида (потенциального клиента). Используйте если звонок пришёл с неизвестного номера — StomPro создаст лид в воронке продаж клиники с источником «Звонок».
POST /api/v1/leads
{
"phone": "+998901112233",
"name": "Неизвестный (звонок)",
"source": "call",
"channel": "moizvonki",
"comment": "Входящий звонок 14:32, не дозвонились"
}
{
"ok": true,
"lead_id": "lead_q1w2e3",
"url": "https://app.stompro.uz/?lead=lead_q1w2e3"
}
/api/v1/users
Список сотрудников клиники (врачи, администраторы, ассистенты) — для маппинга «номер → оператор».
{
"ok": true,
"users": [
{"id": "u_1", "name": "д-р Юсупов", "role": "doctor", "phone": "+998 90 111 22 33"},
{"id": "u_2", "name": "д-р Назаров", "role": "doctor", "phone": "+998 90 444 55 66"},
{"id": "u_3", "name": "Алиса", "role": "admin", "phone": "+998 91 777 88 99"}
]
}
/api/v1/integration/disconnect
Отзыв токена с вашей стороны (например, пользователь отписался от вашего сервиса). После вызова токен становится невалидным, все последующие запросы вернут 401.
Сценарий для партнёров, которые хотят размещение в Marketplace StomPro. Владелец клиники в интерфейсе StomPro открывает «Настройки → Интеграции → Marketplace», находит ваш сервис и нажимает «Подключить». StomPro перенаправляет его на сайт партнёра для авторизации (или оплаты подписки). После успешного OAuth-обмена пользователь возвращается обратно в StomPro — интеграция активна, токен клиники сохранён на стороне партнёра.
state и redirect_uripartner_secretGET https://your-service.com/oauth/stompro?
partner_id=stompro_partner_xxx
&clinic_id=clinic2026_demo
&clinic_name=Smile+Dental+Clinic
&state=random_state_string
&redirect_uri=https://app.stompro.uz/integrations/callback
POST https://app.stompro.uz/api/v1/oauth/token
Content-Type: application/json
{
"partner_id": "stompro_partner_xxx",
"partner_secret": "ps_secret_8f3d9e2c4b1f7e6d",
"clinic_id": "clinic2026_demo",
"state": "random_state_string",
"external_account_id": "moizvonki_user_42",
"scopes": ["calls:write", "patients:read", "leads:write"]
}
→ HTTP 200
{
"ok": true,
"clinic_token": "st_clinic_a8f3d9e2c4b1f7e6d5a4c3b2a1f0e9d8",
"expires_at": null,
"redirect_url": "https://app.stompro.uz/integrations/callback?status=connected&state=random_state_string"
}
Партнёр перенаправляет браузер пользователя на redirect_url
из ответа token exchange. В StomPro клиника увидит сервис партнёра в списке «Подключено» —
с возможностью настройки scopes и моментального отзыва доступа.
Подпись OAuth-запросов: всё взаимодействие с /oauth/token требует обязательного TLS 1.2+
и валидного partner_secret. Параметр state проверяется на дубли (защита от CSRF) и истекает через 10 минут.
Если ваш сервис должен реагировать на события клиники (например, отправить SMS-напоминание перед приёмом),
укажите webhook_url при подключении интеграции. StomPro будет слать POST с JSON.
patient.created — новый пациент в базе клиникиappointment.created — записан на приёмappointment.completed — приём завершёнappointment.cancelled — приём отменёнpayment.received — получена оплатаlead.created — создан лидlead.stage_changed — лид перешёл на следующий этап воронкиintegration.revoked — клиника отозвала ваш токенPOST https://your-service.com/webhooks/stompro HTTP/1.1
X-StomPro-Event: appointment.created
X-StomPro-Signature: sha256=8f3d9e2c4b1f7e6d5a4c3b2a1f0e9d8...
Content-Type: application/json
{
"event": "appointment.created",
"clinic_id": "clinic2026_demo",
"timestamp": "2026-04-28T14:32:15+05:00",
"data": {
"appointment_id": "appt_z1x2c3",
"patient": {
"id": "p_a1b2c3",
"name": "Каримова Мадина",
"phone": "+998 91 456-78-90"
},
"doctor": "д-р Юсупов",
"starts_at": "2026-05-12T11:00:00+05:00",
"duration": 60,
"service": "Имплантация",
"price": 8500000
}
}
Подпись X-StomPro-Signature = HMAC-SHA256 от тела запроса с ключом partner_secret.
Проверяйте её перед обработкой.
Если ваш endpoint вернул 5xx или таймаут (10 сек), StomPro повторит запрос
по схеме: 30 сек → 2 мин → 10 мин → 1 час → 6 часов. После 5 неудачных попыток — событие отбрасывается.
Все записывающие эндпоинты (POST) принимают заголовок
Idempotency-Key: <uuid>. При сетевом сбое можно безопасно повторить запрос
с тем же ключом — StomPro вернёт результат первой попытки, без дублей в БД.
Окно дедупликации — 24 часа.
Текущая версия — v1. Breaking changes — только в новой мажорной версии.
После анонса v2 предыдущая поддерживается минимум 12 месяцев —
у вас гарантированный запас на миграцию.
Отдельный токен для разработки и автотестов: данные не пересекаются с боевыми клиниками, можно безопасно дёргать любые эндпоинты. Выдаётся в день подачи заявки.
Прямой канал с инженером StomPro: Telegram, email. Время ответа в рабочие часы — до 4 часов. Критические инциденты в Production — 24/7. Часовой пояс — Asia/Tashkent (UTC+5).
| Код | Когда возникает |
|---|---|
200 | Запрос выполнен успешно |
400 | Невалидный JSON или отсутствует обязательное поле |
401 | Неверный или отсутствующий токен |
403 | Токен валидный, но без нужного scope |
404 | Ресурс не найден (например, пациент по ID) |
409 | Конфликт (например, дубль external_id) |
429 | Превышен rate-limit (120 req/min на токен) |
500 | Внутренняя ошибка StomPro — повторите запрос |
{
"ok": false,
"error": "missing_field",
"message": "Field 'phone' is required",
"field": "phone"
}
Sandbox-токены выдаём в день обращения. Production credentials и Marketplace-листинг — после короткого ревью заявки.