Emehmon Sync API Documentation

Postman collection → OpenAPI spec →

Introduction

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_NOT_ALLOWED`       | Client IP not in `allowed_ips` (if enabled)     |
|  403 | `REPLAY_DETECTED`      | 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          |
|  422 | `VALIDATION_ERROR`     | Request body validation failed                  |
|  500 | `INTERNAL_ERROR`       | Unhandled server error                          |

Authenticating requests

This API is not authenticated.

CRM Hotel API

Хеш-версии справочников — чтобы понять, нужно ли перечитывать содержимое.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/dictionaries-meta

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "code": 200,
    "message": "OK",
    "data": {
        "locale": "ru",
        "known": [
            "countries",
            "regions",
            "districts",
            "room-types",
            "visit-types",
            "guest-types",
            "passport-types",
            "visa-types",
            "payment-types"
        ],
        "versions": {
            "countries": {
                "version": "0563a7d5a3cf",
                "count": 250
            },
            "regions": {
                "version": "423847f4b3bc",
                "count": 14
            },
            "room-types": {
                "version": "5709ead1a80e",
                "count": 6
            },
            "visit-types": {
                "version": "1c9f0b2d7e41",
                "count": 4
            },
            "guest-types": {
                "version": "8e2a6f1b3c05",
                "count": 5
            },
            "passport-types": {
                "version": "b7d4e9a2c611",
                "count": 8
            },
            "visa-types": {
                "version": "d3f8a1c5e972",
                "count": 12
            },
            "payment-types": {
                "version": "f19c4b7e2a38",
                "count": 4
            }
        }
    },
    "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}

Справочник по имени. Локализация — `Accept-Language: ru | uz | en`. Только `districts` поддерживает фильтр `?region_id=`.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/dictionaries/{name}

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

URL Parameters

name
string
required

Имя справочника: countries, regions, districts, room-types, visit-types, guest-types, passport-types, visa-types, payment-types.

Example:
countries

Query Parameters

region_id
integer

Только для districts — фильтр по региону.

Example:
1726
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "code": 200,
    "message": "OK",
    "data": {
        "name": "countries",
        "locale": "ru",
        "count": 2,
        "items": [
            {
                "id": 173,
                "name": "Узбекистан",
                "code": "UZB"
            },
            {
                "id": 231,
                "name": "Казахстан",
                "code": "KAZ"
            }
        ]
    },
    "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
{
    "code": 404,
    "message": "Dictionary not found",
    "error_code": "DICTIONARY_NOT_FOUND",
    "meta": {
        "name": "unknown"
    },
    "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}

Карточка вашей гостиницы: реквизиты, лицензия, депозит и флаг `can_register_listok` с причинами блокировки.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/hotel

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}

Список номеров гостиницы с типами. `room_type_name` локализуется по `Accept-Language`.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/hotel/rooms

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}

Действующий прайс: одна запись на `room_type_id` (самая свежая).

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/hotel/prices

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}

Список фото гостиницы: главное (`is_main`) первым, затем по убыванию `id`.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/hotel/photos

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}

Обновление прайса (batch). Каждый элемент создаёт новую запись; действующая цена — самая свежая по room_type_id.

PUT
https://sandbox-api.emehmon.uz
/sync/v1/crm/hotel/prices

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

Body Parameters

Example request:
curl --request PUT \
    "https://sandbox-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
        }
    ]
}"

Загрузка одного фото гостиницы (multipart/form-data).

POST
https://sandbox-api.emehmon.uz
/sync/v1/crm/hotel/photos

Headers

Accept
Example:
application/json
Content-Type
Example:
multipart/form-data
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

Body Parameters

Example request:
curl --request POST \
    "https://sandbox-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/phpvRYSWi" 

DELETE sync/v1/crm/hotel/photos/{id}

DELETE
https://sandbox-api.emehmon.uz
/sync/v1/crm/hotel/photos/{id}

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

URL Parameters

id
string
required

The ID of the photo.

Example:
564
Example request:
curl --request DELETE \
    "https://sandbox-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"

Может ли гостиница регистрировать листовки (статус, лицензия, депозит).

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/listok/check-can-create

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}

Pre-flight проверка на дубликаты по паспорту.

POST
https://sandbox-api.emehmon.uz
/sync/v1/crm/listok/check-duplicate

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

Body Parameters

Example request:
curl --request POST \
    "https://sandbox-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\"
}"

Lookup `person_id` иностранца в базе Погран.Службы (до регистрации листовки).

POST
https://sandbox-api.emehmon.uz
/sync/v1/crm/listok/person-lookup

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

Body Parameters

Example request:
curl --request POST \
    "https://sandbox-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
}"

Список листовок гостиницы с фильтрами. Сортировка — `id DESC`. **Текущие проживающие** (то же множество, что «текущие зарегистрированные» в кабинете emehmon.uz): `?active=1` — листовки без выселения (`dateVisitOff IS NULL`). Для сверки с PMS выгружайте страницами: `?active=1&per_page=200&page=N`, число страниц — `ceil(total / per_page)`.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/listok

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

Query Parameters

date_from
string

Фильтр: дата заселения от (Y-m-d). Must be a valid date in the format Y-m-d.

Example:
2026-05-01
date_to
string

Фильтр: дата заселения до (Y-m-d), не раньше date_from. Must be a valid date in the format Y-m-d. validation.after_or_equal.

Example:
2026-05-31
passport
string

Фильтр по серии/номеру паспорта. validation.max.

Example:
AB1234567
surname
string

Фильтр по фамилии (частичное совпадение). validation.max.

Example:
Каримов
active
boolean

1 — только активные (не выселенные, dateVisitOff IS NULL) листовки; 0 — только выселенные. То же множество, что «текущие зарегистрированные» в кабинете.

Example:
true
page
integer

Номер страницы (с 1). validation.min.

Example:
1
per_page
integer

Размер страницы (1..200, по умолчанию 50). validation.min validation.max.

Example:
50
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}

Карточка одной листовки. 404 если не существует; 403 если в другой гостинице.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/listok/{id}

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

URL Parameters

id
integer
required

listok_id из списка.

Example:
8826912
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}
{
    "code": 404,
    "message": "Listok not found",
    "error_code": "LISTOK_NOT_FOUND",
    "meta": {
        "listok_id": 1
    },
    "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}

Регистрация (заселение) гостя.

POST
https://sandbox-api.emehmon.uz
/sync/v1/crm/listok

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

Body Parameters

Example request:
curl --request POST \
    "https://sandbox-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\": \"b\",
    \"firstname\": \"n\",
    \"lastname\": \"g\",
    \"id_citizen\": 66,
    \"passportNumber\": \"m\",
    \"datePassport\": \"2026-09-02\",
    \"datebirth\": \"2026-09-02\",
    \"datevisiton\": \"2026-09-02T14:28:55\",
    \"wdays\": 15,
    \"sex\": \"M\",
    \"id_visittype\": 43,
    \"id_guest\": 16,
    \"id_person\": \"12345\",
    \"propiska\": \"d\",
    \"id_country\": 40,
    \"id_countryFrom\": 4,
    \"id_passporttype\": 2,
    \"passportIssuedBy\": \"i\",
    \"pinfl\": \"31234567890123\",
    \"amount\": 75,
    \"lived_days\": 7,
    \"payed\": 87,
    \"id_visatype\": 39,
    \"visaNumber\": \"y\",
    \"dateVisaOn\": \"2026-09-02\",
    \"dateVisaOff\": \"2026-09-02\",
    \"visaIssuedBy\": \"k\",
    \"kppNumber\": \"c\",
    \"dateKPP\": \"2026-09-02\",
    \"bookingId\": 49,
    \"crm_actor_id\": \"y\",
    \"crm_actor_name\": \"u\",
    \"children\": [
        {
            \"full_name\": \"w\",
            \"gen\": \"M\",
            \"birth_day\": \"2026-09-02\"
        }
    ]
}"

Обновление листовки в grace-period (5 минут после создания).

PATCH
https://sandbox-api.emehmon.uz
/sync/v1/crm/listok/{id}

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

URL Parameters

id
string
required

The ID of the listok.

Example:
564

Body Parameters

Example request:
curl --request PATCH \
    "https://sandbox-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\": \"b\",
    \"firstname\": \"n\",
    \"id_citizen\": 67,
    \"passportNumber\": \"z\",
    \"datePassport\": \"2026-09-02\",
    \"sex\": \"W\",
    \"id_visittype\": 27,
    \"id_guest\": 35,
    \"propiska\": \"101\",
    \"crm_actor_id\": \"op-42\",
    \"crm_actor_name\": \"y\"
}"

Выселение (checkout) с расчётом турсбора.

POST
https://sandbox-api.emehmon.uz
/sync/v1/crm/listok/{id}/checkout

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

URL Parameters

id
string
required

The ID of the listok.

Example:
564

Body Parameters

Example request:
curl --request POST \
    "https://sandbox-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\": 1
}"

Список самостоятельных регистраций гостиницы с фильтрами. Сортировка — `id DESC`.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/self-listok

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

Query Parameters

date_from
string

Фильтр: дата заселения от (Y-m-d). Must be a valid date in the format Y-m-d.

Example:
2026-05-01
date_to
string

Фильтр: дата заселения до (Y-m-d), не раньше date_from. Must be a valid date in the format Y-m-d. validation.after_or_equal.

Example:
2026-05-31
passport
string

Фильтр по серии/номеру паспорта. validation.max.

Example:
AB7654321
surname
string

Фильтр по фамилии (частичное совпадение). validation.max.

Example:
Каримов
page
integer

Номер страницы (с 1). validation.min.

Example:
1
per_page
integer

Размер страницы (1..200, по умолчанию 50). validation.min validation.max.

Example:
50
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}

Карточка одной самостоятельной регистрации. 404 если не существует; 403 если в другой гостинице.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/self-listok/{id}

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

URL Parameters

id
integer
required

self_listok_id из списка.

Example:
8821934
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}
{
    "code": 404,
    "message": "Self-listok not found",
    "error_code": "SELF_LISTOK_NOT_FOUND",
    "meta": {
        "self_listok_id": 1
    },
    "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}

POST sync/v1/crm/self-listok

POST
https://sandbox-api.emehmon.uz
/sync/v1/crm/self-listok

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

Body Parameters

Example request:
curl --request POST \
    "https://sandbox-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\": \"b\",
    \"firstname\": \"n\",
    \"lastname\": \"g\",
    \"id_citizen\": 66,
    \"passportNumber\": \"m\",
    \"datePassport\": \"2026-09-02\",
    \"datebirth\": \"2026-09-02\",
    \"datevisiton\": \"2026-09-02T14:28:55\",
    \"wdays\": 15,
    \"sex\": \"M\",
    \"id_visittype\": 43,
    \"id_guest\": 16,
    \"kppNumber\": \"KPP-12345\",
    \"id_person\": \"12345\",
    \"id_country\": 26,
    \"id_countryFrom\": 40,
    \"id_passporttype\": 4,
    \"passportIssuedBy\": \"n\",
    \"pinfl\": \"31234567890123\",
    \"dateKPP\": \"2026-09-02\",
    \"direction\": \"i\",
    \"id_visatype\": 75,
    \"visaNumber\": \"h\",
    \"dateVisaOn\": \"2026-09-02\",
    \"dateVisaOff\": \"2026-09-02\",
    \"visaIssuedBy\": \"w\",
    \"crm_actor_id\": \"a\",
    \"crm_actor_name\": \"y\",
    \"children\": [
        {
            \"full_name\": \"k\",
            \"gen\": \"W\",
            \"birth_day\": \"2026-09-02\"
        }
    ]
}"

PATCH sync/v1/crm/self-listok/{id}

PATCH
https://sandbox-api.emehmon.uz
/sync/v1/crm/self-listok/{id}

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

URL Parameters

id
string
required

The ID of the self listok.

Example:
564

Body Parameters

Example request:
curl --request PATCH \
    "https://sandbox-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\": \"b\",
    \"firstname\": \"n\",
    \"id_citizen\": 67,
    \"passportNumber\": \"z\",
    \"datePassport\": \"2026-09-02\",
    \"sex\": \"W\",
    \"id_visittype\": 27,
    \"id_guest\": 35,
    \"datevisiton\": \"2026-09-02T14:28:55\",
    \"wdays\": 8,
    \"kppNumber\": \"KPP-12345\",
    \"dateKPP\": \"2026-09-02\",
    \"direction\": \"Tashkent → Samarkand\",
    \"id_visatype\": 60,
    \"visaNumber\": \"d\",
    \"dateVisaOn\": \"2026-09-02\",
    \"dateVisaOff\": \"2026-09-02\",
    \"visaIssuedBy\": \"l\",
    \"crm_actor_id\": \"j\",
    \"crm_actor_name\": \"n\"
}"

Сводка турсбора: помесячные суммы (ГТ/МТ/СТ) + итог. Разрез — по дате выезда, листки без выезда в суммы не входят.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/finance/tourist-tax

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

Query Parameters

year
integer
required

Год (обязательно). validation.min validation.max.

Example:
2026
month
integer

Месяц 1..12. Без него — весь год с разбивкой по месяцам. validation.between.

Example:
7
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}

Детализация турсбора за месяц: построчно по гостям (гостиничные и самостоятельные регистрации), с пагинацией.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/finance/tourist-tax/details

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

Query Parameters

year
integer
required

Год (обязательно). validation.min validation.max.

Example:
2026
month
integer
required

Месяц 1..12 (обязательно). validation.between.

Example:
7
page
integer

Номер страницы (с 1). validation.min.

Example:
1
per_page
integer

Размер страницы (1..200, по умолчанию 50). validation.min validation.max.

Example:
50
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}

Абонентская плата: начисления (тариф, скидка, к оплате, регистраций), оплаты за период и текущий баланс гостиницы.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/finance/subscription

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

Query Parameters

year
integer
required

Год (обязательно). validation.min validation.max.

Example:
2026
month
integer

Месяц 1..12. Без него — весь год с разбивкой по месяцам. validation.between.

Example:
7
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}

Подсчёт регистраций по дате заезда: за год — помесячно, за месяц — по дням.

GET
https://sandbox-api.emehmon.uz
/sync/v1/crm/finance/registrations

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH

Query Parameters

year
integer
required

Год (обязательно). validation.min validation.max.

Example:
2026
month
integer

Месяц 1..12. Без него — весь год с разбивкой по месяцам. validation.between.

Example:
7
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "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"
}

Sync API

COATO: Common hotels info by region/district code

POST
https://sandbox-api.emehmon.uz
/sync/v1/coato/common

Returns hotel list by SOATO/COATO code.

Headers

X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH
Accept
Example:
application/json
Content-Type
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://sandbox-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\\\"\"
}"
Example response:
{
    "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"
}
{
    "code": 401,
    "message": "Request time expired",
    "error_code": "REQUEST_TIME_EXPIRED",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 403,
    "message": "Invalid signature hash",
    "error_code": "INVALID_SIGNATURE",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 422,
    "message": "Validation error",
    "error_code": "VALIDATION_ERROR",
    "meta": {
        "field": "date"
    },
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 500,
    "message": "Internal error",
    "error_code": "INTERNAL_ERROR",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}

COATO: Common hotels info by region/district code with period stats

POST
https://sandbox-api.emehmon.uz
/sync/v1/coato/common-with-period

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).

Headers

X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH
Accept
Example:
application/json
Content-Type
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://sandbox-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\\\"\"
}"
Example response:
{
    "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"
}
{
    "code": 401,
    "message": "Request time expired",
    "error_code": "REQUEST_TIME_EXPIRED",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 403,
    "message": "Access denied for this user",
    "error_code": "ACCESS_DENIED",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 422,
    "message": "Validation error",
    "error_code": "VALIDATION_ERROR",
    "meta": {
        "field": "date_from"
    },
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 500,
    "message": "Internal error",
    "error_code": "INTERNAL_ERROR",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}

COATO: Details (check-in/check-out lists)

POST
https://sandbox-api.emehmon.uz
/sync/v1/coato/details

Returns two arrays: check_in and check_out for the given date and COATO code.

Headers

X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH
Accept
Example:
application/json
Content-Type
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://sandbox-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\\\"\"
}"
Example response:
{
    "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"
}
{
    "code": 401,
    "message": "Request time expired",
    "error_code": "REQUEST_TIME_EXPIRED",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 403,
    "message": "Invalid signature hash",
    "error_code": "INVALID_SIGNATURE",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 422,
    "message": "Validation error",
    "error_code": "VALIDATION_ERROR",
    "meta": {
        "field": "date"
    },
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 500,
    "message": "Internal error",
    "error_code": "INTERNAL_ERROR",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}

Hisob Palata: Hotels list (paged)

POST
https://sandbox-api.emehmon.uz
/sync/v1/hp/hotels

Headers

X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH
Accept
Example:
application/json
Content-Type
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://sandbox-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
}"
Example response:
{
  "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"
{
    "code": 401,
    "message": "Request time expired",
    "error_code": "REQUEST_TIME_EXPIRED",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 403,
    "message": "Invalid signature hash",
    "error_code": "INVALID_SIGNATURE",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 422,
    "message": "Validation error",
    "error_code": "VALIDATION_ERROR",
    "meta": {
        "field": "date"
    },
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
   "code": 500,
   "message": "Internal error",
   "error_code": "INTERNAL_ERROR",
   "meta": {},
   "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
 }}

Hisob Palata: Clients list (paged)

POST
https://sandbox-api.emehmon.uz
/sync/v1/hp/clients

Headers

X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH
Accept
Example:
application/json
Content-Type
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://sandbox-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\\\"\"
}"
Example response:
{
    "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"
}
{
    "code": 401,
    "message": "Request time expired",
    "error_code": "REQUEST_TIME_EXPIRED",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 403,
    "message": "Invalid signature hash",
    "error_code": "INVALID_SIGNATURE",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 422,
    "message": "Validation error",
    "error_code": "VALIDATION_ERROR",
    "meta": {
        "field": "date"
    },
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}
{
    "code": 500,
    "message": "Internal error",
    "error_code": "INTERNAL_ERROR",
    "meta": {},
    "request_id": "e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31"
}

Sync API Meta

Errors catalog

GET
https://sandbox-api.emehmon.uz
/sync/v1/meta/errors

Полный список публичных error_code, возвращаемых Sync API и CRM Hotel API. Каждая запись содержит группу (auth / authz / idempotency / crm.hotel / crm.listok / crm.assets / system), HTTP-статус, машиночитаемый error_code и краткое описание.

Источник правды — App\Support\ErrorCatalog::all(). Расширение списка считается обратно-совместимым изменением и не требует версионирования.

Headers

Accept
Example:
application/json
Content-Type
Example:
application/json
X-User-Name
Example:
apistatuser@emehmon.uz
X-User-Ts
Example:
1769053020
X-User-Request-Id
Example:
e7b8c3a4-9f2d-4c6a-8e51-6a9b2c4f7d31
X-User-Hash
Example:
PLACEHOLDER_HASH
Example request:
curl --request GET \
    --get "https://sandbox-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"
Example response:
{
    "code": 200,
    "message": "success",
    "data": [
        {
            "group": "auth",
            "http": 401,
            "error_code": "MISSING_AUTH_HEADERS",
            "message": "Missing authentication headers"
        },
        {
            "group": "authz",
            "http": 403,
            "error_code": "HOTEL_MISMATCH",
            "message": "Requested hotel does not match API user"
        },
        {
            "group": "crm.listok",
            "http": 422,
            "error_code": "LISTOK_DUPLICATE_ACTIVE",
            "message": "Active listok for this passport already exists in this hotel"
        }
    ]
}