PCI Booking provides a simple, Restful, API to perform all actions regarding a credit card.

PCI Booking is made up of several application areas. This developers site contains a guide and a reference manual for each application area.

  • The guides allow software architects and designers to have a broad view on the system operation and easily pick up those components which can fit the best different application scenarios.
  • The reference manuals allow developers to have a clear understanding of which methods are available, what input parameters are required for each method and the expected results of each.

Request Body XML Structure

PCI Messaging supports four XML messages to be sent from the booker to the property and two XML messages to be sent from the property to the booker.

All of the messages are based on full XML schema that can be found here.

Purpose Element Name Explanation
New hotel reservation HotelReservation See below Reservation.xml
Read more
Modify an existing hotel reservation HotelReservationModification See below Modify.xml
Modify.xml
Cancel an existing hotel reservation HotelReservationCancellation See below Cancel.xml
Cancel.xml
Payment details and bank card ePayment See below ePayment.xml
ePayment.xml
Accept/reject a hotel reservation HotelReservationFeedback See below Feedback.xml
Feedback.xml
eFolio eFolio See below eFolio.xml
eFolio.xml

See below the XML schemas

XML examples:

Below is an example of the XML message for each type.

<HotelReservation xmlns="http://www.pcibooking.net/reservation" schemaVersion="1.0">
  <References>
    <BookerName>Hotel finder</BookerName>
    <BookerReference>the booker ref.</BookerReference>
    <BookerReservationID>RES1234</BookerReservationID>
  </References>
  <BookerComment>This is my Booker's comment</BookerComment>
  <Price currency="USD" amountBeforeTax="234.50" amountAfterTax="258.85" commission="12.5" amountPaidUponBooking="1.0"/>
  <Rooms>
    <Room>
      <ArrivalDate>2015-04-21</ArrivalDate>
      <DepartureDate>2015-04-25</DepartureDate>
      <RoomType>KS</RoomType>
      <NumberOfAdults>2</NumberOfAdults>
      <Children number="2">
        <Child age="4"/>
        <Child age="7"/>
      </Children>
      <SmokingPreference>false</SmokingPreference>
      <Comments>High floor please</Comments>
      <Price amountBeforeTax="234.50" amountAfterTax="258.85" ratePlan="PLAN2"/>
    </Room>
    <Room>
      <ArrivalDate>2015-04-21</ArrivalDate>
      <DepartureDate>2015-04-25</DepartureDate>
      <RoomType>KS</RoomType>
      <NumberOfAdults>2</NumberOfAdults>
      <Children number="2">
        <Child age="4"/>
        <Child age="7"/>
      </Children>
      <SmokingPreference>false</SmokingPreference>
      <Comments>Late arrival</Comments>
      <Price amountBeforeTax="264.50" amountAfterTax="268.85" ratePlan="PLAN2"/>
    </Room>
  </Rooms>
  <GuestDetails>
    <FirstName>John</FirstName>
    <LastName>Smith</LastName>
    <Email>js@hisdomain.com</Email>
    <Phone>+97238765432</Phone>
    <Address>
      <Address1>5070 Main Rd.</Address1>
      <City>Boston</City>
      <StateProvince>MA</StateProvince>
      <CountryCode>US</CountryCode>
      <PostalCode>90416</PostalCode>
    </Address>
  </GuestDetails>
  <Payments>
    <Payment>
      <PaymentURI>
        https://localhost:51234/api/payments/bankcard/586e130dbacf484f8d76f74d6fe04cae
      </PaymentURI>
      <Currency>USD</Currency>
      <Amount>123.45</Amount>
    </Payment>
    <Payment>
      <PaymentURI>
        https://localhost:51234/api/payments/bankcard/586e130dbacf484f8d76f74d6fe04cae
      </PaymentURI>
      <Currency>USD</Currency>
      <Amount>123.45</Amount>
    </Payment>
  </Payments>
