> For the complete documentation index, see [llms.txt](https://chekin.gitbook.io/chekin-public-api/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chekin.gitbook.io/chekin-public-api/chekin-embedded-sdks/host-sdk/initialization-parameters.md).

# Initialization parameters

### Connecting the SDK

UMD — simplest option for plain HTML pages and quick integrations:

{% code overflow="wrap" %}

```html
<script src="https://cdn.chekin.com/housings-sdk/latest/index.umd.js"></script>
<script>  
  const sdk = new ChekinHousingsSDK();
  
  sdk.initialize({    
    apiKey: 'YOUR_SDK_API_KEY',    
    housingId: 'CHEKIN_HOUSING_ID',  
  });
  
  sdk.renderApp({targetNode: 'root'});
</script>
```

{% endcode %}

ES Module — recommended for modern apps and build setups (smaller chunks, better loading performance):

{% code overflow="wrap" %}

```html
<script type="module">
  import ChekinHousingsSDK from 'https://cdn.chekin.com/housings-sdk/latest/index.es.js';
  
  const sdk = new ChekinHousingsSDK();
  
  sdk.initialize({    
    apiKey: 'YOUR_SDK_API_KEY',    
    housingId: 'CHEKIN_HOUSING_ID',  
  });
  
  sdk.renderApp({targetNode: 'root'});
</script>
```

{% endcode %}

| CDN URL                                                                          | Version               |
| -------------------------------------------------------------------------------- | --------------------- |
| `https://cdn.chekin.com/housings-sdk/v{VERSION}/index.umd.js` (or `index.es.js`) | Specific version      |
| `https://cdn.chekin.com/housings-sdk/latest/…`                                   | Latest stable         |
| `https://cdn.chekin.com/housings-sdk/dev/…`                                      | Sandbox / development |

[See UMD vs. ES Module](/chekin-public-api/chekin-embedded-sdks/guides/umd-vs.-es-module.md) for choosing between the two formats.

{% hint style="info" %}
The two formats are the same SDK with the same parameters and callbacks — only the module format and the filename differ. The UMD build is the `.js` file and registers the `ChekinHousingsSDK` global; the ES build is the `.es.js` file and has no global.
{% endhint %}

### Methods

| Method                    | Description                                                                                                                                        |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `initialize(params)`      | Pass the initialization parameters below.                                                                                                          |
| `renderApp({targetNode})` | Render the SDK into the container with the given element id. Calling it again on the same instance re-renders smoothly and resets the query cache. |
| `unmount()`               | Remove the SDK from your container. Call it before rendering a new instance into the same node.                                                    |

### Views: what the SDK shows

Which view opens depends on the IDs you pass:

| You pass                                                 | The SDK shows                                              |
| -------------------------------------------------------- | ---------------------------------------------------------- |
| Nothing (API key with Property access: *All properties*) | Properties list — the host can navigate into any property. |
| `housingId` or `externalHousingId`                       | That property's settings view directly.                    |
| `housingId` + `reservationsOnly: true`                   | The bookings list of that property.                        |
| `reservationId`                                          | That reservation's details view directly.                  |

{% hint style="info" %}
An API key created with Property access **One property at a time** (the default) only works when you pass a `housingId` or `externalHousingId`. Without it the SDK will not render. See API Key for SDK.
{% endhint %}

### Initialization parameters

| Key                            | Type         | Required | Default                   | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| ------------------------------ | ------------ | -------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `apiKey`                       | string       | Yes      | —                         | SDK API key created for the **Host/Inbox SDK** (`DASHBOARD` via the API), generated in the Chekin Dashboard or via the API Key for SDK endpoint.                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `housingId`                    | string       | No       | —                         | Chekin housing ID. Opens the property settings view directly. If both `housingId` and `externalHousingId` are passed, `housingId` takes priority.                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `externalHousingId`            | string       | No       | —                         | Housing ID in your PMS; alternative to `housingId`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `reservationId`                | string       | No       | —                         | Chekin reservation ID. Opens the reservation details view directly.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `reservationsOnly`             | boolean      | No       | `false`                   | With `housingId`/`externalHousingId`: show only that property's bookings list (hosts can navigate into individual reservations).                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `defaultLanguage`              | ENUM         | No       | `'en'`                    | One of `'en', 'es', 'it', 'pt', 'de', 'fr'`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `styles`                       | string (CSS) | No       | —                         | CSS injected into the SDK iframe to override default styles. See Defining CSS Styles for the SDK.                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `stylesLink`                   | string (URL) | No       | —                         | URL of a hosted `.css` file injected into the SDK, as an alternative to `styles`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `autoHeight`                   | boolean      | No       | `false`                   | Adjust the iframe height to its content automatically.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `hiddenFormFields`             | object       | No       | —                         | Form fields to hide, grouped per form. See [Hiding fields and sections](#hiding-fields-and-sections).                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `hiddenSections`               | string\[]    | No       | `[]`                      | Sections to hide entirely. Any of `'property_information'`, `'booking_overview'`, `'housing_police'`, `'housing_stat'`, `'housing_tax_reporting'`, `'housing_documents'`, `'housing_vau_report'`, `'housing_guest_signature'`, `'tourist_taxes'`, `'guestbooks'`, `'certified_invoices'`, `'identity_verification'`, `'remote_access'`, `'guidebooks'`.                                                                                                                                                                                                            |
| `features`                     | string\[]    | No       | —                         | Optional sections and capabilities to switch on: `'LIVENESS_DETECTION'` (liveness detection inside IV), `'RESERVATIONS_LIST'` (bookings tab in the housing view; use together with a housing id). **Deprecated** in favour of the matching `products` entry, and still supported: `'IV'`, `'REMOTE_ACCESS'`, `'TOURIST_TAXES'`, `'GUIDEBOOKS'` — see [Choosing products](#choosing-products). They keep working; passing one logs a deprecation warning. See [What `products`, `features` and `hiddenSections` do](#what-products-features-and-hiddensections-do). |
| `products`                     | string\[]    | No       | `['Basic', 'EInvoicing']` | Which Chekin products this embed is for. Any of `'All'`, `'Basic'`, `'EInvoicing'`, `'IdentityVerification'`, `'RemoteAccess'`, `'Guidebooks'`, `'TouristTaxes'`. Decides which sections the embed shows and, for country-restricted products, narrows the properties list to eligible properties and the bookings list to properties with the product switched on. See [Choosing products](#choosing-products).                                                                                                                                                   |
| `payServicesConfig`            | object       | No       | —                         | Prices shown to the host for paid services: `{currency?, liveness?: {price}, phoneValidation?: {price}, emailValidation?: {price}, socialMediaScreening?: {price}}`. `currency` defaults to `'usd'` and only drives the currency symbol next to those prices. Omitted prices fall back to Chekin's standard pricing.                                                                                                                                                                                                                                               |
| `redirectIVQRUrl`              | string (URL) | No       | —                         | URL encoded into the identity-verification QR code shown in Property Settings. Enables the IV QR section — see IV QR. Same name in the Guest SDK; the legacy Guest SDK spelling `redirectIVQrUrl` is also accepted here and logs a rename warning.                                                                                                                                                                                                                                                                                                                 |
| `displayHousingCommercialName` | boolean      | No       | `false`                   | Show the housing commercial name (`display_name`) instead of the internal name wherever the label is user-visible; search and filters use commercial-name fields too.                                                                                                                                                                                                                                                                                                                                                                                              |
| `supportEmail`                 | string       | No       | —                         | Your own support email address. When set, error messages inside the SDK show a **Reach support at** line with a `mailto:` link to this address. When omitted, no support contact is shown at all, so the embed never points your hosts at Chekin. An address that is not a valid email is ignored, logs a warning in the console and shows no support contact.                                                                                                                                                                                                     |

#### Hiding fields and sections

{% code overflow="wrap" %}

```javascript
hiddenFormFields: {  
    housingInfo: ['name'],                    // property form fields  
    guestbookGeneration: ['email'],           // guestbook generation form fields
    housingPolice: ['activation_toggle'],     // police connection form fields  
    housingStat: ['activation_toggle'],       // stats connection form fields
},
hiddenSections: ['housing_documents'],
```

{% endcode %}

#### Choosing products

`products` declares what an embed offers. Every section the Host SDK can render belongs to exactly one Chekin product, so listing the products you want is the same as choosing the sections you get — and everything else stays out.

{% code overflow="wrap" %}

```javascript
sdk.initialize({
  apiKey: 'YOUR_SDK_API_KEY',
  products: ['Basic', 'Guidebooks'],
});
```

{% endcode %}

That is the whole API: one array, listing what you want in. You do not enumerate what to remove — `hiddenSections` exists for exceptions, not for stripping out products you never asked for.

Reach for it in either situation:

* **You want a specific set of products.** The standard check-in experience plus guidebooks; invoicing on its own; everything. Say so once at init.
* **You embed the SDK more than once for the same account** and each embed should be a different product — one for the standard experience, another for e-invoicing only. Both embeds share an API key and an origin, so `products` is the only thing that can tell them apart.

| Value                    | The embed shows                                                                                     |
| ------------------------ | --------------------------------------------------------------------------------------------------- |
| `'All'`                  | Every product, including ones added in future releases.                                             |
| `'Basic'`                | The standard check-in sections.                                                                     |
| `'EInvoicing'`           | The invoicing section and the booking overview, and the properties and bookings lists are narrowed. |
| `'IdentityVerification'` | The Identity Verification section.                                                                  |
| `'RemoteAccess'`         | The Remote Access section.                                                                          |
| `'Guidebooks'`           | The Guidebooks tab.                                                                                 |
| `'TouristTaxes'`         | The Tourist Taxes section — see [Tourist taxes](#tourist-taxes).                                    |

Values combine, so `['Basic', 'EInvoicing']` gives you both. `'All'` anywhere in the array wins over everything else in it. An unrecognised value is ignored and logs a warning rather than blanking the embed.

A product the property does not have is ignored as well. If Basic is switched off for a property, `'Basic'` in `products` does not bring it back — the embed runs with the rest of your list, and an embed that asked for `'Basic'` alone shows nothing there. See [Basic plan configuration](/chekin-public-api/chekin-embedded-sdks/guides/sdk-feature-configuration.md).

The booking overview is the one section two products share. `'EInvoicing'` keeps it because an invoice rejected over incorrect guest data can only be fixed from there — it is the route to a booking's guests and to the guest edit screen. The guest registration status shown against each booking in the list follows the same section, so an e-invoicing embed can also tell at a glance which bookings still have incomplete guest data. The premium subsections inside the booking overview stay tied to their own products, so the embed gets the booking status, the guest information and the invoicing status, and nothing else.

{% hint style="warning" %}
**`'All'` is forward-looking.** It grants every product the SDK knows about, so a product we add later becomes visible in your embed the moment you pick up a newer SDK version — no change on your side, and no warning. If an embed has to keep a fixed set of sections, list the products explicitly instead of using `'All'`.
{% endhint %}

{% hint style="info" %}
**The default is `['Basic', 'EInvoicing']`.** Omit `products` and you get exactly what the SDK showed before the parameter existed: the standard check-in sections plus invoicing. The other products stay out until you ask for them — by listing them here, or through the `features` flags below.
{% endhint %}

{% hint style="info" %}
**Filtering the lists.** A property in a country where e-invoicing is unavailable would still occupy a row in the properties and bookings lists, so an embed scoped to `['EInvoicing']` narrows both — but each on a different rule:

* **Properties** are filtered on **eligibility**: the property's country, not its setup. An eligible property that has not been configured yet still appears, so your hosts can find it and switch invoicing on.
* **Bookings** are filtered on **activation**: a booking appears once invoicing is switched on for its property. So the bookings list starts empty and fills up property by property as your hosts activate them — worth a nudge in your own UI, since a host who has activated nothing sees nothing.

Filtering applies only when **every** product in your list is country-restricted, which today means `'EInvoicing'` alone. One product that is available everywhere — `'Basic'`, `'IdentityVerification'`, `'RemoteAccess'`, `'Guidebooks'`, `'TouristTaxes'` — means the embed serves properties in every country, so the lists are left unfiltered. That includes products added by a `features` flag.
{% endhint %}

#### What `products`, `features` and `hiddenSections` do

Every section belongs to exactly one product, and a section appears only if both of these hold:

1. **`products`** — the section's product is in your resolved product list, and the property's Chekin plan includes it.
2. **`hiddenSections`** — you have not hidden it.

There is no third gate. `features` is not consulted separately: the four flags below simply **add their product** to your list before any of this is worked out.

| Deprecated feature | Adds this product        |
| ------------------ | ------------------------ |
| `'IV'`             | `'IdentityVerification'` |
| `'REMOTE_ACCESS'`  | `'RemoteAccess'`         |
| `'TOURIST_TAXES'`  | `'TouristTaxes'`         |
| `'GUIDEBOOKS'`     | `'Guidebooks'`           |

So `features: ['IV']` and `products: ['Basic', 'EInvoicing', 'IdentityVerification']` are the same instruction written two ways, and mixing them is safe — an embed sending `products: ['Basic']` and `features: ['IV']` gets the standard sections plus Identity Verification. Neither notation is weaker than the other, so you can migrate whenever it suits you.

`'LIVENESS_DETECTION'` and `'RESERVATIONS_LIST'` have no section of their own and are **not** deprecated — they always come from `features`.

#### Guidebooks

The **Guidebooks** tab lets a host switch guidebooks on for the property and build them — creating and editing guidebook content per language. It appears in the property view when `'Guidebooks'` is in `products`:

{% code overflow="wrap" %}

```javascript
sdk.initialize({
  apiKey: 'YOUR_SDK_API_KEY',
  housingId: 'CHEKIN_HOUSING_ID',
  products: ['Basic', 'Guidebooks'],
});
```

{% endcode %}

The older `features: ['GUIDEBOOKS']` still works and does the same thing — see [What `products`, `features` and `hiddenSections` do](#what-products-features-and-hiddensections-do).

Guests read what the host publishes here through the Guest SDK's `'GUIDEBOOKS'` mode — see [Guest SDK initialization parameters](/chekin-public-api/chekin-embedded-sdks/guest-sdk/initialization-parameters.md).

#### Tourist taxes

Chekin has **two separate tourist-tax setups**, configured in different places and used for different purposes. Which one you need depends on whether the guest has to pay the tax through Chekin or you only have to declare and invoice it.

| Setup                           | Where it is configured                                                                                   | What it does                                                                                                                                                                                                          | Availability                           |
| ------------------------------- | -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| **Guest-billed tourist taxes**  | The **Tourist Taxes** section — `'TouristTaxes'` in `products`, or `features: ['TOURIST_TAXES']`         | The tax is calculated per booking and **charged to the guest** in the Guest SDK payment step. It needs a payment gateway connected for the host; without one there is no way to collect it.                           | In production; needs a payment gateway |
| **Tourist taxes for invoicing** | The **invoicing** section, under **Add item → Tourist taxes** — no `products` or `features` entry needed | The tax is calculated per booking and carried into the invoice as a tax line. It is shown **only in the booking's invoicing section** and never appears in the guest's payment form, so no payment gateway is needed. | In production                          |

So if the tax is a legal reporting and invoicing obligation rather than something you collect from the guest through Chekin — the Greek climate crisis resilience fee (TAKK) declared to myDATA, for example — use the **invoicing** setup. It deliberately keeps the tax off the guest's payment form, and needs no payment gateway.

Nothing has to be switched on for it: the invoicing section is part of what an embed shows by default, so the setup is already there for any property eligible for e-invoicing whose supplier has been created. You only lose it by hiding the section yourself with `hiddenSections: ['certified_invoices']`.

{% hint style="info" %}
Both setups edit the same per-property tax configuration; what differs is the scope they apply it to — the guest bill, the invoice, or both. Configuring the tax in both places is fine: the property then uses it everywhere, and neither setup overwrites the other.
{% endhint %}

{% hint style="warning" %}
The **Tourist Taxes** section renders, but collecting the tax from the guest depends on the host having a payment gateway connected. Without one the tax is calculated and shown, and there is no way to charge it — so if you only need to declare and invoice the tax, use the invoicing setup instead.
{% endhint %}

### Callbacks

All callbacks are optional.

| Key                         | Called when                                               | Arguments                                                                                                                                                                                |
| --------------------------- | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `onPoliceAccountConnection` | The police connection state changes.                      | `state`: `'CONNECTED'` (also fired on police type change — behaves as a reconnection), `'DISCONNECTED'`, `'CONNECTION_ERROR'`, `'DISCONNECTION_ERROR'`, `'CONNECTION_VALIDATION_FAILED'` |
| `onStatAccountConnection`   | The stats connection state changes.                       | Same states as `onPoliceAccountConnection`                                                                                                                                               |
| `onSendGuestDataManually`   | Guest data is sent to the police by a manual action.      | `{type, status: 'SUCCESS'}` or `{type, status: 'ERROR', error}`                                                                                                                          |
| `onHeightChanged`           | The iframe height changes (only with `autoHeight: true`). | `height: number`                                                                                                                                                                         |
| `onConnectionError`         | Authentication failed (wrong `apiKey`).                   | Error message                                                                                                                                                                            |
| `onError`                   | A non-authentication error occurred.                      | Error                                                                                                                                                                                    |
| `onEvent`                   | A tracked user action happens inside the SDK.             | Event object — see [Event tracking](#event-tracking)                                                                                                                                     |

### Event tracking

`onEvent` reports what a host does inside the iframe, so you can forward it to your own analytics. Pass a single callback and every tracked action arrives through it:

{% code overflow="wrap" %}

```javascript
sdk.initialize({
  apiKey: 'YOUR_SDK_API_KEY',
  housingId: 'CHEKIN_HOUSING_ID',
  onEvent: event => analytics.track(event.name, event),
});
```

{% endcode %}

Every event has the same shape:

| Field               | Type   | Description                                                                   |
| ------------------- | ------ | ----------------------------------------------------------------------------- |
| `name`              | string | Namespaced event name, e.g. `einvoicing.invoice.generated`.                   |
| `occurredAt`        | string | ISO 8601 timestamp of when the action happened.                               |
| `housingId`         | string | Property the action relates to. Present on most events.                       |
| `reservationId`     | string | Reservation the action relates to. Present only on reservation-scoped events. |
| `userId`            | string | Host the action belongs to. Present once the SDK session is authenticated.    |
| `externalHousingId` | string | The `externalHousingId` you passed on initialization, echoed back.            |
| `payload`           | object | Event-specific details. Always present, empty when the event has none.        |

`payload` can carry these keys:

| Field        | Type   | Description                                                                                              |
| ------------ | ------ | -------------------------------------------------------------------------------------------------------- |
| `supplierId` | string | Supplier the action relates to.                                                                          |
| `itemId`     | string | Invoice item the action relates to.                                                                      |
| `itemName`   | string | Name of that invoice item, as shown to the host.                                                         |
| `provider`   | string | E-invoicing provider selected in the form.                                                               |
| `status`     | string | Registration status of the supplier with its provider, e.g. `'pending'`.                                 |
| `state`      | string | `'activated'` or `'deactivated'`, on events that switch something on or off.                             |
| `reason`     | string | Why an action did not go through: `'form_invalid'`, `'validation_failed'`, `'external_housing_missing'`. |

{% code overflow="wrap" %}

```json
{
  "name": "einvoicing.invoice.generated",
  "occurredAt": "2026-08-24T14:33:57.902Z",
  "housingId": "8f2c1e44-...",
  "reservationId": "b71a9d03-...",
  "payload": {}
}
```

{% endcode %}

A supplier event carries the supplier it relates to, so you can match it to the API:

{% code overflow="wrap" %}

```json
{
  "name": "einvoicing.supplier.created",
  "occurredAt": "2026-08-24T14:31:02.145Z",
  "housingId": "8f2c1e44-...",
  "externalHousingId": "your-own-id",
  "userId": "0c4f7b92-...",
  "payload": {
    "supplierId": "3d90b7a1-..."
  }
}
```

{% endcode %}

#### Events

E-invoicing is the first area covered.

| Event name                                      | `payload` keys                              | Fired when                                                                                                                           |
| ----------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `einvoicing.settings.viewed`                    | —                                           | The certified invoices settings of a property are opened. Fired once per property the host looks at.                                 |
| `einvoicing.settings.toggled`                   | `state`                                     | The **Activate Certified Invoices** switch is turned on or off. `payload.state` says which way.                                      |
| `einvoicing.supplier.created`                   | `supplierId`                                | A new supplier is saved.                                                                                                             |
| `einvoicing.supplier.updated`                   | `supplierId`, `state`                       | An existing supplier is saved, activated or deactivated. On activation and deactivation `payload.state` says which way.              |
| `einvoicing.supplier.connection_status_changed` | `supplierId`, `status`                      | A supplier is registered with its e-invoicing provider.                                                                              |
| `einvoicing.supplier.save_clicked`              | `supplierId`                                | The host presses **Save**, before anything is validated or sent. Pair it with the outcome events to measure how often a save sticks. |
| `einvoicing.supplier.save_failed`               | `supplierId`, `reason`                      | The save stops in the browser and nothing is sent. `payload.reason` says why.                                                        |
| `einvoicing.supplier.provider_changed`          | `supplierId`, `provider`                    | The provider is picked or changed in the form. `payload.provider` carries the new one.                                               |
| `einvoicing.supplier.tab_changed`               | `supplierId`                                | The host switches supplier tabs. No `payload.supplierId` means they moved to a new, unsaved supplier tab.                            |
| `einvoicing.supplier.draft_added`               | —                                           | **Add supplier** opens an empty supplier tab.                                                                                        |
| `einvoicing.supplier.draft_removed`             | —                                           | An unsaved supplier tab is discarded.                                                                                                |
| `einvoicing.vat_propagation.prompted`           | `supplierId`                                | Changing the tax category on a saved supplier asks the host what to do with existing items.                                          |
| `einvoicing.vat_propagation.applied`            | `supplierId`                                | The host applies the new VAT to the existing items.                                                                                  |
| `einvoicing.vat_propagation.skipped`            | `supplierId`                                | The host keeps the new VAT on the supplier only.                                                                                     |
| `einvoicing.invoice.generated`                  | —                                           | An invoice, receipt or credit note is created. Fired once per created document.                                                      |
| `einvoicing.invoice.failed`                     | —                                           | A generation request fails.                                                                                                          |
| `einvoicing.invoice_item.added`                 | `supplierId`, `itemId`, `itemName`          | An invoice item is added.                                                                                                            |
| `einvoicing.invoice_item.updated`               | `supplierId`, `itemId`, `itemName`, `state` | An invoice item is changed, or selected or unselected. On select and unselect `payload.state` says which way.                        |
| `einvoicing.invoice_item.removed`               | `supplierId`, `itemId`, `itemName`          | An invoice item is removed.                                                                                                          |

{% hint style="info" %}
A key is listed only when the event carries it. `payload.supplierId` is absent when no supplier exists yet, which is what `einvoicing.supplier.tab_changed` on a new, unsaved tab means. Invoice item events carry `payload.itemId` and `payload.itemName`, so you can follow a single line rather than only a count. Invoice items are saved in batches. One save that adds two items and removes one emits three events together, and a save that fails part-way emits none. Items edited on a reservation carry a `reservationId`; items edited as property defaults carry only a `housingId`.
{% endhint %}

#### Naming

Event names are fixed and namespaced by area, so the same callback can carry other products later without a new integration on your side. If your analytics uses its own convention, map or prefix the names on your end — for example `fe_` + `event.name`.

#### Stability

Events are additive, so your integration keeps working as we add more:

* New event names may appear in any minor release. Ignore names you do not recognise rather than treating them as an error.
* Fields will be added to the event object over time, but never removed or re-typed.
* Renaming or removing an event would be a major release, announced in advance.
* The shipped TypeScript types use an open union, so an unrecognised event name still type-checks.

{% hint style="info" %}
Events carry identifiers and timestamps only — never guest personal data. Names, fiscal codes, addresses and invoice amounts stay inside the iframe.
{% endhint %}

### Re-rendering and unmounting

Re-render within the same instance (smooth, resets the query cache):

{% code overflow="wrap" %}

```javascript
const sdk = new ChekinHousingsSDK();
sdk.initialize({apiKey: API_KEY, housingId: 'HOUSING_ID_1'});
sdk.renderApp({targetNode: 'root'});

// later — switch to another property
sdk.initialize({apiKey: API_KEY, housingId: 'HOUSING_ID_2'});
sdk.renderApp({targetNode: 'root'});
```

{% endcode %}

Or unmount completely before rendering a new instance:

{% code overflow="wrap" %}

```javascript
sdk.unmount();

const next = new ChekinHousingsSDK();
next.initialize({apiKey: API_KEY, housingId: 'HOUSING_ID_2'});
next.renderApp({targetNode: 'root'});
```

{% endcode %}
