This API gives you access to all the features of Emehmon Sync programmatically.
This documentation aims to provide all the information you need to work with our API.
**Xizmat Safari (XF) API** — отдельный сервис (бронирование госкомандировок, интеграция МВД ↔ E-mehmon) со своей документацией: https://sandbox-api.emehmon.uz/sandbox/xf/docs
## Authentication (HMAC)
Every request must include these headers:
- `X-User-Name`: API username
- `X-User-Ts`: Unix timestamp (seconds)
- `X-User-Request-Id`: UUID (required, unique)
- `X-User-Hash`: hex HMAC-SHA256 signature
Signature formula:
`X-User-Hash = HMAC_SHA256( X-User-Name + X-User-Ts + X-User-Request-Id, secret )`
Notes:
- TTL is 5 minutes (server rejects old timestamps)
- Replay protection is enabled using `(username, timestamp, request_id)`
---
## Response format
### Success
```json
{
"code": 200,
"message": "success",
"data": {},
"request_id": "uuid"
}
## Error
```json
{
"code": 401,
"message": "Request time expired",
"error_code": "REQUEST_TIME_EXPIRED",
"meta": {},
"request_id": "uuid"
}
```
"meta" may contain validation details (e.g. { "field": "date" }).
## Errors
| HTTP | error_code | When |
| ---: | ---------------------- | ----------------------------------------------- |
| 401 | `MISSING_AUTH_HEADERS` | Required auth headers are missing |
| 401 | `INVALID_TIMESTAMP` | `X-User-Ts` is not numeric |
| 401 | `REQUEST_TIME_EXPIRED` | Timestamp is outside TTL window |
| 401 | `INVALID_REQUEST_ID` | `X-User-Request-Id` is invalid format |
| 403 | `USER_NOT_FOUND` | Username not found or inactive |
| 403 | `IP_DENY` | Client IP not in `allowed_ips` (if enabled) |
| 403 | `REPLAY_ATTACK` | Duplicate `(username, timestamp, request_id)` |
| 403 | `INVALID_SIGNATURE` | `X-User-Hash` does not match expected signature |
| 403 | `ACCESS_DENIED` | User has no permission for this action |
| 404 | `ROUTE_NOT_FOUND` | Unknown path — check the URL against the list |
| 405 | `METHOD_NOT_ALLOWED` | Wrong HTTP method (e.g. `GET` instead of `POST`) |
| 422 | `VALIDATION_ERROR` | Request body validation failed |
| 500 | `INTERNAL_ERROR` | Unhandled server error |
This API is not authenticated.
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/dictionaries-meta" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" Имя справочника: countries, regions, districts, room-types, visit-types, guest-types, passport-types, visa-types, payment-types.
Только для districts — фильтр по региону.
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/dictionaries/countries?region_id=1726" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"name": "countries",
"locale": "ru",
"count": 2,
"items": [
{
"id": 173,
"name": "Узбекистан",
"code": "UZB"
},
{
"id": 231,
"name": "Без гражданства",
"code": ""
}
]
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/hotel" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"hotel_id": 1234,
"name": "Hotel Example",
"inn": "300123456",
"stars": 4,
"address": "Tashkent, Amir Temur 1",
"region_id": 1726,
"district_id": 1726269,
"phone": "+998 71 200 00 00",
"email": "info@example.uz",
"manager": "Иванов И.И.",
"license": {
"number": "TR-12345",
"expires_at": "2027-12-31",
"is_valid": true
},
"deposit": 4500000,
"can_register_listok": true,
"blocking_reasons": []
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/hotel/rooms" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"count": 2,
"items": [
{
"id": 1011,
"room_number": "101",
"room_type_id": 1,
"room_type_name": "Стандарт"
},
{
"id": 1012,
"room_number": "201",
"room_type_id": 2,
"room_type_name": "Люкс"
}
]
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/hotel/prices" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"count": 1,
"items": [
{
"price_id": 8821,
"room_type_id": 1,
"room_type_name": "Стандарт",
"beds": 2,
"capacity": 2,
"uzs": 450000,
"usd": 38,
"uzs_noresident": 550000,
"usd_noresident": 48,
"breakfast": true,
"dt": "2026-05-01",
"created_at": "2026-05-01 09:15:32"
}
]
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/hotel/photos" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"count": 1,
"items": [
{
"photo_id": 5577,
"filename": "123_661b3a8f4c12d.png",
"storage_path": "hotelimages/123_661b3a8f4c12d.png",
"room_type_id": 1,
"is_main": true,
"created_at": "2026-05-22 13:45:10"
}
]
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
curl --request PUT \
"https://api.emehmon.uz/sync/v1/crm/hotel/prices" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--data "{
\"items\": [
{
\"room_type_id\": 16,
\"uzs\": 39,
\"usd\": 84,
\"uzs_noresident\": 12,
\"usd_noresident\": 77,
\"beds\": 5,
\"capacity\": 13,
\"breakfast\": true
}
]
}"
curl --request POST \
"https://api.emehmon.uz/sync/v1/crm/hotel/photos" \
--header "Accept: application/json" \
--header "Content-Type: multipart/form-data" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--form "room_type_id=1"\
--form "is_main="\
--form "photo=@/tmp/php2nQaGY" The ID of the photo.
curl --request DELETE \
"https://api.emehmon.uz/sync/v1/crm/hotel/photos/564" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/listok/check-can-create" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"can_create": true,
"blocking_reasons": [],
"deposit": 4500000,
"license_expires_at": "2027-12-31",
"deposit_alert": null
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
curl --request POST \
"https://api.emehmon.uz/sync/v1/crm/listok/check-duplicate" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--data "{
\"passportNumber\": \"AB1234567\"
}"
curl --request POST \
"https://api.emehmon.uz/sync/v1/crm/listok/person-lookup" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--data "{
\"passportNumber\": \"AB1234567\",
\"datebirth\": \"1990-05-15\",
\"id_citizen\": 76
}"
{
"code": 200,
"message": "OK",
"data": {
"pinfl": "31234567890123",
"surname": "NASIROV",
"firstname": "AXROR",
"lastname": "IBRAGIMOVICH",
"datebirth": "1987-08-16",
"sex": "M",
"datePassport": "2018-07-18",
"passportIssuedBy": "ТОШКЕНТ ШАҲАР ЯККАСАРОЙ ТУМАН ИИБ",
"birthPlace": "TOSHKENT SHAHRI",
"source": "mvd"
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
Фильтр: дата заселения от (Y-m-d). Must be a valid date in the format Y-m-d.
Фильтр: дата заселения до (Y-m-d), не раньше date_from. Must be a valid date in the format Y-m-d. В поле value должна быть дата после или равная date_from.
Фильтр по серии/номеру паспорта. Количество символов в поле value не может превышать 50.
Фильтр по фамилии (частичное совпадение). Количество символов в поле value не может превышать 100.
1 — только активные (не выселенные, dateVisitOff IS NULL) листовки; 0 — только выселенные. То же множество, что «текущие зарегистрированные» в кабинете.
Номер страницы (с 1). Значение поля value должно быть не менее 1.
Размер страницы (1..200, по умолчанию 50). Значение поля value должно быть не менее 1. Значение поля value не может превышать 200.
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/listok?date_from=2026-05-01&date_to=2026-05-31&passport=AB1234567&surname=%D0%9A%D0%B0%D1%80%D0%B8%D0%BC%D0%BE%D0%B2&active=1&page=1&per_page=50" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"total": 1,
"page": 1,
"per_page": 50,
"items": [
{
"listok_id": 8826912,
"regNum": "1726-2026-00012345",
"surname": "MUSTERMANN",
"firstname": "MAX",
"lastname": null,
"pinfl": null,
"id_citizen": 5,
"id_country": 5,
"id_countryFrom": 5,
"id_passporttype": 1,
"id_visittype": 2,
"id_guest": 1,
"id_person": "1234567890",
"id_visatype": 3,
"passportNumber": "C01X00T47",
"datePassport": "2021-03-15",
"datebirth": "1985-07-12",
"sex": "M",
"datevisiton": "2026-08-30 14:30:00",
"datevisitoff": null,
"wdays": 3,
"lived_days": null,
"propiska": "101",
"room_type_id": 1,
"visaNumber": null,
"dateVisaOn": null,
"dateVisaOff": null,
"kppNumber": null,
"dateKPP": null,
"amount": null,
"payed": 0,
"paytp": null,
"summa": null,
"real_summa": null,
"real_days": null,
"registered_via": 2,
"created_at": "2026-08-30 14:30:12",
"updated_at": "2026-08-30 14:30:12"
}
]
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
listok_id из списка.
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/listok/8826912" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"listok_id": 8826912,
"regNum": "1726-2026-00012345",
"surname": "MUSTERMANN",
"firstname": "MAX",
"lastname": null,
"pinfl": null,
"id_citizen": 5,
"id_country": 5,
"id_countryFrom": 5,
"id_passporttype": 1,
"id_visittype": 2,
"id_guest": 1,
"id_person": "1234567890",
"id_visatype": 3,
"passportNumber": "C01X00T47",
"datePassport": "2021-03-15",
"datebirth": "1985-07-12",
"sex": "M",
"datevisiton": "2026-08-30 14:30:00",
"datevisitoff": null,
"wdays": 3,
"lived_days": null,
"propiska": "101",
"room_type_id": 1,
"visaNumber": null,
"dateVisaOn": null,
"dateVisaOff": null,
"kppNumber": null,
"dateKPP": null,
"amount": null,
"payed": 0,
"paytp": null,
"summa": null,
"real_summa": null,
"real_days": null,
"registered_via": 2,
"created_at": "2026-08-30 14:30:12",
"updated_at": "2026-08-30 14:30:12"
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
curl --request POST \
"https://api.emehmon.uz/sync/v1/crm/listok" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--data "{
\"surname\": \"MUSTERMANN\",
\"firstname\": \"MAX\",
\"lastname\": \"ERWIN\",
\"id_citizen\": 76,
\"passportNumber\": \"C01X00T47\",
\"datePassport\": \"2021-03-15\",
\"datebirth\": \"1985-07-12\",
\"datevisiton\": \"2026-05-22T14:30:00+05:00\",
\"wdays\": 3,
\"sex\": \"M\",
\"id_visittype\": 2,
\"id_guest\": 1,
\"id_person\": \"12345\",
\"propiska\": \"101\",
\"id_country\": 76,
\"id_countryFrom\": 76,
\"id_passporttype\": 1,
\"passportIssuedBy\": \"Bundesdruckerei\",
\"pinfl\": \"31234567890123\",
\"amount\": 1350000,
\"lived_days\": 0,
\"payed\": 0,
\"id_visatype\": 3,
\"visaNumber\": \"V1234567\",
\"dateVisaOn\": \"2026-05-01\",
\"dateVisaOff\": \"2026-06-01\",
\"visaIssuedBy\": \"Consulate of Uzbekistan in Berlin\",
\"kppNumber\": \"KPP-12345\",
\"dateKPP\": \"2026-05-20\",
\"bookingId\": 45012,
\"crm_actor_id\": \"op-42\",
\"crm_actor_name\": \"Анвар Хамракулов\",
\"children\": [
{
\"full_name\": \"b\",
\"gen\": \"W\",
\"birth_day\": \"2026-09-22\"
}
]
}"
The ID of the listok.
curl --request PATCH \
"https://api.emehmon.uz/sync/v1/crm/listok/564" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--data "{
\"surname\": \"MUSTERMANN\",
\"firstname\": \"MAX\",
\"id_citizen\": 76,
\"passportNumber\": \"C01X00T47\",
\"datePassport\": \"2021-03-15\",
\"sex\": \"M\",
\"id_visittype\": 2,
\"id_guest\": 1,
\"propiska\": \"101\",
\"crm_actor_id\": \"op-42\",
\"crm_actor_name\": \"Анвар Хамракулов\"
}"
The ID of the listok.
curl --request POST \
"https://api.emehmon.uz/sync/v1/crm/listok/564/checkout" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--data "{
\"sum\": 350000,
\"payment_type_id\": 2
}"
Фильтр: дата заселения от (Y-m-d). Must be a valid date in the format Y-m-d.
Фильтр: дата заселения до (Y-m-d), не раньше date_from. Must be a valid date in the format Y-m-d. В поле value должна быть дата после или равная date_from.
Фильтр по серии/номеру паспорта. Количество символов в поле value не может превышать 50.
Фильтр по фамилии (частичное совпадение). Количество символов в поле value не может превышать 100.
Номер страницы (с 1). Значение поля value должно быть не менее 1.
Размер страницы (1..200, по умолчанию 50). Значение поля value должно быть не менее 1. Значение поля value не может превышать 200.
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/self-listok?date_from=2026-05-01&date_to=2026-05-31&passport=AB7654321&surname=%D0%9A%D0%B0%D1%80%D0%B8%D0%BC%D0%BE%D0%B2&page=1&per_page=50" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"total": 1,
"page": 1,
"per_page": 50,
"items": [
{
"self_listok_id": 8821934,
"regNum": "1726-2026-S-00001",
"surname": "KARIMOV",
"firstname": "AZIZ",
"lastname": null,
"id_citizen": 173,
"id_country": 173,
"id_countryFrom": null,
"id_passporttype": 1,
"id_visittype": 2,
"id_guest": 1,
"id_person": null,
"id_visatype": null,
"passportNumber": "AA1234567",
"passportIssuedBy": null,
"datePassport": "2020-01-01",
"datebirth": "1990-01-01",
"sex": "M",
"datevisiton": "2026-08-30 14:30:00",
"datevisitoff": "2026-09-04 14:30:00",
"wdays": 5,
"visaNumber": null,
"dateVisaOn": null,
"dateVisaOff": null,
"visaIssuedBy": null,
"kppNumber": "KPP-99",
"dateKPP": "2026-08-30",
"direction": "Tashkent - Samarkand",
"a_address": null,
"a_id_region": null,
"a_id_district": null,
"summa": 22500,
"mzrp": 412000,
"prc": 5,
"registered_via": 2,
"hsh": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3",
"created_at": "2026-08-30 14:31:08",
"updated_at": "2026-08-30 14:31:08"
}
]
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
self_listok_id из списка.
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/self-listok/8821934" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"self_listok_id": 8821934,
"regNum": "1726-2026-S-00001",
"surname": "KARIMOV",
"firstname": "AZIZ",
"lastname": null,
"id_citizen": 173,
"id_country": 173,
"id_countryFrom": null,
"id_passporttype": 1,
"id_visittype": 2,
"id_guest": 1,
"id_person": null,
"id_visatype": null,
"passportNumber": "AA1234567",
"passportIssuedBy": null,
"datePassport": "2020-01-01",
"datebirth": "1990-01-01",
"sex": "M",
"datevisiton": "2026-08-30 14:30:00",
"datevisitoff": "2026-09-04 14:30:00",
"wdays": 5,
"visaNumber": null,
"dateVisaOn": null,
"dateVisaOff": null,
"visaIssuedBy": null,
"kppNumber": "KPP-99",
"dateKPP": "2026-08-30",
"direction": "Tashkent - Samarkand",
"a_address": null,
"a_id_region": null,
"a_id_district": null,
"summa": 22500,
"mzrp": 412000,
"prc": 5,
"registered_via": 2,
"hsh": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3",
"created_at": "2026-08-30 14:31:08",
"updated_at": "2026-08-30 14:31:08"
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
curl --request POST \
"https://api.emehmon.uz/sync/v1/crm/self-listok" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--data "{
\"surname\": \"MUSTERMANN\",
\"firstname\": \"MAX\",
\"lastname\": \"ERWIN\",
\"id_citizen\": 76,
\"passportNumber\": \"C01X00T47\",
\"datePassport\": \"2021-03-15\",
\"datebirth\": \"1985-07-12\",
\"datevisiton\": \"2026-05-22T14:30:00+05:00\",
\"wdays\": 3,
\"sex\": \"M\",
\"id_visittype\": 2,
\"id_guest\": 1,
\"kppNumber\": \"KPP-12345\",
\"id_person\": \"12345\",
\"id_country\": 76,
\"id_countryFrom\": 76,
\"id_passporttype\": 1,
\"passportIssuedBy\": \"Bundesdruckerei\",
\"pinfl\": \"31234567890123\",
\"dateKPP\": \"2026-05-20\",
\"direction\": \"Tashkent → Samarkand\",
\"id_visatype\": 3,
\"visaNumber\": \"V1234567\",
\"dateVisaOn\": \"2026-05-01\",
\"dateVisaOff\": \"2026-06-01\",
\"visaIssuedBy\": \"Consulate of Uzbekistan in Berlin\",
\"crm_actor_id\": \"op-42\",
\"crm_actor_name\": \"Анвар Хамракулов\",
\"children\": [
{
\"full_name\": \"b\",
\"gen\": \"M\",
\"birth_day\": \"2026-09-22\"
}
]
}"
The ID of the self listok.
curl --request PATCH \
"https://api.emehmon.uz/sync/v1/crm/self-listok/564" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--data "{
\"surname\": \"MUSTERMANN\",
\"firstname\": \"MAX\",
\"id_citizen\": 76,
\"passportNumber\": \"C01X00T47\",
\"datePassport\": \"2021-03-15\",
\"sex\": \"M\",
\"id_visittype\": 2,
\"id_guest\": 1,
\"datevisiton\": \"2026-05-22T14:30:00+05:00\",
\"wdays\": 3,
\"kppNumber\": \"KPP-12345\",
\"dateKPP\": \"2026-05-20\",
\"direction\": \"Tashkent → Samarkand\",
\"id_visatype\": 3,
\"visaNumber\": \"V1234567\",
\"dateVisaOn\": \"2026-05-01\",
\"dateVisaOff\": \"2026-06-01\",
\"visaIssuedBy\": \"Consulate of Uzbekistan in Berlin\",
\"crm_actor_id\": \"op-42\",
\"crm_actor_name\": \"Анвар Хамракулов\"
}"
Год (обязательно). Значение поля value должно быть не менее 2015. Значение поля value не может превышать 2100.
Месяц 1..12. Без него — весь год с разбивкой по месяцам. Значение поля value должно быть между 1 и 12.
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/finance/tourist-tax?year=2026&month=7" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"year": 2026,
"month": 7,
"basis": "checkout",
"months": [
{
"month": 7,
"listok_qty": 412,
"self_qty": 8,
"real_days": 1180,
"gt_sum": 17800000,
"mt_sum": 420000,
"st_sum": 230000,
"total": 18450000
}
],
"total": {
"listok_qty": 412,
"self_qty": 8,
"real_days": 1180,
"gt_sum": 17800000,
"mt_sum": 420000,
"st_sum": 230000,
"total": 18450000
}
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
Год (обязательно). Значение поля value должно быть не менее 2015. Значение поля value не может превышать 2100.
Месяц 1..12 (обязательно). Значение поля value должно быть между 1 и 12.
Номер страницы (с 1). Значение поля value должно быть не менее 1.
Размер страницы (1..200, по умолчанию 50). Значение поля value должно быть не менее 1. Значение поля value не может превышать 200.
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/finance/tourist-tax/details?year=2026&month=7&page=1&per_page=50" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"total": 420,
"page": 1,
"per_page": 50,
"items": [
{
"source": "listok",
"listok_id": 8826912,
"regNum": "1726-2026-00012345",
"surname": "MUSTERMANN",
"firstname": "MAX",
"lastname": null,
"id_citizen": 5,
"citizenship": "Германия",
"is_local": false,
"datevisiton": "2026-07-01 14:00:00",
"datevisitoff": "2026-07-05 10:00:00",
"days": 4,
"prc": 5,
"mzrp": 412000,
"tax_sum": 82400
}
]
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
Год (обязательно). Значение поля value должно быть не менее 2015. Значение поля value не может превышать 2100.
Месяц 1..12. Без него — весь год с разбивкой по месяцам. Значение поля value должно быть между 1 и 12.
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/finance/subscription?year=2026&month=7" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"year": 2026,
"month": 7,
"accruals": [
{
"period": "2026-07",
"tariff": 500000,
"discount_percent": 0,
"total": 500000,
"registrations": 42,
"accrued_at": "2026-08-01 03:00:00"
}
],
"accrued_total": 500000,
"payments_total": 250000,
"current_deposit": 1500000
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
Год (обязательно). Значение поля value должно быть не менее 2015. Значение поля value не может превышать 2100.
Месяц 1..12. Без него — весь год с разбивкой по месяцам. Значение поля value должно быть между 1 и 12.
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/crm/finance/registrations?year=2026&month=7" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" {
"code": 200,
"message": "OK",
"data": {
"year": 2026,
"month": 7,
"basis": "checkin",
"items": [
{
"day": 1,
"listok_qty": 14,
"self_qty": 1,
"total": 15
},
{
"day": 2,
"listok_qty": 9,
"self_qty": 0,
"total": 9
}
],
"total": {
"listok_qty": 412,
"self_qty": 8,
"total": 420
}
},
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
Returns hotel list by SOATO/COATO code.
curl --request POST \
"https://api.emehmon.uz/sync/v1/coato/common" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data "{
\"oblastsoatocode\": \"\\\"1726\\\"\"
}"
{
"code": 200,
"message": "success",
"data": [
{
"hotel_id": 123,
"hotel_district": "Tashkent",
"hotel_name": "Example Hotel",
"hotel_type": "Hotel",
"hotel_status": "Active",
"hotel_stars": 3,
"hotel_inn": "123456789",
"hotel_rooms": 10,
"hotel_beds": 20,
"hotel_address": "Street 1",
"hotel_local_qty": 5,
"hotel_foreign_qty": 2,
"hotel_phone": "+998...",
"hotel_manager": "Manager Name"
}
],
"request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d311"
}
Returns hotel list by COATO code with additional fields: location (geo), check_in_qty (arrivals count) and check_out_qty (departures count) for the given period.
Access restricted to specific API users (configured in sync.mip.allowed_users).
Only specific COATO codes are allowed (configured in sync.mip.allowed_coato).
Maximum date interval is configurable (default: 7 days).
curl --request POST \
"https://api.emehmon.uz/sync/v1/coato/common-with-period" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data "{
\"oblastsoatocode\": \"\\\"1726269\\\"\",
\"date_from\": \"\\\"2026-04-01\\\"\",
\"date_to\": \"\\\"2026-04-07\\\"\"
}"
{
"code": 200,
"message": "success",
"data": [
{
"hotel_id": 123,
"hotel_district": "Mirzo Ulugbek",
"hotel_name": "Example Hotel",
"hotel_type": "Hotel",
"hotel_status": "Active",
"hotel_stars": 3,
"hotel_inn": "123456789",
"hotel_rooms": 10,
"hotel_beds": 20,
"hotel_address": "Street 1",
"hotel_local_qty": 5,
"hotel_foreign_qty": 2,
"hotel_phone": "+998...",
"hotel_manager": "Manager Name",
"location": "41.311081,69.279737",
"check_in_qty": 15,
"check_out_qty": 8
}
],
"request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
Returns two arrays: check_in and check_out for the given date and COATO code.
curl --request POST \
"https://api.emehmon.uz/sync/v1/coato/details" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data "{
\"oblastsoatocode\": \"\\\"1726\\\"\",
\"date\": \"\\\"2026-01-20\\\"\"
}"
{
"code": 200,
"message": "success",
"data": {
"check_out": [
{
"hotel_id": 1,
"listok_id": 10,
"name": "John Doe",
"sex": "M",
"birthdate": "1990-01-01",
"birthcountry": 860,
"arrival_from": 643,
"citizen": 860,
"check_in": "2026-01-18 12:00:00",
"check_out": "2026-01-20 09:00:00",
"children": null
}
],
"check_in": [
{
"hotel_id": 2,
"listok_id": 11,
"name": "Jane Doe",
"sex": "W",
"birthdate": "1995-05-05",
"birthcountry": 860,
"arrival_from": 398,
"citizen": 860,
"check_in": "2026-01-20 14:00:00",
"check_out": null,
"children": null
}
]
},
"request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
curl --request POST \
"https://api.emehmon.uz/sync/v1/hp/hotels" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data "{
\"page\": 1,
\"per_page\": 50
}"
{
"code": 200,
"message": "success",
"data": {
"total_count": 1000,
"rows": [
{"hotel_id":1,"hotel_name":"Example","hotel_inn":"123","hotel_type":"Hotel","hotel_status":"Active","hotel_stars":3,"hotel_rooms":10,"hotel_beds":20,"region_id":"17","region_name":"Tashkent","district_id":"1726","district_name":"District","hotel_address":"Street 1","hotel_local_qty":5,"hotel_foreign_qty":2,"hotel_manager":"Manager","hotel_phone":"+998..."},
]
},
"request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
curl --request POST \
"https://api.emehmon.uz/sync/v1/hp/clients" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data "{
\"page\": 1,
\"per_page\": 50,
\"date_from\": \"\\\"2026-01-01\\\"\",
\"date_to\": \"\\\"2026-01-31\\\"\"
}"
{
"code": 200,
"message": "success",
"data": {
"total_count": 12345,
"rows": [
{
"listok_id": 1,
"hotel_id": 10,
"hotel_inn": "123",
"hotel_name": "Example",
"name": "DOE JOHN",
"pinfl": "**masked**",
"gender": "M",
"birthdate": "1990-01-01",
"birthcountry": "Uzbekistan",
"arrival_from": "Kazakhstan",
"citizen": "Uzbekistan",
"check_in": "2026-01-10 12:00:00",
"check_out": "2026-01-12 09:00:00",
"children": null,
"region_id": "17",
"region_name": "Tashkent",
"district_id": "1726",
"district_name": "District",
"guest_goal": "Tourism"
}
]
},
"request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
Полный список публичных error_code, возвращаемых Sync API и CRM Hotel API. Каждая запись содержит группу (auth / authz / idempotency / crm.hotel / crm.listok / crm.assets / system), HTTP-статус, машиночитаемый error_code и краткое описание.
Источник правды — App\Support\ErrorCatalog::all(). Расширение списка считается
обратно-совместимым изменением и не требует версионирования.
curl --request GET \
--get "https://api.emehmon.uz/sync/v1/meta/errors" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "X-User-Name: apistatuser@emehmon.uz" \
--header "X-User-Ts: 1769053020" \
--header "X-User-Request-Id: e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31" \
--header "X-User-Hash: PLACEHOLDER_HASH"