</HotelReservation>
<HotelReservationModification xmlns="http://www.pcibooking.net/reservation" schemaVersion="1.0">
  <HotelReservationID>hotelresID</HotelReservationID>
  <HotelReservation schemaVersion="1.0">
    <References>
      <BookerName>Hotel finder</BookerName>
      <BookerReference>the booker ref.</BookerReference>
      <BookerReservationID>RES1234</BookerReservationID>
    </References>
    <BookerComment>This is my Booker's comment</BookerComment>
    <Price currency="USD" amountBeforeTax="234.50" amountAfterTax="258.85" commission="12.5" amountPaidUponBooking="1.0"/>
    <Rooms>
      <Room>
        <ArrivalDate>2015-04-21</ArrivalDate>
        <DepartureDate>2015-04-25</DepartureDate>
        <RoomType>KS</RoomType>
        <NumberOfAdults>2</NumberOfAdults>
        <Children number="2">
          <Child age="4"/>
          <Child age="7"/>
        </Children>
        <SmokingPreference>false</SmokingPreference>
        <Comments>High floor please</Comments>
        <Price amountBeforeTax="234.50" amountAfterTax="258.85" ratePlan="PLAN2"/>
      </Room>
      <Room>
        <ArrivalDate>2015-04-21</ArrivalDate>
        <DepartureDate>2015-04-25</DepartureDate>
        <RoomType>KS</RoomType>
        <NumberOfAdults>2</NumberOfAdults>
        <Children number="2">
          <Child age="4"/>
          <Child age="7"/>
        </Children>
        <SmokingPreference>false</SmokingPreference>
        <Comments>Late arrival</Comments>
        <Price amountBeforeTax="264.50" amountAfterTax="268.85" ratePlan="PLAN2"/>
      </Room>
    </Rooms>
    <GuestDetails>
      <FirstName>John</FirstName>
      <LastName>Smith</LastName>
      <Email>js@hisdomain.com</Email>
      <Phone>+97238765432</Phone>
      <Address>
        <Address1>5070 Main Rd.</Address1>
        <City>Boston</City>
        <StateProvince>MA</StateProvince>
        <CountryCode>US</CountryCode>
        <PostalCode>90416</PostalCode>
      </Address>
    </GuestDetails>
    <Payments>
      <Payment>
        <PaymentURI>
          https://localhost:51234/api/payments/bankcard/586e130dbacf484f8d76f74d6fe04cae
        </PaymentURI>
        <Currency>USD</Currency>
        <Amount>123.45</Amount>
      </Payment>
      <Payment>
        <PaymentURI>
          https://localhost:51234/api/payments/bankcard/586e130dbacf484f8d76f74d6fe04cae
        </PaymentURI>
        <Currency>USD</Currency>
        <Amount>123.45</Amount>
      </Payment>
    </Payments>
  </HotelReservation>
</HotelReservationModification>
<HotelReservationCancellation xmlns="http://www.pcibooking.net/reservation" schemaVersion="1.0">
  <BookerName>test</BookerName>
  <BookerReservationID>hfgfyt6-0998jh</BookerReservationID>
  <HotelReservationID>owufhwhewiuhf</HotelReservationID>
  <Reason>I have changed my mind</Reason>
</HotelReservationCancellation>
<ePayment xmlns="http://www.pcibooking.net/reservation" schemaVersion="1.0">
  <References>
    <PayerName>volkswagen</PayerName>
    <PayerReference>volk</PayerReference>
    <PayerOrderId>1234V</PayerOrderId>
    <PayeeReference>invoice4578</PayeeReference>
  </References>
  <Description>General text to describe the payment</Description>
  <PaymentURI>
    https://service.pcibooking.net/api/payments/paycard/3f799651f5464bd79d7806dba13e2060
  </PaymentURI>
  <Currency>USD</Currency>
  <Amount>123.45</Amount>
