# Quick Start

pmsXchange connects your Property Management System (PMS) or Revenue Management System (RMS) with SiteMinder's distribution platform. Through pmsXchange, your PMS can sync availability, restrictions, and rates, and manage reservations, modifications, and cancellations. RMS integrations support pushing rates and restrictions only.

**API Components:**

* **Configuration**: Rooms and Rates
* **Inventory**: Availability, Restrictions, Rates (PDP or OBP)
* **Reservations**: Push, Pull, Upload, Import
* **Payments**: Payment Transaction Record

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

***

## Before You Begin

### Partnership Required

Access to pmsXchange 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](#explore-with-postman) collection.
{% endhint %}

### What You'll Provide to SiteMinder

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

<table><thead><tr><th width="160.5185546875">Item</th><th>Details</th></tr></thead><tbody><tr><td>Reservation SOAP endpoint</td><td>Your HTTPS endpoint URL for Reservations Push (SM -> PMS)</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>Inventory REST endpoint</td><td>For Rooms and Rates (PMS -> SM), Restrictions and Rates (SM -> PMS)</td></tr><tr><td>Credentials</td><td><code>username</code> and <code>password</code> for SiteMinder to authenticate against your Inventory REST endpoint</td></tr></tbody></table>

### What You'll Receive from SiteMinder

Once SiteMinder has received your details, we will provide:

<table><thead><tr><th width="188.3466796875">Item</th><th>Details</th></tr></thead><tbody><tr><td>SOAP endpoint</td><td><a href="https://tpi-pmsx.preprod.siteminderlabs.com/webservices/%7BRequestorID%7D">https://tpi-pmsx.preprod.siteminderlabs.com/webservices/{RequestorID}</a></td></tr><tr><td>REST endpoint</td><td><a href="https://tpi-pmsx.preprod.siteminderlabs.com/core-api/pmses/{pmsCode}/hotels/{hotelCode}/room-rates">https://tpi-pmsx.preprod.siteminderlabs.com/core-api/pmses/{pmsCode}</a></td></tr><tr><td>Credentials</td><td><code>username</code> and <code>password</code> (same both endpoints)</td></tr><tr><td>Identifiers</td><td><code>RequestorID</code> / <code>pmsCode</code></td></tr><tr><td>Hotel Code</td><td><code>HotelCode</code></td></tr><tr><td>Hotel Test Account</td><td>Platform that includes pre-configured room types and rate plans, to verify pushed inventory updates and reservation delivery status.</td></tr><tr><td>Hotel Booking Engine</td><td>Guest reservation simulator.</td></tr></tbody></table>

***

## Set Up Your Environment

### Authentication

pmsXchange uses **PMS-level authentication** — one set of credentials covers all properties. Credentials are passed via `wsse:UsernameToken` for SOAP requests and HTTP `Basic Auth` for REST.

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

```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 %}

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

```bash
--header 'Authorization: Basic username:password'
```

{% endcode %}

#### PMS-level vs. Hotel-level authentication

<table><thead><tr><th width="250.11981201171875">Model</th><th width="243.3238525390625">Credentials</th><th align="center">SOAP/XML</th><th align="center">REST/JSON</th></tr></thead><tbody><tr><td>PMS-level (recommended)</td><td>One set for all properties</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Hotel-level (legacy)</td><td>Per-property credentials</td><td align="center">✅</td><td align="center">❌</td></tr></tbody></table>

{% hint style="warning" %}
**Hotel-level authentication** is maintained for backward compatibility only. New integrations should use PMS-level to ensure access to all current and future functionality.
{% endhint %}

### API Specification Files

#### SOAP (WSDL)

* **Standard**: [https://tpi-pmsx.preprod.siteminderlabs.com/webservices/{RequestorID}/pmsxchange.wsdl](https://tpi-pmsx.preprod.siteminderlabs.com/webservices/%7BRequestorID%7D/pmsxchange.wsdl)
* **Inlined (recommended for .NET)**: `h`[https://tpi-pmsx.preprod.siteminderlabs.com/webservices/{RequestorID}/pmsxchange\_flat.wsdl](https://tpi-pmsx.preprod.siteminderlabs.com/webservices/%7BRequestorID%7D/pmsxchange_flat.wsdl)
* **Payment Transaction Record — Standard**: [https://tpi-pmsx.preprod.siteminderlabs.com/webservices/{RequestorID}/pmsxchange\_pms\_payments.wsdl](https://tpi-pmsx.preprod.siteminderlabs.com/webservices/%7BRequestorID%7D/pmsxchange_pms_payments.wsdl)
* **Payment Transaction Record — Inlined (recommended for .NET)**: [https://tpi-pmsx.preprod.siteminderlabs.com/webservices/{RequestorID}/pmsxchange\_pms\_payments\_flat.wsdl](https://tpi-pmsx.preprod.siteminderlabs.com/webservices/%7BRequestorID%7D/pmsxchange_pms_payments_flat.wsdl)

{% hint style="warning" %}
Use the inlined WSDL for .NET clients — the standard version may cause issues with `wsdl.exe` or `svcutil.exe` due to OTA specifications.
{% endhint %}

#### REST (OpenAPI)

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

***

## Make Your First Call

The first call every pmsXchange integration must implement is [Rooms and Rates (SM -> PMS)](/pmsxchange-api/reference/rooms-and-rates/sm-to-pms.md) — your system retrieves the room type and rate plan mapping configured in SiteMinder for a given property. This mapping is the foundation for all subsequent inventory and reservation operations.

{% stepper %}
{% step %}

### Authenticate

Pass your `username` and `password` on every REST request.

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

```bash
Header: 'Authorization: Basic username:password'
```

{% endcode %}

{% hint style="success" %}
Use SiteMinder's shared test credentials to make this call:

* **PMS code**: `PMSXTEST`
* **Hotel codes**: `PMSXTEST1`, `PMSXTEST2`, `PMSXTEST3`
* **Credentials** are pre-filled in the [Postman collection](#explore-with-postman) below.
  {% endhint %}
  {% endstep %}

{% step %}

### Make the call

Retrieve the room type and rate plan mappings for a test property:

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

```bash
curl -L \
  --url 'https://tpi-pmsx.preprod.siteminderlabs.com/core-api/pmses/{pmsCode}/hotels/{hotelCode}/room-rates' \
  --header 'Authorization: Basic username:password' \
  --header 'X-SM-TRACE-TOKEN: text' \
  --header 'Accept: */*'
```

{% endcode %}
{% endstep %}

{% step %}

### Handle the response

A successful response returns an array of room type and rate plan combinations configured for the property:

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

```json
[
  {
    "ratePlanName": "Non-Refundable",
    "ratePlanCode": "NonRef1",
    "roomTypeName": "Dormitory Room",
    "roomTypeCode": "DORM",
    "includedAdultOccupancy": 2
  },
  {
    "ratePlanName": "Best Available Rate",
    "ratePlanCode": "BAR",
    "roomTypeName": "Family Room",
    "roomTypeCode": "FAM",
    "includedAdultOccupancy": 2
  },
  {
    "ratePlanName": "Non-Refundable",
    "ratePlanCode": "NonRef1",
    "roomTypeName": "Family Room",
    "roomTypeCode": "FAM",
    "includedAdultOccupancy": 2
  },
  {
    "ratePlanName": "Best Available Rate",
    "ratePlanCode": "BAR1",
    "roomTypeName": "Dormitory Room",
    "roomTypeCode": "DORM",
    "includedAdultOccupancy": 2
  }
```

{% endcode %}
{% endstep %}

{% step %}

### Handle errors

If your `username` or `password` is incorrect:

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

```json
{
    "errors": [
        {
            "message": "Unauthorized access",
            "code": "UnauthorizedError",
            "meta": {
                "message": "Authentication failed - received request with invalid Username/Password",
                "code": "UnauthorizedError"
            }
        }
    ]
}


```

{% endcode %}

{% hint style="danger" %}
**401** - Check your username and password are correct and passed via Basic Auth.
{% endhint %}

If your `HotelCode` is incorrect:&#x20;

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

```json
{
    "errors": [
        {
            "message": "Not Found",
            "code": "NotFoundError"
        }
    ]
}
```

{% endcode %}

{% hint style="danger" %}
**404 Not Found** - Check your PMS code and hotel code are correct.
{% endhint %}
{% endstep %}
{% endstepper %}

***

## Explore with Postman

SiteMinder's pmsXchange 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.

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

### Shared Test Credentials

The **pmsXchange - Rooms and Rates TEST** environment is pre-filled with shared test credentials (`PMSXTEST` / `PMSXTEST1–3`). You can use these immediately — no dedicated test account required — to test:

* Rooms and Rates mapping retrieval
* Pushing availability, restrictions, and rates
* Pulling reservations (no reservations will be returned on shared test accounts)

Update the environment variables with your credentials once your test environment is set up.

{% hint style="info" %}
For full certification scenario coverage, see [Testing and Certification](https://developer.siteminder.com/siteminder-apis/pms-rms/introduction/pmsxchange/testing-and-certification).
{% 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/pmsxchange-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.
