Reservation management
Getting startedReservation management

Using the sandbox to test your implementation

A sandbox is a controlled and isolated environment designed for developers to safely discover, test, and interact with an API without affecting production data. A sandbox environment can be used

  • As a playground to learn about our connectivity APIs
  • As an integrated testing environment when developing and testing their own API integrations
  • As the environment for API certification purposes

To test your implementation of the reservation management, the following is provided:

  • The Sandbox Data Management API, which enables you to set up test data
  • A sandbox version of the Lodging Supply GraphQL API so you can exercise queries and mutations in the sandbox environment

The following workflows provide an overview of how you can use the sandbox environment to test reservations management (where you need reservations to be uploaded to your connectivity system).

Setting up sandbox data

To take advantage of the sandbox environment, you need to obtain sandbox credentials and set up sandbox data:

  1. Obtain an access token so that you can run queries and mutations in the sandbox environment. Follow these instructions.

  2. Create and configure a callback configuration in the sandbox environment so that you receive webhook notifications after creating sandbox reservations:

    This page provides complete details on enabling notifications.

  3. Create one or more sandbox properties, which will be used when creating reservations in the sandbox:

    Endpoint: https://api.sandbox.expediagroup.com/supply/lodging-sandbox/graphql

    Mutation: createProperty

    Example:

    1mutation {
    2 createProperty(
    3 input: {
    4 name: "TestProperty1",
    5 clientMutationId: "7809989",
    6 supplierUnitId: "492038520093"
    7 }
    8 ) {
    9 clientMutationId
    10 property {
    11 id
    12 name
    13 }
    14 }
    15}
  4. Create one or more reservations in the sandbox environment. Be sure to include sendNotification: true in the input so that a webhook notification is sent.

    Endpoint: https://api.sandbox.expediagroup.com/supply/lodging-sandbox/graphql

    Mutation: createReservation

    Example:

    1mutation {
    2 createReservation(
    3 input: {
    4 propertyId: "100000027",
    5 checkInDate: "2024-09-06",
    6 checkOutDate: "2024-09-10",
    7 businessModel: EXPEDIA_COLLECT,
    8 paymentInstrumentType: EXPEDIA_VIRTUAL_CARD,
    9 source: "Expedia",
    10 adultCount: 5,
    11 accessibilityText: [],
    12 childCount: 3,
    13 childAges: null,
    14 multiRoomText: null,
    15 smokingType: "NONSMOKING",
    16 status: BOOKED,
    17 remittanceType: GROSS,
    18 sendNotification: true
    19 }
    20 ) {
    21 reservation {
    22 id
    23 }
    24 }
    25}

New reservations

The following workflow describes how to retrieve reservations in the sandbox environment that can then be used to test your reservations management implementation.

  1. Webhook notification (ReservationNotificationEvent) is sent to the sandbox callback URL, which includes the reservation ID and a confirmation token. Here is an example:

    1{
    2 "event_name":"ReservationNotificationEvent",
    3 "creation_time":"2024-07-10T09:49:08.297506452Z",
    4 "notification_id":"e85b23f3-5d13-412a-8a63-9a974373d0899",
    5 "payload": {
    6 "property_id": "64250",
    7 "reservation_id": "12345",
    8 "confirmation_token": "LPtu3SI+ZovWJincjJrv9+GZUpln8ofYfrKhAaWQOBM=",
    9 "action_type": "BOOKED",
    10 "property_source": "EXPEDIA_GROUP"
    11 }
    12}
  2. Retrieve reservation details from the sandbox environment, including a token that can then be used to access the Payments API. Issue the request against your sandbox credentials.

    Endpoint: https://api.sandbox.expediagroup.com/supply/lodging/graphql

    Query: reservations

    Here's a cURL example:

    curl --request POST --url https://api.sandbox.expediagroup.com/supply/lodging-sandbox/graphql \
    --header 'Authorization: Bearer {sandbox_access_token}' \
    --header 'Content-Type: application/json' \
    --data '{"query":"query {property(id: \"64250\") {id name reservations(pageSize: 10) {totalCount edges {node {id checkInDate checkOutDate status payment {instrument {type token {value expirationDateTime}}}}}}}}"}'
  3. Retrieve credit card and Expedia Virtual Card (EVC) information for the reservation.

    Endpoint: https://api.sandbox.expediagroup.com/supply/payments/graphql

    Query: paymentInstrument

    Here is an example:

    curl --request POST --url https://api.sandbox.expediagroup.com/supply/payments/graphql \
    --header 'Authorization: Bearer {sandbox_access_token}' \
    --header 'Content-Type: application/json' \
    --data ' {"query":"query {\n paymentInstrument(token:\"token_from_res_query\") {\n \n ...on BankIssuedCard {\n customer {\n address {\n addressLines\n\t\t\t\t\t\t\t\t\t locality \n administrativeArea \n postalCode\n countryCode \n }\n fullName\n }\n expirationDate\n activationDate\n issuerName\n number\n type\n verificationNumber\n }\n }\n}"} '
  4. Confirm the notification.

    Endpoint: https://api.sandbox.expediagroup.com/supply/lodging/graphql

    Mutation: confirmReservationNotification

    1mutation {
    2 confirmReservationNotification(
    3 input: {
    4 clientMutationId: "liaj8a500ad",
    5 propertyId: "64250",
    6 reservationId: "12345",
    7 confirmationToken: "LPtu3SI+ZovWJincjJrv9+GZUpln8ofYfrKhAaWQOBM=",
    8 confirmationCode: "59aoi9alje",
    9 actionType: "BOOKED"
    10 }
    11 ) {
    12 clientMutationId
    13 reservation {
    14 id
    15 }
    16 }
    17}
  5. Test your reservation management implementation by issuing query and mutation requests against the sandbox data.

    Endpoint: https://api.sandbox.expediagroup.com/supply/lodging/graphql

    Note that all reservation queries and mutations are supported as documented, except for the property query. Only the id and name fields are available on the Property type.

  6. Cleanup (delete) test data (properties and reservations) in the sandbox environment, as necessary.

    Endpoint: https://api.sandbox.expediagroup.com/supply/lodging-sandbox/graphql

    Mutations: deleteProperty and deletePropertyReservations

