# Quick Start

SiteMinder Exchange (SMX) connects your application to SiteMinder's platform and Property Management Systems (PMS) through a single, standardised integration. Through SMX, your application can receive booking data, and retrieve real-time availability and rates.

**API components:**

* **Reservations**: Receive reservations, modifications, and cancellations via SOAP PUSH
* **Availability and Rates**: Retrieve publishers, hotels, room types, rate plans, availability, and rates via REST

{% hint style="success" %}
Explore all components in the [API Overview](/smx-api/guides/api-overview.md).
{% endhint %}

***

## Before You Begin

### Partnership Required

Access to SMX requires an active partnership agreement with SiteMinder. Once your agreement is in place, you will receive your test environment details.

<a href="https://www.siteminder.com/integrations/apply-now/" class="button primary">Become a SiteMinder Partner</a>

{% hint style="info" %}
**You don't need to wait for your test environment to start development.** You can begin building and testing immediately. See [Make Your First Call](#make-your-first-call) below or explore requests directly in the [Postman](#postman-collection) collection.
{% endhint %}

### What You'll Provide to SiteMinder

Before SiteMinder can set up your test environment, provide the following:

<table><thead><tr><th width="186.18524169921875">Item</th><th>Details</th></tr></thead><tbody><tr><td>Reservation SOAP endpoint</td><td>Your HTTPS endpoint URL for Reservations</td></tr><tr><td>Credentials</td><td><code>username</code> and <code>password</code> for SiteMinder to authenticate against your Reservation SOAP endpoint</td></tr><tr><td>Hotel Code</td><td><code>HotelCode</code></td></tr></tbody></table>

### What You'll Receive from SiteMinder

Once SiteMinder has received your details, we will provide:

<table><thead><tr><th width="186.3564453125">Item</th><th>Details</th></tr></thead><tbody><tr><td>Inventory REST endpoint</td><td><a href="https://tpi-subscriberx.preprod.siteminderlabs.com/inventory/v1/publishers">https://tpi-subscriberx.preprod.siteminderlabs.com/inventory/v1/</a></td></tr><tr><td>Partner Portal</td><td>Access to generate your <code>Bearer Token</code> for <a href="/pages/A5bs1ltQZXRRI9Bm2cLx">Availability and Rates</a></td></tr><tr><td>Hotel Test Account</td><td>Platform that includes pre-configured room types and rate plans, and to create, modify and cancel reservations.</td></tr><tr><td>Hotel Booking Engine</td><td>Guest reservation simulator.</td></tr></tbody></table>

***

## Set Up Your Environment

### Authentication

SMX uses two authentication models depending on the component:

**Reservations (SOAP)** — SiteMinder authenticates against your endpoint using the credentials you provide. Your endpoint must validate the `wsse:UsernameToken` on every incoming request:

{% code overflow="wrap" %}

```xml
<SOAP-ENV:Header>
  <wsse:Security SOAP-ENV:mustUnderstand="1"
    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <wsse:UsernameToken>
      <wsse:Username>USERNAME</wsse:Username>
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASSWORD</wsse:Password>
    </wsse:UsernameToken>
  </wsse:Security>
</SOAP-ENV:Header>
```

{% endcode %}

**Availability and Rates (REST)** — Your application authenticates using a Bearer Token generated from the Partner Portal. Pass the token on every REST request:

```bash
--header 'Authorization: Bearer YOUR_BEARER_TOKEN'
```

{% hint style="warning" %}
Generate your Bearer Token from the Partner Portal. Once the dialogue box is closed, the token cannot be viewed again — copy it immediately and store it securely.
{% endhint %}

### API Specification Files

**REST (OpenAPI)**

