> For the complete documentation index, see [llms.txt](https://wiki.inels.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.inels.com/inels-harmony/administration/connecting-other-systems.md).

# Connecting other systems

Property management systems, online distribution and electronic locks.

Harmony runs a hotel on its own, but most hotels already own systems it should talk to. Everything is configured in one place: **Settings → 3rd party integrations**.

## Which of these does this hotel need?

{% stepper %}
{% step %}

#### Does the hotel already run a PMS?

**Yes** → connect it, and let the PMS own the reservations. **No** → Harmony's own Reception *is* the PMS. Skip that tab entirely.
{% endstep %}

{% step %}

#### Does it sell through Booking.com, Airbnb or similar?

**Yes** → set up online distribution through Channex. **No** → skip it.
{% endstep %}

{% step %}

#### What opens the guest-room doors?

**iNELS readers** → nothing more to do; [zones and readers](/inels-harmony/administration/step-7-zones-and-readers.md) already cover it. **DNAKE or Salto Space** → configure the Access tab.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
**Decide which system owns reservations before you connect anything.** Two systems that both believe they own bookings is the most painful failure mode there is.
{% endhint %}

## Every tab follows the same shape

{% stepper %}
{% step %}

#### Choose the vendor

From the drop-down at the top. Only the matching panel stays visible.
{% endstep %}

{% step %}

#### Enter the credentials

Endpoint, keys, identifiers. Paste them — never retype a long key.
{% endstep %}

{% step %}

#### Click Test connection

Wait for a positive result. Do not proceed until it passes — a failure here is always credentials or network.
{% endstep %}

{% step %}

#### Click Save

{% endstep %}

{% step %}

#### Map the rooms

The other system's room identifiers must be matched to Harmony's rooms.
{% endstep %}

{% step %}

#### Click Connect

This is what makes the integration live. Saving credentials alone does nothing.
{% endstep %}
{% endstepper %}

{% hint style="danger" %}
**Room mapping is not optional.** A connection that tests successfully but has no room mapping looks perfectly healthy and delivers nothing. When bookings "disappear", check the mapping first.
{% endhint %}

## Property management systems

| Vendor             | You will need                                                              |
| ------------------ | -------------------------------------------------------------------------- |
| **Oracle Opera**   | Gateway URL, Hotel ID, Application key, Client ID, Client secret           |
| **Mews**           | Client token, Access token, and whether to use the production API          |
| **EasyPin**        | Base URL, username or email, password, numeric Location ID                 |
| **Previo**         | API URL, API key, hotel ID, language                                       |
| **Custom / Other** | A source name; Harmony then generates an endpoint and an authorization key |

Where a vendor offers a sandbox, leave production **off** while testing and turn it on at go-live. A booking made in a sandbox will never appear over a production connection.

**What crosses the link:** bookings, changes, cancellations, check-ins and check-outs flow *PMS → Harmony*; housekeeping status flows *Harmony → PMS*, so the PMS knows which rooms are clean.

#### Custom / Other PMS

This panel works the other way round — the other system calls Harmony. Give it a **source name** (it appears as the Source on bookings that arrive), save, and Harmony shows you an endpoint and an authorization key to hand to that system's developer. **Rotate key** invalidates the old key immediately, so warn the other side first.

## Online distribution

Harmony reaches Booking.com, Airbnb and the rest through **Channex**, a channel manager the hotel subscribes to separately.

{% stepper %}
{% step %}

#### Connect Channex

API key, property ID (leave empty and use **Create property** to have Harmony make one), optional group ID, and the currency.
{% endstep %}

{% step %}

#### Define room types and BAR rates

Channels sell *room types*, not individual rooms. Use the hotel's marketing names — this is what a guest sees on Booking.com. Set the Best Available Rate and any minimum stay.
{% endstep %}

{% step %}

#### Add rate calendar overrides

For a festival, a quiet February, or a minimum stay over a long weekend. **Stop sell** closes dates without deleting anything.
{% endstep %}

{% step %}

#### Map to the channel manager

Harmony type → Channex room type, Harmony BAR → Channex rate plan. **Nothing publishes until this is mapped.**
{% endstep %}

{% step %}

#### Open channel mapping

This opens Channex's own screen for linking the property to each OTA. That side is configured in Channex, not Harmony.
{% endstep %}
{% endstepper %}

The **Sync log** at the bottom shows every exchange — when, which OTA, what action, and the result. It is where a rejected rate update or a failed booking import shows up, with the reason.

{% hint style="danger" %}
**Overbooking is expensive.** Publish **one** room type first, verify the price and availability on the channel, make one real test booking and cancel it — then publish the rest. Watch the sync log for the first few days.
{% endhint %}

## Electronic locks

{% tabs %}
{% tab title="DNAKE" %}
DNAKE locks are addressed individually by IP and mapped one-to-one to Harmony rooms.

Set an optional **discovery subnet** so Harmony can find locks itself, then add one entry per lock: IP address, web login and password, a name, the **relay index** that opens the door, and the Harmony room it belongs to.

Reserve the lock addresses on the router — a lock that reboots onto a new IP silently stops working.
{% endtab %}

{% tab title="Salto Space" %}
Salto works differently: Harmony talks to the Salto Space server over its PMS interface, and credentials are written by an encoder at the front desk.

You need the **Space PMS host and port** (commonly 8090), the **Ethernet encoder name** exactly as Salto knows it, and optionally the **common-area authorisations** every guest should receive.

Then map each Harmony room to the room name Salto knows it by. The two systems very often disagree — "203" against "R203" — and a mismatch means the credential is written for a door that does not exist.
{% endtab %}
{% endtabs %}

Once connected, reception issues keys from the booking itself — see [Guest keys](/inels-harmony/reception/guest-keys-cards-pins-and-salto.md).

## Test any integration end to end

* [ ] Create a booking in the other system for a mapped room
* [ ] Confirm it appears in Reception with the right dates, room and guest
* [ ] Check it in from Harmony and confirm the other system reflects it
* [ ] Check it out and confirm the departure cleaning task appears
* [ ] Mark that task done and confirm the other system shows the room as clean
* [ ] Delete the test booking on both sides
