1. Outbound
PearlPOS
  • Inbound
    • postMasterdata
      POST
    • postPOSdata
      POST
  • Outbound
    • POSLog XSD
    • POSlog
      POST
  • Live Endpoints
    • getCustomers
      GET
    • getCustomerOrders
      GET
    • verifyDigitalArticle
      GET
    • verifyCustomerReference
      GET
    • purchaseDigitalArticle
      POST
    • getRelatedProducts
      GET
    • getSerialNumberVerification
      GET
    • getAvailableValueCodes
      POST
    • getValueCodes
      GET
    • getStockLevels
      GET
    • lookupPrices
      POST
    • lookupMargins
      POST
  • Schemas
    • TransactionType
    • RetailTransactionType
    • LineItemType
    • TransactionLinkType
    • SaleReturnType
    • RetailPriceModifierType
    • ActionAmountType
    • TaxType
    • CustomerInformationType
    • CustomerOrderType
    • TenderLineItemType
    • TenderType
    • AuthorizationType
    • RoundingType
    • VoidsLineItemType
    • PriceModificationType
    • TenderControlTransactionType
    • TillSettleType
    • TenderSummaryType
    • SummaryAmountType
    • ForeignSummaryAmountType
    • TenderLoanType
    • TenderPickupType
    • TotalsType
    • POSLog
  1. Outbound

POSLog XSD

This page contains the XML Schema (XSD) for the POSLog message that PearlPOS posts to the receiving system (see the POSlog endpoint in the Outbound folder).
Use it to validate incoming messages, generate classes, or as the source structure in an integration mapping.

How to use#

1.
Copy the schema below and save it as PearlPOS_POSLog.xsd.
2.
Validate each received POSLog against it. Example with xmllint:
xmllint --noout --schema PearlPOS_POSLog.xsd poslog.xml

Key rules#

The structure is based on ARTS POSLog 6.0, extended with PearlPOS-specific elements and code values.
One POSLog per transaction, no XML namespace. Element order is fixed as defined in the schema.
Missing values are either omitted (optional elements) or sent as empty elements (<ReceiptDateTime/>). Header elements are always sent; line item elements are omitted when the value is missing.
Free text (FreeText, Description, Comment, TenderDescription, CustomerInformation, OverUnder/Reason) is URL-encoded. The characters & < > " ' are not included.
Some attributes and texts can contain the placeholder value undefined when no value is available. This is documented in the schema per field.
Optional attributes are normally sent; they are omitted only when the value is empty in PearlPOS.
A LineItem contains at most one of Sale, Return, Tender, CustomerOrder, Rounding, VoidsLineItem, PriceModification, or one or more CustomerInformation. A LineItem with only SequenceNumber/BeginDateTime can occur for line types that are not included in the message.
New optional elements, attributes and code values may be added in later versions. Receivers should not reject unknown code values.

Customer information#

Each customer is one LineItem with one CustomerInformation per field. B2C has no TypeCode. In B2B, TypeCode is CUSTOMER (sold-to) or RECIPIENT (ship-to).
Sold-to (B2C and B2B): LineItem[@VoidFlag='false']/CustomerInformation[not(@TypeCode) or @TypeCode='CUSTOMER']
Ship-to (B2B): LineItem[@VoidFlag='false']/CustomerInformation[@TypeCode='RECIPIENT']

Schema#

Version 1.0
<?xml version="1.0" encoding="UTF-8"?>
<!--
  PearlPOS POSLog - outbound transaction message (POST /POSlog, application/xml)
  Version 1.0

  The structure is based on ARTS POSLog 6.0 with PearlPOS-specific elements
  and code values. This schema describes the message as sent by PearlPOS.

  General rules
  - The message has no XML namespace.
  - Element order is fixed as listed in each sequence.
  - Missing values are either omitted (optional elements) or sent as an empty
    element (<X/>). All simple types therefore accept an empty value.
  - Free text (FreeText, Description, Comment, TenderDescription,
    CustomerInformation, OverUnder/Reason) is URL-encoded (encodeURI). The
    characters &amp; &lt; &gt; " ' are not included.
  - Some attributes and texts can contain the placeholder value "undefined"
    when no value is available. This is documented per field.
  - Optional attributes are normally sent; they are omitted only when the
    value is empty in PearlPOS.