Modified reservations

This workflow assumes that the steps in New reservations above have been completed. In particular, if notifications are not confirmed, additional notifications are not sent when a reservation is modified.

  1. Update one or more sandbox reservations, as necessary. Be sure to include sendNotification: true in the input so that a webhook notification is sent.

    Endpoint: https://api.sandbox.expediagroup.com/supply/lodging-sandbox/graphql

    Mutation: updateReservation

  2. Webhook notification (ReservationNotificationEvent) is sent to the sandbox callback URL, which includes the reservation ID and a confirmation token. Here is an example:

    1{
    2 "event_name":"ReservationNotificationEvent",
    3 "creation_time":"2024-07-10T09:49:08.297506452Z",
    4 "notification_id":"e85b23f3-5d13-412a-8a63-9a974373d0899",
    5 "payload": {
    6 "property_id": "64250",
    7 "reservation_id": "100000936",
    8 "confirmation_token": "tL9tLTvSXLiIcjWWb2W0h1PIytNTUHkpxtkvwNbrdLk=",
    9 "action_type": "MODIFIED",
    10 "property_source": "EXPEDIA_GROUP"
    11 }
    12}
  3. Retrieve reservations from the sandbox environment. Be sure to use the sandbox’s access token.

    Endpoint: https://api.sandbox.expediagroup.com/supply/lodging/graphql

    Query: reservations

    Here is a cURL example:

    curl --request POST --url https://api.sandbox.expediagroup.com/supply/lodging/graphql \
    --header 'Authorization: Bearer {sandbox_access_token}' \
    --header 'Content-Type: application/json' \
    --data '{"query":"query {property(id: \"64250\") {id name reservations(pageSize: 10) {totalCount edges {node {id checkInDate checkOutDate status}}}}}"}'
  4. Confirm the notification.

    Endpoint: https://api.sandbox.expediagroup.com/supply/lodging/graphql

    Mutation: confirmReservationNotification

    Example:

    1mutation {
    2 confirmReservationNotification(
    3 input: {
    4 clientMutationId: "liaj8a500ad",
    5 propertyId: "64250",
    6 reservationId: "100000936",
    7 confirmationToken: "tL9tLTvSXLiIcjWWb2W0h1PIytNTUHkpxtkvwNbrdLk=",
    8 confirmationCode: "689oi9isakadl",
    9 actionType: "MODIFIED"
    10 }
    11 ) {
    12 clientMutationId
    13 reservation {
    14 id
    15 }
    16 }
    17}
  5. Cleanup (delete) test data (properties and reservations) in the sandbox environment, as necessary.

    Endpoint: https://api.sandbox.expediagroup.com/supply/lodging-sandbox/graphql

    Mutations: deleteProperty and deletePropertyReservations