</ePayment>
<HotelReservationFeedback xmlns="http://www.pcibooking.net/reservation" schemaVersion="1.0">
  <BookerReservationID>test</BookerReservationID>
  <HotelReservationID>0987</HotelReservationID>
  <Feedback>false</Feedback>
  <Reason>no vacancies</Reason>
</HotelReservationFeedback>
<eFolio xmlns="http://www.pcibooking.net/reservation" schemaVersion="1.0">
  <BookerReservationID>test</BookerReservationID>
  <HotelReservationID>0987</HotelReservationID>
  <Invoice contentType="application/pdf" number="123456-78">
    <Content>dGVzdDoxMjM=</Content>
  </Invoice>
</eFolio>

XML schemas:

Below is the XML schema:

<xs:schema xmlns="http://www.pcibooking.net/reservation" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.pcibooking.net/reservation" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
  <xs:element name="HotelReservation">
    <xs:annotation>
      <xs:documentation>
        This message is being sent from the Booker to the hotel. It includes all details regarding a specific booking request, e.g., room type, number of adults, price, etc.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="References">
          <xs:annotation>
            <xs:documentation>Identifiers of the reservation</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="BookerName" type="shortString" minOccurs="0">
                <xs:annotation>
                  <xs:documentation>the Booker's (agent) name</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element name="BookerReference" type="shortString" minOccurs="0">
                <xs:annotation>
                  <xs:documentation>Description the Booker gave to the reservation</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element name="BookerReservationID" type="id">
                <xs:annotation>
                  <xs:documentation>Reservation ID in the Booker system</xs:documentation>
                </xs:annotation>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="BookerComment" type="longString" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Comments added by Booker</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="Price">
          <xs:annotation>
            <xs:documentation>The full price of the reservation</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:attribute name="currency" type="currencyCode" use="required">
              <xs:annotation>
                <xs:documentation>Currency code (ISO 4217)</xs:documentation>
              </xs:annotation>
            </xs:attribute>
            <xs:attribute name="commission" type="percent">
              <xs:annotation>
                <xs:documentation>Commission percentage included in price</xs:documentation>
              </xs:annotation>
            </xs:attribute>
            <xs:attribute name="amountBeforeTax" type="money" use="required">
              <xs:annotation>
                <xs:documentation>The full price of the reservation</xs:documentation>
              </xs:annotation>
            </xs:attribute>
            <xs:attribute name="amountAfterTax" type="money" use="required">
              <xs:annotation>
                <xs:documentation>The full price of the reservation</xs:documentation>
              </xs:annotation>
            </xs:attribute>
            <xs:attribute name="amountPaidUponBooking" type="money" use="optional">
              <xs:annotation>
                <xs:documentation>Amount paid in advance for the reservation</xs:documentation>
              </xs:annotation>
            </xs:attribute>
          </xs:complexType>
        </xs:element>
        <xs:element name="Rooms">
          <xs:annotation>
            <xs:documentation>
              A list of rooms that are included in the reservation
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:annotation>
                <xs:documentation>
                  The number of Room elements must be between 1 and 20
                </xs:documentation>
              </xs:annotation>
              <xs:element name="Room" maxOccurs="20">
                <xs:annotation>
                  <xs:documentation>A single room included in the reservation</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="ArrivalDate" type="date">
                      <xs:annotation>
                        <xs:documentation>Expected date of the arrival</xs:documentation>
                      </xs:annotation>
                    </xs:element>
                    <xs:element name="DepartureDate" type="date">
                      <xs:annotation>
                        <xs:documentation>Expected date of the departure</xs:documentation>
                      </xs:annotation>
                    </xs:element>
                    <xs:element name="RoomType" type="shortString">
                      <xs:annotation>
                        <xs:documentation>Type of the room</xs:documentation>
                      </xs:annotation>
                    </xs:element>
                    <xs:element name="NumberOfAdults">
                      <xs:annotation>
                        <xs:documentation>
                          Number of adult persons including the one who made the reservation. Must be betwen 1 and 30
                        </xs:documentation>
                      </xs:annotation>
                      <xs:simpleType>
                        <xs:restriction base="xs:positiveInteger">
                          <xs:minInclusive value="1"/>
                          <xs:maxInclusive value="30"/>
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:element>
                    <xs:element name="Children" minOccurs="0">
                      <xs:annotation>
                        <xs:documentation>Number of children and their ages</xs:documentation>
                      </xs:annotation>
                      <xs:complexType>
                        <xs:sequence>
                          <xs:annotation>
                            <xs:documentation>
                              The number of Child elements must be between 0 and 10
                            </xs:documentation>
                          </xs:annotation>
                          <xs:element name="Child" minOccurs="0" maxOccurs="10">
                            <xs:annotation>
                              <xs:documentation>Child who checks in the room</xs:documentation>
                            </xs:annotation>
                            <xs:complexType>
                              <xs:attribute name="age" use="required">
                                <xs:annotation>
                                  <xs:documentation>Age of the child, an integer between 0 and 17</xs:documentation>
                                </xs:annotation>
                                <xs:simpleType>
                                  <xs:restriction base="xs:integer">
                                    <xs:maxInclusive value="17"/>
                                    <xs:minInclusive value="0"/>
                                  </xs:restriction>
                                </xs:simpleType>
                              </xs:attribute>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="number" use="required">
                          <xs:annotation>
                            <xs:documentation>
                              Number of children checking in. Must be between 0 - 10
                            </xs:documentation>
                          </xs:annotation>
                          <xs:simpleType>
                            <xs:restriction base="xs:integer">
                              <xs:minInclusive value="0"/>
                              <xs:maxInclusive value="10"/>
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:attribute>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="SmokingPreference" type="bool" minOccurs="0">
                      <xs:annotation>
                        <xs:documentation>
                          Guest's smoking preference for the room: "true" = smoking, "false" = non-smoking, no element = the preference is not specified
                        </xs:documentation>
                      </xs:annotation>
                    </xs:element>
                    <xs:element name="Comments" minOccurs="0" maxOccurs="1" type="longString"/>
                    <xs:element name="Price">
                      <xs:annotation>
                        <xs:documentation>The full price of the reservation</xs:documentation>
                      </xs:annotation>
                      <xs:complexType>
                        <xs:attribute name="ratePlan" type="shortString">
                          <xs:annotation>
                            <xs:documentation>Rate plan</xs:documentation>
                          </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="amountBeforeTax" type="money" use="required">
                          <xs:annotation>
                            <xs:documentation>The full price of the reservation</xs:documentation>
                          </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="amountAfterTax" type="money" use="required">
                          <xs:annotation>
                            <xs:documentation>The full price of the reservation</xs:documentation>
                          </xs:annotation>
                        </xs:attribute>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="GuestDetails" type="ContactInfo">
          <xs:annotation>
            <xs:documentation>
              Details about the hotel guest who made the reservation
            </xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="Payments" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Payments received for the reservation</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Payment" maxOccurs="unbounded">
                <xs:annotation>
                  <xs:documentation>Payment received for the reservation.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="PayerDetails" type="ContactInfo" maxOccurs="1" minOccurs="0">
                      <xs:annotation>
                        <xs:documentation>Details about the payer</xs:documentation>
                      </xs:annotation>
                    </xs:element>
                    <xs:element name="PaymentURI" type="uri">
                      <xs:annotation>
                        <xs:documentation>
                          A valid URI received by the Booker from the pciBooking system as a result of posting a payment Info request
                        </xs:documentation>
                      </xs:annotation>
                    </xs:element>
                    <xs:element name="Currency" type="currencyCode">
                      <xs:annotation>
                        <xs:documentation>Currency code</xs:documentation>
                      </xs:annotation>
                    </xs:element>
                    <xs:element name="Amount" type="money">
                      <xs:annotation>
                        <xs:documentation>Amount of money paid</xs:documentation>
                      </xs:annotation>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="schemaVersion" type="xs:decimal" use="required" fixed="1.0"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="HotelReservationModification">
    <xs:annotation>
      <xs:documentation>
        This message is being sent from the Booker to the hotel. It includes all details of the reservation which was modified, and the id of the reservation
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="HotelReservationID" type="id" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Reservation ID in the Hotel system</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element ref="HotelReservation"/>
      </xs:sequence>
      <xs:attribute name="schemaVersion" type="xs:decimal" use="required" fixed="1.0"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="HotelReservationCancellation">
    <xs:annotation>
      <xs:documentation>
        This message is being sent from the Booker to the hotel when the reservation is canceled
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="BookerName" type="shortString" minOccurs="0">
          <xs:annotation>
            <xs:documentation>the Booker's (agent) name</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="BookerReservationID" type="id">
          <xs:annotation>
            <xs:documentation>Reservation ID in the Booker system</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="HotelReservationID" type="id" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Reservation ID in the Hotel system</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="Reason" type="longString" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Reason why the reservation was canceled</xs:documentation>
          </xs:annotation>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="schemaVersion" type="xs:decimal" use="required" fixed="1.0"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="HotelReservationFeedback">
    <xs:annotation>
      <xs:documentation>
        This message is being sent from the hotel to the Booker following a reservation request/modification/cancelation
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="BookerReservationID" type="id">
          <xs:annotation>
            <xs:documentation>Reservation ID in the Booker system</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="HotelReservationID" type="id" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Reservation ID in the Hotel system</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="Feedback" type="bool">
          <xs:annotation>
            <xs:documentation>true if request was accepted</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="Reason" type="longString" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Reason why the reservation was accepted/rejected</xs:documentation>
          </xs:annotation>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="schemaVersion" type="xs:decimal" use="required" fixed="1.0"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="PaymentInfo">
    <xs:annotation>
      <xs:documentation>
        This message contains payment details for MakeReservation request. It is separated from the request to provide compliance with PCI-DSS standard
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="PayerDetails" type="ContactInfo">
          <xs:annotation>
            <xs:documentation>Details about the payer</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="BankCard" type="BankCardInfoType">
          <xs:annotation>
            <xs:documentation>Bank card details</xs:documentation>
          </xs:annotation>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="schemaVersion" type="xs:decimal" use="required" fixed="1.0"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="BankCardDetails">
    <xs:annotation>
      <xs:documentation>
        This message serves for transmitting bank card information between mrchants and their customers
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="BankCard" type="BankCardInfoType"/>
      </xs:sequence>
      <xs:attribute name="schemaVersion" type="xs:decimal" use="required" fixed="1.0"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="eFolio">
    <xs:annotation>
      <xs:documentation>
        This message is being sent from the hotel to the TMC booker post stay. It includes the booking reference and the invoice
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="BookerReservationID" type="id">
          <xs:annotation>
            <xs:documentation>Reservation ID in the Booker system</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="HotelReservationID" type="id" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Reservation ID in the Hotel system</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="Invoice">
          <xs:annotation>
            <xs:documentation>The invoice issued by the hotel</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Content" type="xs:base64Binary">
                <xs:annotation>
                  <xs:documentation>Base64 encoded binary of the image</xs:documentation>
                </xs:annotation>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="contentType" type="contentType" use="required">
              <xs:annotation>
                <xs:documentation>The mime type describing the content</xs:documentation>
              </xs:annotation>
            </xs:attribute>
            <xs:attribute name="number" type="xs:string" use="required">
              <xs:annotation>
                <xs:documentation>The invoice number issued by the hotel</xs:documentation>
              </xs:annotation>
            </xs:attribute>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="schemaVersion" type="xs:decimal" use="required" fixed="1.0"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="ePayment">
    <xs:annotation>
      <xs:documentation>This message is being sent from a payer to a payee</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="References">
          <xs:annotation>
            <xs:documentation>
              Identifiers of the transaction, such as reservation
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="PayerName" type="shortString" minOccurs="0">
                <xs:annotation>
                  <xs:documentation>the Payer's name</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element name="PayerReference" type="shortString" minOccurs="0">
                <xs:annotation>
                  <xs:documentation>Payer reference</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element name="PayerOrderId" type="id">
                <xs:annotation>
                  <xs:documentation>Order Id (e.g Reservation ID) in the Payer system</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element name="PayeeReference" type="id" minOccurs="0">
                <xs:annotation>
                  <xs:documentation>
                    Payee reference for this payment (e.g Invoice number)
                  </xs:documentation>
                </xs:annotation>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Description" type="longString" maxOccurs="1" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Details about the payment</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="PaymentURI" type="uri">
          <xs:annotation>
            <xs:documentation>
              A valid URI received by the Payer from the pciBooking system
            </xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="Currency" type="currencyCode">
          <xs:annotation>
            <xs:documentation>Currency code</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="Amount" type="money">
          <xs:annotation>
            <xs:documentation>Amount of money paid</xs:documentation>
          </xs:annotation>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="schemaVersion" type="xs:decimal" use="required" fixed="1.0"/>
    </xs:complexType>
  </xs:element>
  <xs:annotation>
    <xs:documentation>Common types of PCI Booking schemas</xs:documentation>
  </xs:annotation>
  <xs:annotation>
    <xs:documentation>Common simple types</xs:documentation>
  </xs:annotation>
  <xs:simpleType name="bool">
    <xs:annotation>
      <xs:documentation>A boolean value, can be either "true" or "false"</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:boolean">
      <xs:pattern value="true|false"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="countryCode">
    <xs:annotation>
      <xs:documentation>ISO 3166-1 country code, e.g., US, GB, RU</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:length value="2"/>
      <xs:pattern value="[A-Z]{2}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="currencyCode">
    <xs:annotation>
      <xs:documentation>
        ISO 4217 currency code, consists of 3 uppercase letters. Examples: USD, EUR
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z]{3}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="flexidate">
    <xs:annotation>
      <xs:documentation>
        A date in format: "yyyy-MM-dd", e.g., "2002-09-24".
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="date">
    <xs:annotation>
      <xs:documentation>
        A date in format: "yyyy-MM-dd", e.g., "2002-09-24".
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:date">
      <xs:pattern value="(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="email">
    <xs:annotation>
      <xs:documentation>
        Email, must look like valid, e.g., someone@domain.com. Length should be between 6 and 128 characters
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:maxLength value="128"/>
      <xs:minLength value="6"/>
      <xs:pattern value="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="id">
    <xs:annotation>
      <xs:documentation>
        Identifier assigned to some entity (e.g., reservation). A string from 1 to 64 characters
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="64"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="longString">
    <xs:annotation>
      <xs:documentation>
        Long string value. Length should be between 1 and 256 characters
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="1024"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="percent">
    <xs:annotation>
      <xs:documentation>
        Percentage. A decimal that is greater or equal to zero
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="money">
    <xs:annotation>
      <xs:documentation>
        Amount of money. Decimal, cannot be negative. Can have no more than 2 digits in its fractional part
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0"/>
      <xs:fractionDigits value="2"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="phone">
    <xs:annotation>
      <xs:documentation>
        Phone number. Should start with "+". Could contain only numbers, hyphens, and brackets. Length should be between 2 and 32 characters
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="8"/>
      <xs:maxLength value="32"/>
      <xs:pattern value="\+[0-9\-\(\)]*"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="shortString">
    <xs:annotation>
      <xs:documentation>
        Short string value. Length should be between 1 and 32 characters
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="32"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="shortOrEmptyString">
    <xs:annotation>
      <xs:documentation>
        Short string value. Length should be between 0 and 32 characters
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="0"/>
      <xs:maxLength value="32"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="postalCode">
    <xs:annotation>
      <xs:documentation>
        A string containing letters, numbers, spaces or hyphens. Length should be between 2 and 32 characters
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:maxLength value="32"/>
      <xs:minLength value="2"/>
      <xs:pattern value="[a-zA-Z0-9 -]{2,32}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="uri">
    <xs:annotation>
      <xs:documentation>Uniform resource identificator</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:anyURI">
      <xs:maxLength value="512"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:annotation>
    <xs:documentation>Bank card simple types</xs:documentation>
  </xs:annotation>
  <xs:simpleType name="bankCardType">
    <xs:annotation>
      <xs:documentation>
        Type of a bank card. A string, from 2 to 16 characters
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="2"/>
      <xs:maxLength value="16"/>
      <xs:enumeration value="Unspecified"/>
      <xs:enumeration value="Visa"/>
      <xs:enumeration value="AMEX"/>
      <xs:enumeration value="BC"/>
      <xs:enumeration value="MasterCard"/>
      <xs:enumeration value="MC_Alaska"/>
      <xs:enumeration value="MC_Canada"/>
      <xs:enumeration value="CarteBlanche"/>
      <xs:enumeration value="UnionPay"/>
      <xs:enumeration value="Discover"/>
      <xs:enumeration value="DinersClub"/>
      <xs:enumeration value="CartaSi"/>
      <xs:enumeration value="CarteBleue"/>
      <xs:enumeration value="Dankort"/>
      <xs:enumeration value="Delta"/>
      <xs:enumeration value="Electron"/>
      <xs:enumeration value="JCB"/>
      <xs:enumeration value="Maestro"/>
      <xs:enumeration value="Switch"/>
      <xs:enumeration value="Solo"/>
      <xs:enumeration value="EuroCard"/>
      <xs:enumeration value="Laser"/>
      <xs:enumeration value="Elo"/>
      <xs:enumeration value="Hipercard"/>
      <xs:enumeration value="enRoute"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="bankCardYear">
    <xs:annotation>
      <xs:documentation>Number of a year. An integer between 1900 and 2100</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1900"/>
      <xs:maxInclusive value="2100"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="bankCardMonth">
    <xs:annotation>
      <xs:documentation>
        Number of a month. A string like 01, 02, ..., 11, 12
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="(0[1-9])|(1[0-2])"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="bankCardDay">
    <xs:annotation>
      <xs:documentation>Number of a year. An integer between 1900 and 2100</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1"/>
      <xs:maxInclusive value="31"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="bankCardNumber">
    <xs:annotation>
      <xs:documentation>
        Number of a bank card. A string containing from 12 to 19 digits
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="12"/>
      <xs:maxLength value="19"/>
      <xs:pattern value="[0-9]*"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="bankCardCvv">
    <xs:annotation>
      <xs:documentation>
        Card Verification Value. A 3 to 4 digits number used to verify credit card
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="3"/>
      <xs:maxLength value="4"/>
      <xs:pattern value="[0-9]*"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:annotation>
    <xs:documentation>Common complex types</xs:documentation>
  </xs:annotation>
  <xs:simpleType name="contentType">
    <xs:annotation>
      <xs:documentation>
        Content Type of a binary data. See http://www.iana.org/assignments/media-types/media-types.xhtml
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="application/pdf"/>
      <xs:enumeration value="application/postscript"/>
      <xs:enumeration value="image/gif"/>
      <xs:enumeration value="image/jpeg"/>
      <xs:enumeration value="image/png"/>
      <xs:enumeration value="text/html"/>
      <xs:enumeration value="text/plain"/>
      <xs:enumeration value="text/rtf"/>
      <xs:enumeration value="image/tiff"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="ContactInfo">
    <xs:annotation>
      <xs:documentation>Details about the hotel guest</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="FirstName" type="shortString">
        <xs:annotation>
          <xs:documentation>
            Full first name of the guest who made the reservation
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LastName" type="shortString">
        <xs:annotation>
          <xs:documentation>
            Full last name of the guest who made the reservation
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Email" type="email" minOccurs="0" maxOccurs="1">
        <xs:annotation>
          <xs:documentation>Hotel guest's email address</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Phone" type="phone" minOccurs="0" maxOccurs="1">
        <xs:annotation>
          <xs:documentation>Hotel guest's phone number</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Address" minOccurs="0" maxOccurs="1">
        <xs:annotation>
          <xs:documentation>Hotel guest's home address</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Address1" type="shortString">
              <xs:annotation>
                <xs:documentation>First line of address</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Address2" type="shortString" minOccurs="0">
              <xs:annotation>
                <xs:documentation>Second line of address</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Address3" type="shortString" minOccurs="0">
              <xs:annotation>
                <xs:documentation>Third line of address</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="City" type="shortString">
              <xs:annotation>
                <xs:documentation>City</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="StateProvince" type="shortString" minOccurs="0">
              <xs:annotation>
                <xs:documentation>State, Province or Region</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="CountryCode" type="countryCode">
              <xs:annotation>
                <xs:documentation>ISO 3166-1 country code</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="PostalCode" type="postalCode" minOccurs="0">
              <xs:annotation>
                <xs:documentation>Postal code</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="BankCardInfoType">
    <xs:annotation>
      <xs:documentation>Bank card details</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Type">
        <xs:annotation>
          <xs:documentation>Type of the bank card</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="bankCardType"/>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
      <xs:element name="Virtual" minOccurs="0" maxOccurs="1">
        <xs:annotation>
          <xs:documentation>
            Existing of this tag denotes this is a Virtual card
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:attribute name="isMultiuse" type="bool" default="false" use="optional">
            <xs:annotation>
              <xs:documentation>Set to true to denote a Virtual card</xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="currency" type="currencyCode" use="optional"/>
          <xs:attribute name="maxAmount" type="money" use="optional"/>
          <xs:attribute name="cardRules" type="xs:string" use="optional"/>
          <xs:attribute name="validFromDay" type="bankCardDay" use="optional"/>
          <xs:attribute name="validFromMonth" type="bankCardMonth" use="optional"/>
          <xs:attribute name="validFromYear" type="bankCardYear" use="optional"/>
          <xs:attribute name="validToDay" type="bankCardDay" use="optional"/>
          <xs:attribute name="validToMonth" type="bankCardMonth" use="optional"/>
          <xs:attribute name="validToYear" type="bankCardYear" use="optional"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="Number" type="bankCardNumber">
        <xs:annotation>
          <xs:documentation>
            Number of the bank card, digits only, from 12 to 19 characters
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="NameOnCard" type="shortOrEmptyString" minOccurs="0">
        <xs:annotation>
          <xs:documentation>The name of the card holder</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ExpirationDate">
        <xs:annotation>
          <xs:documentation>Expiration date of the bank card</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Month" type="bankCardMonth">
              <xs:annotation>
                <xs:documentation>
                  Expiration month. Should be two digits, like 01, 02, ..., 12
                </xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Year" type="bankCardYear">
              <xs:annotation>
                <xs:documentation>Expiration year. Should be 4 digits: YYYY</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="IssueNumber" minOccurs="0">
        <xs:annotation>
          <xs:documentation>IssueNumber</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:int">
            <xs:minInclusive value="1"/>
            <xs:maxInclusive value="100"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="OwnerID" type="shortString" minOccurs="0">
        <xs:annotation>
          <xs:documentation>The ID of the card holder</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="CVV" type="shortString" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Optional cvv identifier</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:schema>