--><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified" version="1.0">

  <!-- ===================== Simple types ===================== -->

  <xs:simpleType name="Empty">
    <xs:restriction base="xs:string">
      <xs:length value="0"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Text">
    <xs:annotation><xs:documentation>Any text, may be empty.</xs:documentation></xs:annotation>
    <xs:restriction base="xs:string"/>
  </xs:simpleType>

  <xs:simpleType name="EncodedText">
    <xs:annotation><xs:documentation>URL-encoded free text (encodeURI). The characters &amp; &lt; &gt; " ' are not included.</xs:documentation></xs:annotation>
    <xs:restriction base="xs:string"/>
  </xs:simpleType>

  <xs:simpleType name="Amount">
    <xs:annotation><xs:documentation>Number with "." as decimal separator. May be empty.</xs:documentation></xs:annotation>
    <xs:union memberTypes="xs:double Empty"/>
  </xs:simpleType>

  <xs:simpleType name="AmountOrUndefined">
    <xs:annotation><xs:documentation>Number, empty, or the placeholder "undefined" if no value is available.</xs:documentation></xs:annotation>
    <xs:union memberTypes="Amount">
      <xs:simpleType>
        <xs:restriction base="xs:string"><xs:enumeration value="undefined"/></xs:restriction>
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>

  <xs:simpleType name="Integer">
    <xs:union memberTypes="xs:integer Empty"/>
  </xs:simpleType>

  <xs:simpleType name="Boolean">
    <xs:annotation><xs:documentation>true or false. May be empty.</xs:documentation></xs:annotation>
    <xs:union memberTypes="xs:boolean Empty"/>
  </xs:simpleType>

  <xs:simpleType name="BooleanOrUndefined">
    <xs:annotation><xs:documentation>true, false or the placeholder "undefined" if no value is available.</xs:documentation></xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="true"/>
      <xs:enumeration value="false"/>
      <xs:enumeration value="undefined"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="DateTime">
    <xs:annotation><xs:documentation>ISO 8601 timestamp in UTC, e.g. 2025-11-05T11:35:51.721Z. May be empty.</xs:documentation></xs:annotation>
    <xs:union memberTypes="xs:dateTime Empty"/>
  </xs:simpleType>

  <xs:simpleType name="Date">
    <xs:annotation><xs:documentation>Date YYYY-MM-DD. May be empty.</xs:documentation></xs:annotation>
    <xs:union memberTypes="xs:date Empty"/>
  </xs:simpleType>

  <xs:simpleType name="TransactionStatusCode">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Finished"/>
      <xs:enumeration value="Canceled"/>
      <xs:enumeration value="Voided"/>
      <xs:enumeration value="Suspended"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="TotalTypeCode">
    <xs:restriction base="xs:string">
      <xs:enumeration value="TransactionGrandAmount"/>
      <xs:enumeration value="TransactionNetAmount"/>
      <xs:enumeration value="TransactionTaxAmount"/>
      <xs:enumeration value="TransactionTenderAmount"/>
      <xs:enumeration value="TransactionCashbackAmount"/>
      <xs:enumeration value="TransactionRoundingAmount"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="AdjustmentActionCode">
    <xs:annotation><xs:documentation>Subtract (-), Add (+), Replace (=). Other PearlPOS adjustment codes are passed through unchanged.</xs:documentation></xs:annotation>
    <xs:restriction base="xs:string"/>
  </xs:simpleType>

  <xs:simpleType name="RoundingDirectionCode">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Up"/>
      <xs:enumeration value="Down"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- ===================== Root ===================== -->

  <xs:element name="POSLog">
    <xs:annotation><xs:documentation>One POSLog per transaction.</xs:documentation></xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Tra
Modified at 2026-10-06 07:30:06
Previous
postPOSdata
Next
POSlog
Built with