# Testing and Certification

Use this guide to verify that all required integration capabilities are working correctly. Work through the scenarios independently, and when you're confident in your results, notify the Partner Integrations team. We'll review your readiness, prepare your account, and confirm when you can proceed to certification.

## Instructions

This guide provides a series of scenarios to test all required integration capabilities for this API. Some capabilities may be optional — if a scenario does not apply to your integration, skip it and proceed to the next one. Work through each scenario using the resources provided in the Initial Setup section, and use the results to verify your integration is working correctly before requesting certification.

Once all scenarios pass, notify the Partner Integrations team. We will review your results, and if everything looks good, confirm when you can proceed to the formal certification process.

## Initial Setup

Before working through the test scenarios, make sure the following are in place:

1. **Postman collection** — Download and import the [Channels Plus Postman](https://www.postman.com/siteminder-apis/channels-plus/overview) collection.
2. **Partner Portal access** — You will need access to the Partner Portal to create [Deals](/channels-plus-api/additional-resources/commercial/deals.md).
3. **Deal code** — Create a deal in the Partner Portal and have it approved before running scenarios.

{% hint style="info" %}
Your `API ID` and `API Key` for testing are available in the Partner Portal. **Make sure to replace all variables in the Postman collection before running the scenarios.**
{% endhint %}

## Test Scenarios

This outlines the use cases that a partner must successfully complete in order to achieve certification for the Channels Plus Channel API.

### Get Properties

The purpose of this endpoint is to allow the partner to retrieve a list of properties on Channels Plus within a certain lat, long & radius boundary that matches their search criteria.

{% hint style="info" %}
The following are mandatory query parameters for the "Get Properties" request:

* latitude
* longitude
* checkin
* checkout
* number of rooms and occupancy details. There are two options. You can only use one of the following options in the request, not both:
  * totalRooms, totalAdults, and totalChildren
  * rooms (see sample in scenario 3)
    {% endhint %}

<details>

<summary><strong>1. Mandatory fields with 1-night room stay for total occupancy</strong><br><br>Call the get properties endpoint with mandatory elements only to retrieve a list of properties within the default radius of a lat/long boundary for a stay of more than 1 night. For this scenario use just <mark style="background-color:orange;">the total adults and children</mark> for the entire reservation.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties?latitude=-33.9&longitude=151.18&checkin=2025-04-09&checkout=2025-04-11&totalRooms=1&totalAdults=2&totalChildren=1
```

**View Sample Request and Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-f6cf7193-03ba-4348-9b85-fcd1bf417e7a>

</details>

<details>

<summary><strong>2. Mandatory fields with more than 1 night with pagination</strong><br><br>Call the get properties endpoint with mandatory elements only to retrieve a list of properties within the default radius of a lat/long boundary for a stay of more than 1 night. For this scenario use just <mark style="background-color:orange;">the <strong>total adults and children</strong></mark> for the entire reservation. <mark style="background-color:orange;">Request for the second page of this response</mark>.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties?latitude=-33.9&longitude=151.18&checkin=2025-04-12&checkout=2025-04-14&totalRooms=1&totalAdults=2&totalChildren=1&perPage=10&page=1
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-de8b2361-8612-431e-935c-1d4092577e2f>

</details>

<details>

<summary><strong>3. Mandatory fields with 2 room stay</strong><br><br>Call the get properties endpoint with mandatory elements only to retrieve a list of properties within the default radius of a lat/long boundary for a stay of more than 1 night. For this scenario <mark style="background-color:orange;">provide a breakdown of adult &#x26; child occupancy for a 2 room stay</mark>.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties?latitude=-33.9&longitude=151.18&checkin=2025-04-12&checkout=2025-04-14&rooms[0][adults]=2&rooms[0][children]=1&rooms[1][adults]=2&rooms[1][children]=1
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-ce31d89e-80cc-4eae-942d-408332c4693b>

</details>

<details>

<summary><strong>4. Mandatory fields within a set radius</strong><br><br>Call the get properties endpoint with mandatory elements only to retrieve a list of properties <mark style="background-color:orange;">within a specified radius</mark> of a lat/long boundary for a stay of more than 1 night. For this scenario use just the <mark style="background-color:orange;">total adults and children</mark> for the entire reservation.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties?latitude=-33.9&longitude=151.18&checkin=2025-04-12&checkout=2025-04-14&totalRooms=1&totalAdults=2&totalChildren=1&radius=50
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-e4790454-2236-4a95-b5f6-78510505218e>

</details>

<details>

<summary><strong>5. Mandatory fields and specific deals only</strong><br><br>Call the get properties endpoint with mandatory elements only to retrieve a list of properties within the default radius of a lat/long boundary for a stay of more than 1 night. For this scenario use just <mark style="background-color:orange;">the total adults and children</mark> for the entire reservation. Additionally <mark style="background-color:orange;">specify a deal code and set the deal only flag</mark> to receive rates that are part of a deal only. Skip if you will not use the <a href="https://developer.siteminder.com/channels-plus-api/additional-resources/commercial/deals">Deals</a> functionality.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties?latitude=-33.9&longitude=151.18&checkin=2025-04-12&checkout=2025-04-14&totalRooms=1&totalAdults=2&totalChildren=1&dealCodes=bd06c1c5-7efb-47f8-b269-454f48b0fa0e&dealOnly=true
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-e1eebb58-3979-41e8-b8db-f07661a684a2>

</details>

<details>

<summary><strong>6. Invalid latitude and longitude</strong><br><br>Call the get properties endpoint with <mark style="background-color:orange;">an invalid lat/long</mark> and receive an error.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties?latitude=33.9test&longitude=151.18test&checkin=2025-04-12&checkout=2025-04-14&totalRooms=1&totalAdults=2&totalChildren=1
```

**Error:**

```json
{"errors":[{"code":"InvalidInputError","message":"should be number","meta":{"type":"number","params":{"type":"number"},"keyword":"type","dataPath":".query.latitude","schemaPath":"#/properties/query/properties/latitude/type"}},{"code":"InvalidInputError","message":"should be number","meta":{"type":"number","params":{"type":"number"},"keyword":"type","dataPath":".query.longitude","schemaPath":"#/properties/query/properties/longitude/type"}}]}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-c93508c4-2fc5-463b-81e1-3033d4707ef7>

</details>

***

### Get Property <a href="#get-property" id="get-property"></a>

The purpose of this endpoint is to allow the partner to retrieve detailed information and room rates on Channels Plus for a specific property.

{% hint style="info" %}
Mandatory Query Parameters for the **Get Property** Request:

* uuid: Unique identifier for the property
* checkin
* checkout
* number of rooms and occupancy details
  {% endhint %}

<details>

<summary><strong>1. Mandatory fields with total occupancy set</strong><br><br>Call the get property endpoint with mandatory elements only to retrieve a list of room rates at the property for a stay of more than 1 night. For this scenario, use the entire reservation's <mark style="background-color:orange;">total number of adults and children</mark>.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties/160efac8-7e63-43b2-a1f3-6dbe2cdcfd8b?checkin=2025-01-11&checkout=2025-01-13&totalRooms=1&totalAdults=2&totalChildren=1
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-9cba71de-7fa6-4a33-bacb-33b047fdb260>

</details>

<details>

<summary><strong>2. Mandatory fields with room occupancy set</strong><br><br>Call the get property endpoint with mandatory elements only to retrieve a list of room rates at the property for a stay of more than 1 night. For this scenario, <mark style="background-color:orange;">provide a breakdown of adult &#x26; child occupancy for a 2-room stay</mark>.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties/160efac8-7e63-43b2-a1f3-6dbe2cdcfd8b?checkin=2025-03-04&checkout=2025-03-06&rooms[0][adults]=2&rooms[0][children]=0&rooms[1][adults]=2&rooms[1][children]=1
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-4248647d-4ad9-464a-94d5-afdef4be48a0>

</details>

<details>

<summary><strong>3. Mandatory fields with deal only</strong><br><br>Call the get property endpoint with mandatory elements only to retrieve a list of room rates at the property for a stay of more than 1 night. For this scenario, use the entire reservation's <mark style="background-color:orange;">total number of adults and children</mark>. Additionally, <mark style="background-color:orange;">specify a deal code</mark> to receive rates that are part of the deal only. Skip if you will not use the <a href="https://developer.siteminder.com/channels-plus-api/additional-resources/commercial/deals">Deals</a> functionality.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties/160efac8-7e63-43b2-a1f3-6dbe2cdcfd8b?checkin=2025-04-19&checkout=2025-04-21&totalRooms=1&totalAdults=2&totalChildren=1&dealCode=90508fbd-2b33-44dd-9eb0-948ec4ea086e
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-e2697576-ea7f-4e9c-ad88-bf7f6c7df280>

</details>

<details>

<summary><strong>4. Invalid Property</strong><br><br><strong>Call the get property endpoint with an invalid property uuid and receive an error.</strong></summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties/invalid?checkin=2025-04-19&checkout=2025-04-21&totalRooms=1&totalAdults=2&totalChildren=1
```

**Error:**

```json
{"errors":[{"code":"PropertyNotFoundError","message":"property with spid=invalid not found"}]}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-89044937-3e56-444a-96a0-b66365bc6527>

</details>

***

### Lock reservation

The purpose of this endpoint is to allow the partner to **temporarily lock a reservation for a 15-minute window**, so the inventory is not booked by another Channels Plus Channel.

<details>

<summary><strong>1. Valid room rate</strong><br><br>Call the lock a reservation endpoint with a <mark style="background-color:orange;">valid array of room rate bookings</mark>. Do not set the deal code and deal flag.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties/160efac8-7e63-43b2-a1f3-6dbe2cdcfd8b/reservations
```

**Sample Body:**

```json
{
  "checkin": "2025-04-19",
  "checkout": "2025-04-21",
  "rooms": [
    {
      "roomRateUuid": "2298f8f6-fb91-4095-b225-9290b6d3c231",
      "adults": 2,
      "children": 1
    }
  ]
}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-3e8792e5-5844-413e-ab3e-077ddb862c91>

</details>

<details>

<summary><strong>2. Valid room rate with deal code</strong><br><br>Call the lock a reservation endpoint with a valid array of room rate bookings. <mark style="background-color:orange;">Set the deal code and deal flag, if you choose to use the</mark> <a href="https://developer.siteminder.com/channels-plus-api/additional-resources/commercial/deals"><mark style="background-color:orange;">Deals</mark></a> <mark style="background-color:orange;">funtionality.</mark></summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties/160efac8-7e63-43b2-a1f3-6dbe2cdcfd8b/reservations
```

**Sample Body:**

```json
{
  "checkin": "2025-04-19",
  "checkout": "2025-04-21",
  "dealCode": "90508fbd-2b33-44dd-9eb0-948ec4ea086e",
  "rooms": [
    {
      "roomRateUuid": "2298f8f6-fb91-4095-b225-9290b6d3c231",
      "adults": 2,
      "children": 1,
      "applyDeal":true
    }
  ]
}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-1d38075e-9e9f-4888-81c6-bd14924e208f>

</details>

<details>

<summary><strong>3. Invalid room rate</strong><br><br>Call the lock a reservation endpoint with an <mark style="background-color:orange;">invalid room rate UUID and receive an error</mark>.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties/160efac8-7e63-43b2-a1f3-6dbe2cdcfd8b/reservations
```

**Sample Body:**

```
{
  "checkin": "2025-04-19",
  "checkout": "2025-04-21",
  "rooms": [
    {
      "roomRateUuid": "invalid",
      "adults": 2,
      "children": 1
    }
  ]
}
```

**Error:**

```json
{"errors":[{"code":"RoomRateNotFoundError","message":"Some room rates in roomRateUuids=[invalid] not found"}]}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-73f35c66-5b15-4fa0-98af-a7b3de2b29e3>

</details>

<details>

<summary><strong>4. Valid room rate with netInvoicing</strong><br><sub><em>Note: This is available to partners with a Net Invoicing agreement only, <mark style="color:red;">not available to partners operating under a Gross Invoicing model</mark>.</em></sub><br><br>Call the lock a reservation endpoint with a <mark style="background-color:orange;">valid array of room rate bookings</mark>. Set the <mark style="background-color:orange;">netInvoicing to true</mark>.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/properties/160efac8-7e63-43b2-a1f3-6dbe2cdcfd8b/reservations
```

**Sample Body:**

```json
{
  "checkin": "2025-04-19",
  "checkout": "2025-04-21",
  "netInvoicing": true,
  "rooms": [
    {
      "roomRateUuid": "2298f8f6-fb91-4095-b225-9290b6d3c231",
      "adults": 2,
      "children": 1
    }
  ]
}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-727a67c0-1023-49bb-a628-bee9485b59c4>

</details>

***

### Confirm reservation

The purpose of this endpoint is to allow the partner to confirm a temporarily locked reservation so the inventory is not booked by another non-Channels Plus Channel.

<details>

<summary><strong>1. Confirm reservation using credit card information</strong><br><br>Call the confirm reservation endpoint <mark style="background-color:orange;">with a credit card payment type</mark> with valid card type, card metadata and guest information.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/reservations/48609eca-3/confirmation
```

**Sample Body:**

```json
{
    "paymentMethod":"CreditCard",
    "cardNumber": 4444333322221111,
    "cardholderName": "FirstName LastName",
    "cardExpiry": "04/2027",
    "cardType": "VI",
    "cardCvv": "123",
    "guestTitle": "Mr",
    "guestFirstName": "FirstName",
    "guestLastName": "LastName",
    "guestEmail": "test@example.com",
    "guestPhoneNumber": "708-406-5153",
    "guestAddress": "612 Rusty Glens",
    "guestCity": "Fayetteville",
    "guestState": "Ava Orchard",
    "guestPostcode": "1234",
    "guestCountry": "Norfolk Island",
    "guestRemarks": "This is for testing purposes",
    "rooms": [
        {
        "roomUuid": "96b1f3bf-eb08-4f85-b059-09e1f3259bab",
        "guestTitle": "Mr",
        "guestFirstName": "FirstName",
        "guestLastName": "LastName",
        "guestRemarks": "This is a test"
        }
    ]
}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-7f55ffa5-c880-44b0-af96-75cbb968d18a>

</details>

<details>

<summary><strong>2. Confirm reservation with a Virtual Credit Card</strong><br><br>Call the confirm reservation endpoint <mark style="background-color:orange;">with a virtual credit card</mark> payment type with valid card type, card metadata and guest information.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/reservations/55bfe5bd-3/confirmation
```

**Sample Body:**

```json
 {
    "paymentMethod":"VirtualCreditCard",
    "vccActivationDateTime": "2024-04-25T13:58:56.450Z",
    "vccDeactivationDateTime": "2025-05-06T13:58:56.450Z",
    "vccCurrency": "AUD",
    "vccBalance": 200.2,
    "cardNumber": 4444333322221111,
    "cardholderName": "FirstName LastName",
    "cardExpiry": "07/2025",
    "cardType": "VI",
    "cardCvv": "123",
    "guestTitle": "Mr",
    "guestFirstName": "FirstName",
    "guestLastName": "LastName",
    "guestEmail": "Test@Test.com",
    "guestPhoneNumber": "<string>",
    "guestAddress": "1 Sydney St",
    "guestCity": "Sydney",
    "guestState": "NSW",
    "guestPostcode": "2000",
    "guestCountry": "Australia",
    "guestRemarks": "Test remarks",
    "rooms": [
        {
        "roomUuid": "f88d7264-1c12-4aaa-9347-a6cf676a8ba7",
        "guestTitle": "Mr",
        "guestFirstName": "FirstName",
        "guestLastName": "LastName",
        "guestRemarks": "Test remarks"
        }
    ]
}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-4a9bcdb0-18cc-4d36-b6e7-1b83167ecbed>

</details>

<details>

<summary><strong>3. Expired Reservation</strong><br><br>Call the confirm reservation endpoint <mark style="background-color:orange;">with a valid reservation UUID that has now timed out to receive error.</mark></summary>

*Note: The timeout window is 15 minutes*

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/reservations/6c250a6a-3/confirmation
```

**Sample Body:**

```json
{
    "paymentMethod":"VirtualCreditCard",
    "vccActivationDateTime": "2024-06-29T19:09:56.450Z",
    "vccDeactivationDateTime": "2025-05-10T19:09:56.450Z",
    "vccCurrency": "AUD",
    "vccBalance": 100.1,
    "cardNumber": 4444333322221111,
    "cardholderName": "Test Test",
    "cardExpiry": "07/2025",
    "cardType": "VI",
    "cardCvv": "123",
    "guestTitle": "Mr",
    "guestFirstName": "Test",
    "guestLastName": "Test",
    "guestEmail": "Test@Test.com",
    "guestPhoneNumber": "<string>",
    "guestAddress": "1 Sydney St",
    "guestCity": "Sydney",
    "guestState": "NSW",
    "guestPostcode": "2000",
    "guestCountry": "Australia",
    "guestRemarks": "Test remarks",
    "rooms": [
        {
        "roomUuid": "365568b1-b7e1-4195-9d6d-9db6bffcea44",
        "guestTitle": "Mr",
        "guestFirstName": "Test",
        "guestLastName": "Test",
        "guestRemarks": "Test remarks"
        }
    ]
}
```

**Error:**

```json
{
    "errors": [
        {
            "code": "ReservationNotFoundError",
            "message": "pending reservation not found"
        }
    ]
}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-31a8940c-74b0-4549-a7e7-185ae0700f61>

</details>

<details>

<summary><strong>4. Non-existing Reservation</strong><br><br>Call the confirm reservation endpoint with <mark style="background-color:orange;">an invalid reservation UUID</mark>.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/reservations/invalidbookingRef/confirmation
```

**Sample Body:**

```json
{
    "paymentMethod":"VirtualCreditCard",
    "vccActivationDateTime": "2024-06-29T19:09:56.450Z",
    "vccDeactivationDateTime": "2025-05-10T19:09:56.450Z",
    "vccCurrency": "AUD",
    "vccBalance": 100.1,
    "cardNumber": 4444333322221111,
    "cardholderName": "Test Test",
    "cardExpiry": "07/2025",
    "cardType": "VI",
    "cardCvv": "123",
    "guestTitle": "Mr",
    "guestFirstName": "Test",
    "guestLastName": "Test",
    "guestEmail": "Test@Test.com",
    "guestPhoneNumber": "<string>",
    "guestAddress": "1 Sydney St",
    "guestCity": "Sydney",
    "guestState": "NSW",
    "guestPostcode": "2000",
    "guestCountry": "Australia",
    "guestRemarks": "Test remarks",
    "rooms": [
        {
        "roomUuid": "365568b1-b7e1-4195-9d6d-9db6bffcea44",
        "guestTitle": "Mr",
        "guestFirstName": "Test",
        "guestLastName": "Test",
        "guestRemarks": "Test remarks"
        }
    ]
}
```

**Error:**

```json
{
    "errors": [
        {
            "code": "ReservationNotFoundError",
            "message": "pending reservation not found"
        }
    ]
}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-e11555f2-23db-4e61-8fce-44b5682cee7b>

</details>

***

### Modify reservation

The purpose of this endpoint is to allow the partner to modify the guest details on a confirmed reservation.

<details>

<summary><strong>1. Valid modify guest details</strong><br><br>Call the modify reservation endpoint with a valid reservation UUID and valid guest details.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/reservations/48609eca-3
```

**Sample Body:**

```json
{
  "guestTitle": "Ms",
  "guestFirstName": "new_FirstName",
  "guestLastName": "new_LastName",
  "guestEmail": "new_test@example.com",
  "guestPhoneNumber": "337-861-3753",
  "guestAddress": "27314 Leann Tunnel",
  "guestCity": "new_city",
  "guestState": "new_state",
  "guestPostcode": "new_Postcode",
  "guestCountry": "new_country",
  "guestRemarks": "new_guestRemarks",
  "rooms": [
    {
      "roomUuid": "4b0e1df9-f49d-4655-92e3-eac619299c3d",
      "guestTitle": "Ms",
      "guestFirstName": "new_FirstName",
      "guestLastName": "new_LastName",
      "guestRemarks": "new_guestRemarks"
    }
  ]
}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-16b3b42b-f5e3-4503-9305-36767c29dc38>

</details>

<details>

<summary><strong>2. Modify guest details whilst guest checked-in</strong><br><br>Call the modify reservation endpoint with a valid reservation UUID for a reservation that <mark style="background-color:orange;">has already been checked in</mark>.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/reservations/48609eca-3
```

**Sample Body:**

```json
{
  "guestTitle": "Ms",
  "guestFirstName": "new_FirstName",
  "guestLastName": "new_LastName",
  "guestEmail": "new_test@example.com",
  "guestPhoneNumber": "337-861-3753",
  "guestAddress": "27314 Leann Tunnel",
  "guestCity": "new_city",
  "guestState": "new_state",
  "guestPostcode": "new_Postcode",
  "guestCountry": "new_country",
  "guestRemarks": "new_guestRemarks",
  "rooms": [
    {
      "roomUuid": "4b0e1df9-f49d-4655-92e3-eac619299c3d",
      "guestTitle": "Ms",
      "guestFirstName": "new_FirstName",
      "guestLastName": "new_LastName",
      "guestRemarks": "new_guestRemarks"
    }
  ]
}
```

**Error:**

```json
{
    "errors": [
        {
            "code": "CannotModifyAfterCheckInError",
            "message": "cannot modify on or after the check-in date",
            "meta": {
                "traceToken": "5012c8c8-0c7d-480f-9604-c30944ea548f"
            }
        }
    ]
}
```

</details>

<details>

<summary><strong>3. Non-existing reservation</strong><br><br>Call the modify reservation endpoint with <mark style="background-color:orange;">an invalid reservation UUID</mark>.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/reservations/d05492f1-x
```

**Sample Body:**

```json
{
  "guestTitle": "Ms",
  "guestFirstName": "new_FirstName",
  "guestLastName": "new_LastName",
  "guestEmail": "new_test@example.com",
  "guestPhoneNumber": "337-861-3753",
  "guestAddress": "27314 Leann Tunnel",
  "guestCity": "new_city",
  "guestState": "new_state",
  "guestPostcode": "new_Postcode",
  "guestCountry": "new_country",
  "guestRemarks": "new_guestRemarks",
  "rooms": [
    {
      "roomUuid": "4b0e1df9-f49d-4655-92e3-eac619299c3d",
      "guestTitle": "Ms",
      "guestFirstName": "new_FirstName",
      "guestLastName": "new_LastName",
      "guestRemarks": "new_guestRemarks"
    }
  ]
}
```

**Error:**

```json
{
    "errors": [
        {
            "code": "ReservationNotFoundError",
            "message": "reservation not found"
        }
    ]
}
```

</details>

***

### Cancel reservation

The purpose of this endpoint is to allow the partner to cancel a confirmed reservation within the cancellable period.

<details>

<summary><strong>1. Cancelled Reservation</strong><br><br>Call the cancel reservation endpoint with a valid reservation UUID</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/reservations/55bfe5bd-3/cancellation
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-d576cc36-57b4-4f3c-973d-ed7a534f927c>

</details>

<details>

<summary><strong>2. Reservation does not exist</strong><br><br>Call the cancel a reservation endpoint with an invalid reservation UUID.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/reservations/55bfe5bd-3/cancellation
```

**Error:**

```json
{
    "errors": [
        {
            "code": "ReservationNotFoundError",
            "message": "reservation not found"
        }
    ]
}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-9575312c-a7e1-40ff-ac7f-884f966e6979>

</details>

<details>

<summary><strong>3. Cancelling outside the cancellation period</strong><br><br>Call the cancel a reservation endpoint with a valid reservation UUID for a reservation that is <mark style="background-color:orange;">no longer in a free cancellation period</mark>.</summary>

**Sample Request:**

```
https://tpi-channel-api.preprod.smchannelsplus.com/reservations/328e88f2-3/cancellation
```

**Error:**

```json
{
    "errors": [
        {
            "code": "OutsideCancellationPeriodError",
            "message": "cannot cancel outside of cancellation period",
            "meta": {
                "traceToken": "aec1c423-cab9-47ed-9939-636e6e759c8d"
            }
        }
    ]
}
```

**View Sample Request & Response:**

<https://www.postman.com/siteminder-apis/channels-plus/example/31209038-fef467df-37c3-4768-a60b-474f9544254b>

</details>

## Final Steps

Once all scenarios have passed, notify the Partner Integrations team. We will review your results and confirm when you can proceed to certification. If any issues are identified during the review, we will reach out to you directly to resolve them before moving forward.

{% 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/channels-plus-api/guides/testing-and-certification.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.