* **smx-api** — [download YAML](https://openapi.gitbook.com/o/qrJuVY5UOf3h7cLyla8z/spec/smx-api.yaml)

***

## Make Your First Call

The first component every SMX integration must implement is **Reservations** — SiteMinder pushes reservation data to your endpoint as bookings are created, modified, or cancelled in the PMS. Your endpoint receives and processes these in real time.

{% hint style="info" %}
SiteMinder pushes to your endpoint — it must be live and accepting incoming reservation requests before we can set up your dedicated test environment.
{% endhint %}

{% stepper %}
{% step %}

### Prepare your endpoint

Your endpoint must accept `OTA_HotelResNotifRQ` SOAP requests over HTTPS. SiteMinder will send a similar request when a reservation is created:

{% code overflow="wrap" expandable="true" %}

```xml
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header>
    <wsse:Security SOAP-ENV:mustUnderstand="1"
      xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <wsse:UsernameToken>
        <wsse:Username>USERNAME</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASSWORD</wsse:Password>
      </wsse:UsernameToken>
    </wsse:Security>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <OTA_HotelResNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" EchoToken="cdcd51f2-769a-5a1d-841c-e6204d811f5c" TimeStamp="2025-05-08T00:56:53Z">
      <HotelReservations>
        <HotelReservation ResStatus="Reserved" CreateDateTime="2025-05-08T00:53:30Z">
          <POS>
            <Source>
              <RequestorID ID="PUBLISHERCODE"/>
            </Source>
          </POS>
          <UniqueID ID="123456789"/>
          <RoomStays>
            <RoomStay>
              <TimeSpan Start="2017-09-05" End="2017-09-06"/>
            </RoomStay>
          </RoomStays>
          <ResGlobalInfo>
            <TimeSpan Start="2017-09-05" End="2017-09-06"/>
            <Total AmountAfterTax="200.00"/>
            <BasicPropertyInfo HotelCode="123456789"/>
          </ResGlobalInfo>
        </HotelReservation>
      </HotelReservations>
    </OTA_HotelResNotifRQ>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```

{% endcode %}
{% endstep %}

{% step %}

### Validate credentials

Your endpoint must validate the `wsse:UsernameToken` on every incoming request. If the credentials do not match, return the following error response:

{% code overflow="wrap" expandable="true" %}

```xml
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Body>
    <OTA_HotelResNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" EchoToken="cdcd51f2-769a-5a1d-841c-e6204d811f5c" TimeStamp="2025-05-08T00:56:53Z">
      <Errors>
        <Error Type="6" Code="497">Invalid Username and/or Password</e>
      </Errors>
    </OTA_HotelResNotifRS>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```

{% endcode %}

{% hint style="warning" %}
**Code 497** — Return this error when the `wsse:Username` and `wsse:Password` in the incoming request do not match your configured credentials.
{% endhint %}
{% endstep %}

{% step %}

### Validate hotel code

Your endpoint must verify that the `HotelCode` in the request matches a property configured in your system. If not found, return the following error response:

{% code overflow="wrap" expandable="true" %}

```xml
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Body>
    <OTA_HotelResNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" EchoToken="cdcd51f2-769a-5a1d-841c-e6204d811f5c" TimeStamp="2025-05-08T00:56:53Z">
      <Errors>
        <Error Type="6" Code="392">Hotel not found for HotelCode=XXXXXX</e>
      </Errors>
    </OTA_HotelResNotifRS>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```

{% endcode %}

{% hint style="warning" %}
**Code 392** — Return this error when the `HotelCode` in the incoming request does not match any property configured in your system.
{% endhint %}
{% endstep %}

{% step %}

### Return a success response

Once credentials and hotel code are validated, your endpoint must return an `OTA_HotelResNotifRS` success response acknowledging receipt of the reservation. Include your internal reservation ID so SiteMinder can correlate it with the original booking.

{% code overflow="wrap" expandable="true" %}

```xml
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
  <soap-env:Body>
    <OTA_HotelResNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" EchoToken="cdcd51f2-769a-5a1d-841c-e6204d811f5c" TimeStamp="2025-05-08T00:56:53Z">
      <Success/>
      <HotelReservations>
        <HotelReservation>
          <UniqueID ID="LH123456789"/>
          <ResGlobalInfo>
            <HotelReservationIDs>
              <HotelReservationID ResID_Type="10" ResID_Value="LH123456789"/>
            </HotelReservationIDs>
          </ResGlobalInfo>
        </HotelReservation>
      </HotelReservations>
    </OTA_HotelResNotifRS>
  </soap-env:Body>
</soap-env:Envelope>
```

{% endcode %}
{% endstep %}
{% endstepper %}

{% hint style="success" %}
**You're ready for the next step.** Once your endpoint handles the scenarios above, contact the Partner Integrations team with your endpoint URL, credentials, and hotel code. We'll set up your dedicated test account to continue development.
{% endhint %}

## Explore with Postman <a href="#postman-collection" id="postman-collection"></a>

SiteMinder's SMX Postman workspace contains collections and environments to help you build, test, and validate your integration for certification. Fork the collections and environments to your own Postman account to get started.

→ [SMX Postman Workspace](https://www.postman.com/siteminder-apis/smx/overview)

{% hint style="info" %}
For full certification scenario coverage, see [Testing and Certification](/smx-api/guides/testing-and-certification.md).
{% endhint %}

{% hint style="success" icon="sparkles" %}

## Still have questions?

Use the <i class="fa-gitbook-assistant">:gitbook-assistant:</i> **Ask** button at the top of the page to chat with our AI assistant — it can help you navigate the guide, understand requirements, and troubleshoot issues.

If you need more support, visit [Integration Support](/integration-support/integration-support.md).
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.siteminder.com/smx-api/guides/quick-start.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
