{
    "openapi": "3.1.0",
    "info": {
        "version": "1",
        "title": "Adyen Terminal API",
        "description": "The Adyen [Terminal API](https://docs.adyen.com/point-of-sale/design-your-integration/terminal-api/) lets you make payments, issue refunds, collect shopper information, and perform other shopper-terminal interactions using a payment terminal supplied by Adyen.\n\n## Authentication and endpoints\nAuthentication and endpoints depend on whether you are using a [cloud or a local](https://docs.adyen.com/point-of-sale/design-your-integration/choose-your-architecture/) Terminal API integration.\n\n### Cloud\nEach request to the cloud Terminal API must be signed with an API key. [Generate your API Key](https://docs.adyen.com/development-resources/api-credentials#generate-api-key) in the Customer Area and set this key to the `X-API-Key` header value.\n\nThe cloud Terminal API endpoint you need to use depends on whether your integration will receive transaction results synchronously or asynchronously:\n\n- Synchronous: `https://terminal-api-test.adyen.com/sync`\n- Asynchronous: `https://terminal-api-test.adyen.com/async`\n\nWhen you are ready to go live, you need to generate a new web service user credential and switch to one of the [live endpoints](https://docs.adyen.com/point-of-sale/design-your-integration/terminal-api/#cloud).\n\n### Local\nIf your integration uses local communications, API requests are made from a POS app directly to a terminal's IP address. To learn how to set up and protect local communications, refer to [Building a local integration](https://docs.adyen.com/point-of-sale/design-your-integration/choose-your-architecture/local/).\n\n## API structure\nTerminal API communicates with the terminal using JSON messages. All requests and responses have the following structure:\n- `MessageHeader`: identifies the type of transaction, the terminal being used, and unique transaction identifiers.\n- **Request body**: a request or response object, depending on the type of transaction. For example, when you make a payment request this is a `PaymentRequest` object, and when you receive a payment response this is a `PaymentResponse` object.\n\n### Requests\nEach Terminal API request you make is contained in a `SaletoPOIRequest` object and needs to have the following objects:\n* `MessageHeader`: for each request you need to include this object and specify the [required parameters](https://docs.adyen.com/point-of-sale/design-your-integration/terminal-api/#request-message-header).\n* Request body: the name and structure of this object depends on the type of request. You can use this specification to create the structure of the request body. For example, to make a payment you need to include a `PaymentRequest` object and the `MessageHeader` inside the `SaletoPOIRequest` object.\n\n### Responses\nEach terminal API response you receive is contained in a `SaleToPOIResponse` object and includes:\n* `MessageHeader`: this object echoes the values you provided in the request. The only exception is the `MessageType`, which is always **Response**.\n* **Response body**: the values you receive in the response body depend on the type of transaction request you made. For example, when making a `PaymentRequest` you would receive a `PaymentResponse` as the response body.\n\nBelow, you can find the list of available Terminal API requests with the structure of the request/response body parameters:"
    },
    "servers": [
        {
            "description": "with cloud integration",
            "url": "https://terminal-api-test.adyen.com/sync"
        },
        {
            "description": "with cloud integration",
            "url": "https://terminal-api-test.adyen.com/async"
        },
        {
            "description": "with local-hosting",
            "url": "<local-terminal-IP-address>"
        }
    ],
    "paths": {
        "/login": {
            "post": {
                "description": "It conveys information related to the session (period between a Login and the following Logout) to process.\nContent of the `LoginRequest` message.",
                "summary": "Login Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/LoginRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/LoginResponse"
                                }
                            }
                        },
                        "description": "It conveys Information related to the Login to process.\nContent of the Login Response message."
                    }
                }
            }
        },
        "/logout": {
            "post": {
                "description": "Empty.\nContent of the Logout Request message.",
                "summary": "Logout Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/LogoutRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/LogoutResponse"
                                }
                            }
                        },
                        "description": "It conveys the result of the Logout.\nContent of the Logout Response message."
                    }
                }
            }
        },
        "/enableservice": {
            "post": {
                "description": "It conveys the services that will be enabled for the POI Terminal without the request of the Sale System, and a possible invitation for the Customer to start the services.\nContent of the Enable Service Request message.",
                "summary": "EnableService Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/EnableServiceRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/EnableServiceResponse"
                                }
                            }
                        },
                        "description": "It conveys the result of the Enable Service processing.\nContent of the Enable Service Response message."
                    }
                }
            }
        },
        "/admin": {
            "post": {
                "description": "Empty.\nContent of the Custom Admin Request message.",
                "summary": "Admin Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AdminRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AdminResponse"
                                }
                            }
                        },
                        "description": "It conveys the result of the Custom Admin.\nContent of the Custom Admin Response message."
                    }
                }
            }
        },
        "/payment": {
            "post": {
                "description": "Request sent to terminal to initiate payment.\nIt conveys Information related to the Payment transaction to process.\nContent of the `PaymentRequest` message.",
                "summary": "Payment Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/PaymentRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaymentResponse"
                                }
                            }
                        },
                        "description": "It conveys Information related to the Payment transaction processed by the POI System.\nContent of the Payment Response message."
                    }
                }
            }
        },
        "/cardacquisition": {
            "post": {
                "description": "It conveys Information related to the payment and loyalty cards to read and analyse. This message pair is usually followed by a message pair (e.g. payment or loyalty) which refers to this Card Acquisition message pair.\nContent of the Card Acquisition Request message.",
                "summary": "CardAcquisition Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CardAcquisitionRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/CardAcquisitionResponse"
                                }
                            }
                        },
                        "description": "It conveys Information related to the payment and loyalty cards read and processed by the POI System and entered by the Customer.\nContent of the Card Acquisition Response message."
                    }
                }
            }
        },
        "/loyalty": {
            "post": {
                "description": "It conveys Information related to the Loyalty transaction to process.\nContent of the Loyalty Request message.",
                "summary": "Loyalty Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/LoyaltyRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/LoyaltyResponse"
                                }
                            }
                        },
                        "description": "It conveys Information related to the Loyalty transaction processed by the POI System.\nContent of the Loyalty Response message."
                    }
                }
            }
        },
        "/storedvalue": {
            "post": {
                "description": "It conveys Information related to the Stored Value transaction to process.\nContent of the Stored Value Request message.",
                "summary": "StoredValue Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/StoredValueRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/StoredValueResponse"
                                }
                            }
                        },
                        "description": "It conveys Information related to the Stored Value transaction processed by the POI System.\nContent of the Stored Value Response message."
                    }
                }
            }
        },
        "/reversal": {
            "post": {
                "description": "It conveys Information related to the reversal of a previous payment or a loyalty transaction.\nContent of the Reversal Request message.",
                "summary": "Reversal Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ReversalRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ReversalResponse"
                                }
                            }
                        },
                        "description": "It conveys Information related to the reversal processed by the POI System.\nContent of the Reversal Response message."
                    }
                }
            }
        },
        "/reconciliation": {
            "post": {
                "description": "Content of the Reconciliation Request message.\nIt conveys Information related to the Reconciliation requested by the Sale System.",
                "summary": "Reconciliation Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ReconciliationRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ReconciliationResponse"
                                }
                            }
                        },
                        "description": "It conveys Information related to the Reconciliation transaction processed by the POI System.\nContent of the Reconciliation Response message."
                    }
                }
            }
        },
        "/gettotals": {
            "post": {
                "description": "It conveys information from the Sale System related to the scope and the format of the totals to be computed by the POI System.\nContent of the Get Totals Request message.",
                "summary": "GetTotals Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/GetTotalsRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/GetTotalsResponse"
                                }
                            }
                        },
                        "description": "Content of the Reconciliation Response message.\nIt conveys Information related to the Reconciliation transaction processed by the POI System."
                    }
                }
            }
        },
        "/balanceinquiry": {
            "post": {
                "description": "It conveys Information related to the account for which a Balance Inquiry is requested.\nContent of the Balance Inquiry Request message.",
                "summary": "BalanceInquiry Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/BalanceInquiryRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BalanceInquiryResponse"
                                }
                            }
                        },
                        "description": "Content of the Balance Inquiry Response message.\nIt conveys the balance and the identification of the associated payment, loyalty or stored value account."
                    }
                }
            }
        },
        "/transactionstatus": {
            "post": {
                "description": "Content of the TransactionStatus Request message.\nIt conveys Information requested for status of the last or current Payment, Loyalty or Reversal transaction.",
                "summary": "TransactionStatus Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TransactionStatusRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/TransactionStatusResponse"
                                }
                            }
                        },
                        "description": "Content of the TransactionStatus Response message.\nIt conveys Information related to the status of the last or current Payment, Loyalty or Reversal transaction."
                    }
                }
            }
        },
        "/abort": {
            "post": {
                "description": "Body of the Abort Request message.\nIt conveys Information requested for identification of the message request carrying the transaction to abort. A message to display on the CustomerError Device could be sent by the Sale System (DisplayOutput).",
                "summary": "Abort Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AbortRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AbortResponse"
                                }
                            }
                        },
                        "description": "A successful `AbortRequest` returns a response with a **200 OK** HTTP status code and no body."
                    }
                }
            }
        },
        "/diagnosis": {
            "post": {
                "description": "It conveys Information related to the target POI for which the diagnosis is requested.\nContent of the Diagnosis Request message.",
                "summary": "Diagnosis Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DiagnosisRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/DiagnosisResponse"
                                }
                            }
                        },
                        "description": "It conveys the result of the requested diagnosis and a possible message to display on a logical device.\nContent of the Diagnosis Response message."
                    }
                }
            }
        },
        "/display": {
            "post": {
                "description": "It conveys the data to display and the way to process the display. It contains the complete content to display. It might contain an operation (the DisplayOutput element) per Display Device type.\nContent of the Display Request message.",
                "summary": "Display Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DisplayRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/DisplayResponse"
                                }
                            }
                        },
                        "description": "It conveys the result of the display, parallel to the message request, except if response not required and absent.\nContent of the Display Response message."
                    }
                }
            }
        },
        "/input": {
            "post": {
                "description": "Content of the `InputRequest` message. It conveys the data to display and how to process it. In addition to the display on the Input Device, it might contain an operation (the `DisplayOutput` element) per Display Device type.",
                "summary": "Input Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/InputRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/InputResponse"
                                }
                            }
                        },
                        "description": "It conveys the result of the input or the result of the outputs, parallel to the message request, except if response not required and absent.\nContent of the Input Response message."
                    }
                }
            }
        },
        "/print": {
            "post": {
                "description": "Content of the Print Request message.\nIt conveys the complete data to print and how to process the print.",
                "summary": "Print Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/PrintRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PrintResponse"
                                }
                            }
                        },
                        "description": "It conveys the result of the print, parallel to the message request, except if response not required and absent.\nContent of the Print Response message."
                    }
                }
            }
        },
        "/cardreaderapdu": {
            "post": {
                "description": "It contains the APDU request to send to the chip of the card, and a possible invitation message to display on the CashierInterface or the CustomerInterface.\nContent of the Card Reader APDU Request message.",
                "summary": "CardReaderAPDU Request",
                "security": [
                    {
                        "BasicAuth": []
                    },
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CardReaderAPDURequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/CardReaderAPDUResponse"
                                }
                            }
                        },
                        "description": "Content of the Card Reader APDU Response message.\nIt contains the result of the requested service, APDU response sent by the chip of the card in response to the APDU request."
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "TerminalEnvironment": {
                "type": "string",
                "description": "Environment of the Terminal. Sent in the Login Request (Response) to identify the environment of the Sale System (POI System) during the session. Sent in other messages when the data has changed since the Login.\nPossible values:\n* **Attended**\n* **SemiAttended**\n* **Unattended**",
                "enum": [
                    "Attended",
                    "SemiAttended",
                    "Unattended"
                ]
            },
            "GenericProfile": {
                "type": "string",
                "description": "Functional profile of the Sale to POI protocol. Sent in the Login Request to identify the messages that might be requested or received by the Sale Terminal during the session. Sent in the Login Response to identify the messages that might be processed or sent by the POI Terminal during the session.\nPossible values:\n* **Basic**\n* **Extended**\n* **Standard**",
                "enum": [
                    "Basic",
                    "Extended",
                    "Standard"
                ]
            },
            "ServiceProfiles": {
                "type": "array",
                "description": "Service profiles of the Sale to POI protocol. Sent in the Login Request to identify the specific services that might be requested by the Sale Terminal during the session. Sent in the Login Response to identify the specific services that might be processed by the POI Terminal during the session.\nPossible values:\n* **Batch**\n* **CardReader**\n* **Communication**\n* **Loyalty**\n* **OneTimeRes**\n* **PIN**\n* **Reservation**\n* **Sound**\n* **StoredValue**\n* **Synchro**",
                "items": {
                    "type": "string",
                    "enum": [
                        "Batch",
                        "CardReader",
                        "Communication",
                        "Loyalty",
                        "OneTimeRes",
                        "PIN",
                        "Reservation",
                        "Sound",
                        "StoredValue",
                        "Synchro"
                    ]
                }
            },
            "SaleCapabilities": {
                "type": "array",
                "description": "place holder!\nPossible values:\n* **CashierDisplay**\n* **CashierError**\n* **CashierInput**\n* **CashierStatus**\n* **CustomerAssistance**\n* **CustomerDisplay**\n* **CustomerError**\n* **CustomerInput**\n* **EMVContactless**\n* **ICC**\n* **MagStripe**\n* **POIReplication**\n* **PrinterDocument**\n* **PrinterReceipt**\n* **PrinterVoucher**",
                "items": {
                    "type": "string",
                    "enum": [
                        "CashierDisplay",
                        "CashierError",
                        "CashierInput",
                        "CashierStatus",
                        "CustomerAssistance",
                        "CustomerDisplay",
                        "CustomerError",
                        "CustomerInput",
                        "EMVContactless",
                        "ICC",
                        "MagStripe",
                        "POIReplication",
                        "PrinterDocument",
                        "PrinterReceipt",
                        "PrinterVoucher"
                    ]
                }
            },
            "TokenRequestedType": {
                "type": "string",
                "description": "Type of token replacing the PAN of a payment card to identify the payment mean of the customer. It allows, for a merchant, to use a token for a transaction only or for a longer period.\nPossible values:\n* **Customer**\n* **Transaction**",
                "enum": [
                    "Customer",
                    "Transaction"
                ]
            },
            "CustomerOrderReq": {
                "type": "array",
                "description": "List of customer order open, closed or both to be sent in the response messages.\nPossible values:\n* **Both**\n* **Closed**\n* **Open**",
                "items": {
                    "type": "string",
                    "enum": [
                        "Both",
                        "Closed",
                        "Open"
                    ]
                }
            },
            "TrackFormat": {
                "type": "string",
                "description": "Magnetic track or magnetic ink characters line.\nPossible values:\n* **AAMVA**\n* **ISO**",
                "enum": [
                    "AAMVA",
                    "ISO"
                ]
            },
            "EntryMode": {
                "type": "array",
                "items": {
                    "type": "string",
                    "enum": [
                        "Contactless",
                        "File",
                        "ICC",
                        "Keyed",
                        "MagStripe",
                        "Manual",
                        "Mobile",
                        "RFID",
                        "Scanned",
                        "SynchronousICC",
                        "Tapped"
                    ]
                }
            },
            "Result": {
                "type": "string",
                "enum": [
                    "Failure",
                    "Partial",
                    "Success"
                ]
            },
            "ErrorCondition": {
                "type": "string",
                "enum": [
                    "Aborted",
                    "Busy",
                    "Cancel",
                    "DeviceOut",
                    "InProgress",
                    "InsertedCard",
                    "InvalidCard",
                    "LoggedOut",
                    "MessageFormat",
                    "NotAllowed",
                    "NotFound",
                    "PaymentRestriction",
                    "Refusal",
                    "UnavailableDevice",
                    "UnavailableService",
                    "UnreachableHost",
                    "WrongPIN"
                ]
            },
            "GlobalStatus": {
                "type": "string",
                "enum": [
                    "Busy",
                    "Maintenance",
                    "OK",
                    "Unreachable"
                ]
            },
            "PrinterStatus": {
                "type": "string",
                "description": "Indicates if the printer is working and usable.\nPossible values:\n* **NoPaper**\n* **OK**\n* **OutOfOrder**\n* **PaperJam**\n* **PaperLow**",
                "enum": [
                    "NoPaper",
                    "OK",
                    "OutOfOrder",
                    "PaperJam",
                    "PaperLow"
                ]
            },
            "POICapabilities": {
                "type": "array",
                "description": "Hardware capabilities of the POI Terminal. They are the POI capabilities the POI System allows the Sale System to use. These POI capabilities include the logical devices enumerated in the devices data element (most of these devices could be on the POI part), plus card reader devices. Sent in the Login Response to identify the devices of the POI Terminal which can be used by the Sale System during the session.\nPossible values:\n* **CashHandling**\n* **CashierDisplay**\n* **CashierError**\n* **CashierInput**\n* **CustomerDisplay**\n* **CustomerError**\n* **CustomerInput**\n* **EMVContactless**\n* **ICC**\n* **MagStripe**\n* **PrinterDocument**\n* **PrinterReceipt**\n* **PrinterVoucher**",
                "items": {
                    "type": "string",
                    "enum": [
                        "CashHandling",
                        "CashierDisplay",
                        "CashierError",
                        "CashierInput",
                        "CustomerDisplay",
                        "CustomerError",
                        "CustomerInput",
                        "EMVContactless",
                        "ICC",
                        "MagStripe",
                        "PrinterDocument",
                        "PrinterReceipt",
                        "PrinterVoucher"
                    ]
                }
            },
            "Device": {
                "type": "string",
                "enum": [
                    "CashierDisplay",
                    "CashierInput",
                    "CustomerDisplay",
                    "CustomerInput"
                ]
            },
            "InfoQualify": {
                "type": "string",
                "enum": [
                    "CustomerAssistance",
                    "Display",
                    "Document",
                    "Error",
                    "Input",
                    "POIReplication",
                    "Receipt",
                    "Sound",
                    "Status",
                    "Voucher"
                ]
            },
            "OutputFormat": {
                "type": "string",
                "description": "Format of the content to display or print. Display or print device function.\nPossible values:\n* **BarCode**\n* **MessageRef**\n* **Text**\n* **XHTML**",
                "enum": [
                    "BarCode",
                    "MessageRef",
                    "Text",
                    "XHTML"
                ]
            },
            "Color": {
                "type": "string",
                "enum": [
                    "Black",
                    "Blue",
                    "Cyan",
                    "Green",
                    "Magenta",
                    "Red",
                    "White",
                    "Yellow"
                ]
            },
            "CharacterWidth": {
                "type": "string",
                "enum": [
                    "DoubleWidth",
                    "SingleWidth"
                ]
            },
            "CharacterHeight": {
                "type": "string",
                "enum": [
                    "DoubleHeight",
                    "HalfHeight",
                    "SingleHeight"
                ]
            },
            "CharacterStyle": {
                "type": "string",
                "enum": [
                    "Bold",
                    "Italic",
                    "Normal",
                    "Underline"
                ]
            },
            "Alignment": {
                "type": "string",
                "enum": [
                    "Centred",
                    "Justified",
                    "Left",
                    "Right"
                ]
            },
            "BarcodeType": {
                "type": "string",
                "description": "Type of Barcode coding. Qualification of the barcode value to display or print.\nPossible values:\n* **Code128**\n* **Code25**\n* **EAN13**\n* **EAN8**\n* **PDF417**\n* **QRCode**\n* **UPCA**",
                "enum": [
                    "Code128",
                    "Code25",
                    "EAN13",
                    "EAN8",
                    "PDF417",
                    "QRCode",
                    "UPCA"
                ]
            },
            "MenuEntryTag": {
                "type": "string",
                "description": "Characteristics related to the selection of a menu entry.\nPossible values:\n* **NonSelectable**\n* **NonSelectableSubMenu**\n* **Selectable**\n* **SubMenu**",
                "enum": [
                    "NonSelectable",
                    "NonSelectableSubMenu",
                    "Selectable",
                    "SubMenu"
                ]
            },
            "TransactionAction": {
                "type": "string",
                "description": "Action to realise on a transaction. In an `EnableService` request message:\n  - Starts a transaction by a swipe-ahead mechanism, with the services which are enabled.\n  - Aborts a swipe-ahead transaction or started by a `CardAcquisition`, and not followed by a service request from the Sale System to complete the transaction.\nPossible values:\n* **AbortTransaction**\n* **StartTransaction**",
                "enum": [
                    "AbortTransaction",
                    "StartTransaction"
                ]
            },
            "ServicesEnabled": {
                "type": "array",
                "description": "Services which are enabled before the start-up of a transaction.\nMandatory if `TransactionAction` is `StartTransaction`, absent if not.\nPossible values:\n* **CardAcquisition**\n* **Loyalty**\n* **Payment**",
                "items": {
                    "type": "string",
                    "enum": [
                        "CardAcquisition",
                        "Loyalty",
                        "Payment"
                    ]
                }
            },
            "UnitOfMeasure": {
                "type": "string",
                "enum": [
                    "Case",
                    "Centilitre",
                    "Centimetre",
                    "Foot",
                    "Gram",
                    "Inch",
                    "Kilogram",
                    "Kilometre",
                    "Litre",
                    "Meter",
                    "Mile",
                    "Other",
                    "Ounce",
                    "Pint",
                    "Pound",
                    "Quart",
                    "UKGallon",
                    "USGallon",
                    "Yard"
                ]
            },
            "PaymentType": {
                "type": "string",
                "enum": [
                    "CashAdvance",
                    "CashDeposit",
                    "Completion",
                    "FirstReservation",
                    "Instalment",
                    "IssuerInstalment",
                    "Normal",
                    "OneTimeReservation",
                    "PaidOut",
                    "Recurring",
                    "Refund",
                    "UpdateReservation"
                ]
            },
            "PaymentInstrumentType": {
                "type": "string",
                "enum": [
                    "Card",
                    "Cash",
                    "Check",
                    "Mobile",
                    "StoredValue"
                ]
            },
            "TypeCode": {
                "type": "string",
                "enum": [
                    "Company",
                    "Personal"
                ]
            },
            "StoredValueAccountType": {
                "type": "string",
                "enum": [
                    "GiftCard",
                    "Other",
                    "PhoneCard"
                ]
            },
            "IdentificationType": {
                "type": "string",
                "enum": [
                    "AccountNumber",
                    "BarCode",
                    "ISOTrack2",
                    "PAN",
                    "PhoneNumber"
                ]
            },
            "LoyaltyUnit": {
                "type": "string",
                "enum": [
                    "Monetary",
                    "Point"
                ]
            },
            "IdentificationSupport": {
                "type": "string",
                "description": "Support of the loyalty account identification. Allows knowing where and how you have found the loyalty account identification.\nPossible values:\n* **HybridCard**\n* **LinkedCard**\n* **LoyaltyCard**\n* **NoCard**",
                "enum": [
                    "HybridCard",
                    "LinkedCard",
                    "LoyaltyCard",
                    "NoCard"
                ]
            },
            "InstalmentType": {
                "type": "string",
                "description": "Type of instalment transaction. For requesting an instalment payment transaction.\nPossible values:\n* **DeferredInstalments**\n* **EqualInstalments**\n* **InequalInstalments**",
                "enum": [
                    "DeferredInstalments",
                    "EqualInstalments",
                    "InequalInstalments"
                ]
            },
            "PeriodUnit": {
                "type": "string",
                "description": "Type of instalment transaction.\nPossible values:\n* **Annual**\n* **Daily**\n* **Monthly**\n* **Weekly**",
                "enum": [
                    "Annual",
                    "Daily",
                    "Monthly",
                    "Weekly"
                ]
            },
            "LoyaltyHandling": {
                "type": "string",
                "enum": [
                    "Allowed",
                    "Forbidden",
                    "Processed",
                    "Proposed",
                    "Required"
                ]
            },
            "ForceEntryMode": {
                "type": "array",
                "items": {
                    "type": "string",
                    "enum": [
                        "CheckReader",
                        "Contactless",
                        "File",
                        "ICC",
                        "Keyed",
                        "MagStripe",
                        "Manual",
                        "RFID",
                        "Scanned",
                        "SynchronousICC",
                        "Tapped"
                    ]
                }
            },
            "DocumentQualifier": {
                "type": "string",
                "enum": [
                    "CashierReceipt",
                    "CustomerReceipt",
                    "Document",
                    "Journal",
                    "SaleReceipt",
                    "Voucher"
                ]
            },
            "AuthenticationMethod": {
                "type": "array",
                "description": "Method for customer authentication. Allows the Sale System informed about customer authentication for the payment transaction.\nPossible values:\n* **Bypass**\n* **ManualVerification**\n* **MerchantAuthentication**\n* **OfflinePIN**\n* **OnlinePIN**\n* **PaperSignature**\n* **SecureCertificate**\n* **SecureNoCertificate**\n* **SecuredChannel**\n* **SignatureCapture**\n* **UnknownMethod**",
                "items": {
                    "type": "string",
                    "enum": [
                        "Bypass",
                        "ManualVerification",
                        "MerchantAuthentication",
                        "OfflinePIN",
                        "OnlinePIN",
                        "PaperSignature",
                        "SecureCertificate",
                        "SecureNoCertificate",
                        "SecuredChannel",
                        "SignatureCapture",
                        "UnknownMethod"
                    ]
                }
            },
            "LoyaltyTransactionType": {
                "type": "string",
                "description": "Type of loyalty transaction. These types of loyalty transactions use the same message requests:\n  * **Award**: direct or payment-related award on a loyalty account.\n  * **Rebate**: rebate on a total amount, sale item amount, or sale items.\n  * **Redemption**: redemption on a loyalty account.\n  * **AwardRefund**: refund of a loyalty award transaction.\n  * **RebateRefund**: refund of a loyalty rebate transaction.\n  * **RedemptionRefund**: refund of a loyalty redemption transaction.\nPossible values:\n* **Award**\n* **AwardRefund**\n* **Rebate**\n* **RebateRefund**\n* **Redemption**\n* **RedemptionRefund**",
                "enum": [
                    "Award",
                    "AwardRefund",
                    "Rebate",
                    "RebateRefund",
                    "Redemption",
                    "RedemptionRefund"
                ]
            },
            "StoredValueTransactionType": {
                "type": "string",
                "enum": [
                    "Activate",
                    "Duplicate",
                    "Load",
                    "Reserve",
                    "Reverse",
                    "Unload"
                ]
            },
            "ReversalReason": {
                "type": "string",
                "description": "Reason of the payment or loyalty reversal..\nPossible values:\n* **CustCancel**\n* **Malfunction**\n* **MerchantCancel**\n* **Unable2Compl**",
                "enum": [
                    "CustCancel",
                    "Malfunction",
                    "MerchantCancel",
                    "Unable2Compl"
                ]
            },
            "ReconciliationType": {
                "type": "string",
                "enum": [
                    "AcquirerReconciliation",
                    "AcquirerSynchronisation",
                    "PreviousReconciliation",
                    "SaleReconciliation"
                ]
            },
            "TransactionType": {
                "type": "string",
                "enum": [
                    "Award",
                    "CashAdvance",
                    "CompletedDeffered",
                    "CompletedReservation",
                    "Credit",
                    "Debit",
                    "Declined",
                    "Failed",
                    "FirstReservation",
                    "IssuerInstalment",
                    "OneTimeReservation",
                    "Rebate",
                    "Redemption",
                    "ReverseAward",
                    "ReverseCredit",
                    "ReverseDebit",
                    "ReverseRebate",
                    "ReverseRedemption",
                    "UpdateReservation"
                ]
            },
            "TotalDetails": {
                "type": "array",
                "description": "Indicates the hierarchical structure of the reconciliation result of the Sale to POI reconciliation.\nRequired to present totals per value of element included in this cluster (POI Terminal, Sale Terminal, Cashier, Shift, TotalsGroupID).\nPossible values:\n* **OperatorID**\n* **POIID**\n* **SaleID**\n* **ShiftNumber**\n* **TotalsGroupID**",
                "items": {
                    "type": "string",
                    "enum": [
                        "OperatorID",
                        "POIID",
                        "SaleID",
                        "ShiftNumber",
                        "TotalsGroupID"
                    ]
                }
            },
            "AccountType": {
                "type": "string",
                "description": "Type of cardholder account used for the transaction. Allows a cardholder to select the type of account used for the transaction.\nPossible values:\n* **CardTotals**\n* **Checking**\n* **CreditCard**\n* **Default**\n* **EpurseCard**\n* **Investment**\n* **Savings**\n* **Universal**",
                "enum": [
                    "CardTotals",
                    "Checking",
                    "CreditCard",
                    "Default",
                    "EpurseCard",
                    "Investment",
                    "Savings",
                    "Universal"
                ]
            },
            "MessageCategory": {
                "type": "string",
                "enum": [
                    "Abort",
                    "Admin",
                    "BalanceInquiry",
                    "CardAcquisition",
                    "CardReaderAPDU",
                    "Diagnosis",
                    "Display",
                    "EnableService",
                    "Event",
                    "GetTotals",
                    "Input",
                    "InputUpdate",
                    "Login",
                    "Logout",
                    "Loyalty",
                    "None",
                    "Payment",
                    "Print",
                    "Reconciliation",
                    "Reversal",
                    "StoredValue",
                    "TransactionStatus"
                ]
            },
            "MessageType": {
                "type": "string",
                "enum": [
                    "Notification",
                    "Request",
                    "Response"
                ]
            },
            "MessageClass": {
                "type": "string",
                "enum": [
                    "Device",
                    "Event",
                    "Service"
                ]
            },
            "EventToNotify": {
                "type": "string",
                "description": "Event the POI notifies to the Sale System.\nPossible values:\n* **Abort**\n* **BeginMaintenance**\n* **CardInserted**\n* **CardRemoved**\n* **Completed**\n* **CustomerLanguage**\n* **EndMaintenance**\n* **Initialised**\n* **KeyPressed**\n* **OutOfOrder**\n* **Reject**\n* **SaleAdmin**\n* **SaleWakeUp**\n* **SecurityAlarm**\n* **Shutdown**\n* **StopAssistance**\n* **UseAnotherCardForPreauth**",
                "enum": [
                    "Abort",
                    "BeginMaintenance",
                    "CardInserted",
                    "CardRemoved",
                    "Completed",
                    "CustomerLanguage",
                    "EndMaintenance",
                    "Initialised",
                    "KeyPressed",
                    "OutOfOrder",
                    "Reject",
                    "SaleAdmin",
                    "SaleWakeUp",
                    "SecurityAlarm",
                    "Shutdown",
                    "StopAssistance",
                    "UseAnotherCardForPreauth"
                ]
            },
            "InputCommand": {
                "type": "string",
                "enum": [
                    "DecimalString",
                    "DigitString",
                    "GetAnyKey",
                    "GetConfirmation",
                    "GetFunctionKey",
                    "GetMenuEntry",
                    "Password",
                    "SiteManager",
                    "TextString"
                ]
            },
            "ResponseMode": {
                "type": "string",
                "enum": [
                    "Immediate",
                    "NotRequired",
                    "PrintEnd",
                    "SoundEnd"
                ]
            },
            "SoundFormat": {
                "type": "string",
                "enum": [
                    "MessageRef",
                    "SoundRef",
                    "Text"
                ]
            },
            "SoundAction": {
                "type": "string",
                "enum": [
                    "SetDefaultVolume",
                    "StartSound",
                    "StopSound"
                ]
            },
            "PINFormat": {
                "type": "string",
                "enum": [
                    "ISO0",
                    "ISO1",
                    "ISO2",
                    "ISO3"
                ]
            },
            "PINRequestType": {
                "type": "string",
                "description": "Type of PIN Service.\nPossible values:\n* **PINEnter**\n* **PINVerify**\n* **PINVerifyOnly**",
                "enum": [
                    "PINEnter",
                    "PINVerify",
                    "PINVerifyOnly"
                ]
            },
            "SaleToIssuerData": {
                "type": "object",
                "description": "Sale information intended for the Issuer.\nThe POI System receives this information and sends it to the Acquirer for the Issuer without any change.",
                "properties": {
                    "StatementReference": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Label to print on the bank statement."
                    }
                }
            },
            "TrackData": {
                "type": "object",
                "description": "Magnetic track or magnetic ink characters line.\nISO 7813 - ISO 4909.\nGeneric data structure for a card track, used when the magstripe card reader is located on the Sale Terminal, or for magstripe Card Reader device request. The data structure is also used to store the line at the bottom of a bank check.",
                "properties": {
                    "TrackNumb": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 3,
                        "default": 2,
                        "description": "Card track number."
                    },
                    "TrackFormat": {
                        "$ref": "#/components/schemas/TrackFormat",
                        "description": "Card track format.\nPossible values:\n* **AAMVA**\n* **ISO**"
                    },
                    "TrackValue": {
                        "type": "string",
                        "pattern": "^.{1,104}$",
                        "description": "Card track content."
                    }
                },
                "required": [
                    "TrackValue"
                ]
            },
            "SensitiveCardData": {
                "type": "object",
                "description": "This data structure could be CMS protected (EnvelopedData). In this case the data structure SensitiveCardData is replaced by the data structure ProtectedCardData of type ContentInformationType.\nWhen this data is protected, the exact content is unknown by the Sale System, and might include\nall the information which are required by an external backup POI Server to make a batch payment\ntransaction in case of problem with the POI System.\nSensitive information related to the payment card, entered or read\nby the Sale System.",
                "properties": {
                    "PAN": {
                        "type": "integer",
                        "minimum": 8,
                        "maximum": 28,
                        "description": "Primary Account Number."
                    },
                    "CardSeqNumb": {
                        "type": "integer",
                        "minimum": 2,
                        "maximum": 3,
                        "description": "Card Sequence Number.\nIf EntryMode is File, Keyed, or Manual."
                    },
                    "ExpiryDate": {
                        "type": "integer",
                        "minimum": 4,
                        "maximum": 4,
                        "description": "Date after which the card cannot be used.\nIf EntryMode is File."
                    },
                    "TrackData": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/TrackData"
                        },
                        "description": "Magnetic track or magnetic ink characters line.\nIf EntryMode is MagStripe or RFID ."
                    }
                }
            },
            "PaymentToken": {
                "type": "object",
                "description": "Surrogate of the PAN (Primary Account Number) of the payment card to\n identify the payment mean of the customer. It allows, for a merchant, to identify\n the customer.",
                "properties": {
                    "TokenRequestedType": {
                        "$ref": "#/components/schemas/TokenRequestedType",
                        "description": "Type of token replacing the PAN of a payment card to identify the payment\n mean of the customer. It allows, for a merchant, to use a token for a transaction\n only or for a longer period.\nPossible values:\n* **Customer**\n* **Transaction**"
                    },
                    "TokenValue": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Payment token replacing the PAN of the payment card to identify the payment\n mean of the customer."
                    },
                    "ExpiryDateTime": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Expiry date and time. Limits the validity of a payment token."
                    }
                },
                "required": [
                    "TokenRequestedType",
                    "TokenValue"
                ]
            },
            "CustomerOrder": {
                "type": "object",
                "description": "Customer order attached to a customer, recorded in the POI system.\nAllows the management of customer orders by the POI, for instance in a\nmulti-channel or a click and collect sale transaction.",
                "properties": {
                    "CustomerOrderID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Additional and optional identification of a customer order."
                    },
                    "SaleReferenceID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a Sale global transaction for a sequence of related POI transactions. Identification of a reservation transaction for the sequence of reservation and the completion."
                    },
                    "OpenOrderState": {
                        "type": "boolean",
                        "default": true,
                        "description": "Specifies if a customer order is currently Open. An open customer order\nis an order waiting for further operations."
                    },
                    "StartDate": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Date time of the beginning of an operation."
                    },
                    "EndDate": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Date time of the end of an operation."
                    },
                    "ForecastedAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Depending on the choice of the sale system it could equal the initial amount\n of the order or the global amount of the order. If ForecastedAmount equals\n the initial amount of the order it will allow the system to follow any additional\n payment. In case of equality with the global amount of the order, the system\nwill then be able to follow remaining amounts."
                    },
                    "CurrentAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Total amount of all completed transactions of a customer order."
                    },
                    "Currency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount."
                    },
                    "AccessedBy": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of an entity accessing data to perform an operation. Allow\nthe synchronisation of customer order processing, when several parts of the Sale System\naccess a customer order at the same time. The Sale entity active on the customer order is identified\nby this data."
                    },
                    "AdditionalInformation": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Unqualified information."
                    }
                },
                "required": [
                    "SaleReferenceID",
                    "StartDate",
                    "ForecastedAmount",
                    "CurrentAmount"
                ]
            },
            "AllowedProduct": {
                "type": "object",
                "description": "Product that is payable by the payment card.\nProduct codes that are payable by the payment card.",
                "properties": {
                    "ProductCode": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "description": "Product code of item purchased with the transaction."
                    },
                    "EanUpc": {
                        "type": "integer",
                        "description": "Standard product code of item purchased with the transaction."
                    },
                    "ProductLabel": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Product name of an item purchased with the transaction."
                    },
                    "AdditionalProductInfo": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Additionl information related to the line item."
                    }
                },
                "required": [
                    "ProductCode"
                ]
            },
            "CardData": {
                "type": "object",
                "description": "Information related to the payment card used for the transaction.\nAllows acquisition of the card data by the Sale System before the Payment, CardAcquisition, or BalanceInquiry request to the POI. It can also be sent in the CardAcquisition response, to be processed by the Sale System.",
                "properties": {
                    "PaymentBrand": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Type of payment card.\nIf card PAN is readable.\nIndicates the card used to pay in the PaymentResponse. Sent in the CardAcquisitionResponse, to leave the Cashier to choose between several applications in a smartcard, or several brand in a co-branded card. In this case, the CardAcquisitionRequest.ForceCustomerSelectionFlag must contain the value False. Brands are part of the POI and Sale Systems configurations."
                    },
                    "MaskedPan": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Masked Primary Account Number\nPart of the PAN is replaced by a string of * characters, to identify a customer account or relationship. Presence of this data element, which replace the PAN when SensitiveCardData is protected and replaced by ProtectedCardData. Alternatively the MaskedPAN can be used as a token to identify a customer."
                    },
                    "PaymentAccountRef": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Reference of the PAN, which identifies the PAN or the card uniquely, named also PAR (Payment Account Reference). This reference may be defined by the card issuer or by a token service provider under the control of the card issuer, and cannot be used for a payment transaction."
                    },
                    "EntryMode": {
                        "$ref": "#/components/schemas/EntryMode",
                        "description": "Entry mode of the payment instrument information. In the Payment, Loyalty or StoredValue Request messages, it informs the POI System the entry mode of the payment instrument information when read by the Sale Terminal. In the Payment, Loyalty or StoredValue Response messages, it informs the Sale System the entry mode of the payment instrument.\nPossible values:\n* **Contactless**\n* **File**\n* **ICC**\n* **Keyed**\n* **MagStripe**\n* **Manual**\n* **Mobile**\n* **RFID**\n* **Scanned**\n* **SynchronousICC**\n* **Tapped**"
                    },
                    "CardCountryCode": {
                        "type": "integer",
                        "minimum": 3,
                        "maximum": 3,
                        "description": "Country Code attached to the card (3 numerics).\nIf available in the card."
                    },
                    "ProtectedCardData": {
                        "type": "string",
                        "description": "Sensitive information related to the payment card, protected by CMS.\nSensitiveCardData protected by CMS EnvelopedData."
                    },
                    "SensitiveCardData": {
                        "$ref": "#/components/schemas/SensitiveCardData",
                        "description": "Sensitive information related to the payment card, entered or read by the Sale System.\nIf structure non empty and unprotected."
                    },
                    "AllowedProductCode": {
                        "type": "array",
                        "items": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 20,
                            "description": "Product codes that are payable by the payment card.\nIf not all the products are accepted for the payment card proposed by the Customer. In this case, Result is failure, ErrorCondition is Payment Restriction.\nFor One Time Reservation, the POI can send product codes payable by the payment, even if the POI did not send SaleItem in the request. If at least one product sent\nin the request is accepted, the Result is Success.\nProduct codes that are payable by the payment card. If all the products are not accepted for the payment card proposed by the Customer. In this case, Result is failure and ErrorCondition is Payment Restriction. For One Time Reservation, the POI can send product codes payable by the payment, even if the POI did not send SaleItem in the request. If at least one product sent in the request is accepted, the Result is Success."
                        },
                        "description": "Product codes that are payable by the payment card.\nIf not all the products are accepted for the payment card proposed by the Customer. In this case, Result is failure, ErrorCondition is Payment Restriction.\nFor One Time Reservation, the POI can send product codes payable by the payment, even if the POI did not send SaleItem in the request. If at least one product sent\nin the request is accepted, the Result is Success.\nProduct codes that are payable by the payment card. If all the products are not accepted for the payment card proposed by the Customer. In this case, Result is failure and ErrorCondition is Payment Restriction. For One Time Reservation, the POI can send product codes payable by the payment, even if the POI did not send SaleItem in the request. If at least one product sent in the request is accepted, the Result is Success."
                    },
                    "AllowedProduct": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AllowedProduct"
                        },
                        "description": "Product that is payable by the payment card."
                    },
                    "PaymentToken": {
                        "$ref": "#/components/schemas/PaymentToken",
                        "description": "Surrogate of the PAN (Primary Account Number) of the payment card to identify the payment mean of the customer. It allows, for a merchant, to identify the customer.\nRestriction of product payable by a card."
                    },
                    "CustomerOrder": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CustomerOrder"
                        },
                        "description": "Customer order attached to a customer, recorded in the POI system. Allows the management of customer orders by the POI, for instance in a multi-channel or a click and collect sale transaction."
                    }
                }
            },
            "TransactionIDType": {
                "type": "object",
                "description": "Identification of a transaction for the Sale System or the POI System.",
                "properties": {
                    "TransactionID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Unique identification of a transaction to identify the transaction on\nthe Sale System (e.g. ticket number), or the POI System."
                    },
                    "TimeStamp": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Date and time of a transaction for the Sale System, the POI System or the Acquirer.\n Ensures the uniqueness of a transaction and indicates the time when the event\n occurs in the EventNotification message."
                    }
                },
                "required": [
                    "TransactionID",
                    "TimeStamp"
                ]
            },
            "SaleTerminalData": {
                "type": "object",
                "description": "Information related to the software and hardware features of the Sale Terminal.\nSent in the Login Request if a Sale Terminal is involved in the login. In other messages, sent when a logical device is out of order (SaleCapabilities) or when other data have changed or were missing in the Login.",
                "properties": {
                    "TotalsGroupID": {
                        "type": "string",
                        "pattern": "^.{1,16}$",
                        "description": "Identification of a group of transactions on a POI Terminal, having the same Sale features.\nCould be used to group POI for reconciliation or other purpose defined by the Sale System. The default value is assigned by the Login Request."
                    }
                }
            },
            "SaleData": {
                "type": "object",
                "description": "Data associated with the Sale System, with a particular value during the processing of the payment by the POI, including the cards acquisition.",
                "properties": {
                    "OperatorID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the Cashier or Operator."
                    },
                    "OperatorLanguage": {
                        "type": "string",
                        "pattern": "^[a-z]{2,2}$",
                        "description": "Language of the Cashier or Operator.\nIf different from the Login."
                    },
                    "ShiftNumber": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Shift number.\nIf different from the Login, see Login SaleData."
                    },
                    "SaleTransactionID": {
                        "$ref": "#/components/schemas/TransactionIDType",
                        "description": "Identification of a Sale transaction."
                    },
                    "SaleReferenceID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a Sale global transaction for a sequence of related POI transactions.\nIf payment reservation."
                    },
                    "SaleTerminalData": {
                        "$ref": "#/components/schemas/SaleTerminalData",
                        "description": "Information related to the software and hardware features of the Sale Terminal.\nIf content is not empty."
                    },
                    "TokenRequestedType": {
                        "$ref": "#/components/schemas/TokenRequestedType",
                        "description": "Type of token replacing the PAN of a payment card to identify the payment\n mean of the customer. It allows, for a merchant, to use a token for a transaction\n only or for a longer period.\nPossible values:\n* **Customer**\n* **Transaction**"
                    },
                    "CustomerOrderID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Additional and optional identification of a customer order."
                    },
                    "CustomerOrderReq": {
                        "$ref": "#/components/schemas/CustomerOrderReq",
                        "description": "List of customer order open, closed or both to be sent in the response messages.\nPossible values:\n* **Both**\n* **Closed**\n* **Open**"
                    },
                    "SaleToPOIData": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Sale information intended for the POI.\nStored with the transaction."
                    },
                    "SaleToAcquirerData": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Sale information intended for the Acquirer.\nSend to the Acquirer if present."
                    },
                    "SaleToIssuerData": {
                        "$ref": "#/components/schemas/SaleToIssuerData",
                        "description": "Sale information intended for the Issuer.\nSend to the Acquirer if present."
                    }
                },
                "required": [
                    "SaleTransactionID"
                ]
            },
            "POIData": {
                "type": "object",
                "description": "Data related to the POI System.\nIn the Message Response, identification of the POI transaction.",
                "properties": {
                    "POITransactionID": {
                        "$ref": "#/components/schemas/TransactionIDType",
                        "description": "Unique identification of a POI transaction for a POI."
                    },
                    "POIReconciliationID": {
                        "type": "integer",
                        "description": "Identification of the reconciliation period between Sale and POI.\nIf Result is Success."
                    }
                },
                "required": [
                    "POITransactionID"
                ]
            },
            "SaleSoftware": {
                "type": "object",
                "description": "Information related to the software of the Sale System which manages the NEXO Sale to POI protocol.",
                "properties": {
                    "ManufacturerID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the Manufacturer."
                    },
                    "ApplicationName": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Name of the software product."
                    },
                    "SoftwareVersion": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Version of the software product."
                    },
                    "CertificationCode": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Certification code of the software which manages the Sale to POI protocol."
                    }
                },
                "required": [
                    "ManufacturerID",
                    "ApplicationName",
                    "SoftwareVersion",
                    "CertificationCode"
                ]
            },
            "CoinsOrBills": {
                "type": "object",
                "description": "Indicates the remaining number of coins or bills of a given value in a cash handling device. When the cash handling machine does not have any more coins or bills of a certain value, the number must be equal to 0.\nNumber of coins or bills of a given value.",
                "properties": {
                    "UnitValue": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Value of a coin or bill."
                    },
                    "Number": {
                        "type": "integer",
                        "description": "Number of coins or bills of a certain value."
                    }
                },
                "required": [
                    "UnitValue",
                    "Number"
                ]
            },
            "CashHandlingDevice": {
                "type": "object",
                "description": "Indicate the status and the remaining coins and bill in a cash handling device.\nStatus of cash handling device.",
                "properties": {
                    "CashHandlingOKFlag": {
                        "type": "boolean",
                        "description": "Indicates if the cash handling device is working and usable."
                    },
                    "Currency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount."
                    },
                    "CoinsOrBills": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CoinsOrBills"
                        },
                        "description": "Number of coins or bills of a given value."
                    }
                },
                "required": [
                    "CashHandlingOKFlag",
                    "Currency",
                    "CoinsOrBills"
                ]
            },
            "POIStatus": {
                "type": "object",
                "description": "Indicate the availability of the POI Terminal components. The data element is absent if the component is not part of the POI Terminal.\nState of a POI Terminal.",
                "properties": {
                    "GlobalStatus": {
                        "$ref": "#/components/schemas/GlobalStatus",
                        "description": "Global status of a POI Server or POI Terminal.\nPossible values:\n* **Busy**\n* **Maintenance**\n* **OK**\n* **Unreachable**"
                    },
                    "SecurityOKFlag": {
                        "type": "boolean",
                        "description": "Indicates if the security module of the POI is working and usable.\nIf security module present."
                    },
                    "PEDOKFlag": {
                        "type": "boolean",
                        "description": "Indicates if the PED is working and usable.\nIf PED present."
                    },
                    "CardReaderOKFlag": {
                        "type": "boolean",
                        "description": "Indicates if the card readers are working and usable.\nIf card reader device present."
                    },
                    "PrinterStatus": {
                        "$ref": "#/components/schemas/PrinterStatus",
                        "description": "Possible values:\n* **NoPaper**\n* **OK**\n* **OutOfOrder**\n* **PaperJam**\n* **PaperLow**"
                    },
                    "CommunicationOKFlag": {
                        "type": "boolean",
                        "description": "Indicates if the communication infrastructure is working and usable.\nIf communication infrastructure present."
                    },
                    "CashHandlingDevice": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CashHandlingDevice"
                        },
                        "description": "Status of cash handling device.\nIf cash handling devices present."
                    },
                    "FraudPreventionFlag": {
                        "type": "boolean",
                        "description": "Indicates a suspicion of fraud by the POI System.\nCould be set to True by the POI system to notify to the Sale system and the Cashier that a suspicion of fraud had been detected on the POI as an unexpected reboot of the POI."
                    }
                },
                "required": [
                    "GlobalStatus"
                ]
            },
            "Response": {
                "type": "object",
                "description": "Result of a message request processing.\nIf Result is Success, `ErrorCondition` is absent or not used in the processing of the message. In the other cases, the `ErrorCondition` has to be present and can refine the processing of the message response. `AdditionalResponse` gives more information about the success or the failure of the message request processing, for logging without real time involvements.",
                "properties": {
                    "Result": {
                        "$ref": "#/components/schemas/Result",
                        "description": "Result of the processing of the message.\nPossible values:\n* **Failure**\n* **Partial**\n* **Success**"
                    },
                    "ErrorCondition": {
                        "$ref": "#/components/schemas/ErrorCondition",
                        "description": "Condition that has produced an error on the processing of a message request.\nReturned if Result is not Success.\nPossible values:\n* **Aborted**\n* **Busy**\n* **Cancel**\n* **DeviceOut**\n* **InProgress**\n* **InsertedCard**\n* **InvalidCard**\n* **LoggedOut**\n* **MessageFormat**\n* **NotAllowed**\n* **NotFound**\n* **PaymentRestriction**\n* **Refusal**\n* **UnavailableDevice**\n* **UnavailableService**\n* **UnreachableHost**\n* **WrongPIN**"
                    },
                    "AdditionalResponse": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Additional information related to processing status of a message request.\nIf present, the POI logs it for further examination."
                    }
                },
                "required": [
                    "Result"
                ]
            },
            "POISoftware": {
                "type": "object",
                "description": "Information related to the software of the POI System which manages the Sale to POI protocol. In a session allows identifying the product features of a POI System.",
                "properties": {
                    "ManufacturerID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the Manufacturer. Sent in the Login Request (Response) to identify the Sale System (POI System) manufacturer during the session."
                    },
                    "ApplicationName": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Name of the software product. Sent in the Login Request (Response) to identify the Sale System (POI System) product name during the session."
                    },
                    "SoftwareVersion": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Version of the software product. Sent in the Login Request (Response) to identify the version of the Sale System (POI System) product software during the session."
                    },
                    "CertificationCode": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Certification code of the software which manages the Sale to POI protocol. Sent in the Login Request (Response) to get the certification code of the Sale System (POI System) product software. This code can be a software checksum or any number associated with the software."
                    }
                },
                "required": [
                    "ManufacturerID",
                    "ApplicationName",
                    "SoftwareVersion",
                    "CertificationCode"
                ]
            },
            "POIProfile": {
                "type": "object",
                "properties": {
                    "GenericProfile": {
                        "$ref": "#/components/schemas/GenericProfile",
                        "description": "Possible values:\n* **Basic**\n* **Extended**\n* **Standard**"
                    },
                    "ServiceProfiles": {
                        "$ref": "#/components/schemas/ServiceProfiles",
                        "description": "Possible values:\n* **Batch**\n* **CardReader**\n* **Communication**\n* **Loyalty**\n* **OneTimeRes**\n* **PIN**\n* **Reservation**\n* **Sound**\n* **StoredValue**\n* **Synchro**"
                    }
                }
            },
            "POITerminalData": {
                "type": "object",
                "description": "Information related to the software and hardware features of the POI Terminal. In a session, it allows identifying the features of the POI Terminal attached to a Sale Terminal per Login Request message.",
                "properties": {
                    "TerminalEnvironment": {
                        "$ref": "#/components/schemas/TerminalEnvironment",
                        "description": "Environment of the Terminal. Sent in the Login Request (Response) to identify the environment of the Sale System (POI System) during the session. In other message, when the data has changed since the Login.\nPossible values:\n* **Attended**\n* **SemiAttended**\n* **Unattended**"
                    },
                    "POICapabilities": {
                        "$ref": "#/components/schemas/POICapabilities",
                        "description": "Hardware capabilities of the POI Terminal. They are the POI capabilities the POI System allows the Sale System to use. These POI capabilities include the logical devices enumerated in the devices data element (most of these devices could be on the POI part), plus card reader devices. Sent in the Login Response to identify the devices of the POI Terminal which can be used by the Sale System during the session.\nPossible values:\n* **CashHandling**\n* **CashierDisplay**\n* **CashierError**\n* **CashierInput**\n* **CustomerDisplay**\n* **CustomerError**\n* **CustomerInput**\n* **EMVContactless**\n* **ICC**\n* **MagStripe**\n* **PrinterDocument**\n* **PrinterReceipt**\n* **PrinterVoucher**"
                    },
                    "POIProfile": {
                        "$ref": "#/components/schemas/POIProfile",
                        "description": "Functional profile of the POI Terminal. Sent in the Login Response to identify the profiles the POI Terminal support during the session."
                    },
                    "POISerialNumber": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Serial number of a POI Terminal. Sent in the Login Request by the Sale System to inform the POI System about the last known POI Terminal hardware."
                    }
                },
                "required": [
                    "TerminalEnvironment",
                    "POICapabilities",
                    "POISerialNumber"
                ]
            },
            "POISystemData": {
                "type": "object",
                "properties": {
                    "DateTime": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Date and Time. In the response, the POI System gives its date and time to the Sale System."
                    },
                    "POISoftware": {
                        "$ref": "#/components/schemas/POISoftware"
                    },
                    "POITerminalData": {
                        "$ref": "#/components/schemas/POITerminalData"
                    },
                    "POIStatus": {
                        "$ref": "#/components/schemas/POIStatus"
                    }
                },
                "required": [
                    "DateTime",
                    "POISoftware"
                ]
            },
            "OutputText": {
                "type": "object",
                "description": "Content of text message to display or print.\nIt conveys information related to the content of the text message and its format. All the data elements related to the format of the text to display or print are parameters valid for the whole text content.",
                "properties": {
                    "Text": {
                        "type": "string",
                        "description": "Content of text message to display, print or play."
                    },
                    "CharacterSet": {
                        "type": "integer",
                        "description": "Character height of the text string to display or print. Absence of this data element means the characters have normal height."
                    },
                    "Font": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Name of the font. Used to change character font of the output, as agreed between the POI and Sale Systems."
                    },
                    "StartRow": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 500,
                        "description": "Row where the text string has to be displayed or printed."
                    },
                    "StartColumn": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 500,
                        "description": "Column where the text string has to be displayed or printed."
                    },
                    "Color": {
                        "$ref": "#/components/schemas/Color",
                        "description": "Color of the text string to display or print.\nPossible values:\n* **Black**\n* **Blue**\n* **Cyan**\n* **Green**\n* **Magenta**\n* **Red**\n* **White**\n* **Yellow**"
                    },
                    "CharacterWidth": {
                        "$ref": "#/components/schemas/CharacterWidth",
                        "description": "Character width of the text string to display or print. Absence of this data element means the characters have normal width.\nPossible values:\n* **DoubleWidth**\n* **SingleWidth**"
                    },
                    "CharacterHeight": {
                        "$ref": "#/components/schemas/CharacterHeight",
                        "description": "Character height of the text string to display or print. Absence of this data element means the characters have normal height.\nPossible values:\n* **DoubleHeight**\n* **HalfHeight**\n* **SingleHeight**"
                    },
                    "CharacterStyle": {
                        "$ref": "#/components/schemas/CharacterStyle",
                        "description": "Typographic style of the sequence of characters to display or print. Absence of this data element means the characters have normal style.\nPossible values:\n* **Bold**\n* **Italic**\n* **Normal**\n* **Underline**"
                    },
                    "Alignment": {
                        "$ref": "#/components/schemas/Alignment",
                        "description": "Alignment of the text string on the display line or print line. Absence of this data element means the characters have normal alignment.\nPossible values:\n* **Centred**\n* **Justified**\n* **Left**\n* **Right**"
                    },
                    "EndOfLineFlag": {
                        "type": "boolean",
                        "default": true,
                        "description": "Indicates if the text is at the end of a line. Allows the display or the print of a new line and a carry-over return characters after the formatted text."
                    }
                },
                "required": [
                    "Text"
                ]
            },
            "PredefinedContent": {
                "type": "object",
                "description": "Reference of a predefined message to display or print.\nIt conveys information related to the predefined message.",
                "properties": {
                    "ReferenceID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a predefined message to display or print."
                    },
                    "Language": {
                        "type": "string",
                        "pattern": "^[a-z]{2,2}$",
                        "description": "Identification of a language."
                    }
                },
                "required": [
                    "ReferenceID"
                ]
            },
            "OutputBarcode": {
                "type": "object",
                "properties": {
                    "BarcodeType": {
                        "$ref": "#/components/schemas/BarcodeType",
                        "description": "Type of Barcode coding. Qualification of the barcode value to display or print.\nPossible values:\n* **Code128**\n* **Code25**\n* **EAN13**\n* **EAN8**\n* **PDF417**\n* **QRCode**\n* **UPCA**"
                    },
                    "BarcodeValue": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Value with a Barcode coding. The barcode value to display or print."
                    }
                },
                "required": [
                    "BarcodeValue"
                ]
            },
            "OutputContent": {
                "type": "object",
                "description": "Content to display or print.\nThis is a sequence of elements if they have different formats.",
                "properties": {
                    "OutputFormat": {
                        "$ref": "#/components/schemas/OutputFormat",
                        "description": "Format of the content to display or print.\nPossible values:\n* **BarCode**\n* **MessageRef**\n* **Text**\n* **XHTML**"
                    },
                    "PredefinedContent": {
                        "$ref": "#/components/schemas/PredefinedContent",
                        "description": "Reference of a predefined message to display or print.\nMandatory, if `OutputFormat` is MessageRef, not allowed otherwise."
                    },
                    "OutputText": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/OutputText"
                        },
                        "description": "Content of text message to display or print.\nMandatory, if `OutputFormat` is Text, not allowed otherwise. One instance of `OutputText` per shared format."
                    },
                    "OutputXHTML": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.{0,262144}$",
                        "description": "XHTML document body containing the message to display or print.\nMandatory if `OutputFormat` is XHTML, not allowed otherwise."
                    },
                    "OutputBarcode": {
                        "$ref": "#/components/schemas/OutputBarcode",
                        "description": "Barcode content to display or print.\nMandatory if `OutputFormat` is Barcode, not allowed otherwise."
                    }
                },
                "required": [
                    "OutputFormat"
                ]
            },
            "MenuEntry": {
                "type": "object",
                "description": "An entry of the menu to present to the Cashier.\nIt conveys message text and parameters of the menu entry. This output data could be only provided for an input command, in order to choose an entry of the menu.",
                "properties": {
                    "MenuEntryTag": {
                        "$ref": "#/components/schemas/MenuEntryTag",
                        "description": "Characteristics related to the selection of a menu entry.\nPossible values:\n* **NonSelectable**\n* **NonSelectableSubMenu**\n* **Selectable**\n* **SubMenu**"
                    },
                    "DefaultSelectedFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Selection of a menu entry to be displayed. In Input request message, it allows selection of one or several menu entries before any user action."
                    },
                    "OutputFormat": {
                        "$ref": "#/components/schemas/OutputFormat",
                        "description": "Possible values:\n* **BarCode**\n* **MessageRef**\n* **Text**\n* **XHTML**"
                    },
                    "PredefinedContent": {
                        "$ref": "#/components/schemas/PredefinedContent"
                    },
                    "OutputText": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/OutputText"
                        },
                        "description": "Content of text message to display or print. It conveys Information related to the content of the text message and its format. All the data elements related to the format of the text to display or print are parameters valid for the whole Text content."
                    },
                    "OutputXHTML": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.+$",
                        "description": "XHTML document body containing the message to display or print."
                    }
                },
                "required": [
                    "OutputFormat"
                ]
            },
            "DisplayOutput": {
                "type": "object",
                "description": "Information to display and how to process it.\nContains a complete display operation for a Display or an Input Device type. For the Input Devices, Diagnosis and `EnableService`, `ResponseRequiredFlag`, and `MinimumDisplayTime` shall be absent.",
                "properties": {
                    "ResponseRequiredFlag": {
                        "type": "boolean",
                        "default": true,
                        "description": "Indicates if the message response is required."
                    },
                    "MinimumDisplayTime": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 999,
                        "default": 0,
                        "description": "Number of seconds the message has to be displayed."
                    },
                    "Device": {
                        "$ref": "#/components/schemas/Device",
                        "description": "Logical device located on a Sale Terminal or a POI Terminal, in terms of class of information to output (display, print, or store), or input (keyboard) for the Cashier or the Customer.\nPossible values:\n* **CashierDisplay**\n* **CashierInput**\n* **CustomerDisplay**\n* **CustomerInput**"
                    },
                    "InfoQualify": {
                        "$ref": "#/components/schemas/InfoQualify",
                        "description": "Qualification of the information to sent to an output logical device, to display or print to the Cashier or the Customer. Allows the manager of the device, Sale or POI Terminal, to send the information to a particular physical device or to present the information accordingly.\nPossible values:\n* **CustomerAssistance**\n* **Display**\n* **Document**\n* **Error**\n* **Input**\n* **POIReplication**\n* **Receipt**\n* **Sound**\n* **Status**\n* **Voucher**"
                    },
                    "OutputContent": {
                        "$ref": "#/components/schemas/OutputContent",
                        "description": "Content to display or print."
                    },
                    "MenuEntry": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/MenuEntry"
                        },
                        "description": "An entry of the menu to present to the Cashier. It conveys the message text and parameters of the menu entry. This output data could be only provided for an input command, in order to choose an entryof the menu."
                    },
                    "OutputSignature": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.+$",
                        "description": "Vendor-specific signature of the text message to display or print.\nIf protection has to be provided to the vendor on the text to display or print."
                    }
                },
                "required": [
                    "Device",
                    "InfoQualify",
                    "OutputContent"
                ]
            },
            "SaleItem": {
                "type": "object",
                "description": "Sale items of a transaction.\nIn loyalty or value added payment card transaction, the items of the sale that are processed in the transaction.",
                "properties": {
                    "ItemID": {
                        "type": "integer",
                        "description": "Item identification inside a transaction (0 to n)."
                    },
                    "ProductCode": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "description": "Product code of item purchased with the transaction."
                    },
                    "EanUpc": {
                        "type": "integer",
                        "description": "Standard product code of item purchased with the transaction.\nIf data sent, POI has to store it and send it if the host protocol allows it."
                    },
                    "UnitOfMeasure": {
                        "$ref": "#/components/schemas/UnitOfMeasure",
                        "description": "Unit of measure of a quantity.\nIf Quantity is present.\nPossible values:\n* **Case**\n* **Centilitre**\n* **Centimetre**\n* **Foot**\n* **Gram**\n* **Inch**\n* **Kilogram**\n* **Kilometre**\n* **Litre**\n* **Meter**\n* **Mile**\n* **Other**\n* **Ounce**\n* **Pint**\n* **Pound**\n* **Quart**\n* **UKGallon**\n* **USGallon**\n* **Yard**"
                    },
                    "Quantity": {
                        "type": "string",
                        "description": "Product quantity.\nIf data is sent, POI has to store it and send it if the host protocol allows it."
                    },
                    "UnitPrice": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Price per unit of product.\nIf Quantity is present."
                    },
                    "ItemAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Total amount of the item line."
                    },
                    "TaxCode": {
                        "type": "integer",
                        "description": "Type of taxes associated with the line item.\nIf data is sent, POI has to store it and send it if the host protocol allows it."
                    },
                    "SaleChannel": {
                        "type": "integer",
                        "description": "Commercial or distribution channel associated with the line item.\nIf data sent, POI has to store it and send it if the host protocol allows it."
                    },
                    "ProductLabel": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Product name of an item purchased with the transaction."
                    },
                    "AdditionalProductInfo": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Additional information related to the line item.\nIf data sent, POI has to store it and send it if the host protocol allows it."
                    }
                },
                "required": [
                    "ItemID",
                    "ProductCode",
                    "ItemAmount"
                ]
            },
            "LoyaltyAmount": {
                "type": "object",
                "description": "Amount of a loyalty account.\nAn awarded amount or an amount to redeem to the loyalty account might be sent in the Payment request message.",
                "properties": {
                    "LoyaltyUnit": {
                        "$ref": "#/components/schemas/LoyaltyUnit",
                        "description": "Unit of a loyalty amount. The amount could be expressed in point or in a monetary value and a currency.\nPossible values:\n* **Monetary**\n* **Point**"
                    },
                    "Currency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount."
                    },
                    "AmountValue": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Value of an amount."
                    }
                },
                "required": [
                    "AmountValue"
                ]
            },
            "LoyaltyAccountID": {
                "type": "object",
                "description": "Identification of a Loyalty account.\nIn the Payment or the Loyalty Request message, it allows to identify the loyalty account by the Sale Terminal instead of the POI Terminal (e.g. because the account identification is a bar-code read by the Cashier on a scanner device).",
                "properties": {
                    "EntryMode": {
                        "$ref": "#/components/schemas/EntryMode",
                        "description": "Entry mode of the payment instrument information. In the Payment, Loyalty or StoredValue Request messages, it informs the POI System the entry mode of the payment instrument information when read by the Sale Terminal. In the Payment, Loyalty or StoredValue Response messages, it informs the Sale System the entry mode of the payment instrument.\nPossible values:\n* **Contactless**\n* **File**\n* **ICC**\n* **Keyed**\n* **MagStripe**\n* **Manual**\n* **Mobile**\n* **RFID**\n* **Scanned**\n* **SynchronousICC**\n* **Tapped**"
                    },
                    "IdentificationType": {
                        "$ref": "#/components/schemas/IdentificationType",
                        "description": "Type of account identification. In a request message, it informs the POI System the type of the account or card identification, when provided by the Sale Terminal. (e.g. because the card information is a barcode read by the Cashier on a scanner device). In a response message, it informs the Sale System the type of the account or card identification.\nPossible values:\n* **AccountNumber**\n* **BarCode**\n* **ISOTrack2**\n* **PAN**\n* **PhoneNumber**"
                    },
                    "IdentificationSupport": {
                        "$ref": "#/components/schemas/IdentificationSupport",
                        "description": "Support of the loyalty account identification. Allows knowing where and how you have found the loyalty account identification.\nPossible values:\n* **HybridCard**\n* **LinkedCard**\n* **LoyaltyCard**\n* **NoCard**"
                    },
                    "LoyaltyID": {
                        "type": "string",
                        "description": "Loyalty account identification conforming to the IdentificationType."
                    }
                },
                "required": [
                    "EntryMode",
                    "IdentificationType",
                    "LoyaltyID"
                ]
            },
            "LoyaltyData": {
                "type": "object",
                "description": "In the Payment, Loyalty or Balance Inquiry Request message, it allows the Sale Terminal to send the identification of the loyalty account or an awarded amount or an amount to redeem to the loyalty account.\nData related to a Loyalty program or account.",
                "properties": {
                    "CardAcquisitionReference": {
                        "$ref": "#/components/schemas/TransactionIDType",
                        "description": "Reference to the last CardAcquisition, to use the same card.\nIf the loyalty account ID comes from a previous CardAcquisition."
                    },
                    "LoyaltyAccountID": {
                        "$ref": "#/components/schemas/LoyaltyAccountID",
                        "description": "Identification of a Loyalty account.\nIf loyalty identification of the loyalty account is realised by the Sale System."
                    },
                    "LoyaltyAmount": {
                        "$ref": "#/components/schemas/LoyaltyAmount",
                        "description": "Amount of a loyalty account.\nWhen the Sale System want to award the Loyalty account (not for BalanceInquiryRequest)."
                    }
                }
            },
            "CheckData": {
                "type": "object",
                "description": "Information related to the paper check used for the transaction.\nAllows the check information to be provided by the Sale System before requesting the payment, or stored by the Sale System after processing of the payment.",
                "properties": {
                    "BankID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the bank.\nMandatory if TrackData absent."
                    },
                    "AccountNumber": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the customer account.\nMandatory if TrackData absent."
                    },
                    "CheckNumber": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the bank check.\nMandatory if TrackData absent."
                    },
                    "TrackData": {
                        "$ref": "#/components/schemas/TrackData",
                        "description": "Magnetic track or magnetic ink characters line.\nMandatory if CheckNumber absent."
                    },
                    "CheckCardNumber": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Check guarantee card number.\nIf provided by the customer."
                    },
                    "TypeCode": {
                        "$ref": "#/components/schemas/TypeCode",
                        "description": "Type of bank check.\nPossible values:\n* **Company**\n* **Personal**"
                    },
                    "Country": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Country of the bank check.\nAbsent if country of the Sale system."
                    }
                }
            },
            "SensitiveMobileData": {
                "type": "object",
                "properties": {
                    "MSISDN": {
                        "type": "integer",
                        "description": "Mobile Subscriber Integrated Service Digital Network (i.e. mobile phone number of the SIM card). Country, National Destination Code, and Subscriber Number."
                    },
                    "IMSI": {
                        "type": "integer",
                        "description": "International Mobile Subscriber Identity. Unique number associated with the mobile phone user, containing the Mobile Country Code (MCC), the Mobile Network Code (MNC), and the Mobile Identification Number (MSIN)"
                    },
                    "IMEI": {
                        "type": "integer",
                        "description": "International Mobile Equipment Identity. Unique number associated with the mobile phone device."
                    }
                },
                "required": [
                    "MSISDN"
                ]
            },
            "UTMCoordinates": {
                "type": "object",
                "properties": {
                    "UTMZone": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "UTM grid zone combination of the longitude zone (1 to 60) and the latitude band (C to X, excluding I and O)."
                    },
                    "UTMEastward": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "X-coordinate of the Universal Transverse Mercator coordinate system."
                    },
                    "UTMNorthward": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Y-coordinate of the Universal Transverse Mercator coordinate system."
                    }
                },
                "required": [
                    "UTMZone",
                    "UTMEastward",
                    "UTMNorthward"
                ]
            },
            "GeographicCoordinates": {
                "type": "object",
                "properties": {
                    "Latitude": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Angular distance of a location on the earth south or north of the equator."
                    },
                    "Longitude": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Angular measurement of the distance of a location on the earth east or west of the Greenwich observatory."
                    }
                },
                "required": [
                    "Latitude",
                    "Longitude"
                ]
            },
            "Geolocation": {
                "type": "object",
                "properties": {
                    "GeographicCoordinates": {
                        "$ref": "#/components/schemas/GeographicCoordinates"
                    },
                    "UTMCoordinates": {
                        "$ref": "#/components/schemas/UTMCoordinates"
                    }
                }
            },
            "MobileData": {
                "type": "object",
                "description": "Mobile phone is used as a payment instrument for the transaction.\nInformation related to the mobile for the payment transaction.",
                "properties": {
                    "MobileCountryCode": {
                        "type": "integer",
                        "minimum": 3,
                        "maximum": 3,
                        "description": "Identifies the country of a mobile phone operator.\nIf data available."
                    },
                    "MobileNetworkCode": {
                        "type": "integer",
                        "minimum": 2,
                        "maximum": 3,
                        "description": "Identifies the mobile phone operator inside a country.\nIf data available."
                    },
                    "MaskedMSISDN": {
                        "type": "integer",
                        "description": "Masked Mobile Subscriber Integrated Service Digital Network.\nIf data available."
                    },
                    "Geolocation": {
                        "$ref": "#/components/schemas/Geolocation",
                        "description": "Geographic location specified by geographic or UTM coordinates.\nIf data available."
                    },
                    "ProtectedMobileData": {
                        "type": "string",
                        "description": "Sensitive information related to the mobile phone, protected by CMS.\nSensitiveMobileData."
                    },
                    "SensitiveMobileData": {
                        "$ref": "#/components/schemas/SensitiveMobileData",
                        "description": "Sensitive information related to the mobile phone.\nIf unprotected mobile data."
                    }
                }
            },
            "Instalment": {
                "type": "object",
                "properties": {
                    "InstalmentType": {
                        "$ref": "#/components/schemas/InstalmentType",
                        "description": "Type of instalment transaction. For requesting an instalment payment transaction.\nPossible values:\n* **DeferredInstalments**\n* **EqualInstalments**\n* **InequalInstalments**"
                    },
                    "SequenceNumber": {
                        "type": "integer",
                        "description": "Sequence number of the instalment. For an instalment payment transaction, number of the payment, from 1 to TotalNbOfPayments."
                    },
                    "PlanID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of an instalment plan."
                    },
                    "Period": {
                        "type": "integer",
                        "description": "Period of time with defined unit of time. A period between 2 payment instalments."
                    },
                    "PeriodUnit": {
                        "$ref": "#/components/schemas/PeriodUnit",
                        "description": "Type of instalment transaction.\nPossible values:\n* **Annual**\n* **Daily**\n* **Monthly**\n* **Weekly**"
                    },
                    "FirstPaymentDate": {
                        "type": "string",
                        "format": "date",
                        "description": "First date of a payment. For instalment, the date of the first payments, if not immediate."
                    },
                    "TotalNbOfPayments": {
                        "type": "integer",
                        "description": "Total number of payments. For instalment, the number of payments, including the first one."
                    },
                    "CumulativeAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Sum of a collection of amounts. Total amount of the payment instalments."
                    },
                    "FirstAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "First amount of the payment instalments."
                    },
                    "Charges": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Charges related to a transaction. Charge related to the payment instalments."
                    }
                }
            },
            "StoredValueAccountID": {
                "type": "object",
                "description": "Identification of the stored value account or the stored value card and the associated product sold by the Sale System for stored value requests.",
                "properties": {
                    "StoredValueAccountType": {
                        "$ref": "#/components/schemas/StoredValueAccountType",
                        "description": "Type of stored value account. Allows the distinction of the stored value instrument to access the stored value account.\nPossible values:\n* **GiftCard**\n* **Other**\n* **PhoneCard**"
                    },
                    "StoredValueProvider": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the provider of the stored value account load/reload. When the ProductCode is not sufficient to identify the provider host which delivers the load or reload of the stored value account (for example if it contains the identification of the application.)"
                    },
                    "OwnerName": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Name of the owner of a stored value account."
                    },
                    "ExpiryDate": {
                        "type": "integer",
                        "minimum": 4,
                        "maximum": 4,
                        "description": "Date after which the card cannot be used. If EMV expiry date is present, it overrides Track2 information. Format is MMYY."
                    },
                    "EntryMode": {
                        "$ref": "#/components/schemas/EntryMode",
                        "description": "Entry mode of the payment instrument information. In the Payment, Loyalty, or StoredValue Request messages, it informs the POI System the entry mode of the payment instrument information when read by the Sale Terminal. (e.g. because the payment instrument information are a barcode read by the Cashier on a scanner device).\nPossible values:\n* **Contactless**\n* **File**\n* **ICC**\n* **Keyed**\n* **MagStripe**\n* **Manual**\n* **Mobile**\n* **RFID**\n* **Scanned**\n* **SynchronousICC**\n* **Tapped**"
                    },
                    "IdentificationType": {
                        "$ref": "#/components/schemas/IdentificationType",
                        "description": "Type of account identification. In a request message, it informs the POI System the type of the account or card identification, when provided by the Sale Terminal. (e.g. because the card information is a barcode read by the Cashier on a scanner device). In a response message, it informs the Sale System the type of the account or card identification.\nPossible values:\n* **AccountNumber**\n* **BarCode**\n* **ISOTrack2**\n* **PAN**\n* **PhoneNumber**"
                    },
                    "StoredValueID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Stored value account identification. The identification of the stored value account conforming to the IdentificationType."
                    }
                },
                "required": [
                    "StoredValueAccountType",
                    "EntryMode",
                    "IdentificationType",
                    "StoredValueID"
                ]
            },
            "PaymentInstrumentData": {
                "type": "object",
                "description": "Data related to the instrument of payment for the transaction.\nSent in the result of the payment transaction. For a card, it could also be sent in the `CardAcquisition` response, to be processed by the Sale System.",
                "properties": {
                    "PaymentInstrumentType": {
                        "$ref": "#/components/schemas/PaymentInstrumentType",
                        "description": "Type of payment instrument.\nPossible values:\n* **Card**\n* **Cash**\n* **Check**\n* **Mobile**\n* **StoredValue**"
                    },
                    "ProtectedCardData": {
                        "type": "string",
                        "description": "Sensitive information related to the payment card, protected by CMS.\nSensitiveCardData protected by CMS EnvelopedData."
                    },
                    "CardData": {
                        "$ref": "#/components/schemas/CardData",
                        "description": "Information related to the payment card used for the transaction.\nIf PaymentInstrumentType is Card."
                    },
                    "CheckData": {
                        "$ref": "#/components/schemas/CheckData",
                        "description": "Information related to the paper check used for the transaction.\nIf PaymentInstrumentType is Check."
                    },
                    "MobileData": {
                        "$ref": "#/components/schemas/MobileData",
                        "description": "Information related to the mobile for the payment transaction.\nIf PaymentInstrumentType is Mobile."
                    },
                    "StoredValueAccountID": {
                        "$ref": "#/components/schemas/StoredValueAccountID"
                    }
                },
                "required": [
                    "PaymentInstrumentType"
                ]
            },
            "OriginalPOITransaction": {
                "type": "object",
                "description": "Identification of a previous POI transaction.\nIn the Payment or the Loyalty Request message, it allows using the card of a previous CardAcquisition or Payment/Loyalty request.",
                "properties": {
                    "SaleID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a Sale System for the NEXO SaletoPOI protocol."
                    },
                    "POIID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a payment terminal for the NEXO SaletoPOI protocol.\nIf original transaction is coming from another POI."
                    },
                    "POITransactionID": {
                        "$ref": "#/components/schemas/TransactionIDType",
                        "description": "Unique identification of a POI transaction for a POI.\nAbsent if SaleReferenceID is sufficient to identify the transaction."
                    },
                    "ReuseCardDataFlag": {
                        "type": "boolean",
                        "default": true,
                        "description": "Indicates if the card data has to be retrieved from a previous transaction."
                    },
                    "ApprovalCode": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Code assigned to a transaction approval by the Acquirer.\nIf referral."
                    },
                    "AcquirerID": {
                        "type": "integer",
                        "description": "Identification of the Acquirer.\nRestrict to the Acquirer if present."
                    },
                    "AmountValue": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Value of an amount."
                    },
                    "HostTransactionID": {
                        "$ref": "#/components/schemas/TransactionIDType",
                        "description": "Identification of the transaction by the host in charge of the stored value transaction.\nIf POITransactionID not present."
                    }
                }
            },
            "TransactionConditions": {
                "type": "object",
                "description": "Conditions on which the transaction must be processed.",
                "properties": {
                    "AllowedPaymentBrand": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "pattern": "^.+$",
                            "description": "Payment brands accepted for this transaction.\nCard payment brands allowed by the Sale System for the payment transaction.\nRestrict brand if data sent."
                        },
                        "description": "Payment brands accepted for this transaction.\nCard payment brands allowed by the Sale System for the payment transaction.\nRestrict brand if data sent."
                    },
                    "AcquirerID": {
                        "type": "array",
                        "items": {
                            "type": "integer",
                            "description": "Identification of the Acquirer.\nRestrict to these Acquirer if present."
                        },
                        "description": "Identification of the Acquirer.\nRestrict to these Acquirer if present."
                    },
                    "DebitPreferredFlag": {
                        "type": "boolean",
                        "description": "The preferred type of payment is a debit transaction rather than a credit transaction."
                    },
                    "AllowedLoyaltyBrand": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "pattern": "^.+$",
                            "description": "Loyalty brands or programs allowed by the Sale System for the loyalty transaction.\nRestrict brand if data sent."
                        },
                        "description": "Loyalty brands or programs allowed by the Sale System for the loyalty transaction.\nRestrict brand if data sent."
                    },
                    "LoyaltyHandling": {
                        "$ref": "#/components/schemas/LoyaltyHandling",
                        "description": "Type of Loyalty processing requested by the Sale System.\nPossible values:\n* **Allowed**\n* **Forbidden**\n* **Processed**\n* **Proposed**\n* **Required**"
                    },
                    "ForceOnlineFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates if the Cashier requires POI forces online access to the Acquirer.\nGo online if data sent."
                    },
                    "ForceEntryMode": {
                        "$ref": "#/components/schemas/ForceEntryMode",
                        "description": "Payment instrument entry mode requested by the Sale System.\nRestrict entry mode if sent.\nPossible values:\n* **CheckReader**\n* **Contactless**\n* **File**\n* **ICC**\n* **Keyed**\n* **MagStripe**\n* **Manual**\n* **RFID**\n* **Scanned**\n* **SynchronousICC**\n* **Tapped**"
                    },
                    "MerchantCategoryCode": {
                        "type": "string",
                        "pattern": "^.{3,4}$",
                        "description": "The code which identifies the category of the transaction (MCC).\nThe payment implies a specific MCC."
                    }
                }
            },
            "PaymentData": {
                "type": "object",
                "properties": {
                    "PaymentType": {
                        "$ref": "#/components/schemas/PaymentType",
                        "description": "Type of payment transaction. Elements requested by the Sale System that are related to the payment only.\nPossible values:\n* **CashAdvance**\n* **CashDeposit**\n* **Completion**\n* **FirstReservation**\n* **Instalment**\n* **IssuerInstalment**\n* **Normal**\n* **OneTimeReservation**\n* **PaidOut**\n* **Recurring**\n* **Refund**\n* **UpdateReservation**"
                    },
                    "SplitPaymentFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates if the payment of the Sale transaction is split. Allows the POI to decline payment means that cannot accept split payment."
                    },
                    "RequestedValidityDate": {
                        "type": "string",
                        "format": "date",
                        "description": "Requested validity date for the reservation. Allows a specific period for the reservation according to the need of the Merchant for the first reservation and the reservation updates as well."
                    },
                    "CardAcquisitionReference": {
                        "$ref": "#/components/schemas/TransactionIDType"
                    },
                    "Instalment": {
                        "$ref": "#/components/schemas/Instalment",
                        "description": "Information related an instalment transaction. To request an instalment to the issuer, or to make individual instalments of a payment transaction."
                    },
                    "CustomerOrder": {
                        "$ref": "#/components/schemas/CustomerOrder"
                    },
                    "PaymentInstrumentData": {
                        "$ref": "#/components/schemas/PaymentInstrumentData"
                    }
                }
            },
            "AmountsReq": {
                "type": "object",
                "description": "Various amounts related to the payment and loyalty request from the Sale System.",
                "properties": {
                    "Currency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount."
                    },
                    "RequestedAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Amount requested by the Sale for the payment."
                    },
                    "CashBackAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "The cash-back part of the amount requested by the Sale for the payment."
                    },
                    "TipAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Amount paid for a tip. Allow the printing of the tip on the receipt, and to qualify the tip part of the amount."
                    },
                    "PaidAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Amount already paid in case of split payment. Depending on the context, a split payment is either a split amount, or a split basket (required by some payment means as fleet cards). The PaidAmount is present when the split payment is a split\n     of the amount. Split of the basket involves two Sale Transactions, and does not have to be recognised by\n     the POI."
                    },
                    "MinimumAmountToDeliver": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Minimum amount the Sale System is allowed to deliver for this payment. For the OneTimeReservation, when the maximum amount is unknown, the Sale System indicates the minimum amount it allows."
                    },
                    "MaximumCashBackAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Maximum amount which could be requested for cash-back to the Sale System. Allows the Cashier\n   to limit the amount value of cash-back to deliver to the Customer."
                    },
                    "MinimumSplitAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Minimum amount of a split, which could be requested by a Customer.Allows the Merchant to limit the number of split requested by the Customer."
                    }
                },
                "required": [
                    "Currency",
                    "RequestedAmount"
                ]
            },
            "PaymentTransaction": {
                "type": "object",
                "properties": {
                    "AmountsReq": {
                        "$ref": "#/components/schemas/AmountsReq",
                        "description": "Various amounts related to the payment and loyalty request from the Sale System."
                    },
                    "OriginalPOITransaction": {
                        "$ref": "#/components/schemas/OriginalPOITransaction"
                    },
                    "TransactionConditions": {
                        "$ref": "#/components/schemas/TransactionConditions"
                    },
                    "SaleItem": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/SaleItem"
                        },
                        "description": "Sale items of a transaction. In loyalty or value added payment card transaction, the items of the sale that are processed in the transaction."
                    }
                },
                "required": [
                    "AmountsReq"
                ]
            },
            "ConvertedAmount": {
                "type": "object",
                "properties": {
                    "AmountValue": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Value of an amount."
                    },
                    "Currency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount."
                    }
                },
                "required": [
                    "AmountValue",
                    "Currency"
                ]
            },
            "CurrencyConversion": {
                "type": "object",
                "description": "Information related to a currency conversion.\nA currency conversion occurred in the payment, and the merchant needs to know information related to this conversion (e.g. to print on the sale receipt).",
                "properties": {
                    "CustomerApprovedFlag": {
                        "type": "boolean",
                        "default": true,
                        "description": "Notify if the customer has approved something. Indicates if the customer has accepted a currency conversion."
                    },
                    "ConvertedAmount": {
                        "$ref": "#/components/schemas/ConvertedAmount",
                        "description": "Amount after a currency conversion."
                    },
                    "Rate": {
                        "type": "string",
                        "description": "Rate of currency conversion."
                    },
                    "Markup": {
                        "type": "string",
                        "description": "Markup of a currency conversion amount as a percentage."
                    },
                    "Commission": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Commission for a currency conversion."
                    },
                    "Declaration": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Declaration to present to the customer or the cashier for validation.\nIf a declaration has to be presented to the customer."
                    }
                },
                "required": [
                    "ConvertedAmount"
                ]
            },
            "Point": {
                "type": "object",
                "properties": {
                    "X": {
                        "type": "string",
                        "description": "The hexadecimal value of the coordinates of a point on the abscissa."
                    },
                    "Y": {
                        "type": "string",
                        "description": "The hexadecimal value of the coordinates of a point on the ordinate."
                    }
                },
                "required": [
                    "X",
                    "Y"
                ]
            },
            "SaleItemRebate": {
                "type": "object",
                "description": "To be differentiated from the award which is the amount or quantity earned on the loyalty account.\nThe awarded amount that is attached to an item as a rebate.",
                "properties": {
                    "ItemID": {
                        "type": "integer",
                        "description": "Item identification inside a transaction (0 to n)."
                    },
                    "ProductCode": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "description": "Product code of item purchased with the transaction."
                    },
                    "EanUpc": {
                        "type": "integer",
                        "description": "Standard product code of item purchased with the transaction."
                    },
                    "UnitOfMeasure": {
                        "$ref": "#/components/schemas/UnitOfMeasure",
                        "description": "Unit of measure of a quantity.\nIf Quantity present.\nPossible values:\n* **Case**\n* **Centilitre**\n* **Centimetre**\n* **Foot**\n* **Gram**\n* **Inch**\n* **Kilogram**\n* **Kilometre**\n* **Litre**\n* **Meter**\n* **Mile**\n* **Other**\n* **Ounce**\n* **Pint**\n* **Pound**\n* **Quart**\n* **UKGallon**\n* **USGallon**\n* **Yard**"
                    },
                    "Quantity": {
                        "type": "string",
                        "description": "Product quantity.\nIf rebate is additional units."
                    },
                    "ItemAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Total amount of the item line.\nIf rebate on the line item amount."
                    },
                    "RebateLabel": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Short text to qualify a rebate on an line item.\nIf provided by the Acquirer."
                    }
                },
                "required": [
                    "ItemID",
                    "ProductCode"
                ]
            },
            "LoyaltyAccount": {
                "type": "object",
                "description": "This data structure conveys the identification of the account and the associated loyalty brand.\nData related to a loyalty account processed in the transaction.",
                "properties": {
                    "LoyaltyAccountID": {
                        "$ref": "#/components/schemas/LoyaltyAccountID",
                        "description": "Identification of a Loyalty account."
                    },
                    "LoyaltyBrand": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a Loyalty brand.\nIf a card is analysed."
                    }
                },
                "required": [
                    "LoyaltyAccountID"
                ]
            },
            "LoyaltyAcquirerData": {
                "type": "object",
                "properties": {
                    "LoyaltyAcquirerID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the loyalty Acquirer."
                    },
                    "ApprovalCode": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Code assigned to a transaction approval by the Acquirer. Could be an identifier of the approved transaction for the Acquirer. This data element is conditional for the Loyalty Acquirers. Used in the PaymentRequest request for a referral."
                    },
                    "LoyaltyTransactionID": {
                        "$ref": "#/components/schemas/TransactionIDType"
                    },
                    "HostReconciliationID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identifier of a reconciliation period with a payment or loyalty host. Allows the assignment of a transaction to the Acquirer reconciliation (or batch)."
                    }
                }
            },
            "Rebates": {
                "type": "object",
                "properties": {
                    "TotalRebate": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "The global awarded amount that is not attached to an item."
                    },
                    "RebateLabel": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Short text to qualify a rebate on an line item. Text to be printed on a receipt in front of the rebate on an item or the rebate on the totals."
                    },
                    "SaleItemRebate": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/SaleItemRebate"
                        },
                        "description": "The awarded amount that is attached to an item as a rebate. To be differentiated from the award which is the amount or quantity earned on the loyalty account."
                    }
                }
            },
            "LoyaltyResult": {
                "type": "object",
                "description": "Data related to the result of a processed loyalty transaction.\nIn the Message Response, the result of each loyalty brand transaction.",
                "properties": {
                    "LoyaltyAccount": {
                        "$ref": "#/components/schemas/LoyaltyAccount",
                        "description": "Data related to a loyalty account processed in the transaction."
                    },
                    "CurrentBalance": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Balance of an account.\nIf known (provided by the card or an external host)."
                    },
                    "LoyaltyAmount": {
                        "$ref": "#/components/schemas/LoyaltyAmount",
                        "description": "Amount of a loyalty account.\nIf awarded amount."
                    },
                    "LoyaltyAcquirerData": {
                        "$ref": "#/components/schemas/LoyaltyAcquirerData",
                        "description": "Data related to the loyalty Acquirer during a loyalty transaction.\nIf content not empty."
                    },
                    "Rebates": {
                        "$ref": "#/components/schemas/Rebates",
                        "description": "Rebate form to an award.\nIf rebates awarded."
                    }
                },
                "required": [
                    "LoyaltyAccount"
                ]
            },
            "PaymentReceipt": {
                "type": "object",
                "description": "Customer or Merchant payment receipt.\nIf the payment receipts are printed by the Sale system and the POI or the Sale does not implement the Print exchange (Basic profile).",
                "properties": {
                    "DocumentQualifier": {
                        "$ref": "#/components/schemas/DocumentQualifier",
                        "description": "Qualification of the document to print to the Cashier or the Customer.\nSaleReceipt or CashierReceipt.\nPossible values:\n* **CashierReceipt**\n* **CustomerReceipt**\n* **Document**\n* **Journal**\n* **SaleReceipt**\n* **Voucher**"
                    },
                    "IntegratedPrintFlag": {
                        "type": "boolean",
                        "description": "Type of the print integrated to other prints."
                    },
                    "RequiredSignatureFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicate that the cardholder payment receipt requires a physical signature by the Customer."
                    },
                    "OutputContent": {
                        "$ref": "#/components/schemas/OutputContent",
                        "description": "Content to display or print."
                    }
                },
                "required": [
                    "DocumentQualifier",
                    "OutputContent"
                ]
            },
            "PaymentAcquirerData": {
                "type": "object",
                "description": "Data related to the response from the payment Acquirer.",
                "properties": {
                    "AcquirerID": {
                        "type": "integer",
                        "description": "Identification of the Acquirer.\nIdentification of the Acquirer when the POI System is multi-acquirer."
                    },
                    "MerchantID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the Merchant for the Acquirer."
                    },
                    "AcquirerPOIID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the POI for the payment Acquirer."
                    },
                    "AcquirerTransactionID": {
                        "$ref": "#/components/schemas/TransactionIDType",
                        "description": "Identification of the Transaction for the Acquirer.\nIf provided by the Acquirer."
                    },
                    "ApprovalCode": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Code assigned to a transaction approval by the Acquirer.\nIf available."
                    },
                    "HostReconciliationID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identifier of a reconciliation period with a payment or loyalty host. Allows the assignment of a transaction to the Acquirer reconciliation (or batch)."
                    }
                },
                "required": [
                    "MerchantID",
                    "AcquirerPOIID"
                ]
            },
            "AreaSize": {
                "type": "object",
                "properties": {
                    "X": {
                        "type": "string",
                        "description": "Abscissa of a point coordinates. The hexadecimal value in text of the abscissa of the coordinates of a point. Leading zero can be removed (e.g. 3BC, 0, and 1287)."
                    },
                    "Y": {
                        "type": "string",
                        "description": "Ordinate of a point coordinates. The hexadecimal value in text of the ordinate of the coordinates of a point. Leading zero can be removed (e.g. 3BC, 0, and 1287)."
                    }
                },
                "required": [
                    "X",
                    "Y"
                ]
            },
            "CapturedSignature": {
                "type": "object",
                "properties": {
                    "AreaSize": {
                        "$ref": "#/components/schemas/AreaSize",
                        "description": "Size of an area. Contain the size of the pad area where the signature is written, given with the maximum abscissa and ordinate values (X and Y). The maximum value is FFFF."
                    },
                    "SignaturePoint": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Point"
                        },
                        "description": "Coordinates of a point where the pen changes direction or lift. Contain the Coordinates of a point of the written signature where the pen changes direction or lift where (X and Y). When the signer lifts the pen, both X and Y have the value FFFF."
                    }
                }
            },
            "AmountsResp": {
                "type": "object",
                "properties": {
                    "Currency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount."
                    },
                    "AuthorizedAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Amount requested by the Sale for the payment."
                    },
                    "TotalRebatesAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Sum of rebates in amount (total amount or line item amount) for all the loyalty programs."
                    },
                    "TotalFeesAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Total amount of financial fees."
                    },
                    "CashBackAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "The cash-back part of the amount requested by the Sale for the payment."
                    },
                    "TipAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Amount paid for a tip. Allow the printing of the tip on the receipt, and to qualify the tip part of the amount."
                    }
                },
                "required": [
                    "AuthorizedAmount"
                ]
            },
            "PaymentResult": {
                "type": "object",
                "properties": {
                    "PaymentType": {
                        "$ref": "#/components/schemas/PaymentType",
                        "description": "Type of payment transaction. Elements requested by the Sale System that are related to the payment only.\nPossible values:\n* **CashAdvance**\n* **CashDeposit**\n* **Completion**\n* **FirstReservation**\n* **Instalment**\n* **IssuerInstalment**\n* **Normal**\n* **OneTimeReservation**\n* **PaidOut**\n* **Recurring**\n* **Refund**\n* **UpdateReservation**"
                    },
                    "PaymentInstrumentData": {
                        "$ref": "#/components/schemas/PaymentInstrumentData"
                    },
                    "AmountsResp": {
                        "$ref": "#/components/schemas/AmountsResp",
                        "description": "Various amounts related to the payment response from the POI System. Amounts approved by the POI and the Acquirer for the payment and loyalty transaction, containing:\n  * The authorised amount to be paid.\n  * The amount of the rebates.\n  * The amount of financial fees.\n  * The cash back part of the requested amount for a payment with cash back.\n  * The tip part of the requested amount for a payment with tip."
                    },
                    "Instalment": {
                        "$ref": "#/components/schemas/Instalment",
                        "description": "Information related an instalment transaction. To request an instalment to the issuer, or to make individual instalments of a payment transaction."
                    },
                    "CurrencyConversion": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CurrencyConversion"
                        },
                        "description": "Information related to a currency conversion. A currency conversion occurred in the payment, and the merchant needs to know information related to this conversion (e.g. to print on the sale receipt)."
                    },
                    "MerchantOverrideFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates that the Merchant forced the result of the payment to successful. Allows the Sale System to be sure that the payment has been forced."
                    },
                    "CapturedSignature": {
                        "$ref": "#/components/schemas/CapturedSignature",
                        "description": "Numeric value of a handwritten signature. Contains the value of a handwritten signature, e.g. the signature of a cardholder on the merchant payment receipt. Only one format of the signature is allowed:\n  * The size of the pad area where the signature is written, given with the maximum abscissa and ordinate values.\n  * The sequence of coordinates where the pen changes direction or lift."
                    },
                    "ProtectedSignature": {
                        "type": "string",
                        "description": "Numeric value of a handwritten signature. Contains the value of a handwritten signature, e.g. the signature of a cardholder on the merchant payment receipt. The format before encryption is the encoded data structure CapturedSignature. The data structure before encryption includes the start and end tags for an XML encoding, the identifier and length bytes for an ASN.1 encoding, and the complete member ProtectedSignature for a JSON encoding."
                    },
                    "OnlineFlag": {
                        "type": "boolean",
                        "default": true,
                        "description": "Indicate that the payment transaction processing has required the approval of a host. Allows the Sale System to know if the payment was online or offline."
                    },
                    "AuthenticationMethod": {
                        "$ref": "#/components/schemas/AuthenticationMethod",
                        "description": "Method for customer authentication. Allows the Sale System informed about customer authentication for the payment transaction.\nPossible values:\n* **Bypass**\n* **ManualVerification**\n* **MerchantAuthentication**\n* **OfflinePIN**\n* **OnlinePIN**\n* **PaperSignature**\n* **SecureCertificate**\n* **SecureNoCertificate**\n* **SecuredChannel**\n* **SignatureCapture**\n* **UnknownMethod**"
                    },
                    "ValidityDate": {
                        "type": "string",
                        "format": "date",
                        "description": "End of the validity period for the reservation, for the first reservation, and the reservation updates as well."
                    },
                    "PaymentAcquirerData": {
                        "$ref": "#/components/schemas/PaymentAcquirerData"
                    }
                }
            },
            "CardAcquisitionTransaction": {
                "type": "object",
                "properties": {
                    "AllowedPaymentBrand": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "pattern": "^.+$",
                            "description": "Card payment brands allowed by the Sale System for the payment transaction."
                        },
                        "description": "Card payment brands allowed by the Sale System for the payment transaction."
                    },
                    "AllowedLoyaltyBrand": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "pattern": "^.+$",
                            "description": "Loyalty brands or programs allowed by the Sale System for the loyalty transaction."
                        },
                        "description": "Loyalty brands or programs allowed by the Sale System for the loyalty transaction."
                    },
                    "LoyaltyHandling": {
                        "$ref": "#/components/schemas/LoyaltyHandling",
                        "description": "Type of Loyalty processing requested by the Sale System. An way to specify what the POI has to handle concerning the loyalty.\nPossible values:\n* **Allowed**\n* **Forbidden**\n* **Processed**\n* **Proposed**\n* **Required**"
                    },
                    "ForceEntryMode": {
                        "$ref": "#/components/schemas/ForceEntryMode",
                        "description": "Payment instrument entry mode requested by the Sale System. Avoid retry on an out of order card reading device, when the sale system knows that some card entry modes on the POI do not work.\nPossible values:\n* **CheckReader**\n* **Contactless**\n* **File**\n* **ICC**\n* **Keyed**\n* **MagStripe**\n* **Manual**\n* **RFID**\n* **Scanned**\n* **SynchronousICC**\n* **Tapped**"
                    },
                    "ForceCustomerSelectionFlag": {
                        "type": "boolean",
                        "description": "Indicates if the Customer realises the selection of the card application."
                    },
                    "TotalAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Amount of a transaction. In the Card Acquisition Request message, it allows the processing of a contactless card."
                    },
                    "PaymentType": {
                        "$ref": "#/components/schemas/PaymentType",
                        "description": "Type of payment transaction. Elements requested by the Sale System that are related to the payment only.\nPossible values:\n* **CashAdvance**\n* **CashDeposit**\n* **Completion**\n* **FirstReservation**\n* **Instalment**\n* **IssuerInstalment**\n* **Normal**\n* **OneTimeReservation**\n* **PaidOut**\n* **Recurring**\n* **Refund**\n* **UpdateReservation**"
                    },
                    "CashBackFlag": {
                        "type": "boolean",
                        "description": "Cash back has been requested with the payment transaction. Allows choice of the Customer language when the POI displays messages or print text to Merchant interface."
                    }
                }
            },
            "LoyaltyTransaction": {
                "type": "object",
                "properties": {
                    "LoyaltyTransactionType": {
                        "$ref": "#/components/schemas/LoyaltyTransactionType",
                        "description": "Type of loyalty transaction. These types of loyalty transactions use the same message requests:\n  * **Award**: direct or payment-related award on a loyalty account.\n  * **Rebate**: rebate on a total amount, sale item amount, or sale items.\n  * **Redemption**: redemption on a loyalty account.\n  * **AwardRefund**: refund of a loyalty award transaction.\n  * **RebateRefund**: refund of a loyalty rebate transaction.\n  * **RedemptionRefund**: refund of a loyalty redemption transaction.\nPossible values:\n* **Award**\n* **AwardRefund**\n* **Rebate**\n* **RebateRefund**\n* **Redemption**\n* **RedemptionRefund**"
                    },
                    "Currency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount."
                    },
                    "TotalAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Amount of a transaction. In the Loyalty Request message, it notifies the amount of the payment transaction on which the loyalty transaction has to be processed.\n  In the Card Acquisition Request message, it allows the processing of a contactless card."
                    },
                    "OriginalPOITransaction": {
                        "$ref": "#/components/schemas/OriginalPOITransaction"
                    },
                    "TransactionConditions": {
                        "$ref": "#/components/schemas/TransactionConditions"
                    },
                    "SaleItem": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/SaleItem"
                        },
                        "description": "In loyalty or value added payment card transaction, Sale items included in a transaction.\n  The sum of the item amount could be more than the Requested amount in case of split payment without split of the items (split basket).\n  In the StoredValue request message, sale items differentiate the Stored Value product with the EanUpc data element which has to be present."
                    }
                },
                "required": [
                    "LoyaltyTransactionType"
                ]
            },
            "StoredValueData": {
                "type": "object",
                "description": "It contains: - the identification of the stored value accounts or the stored value cards, if provided by the Sale System, and - the associated products sold by the Sale System..\nData related to the stored value card.",
                "properties": {
                    "StoredValueProvider": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the provider of the stored value account load/reload.\nIf more than one provider to manage on the POI, and StoredValueAccountID absent."
                    },
                    "StoredValueTransactionType": {
                        "$ref": "#/components/schemas/StoredValueTransactionType",
                        "description": "Identification of operation to proceed on the stored value account or the stored value card.\nPossible values:\n* **Activate**\n* **Duplicate**\n* **Load**\n* **Reserve**\n* **Reverse**\n* **Unload**"
                    },
                    "StoredValueAccountID": {
                        "$ref": "#/components/schemas/StoredValueAccountID",
                        "description": "Identification of the stored value account or the stored value card.\nIf the identification of the Stored Value account or card has been made by the Sale System before the request."
                    },
                    "OriginalPOITransaction": {
                        "$ref": "#/components/schemas/OriginalPOITransaction",
                        "description": "Identification of a previous POI transaction.\nIf StoredValueTransactionType is Reverse or Duplicate."
                    },
                    "ProductCode": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "description": "Product code of item purchased with the transaction."
                    },
                    "EanUpc": {
                        "type": "integer",
                        "description": "Standard product code of item purchased with the transaction."
                    },
                    "ItemAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Total amount of the item line."
                    },
                    "Currency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount."
                    }
                },
                "required": [
                    "StoredValueTransactionType"
                ]
            },
            "StoredValueAccountStatus": {
                "type": "object",
                "properties": {
                    "StoredValueAccountID": {
                        "$ref": "#/components/schemas/StoredValueAccountID"
                    },
                    "CurrentBalance": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "If relevant and known."
                    }
                },
                "required": [
                    "StoredValueAccountID"
                ]
            },
            "StoredValueResult": {
                "type": "object",
                "description": "For each stored value card loaded or reloaded, in the StoredValue response message.\nResult of loading/reloading a stored value card..",
                "properties": {
                    "StoredValueTransactionType": {
                        "$ref": "#/components/schemas/StoredValueTransactionType",
                        "description": "Identification of operation to proceed on the stored value account or the stored value card.\nCopy.\nPossible values:\n* **Activate**\n* **Duplicate**\n* **Load**\n* **Reserve**\n* **Reverse**\n* **Unload**"
                    },
                    "ProductCode": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "description": "Product code of item purchased with the transaction.\nCopy."
                    },
                    "EanUpc": {
                        "type": "integer",
                        "description": "Standard product code of item purchased with the transaction.\nCopy."
                    },
                    "ItemAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Total amount of the item line."
                    },
                    "Currency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount.\nCopy."
                    },
                    "StoredValueAccountStatus": {
                        "$ref": "#/components/schemas/StoredValueAccountStatus",
                        "description": "Data related to the result of the stored value card transaction."
                    },
                    "HostTransactionID": {
                        "$ref": "#/components/schemas/TransactionIDType",
                        "description": "Identification of the transaction by the host in charge of the stored value transaction.\nIf provided by the Host."
                    }
                },
                "required": [
                    "StoredValueTransactionType"
                ]
            },
            "PerformedTransaction": {
                "type": "object",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response"
                    },
                    "SaleData": {
                        "$ref": "#/components/schemas/SaleData"
                    },
                    "POIData": {
                        "$ref": "#/components/schemas/POIData"
                    },
                    "PaymentResult": {
                        "$ref": "#/components/schemas/PaymentResult"
                    },
                    "LoyaltyResult": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/LoyaltyResult"
                        }
                    },
                    "ReversedAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0
                    }
                },
                "required": [
                    "Response"
                ]
            },
            "PaymentTotals": {
                "type": "object",
                "description": "Totals of the payment transaction during the reconciliation period.",
                "properties": {
                    "TransactionType": {
                        "$ref": "#/components/schemas/TransactionType",
                        "description": "Type of transaction for which totals are grouped.\nDebit, Credit, ReverseDebit, ReverseCredit, OneTimeReservation, CompletedDeffered, FirstReservation, UpdateReservation, CompletedReservation, CashAdvance.\nPossible values:\n* **Award**\n* **CashAdvance**\n* **CompletedDeffered**\n* **CompletedReservation**\n* **Credit**\n* **Debit**\n* **Declined**\n* **Failed**\n* **FirstReservation**\n* **IssuerInstalment**\n* **OneTimeReservation**\n* **Rebate**\n* **Redemption**\n* **ReverseAward**\n* **ReverseCredit**\n* **ReverseDebit**\n* **ReverseRebate**\n* **ReverseRedemption**\n* **UpdateReservation**"
                    },
                    "TransactionCount": {
                        "type": "integer",
                        "description": "Number of processed transaction during the period."
                    },
                    "TransactionAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Sum of amount of processed transaction during the period."
                    }
                },
                "required": [
                    "TransactionType",
                    "TransactionCount",
                    "TransactionAmount"
                ]
            },
            "LoyaltyTotals": {
                "type": "object",
                "description": "Totals of the loyalty transaction during the reconciliation period.",
                "properties": {
                    "TransactionType": {
                        "$ref": "#/components/schemas/TransactionType",
                        "description": "Type of transaction for which totals are grouped.\nAward, ReverseAward, Redemption, ReverseRedemption, Rebate, ReverseRebate.\nPossible values:\n* **Award**\n* **CashAdvance**\n* **CompletedDeffered**\n* **CompletedReservation**\n* **Credit**\n* **Debit**\n* **Declined**\n* **Failed**\n* **FirstReservation**\n* **IssuerInstalment**\n* **OneTimeReservation**\n* **Rebate**\n* **Redemption**\n* **ReverseAward**\n* **ReverseCredit**\n* **ReverseDebit**\n* **ReverseRebate**\n* **ReverseRedemption**\n* **UpdateReservation**"
                    },
                    "TransactionCount": {
                        "type": "integer",
                        "description": "Number of processed transaction during the period."
                    },
                    "TransactionAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Sum of amount of processed transaction during the period."
                    }
                },
                "required": [
                    "TransactionType",
                    "TransactionCount",
                    "TransactionAmount"
                ]
            },
            "TransactionTotals": {
                "type": "object",
                "description": "If Result is Success, contains all the totals, classified as required by the Sale in the message request. At least, transaction totals are provided per Acquirer, Acquirer Settlement, and Card Brand.\nResult of the Sale to POI Reconciliation processing.",
                "properties": {
                    "PaymentInstrumentType": {
                        "$ref": "#/components/schemas/PaymentInstrumentType",
                        "description": "Type of payment instrument.\nPossible values:\n* **Card**\n* **Cash**\n* **Check**\n* **Mobile**\n* **StoredValue**"
                    },
                    "AcquirerID": {
                        "type": "integer",
                        "description": "Identification of the Acquirer."
                    },
                    "HostReconciliationID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identifier of a reconciliation period with a payment or loyalty host."
                    },
                    "CardBrand": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Type of payment or loyalty card.\nIf configured to present totals per card brand, and Response.Result is Success."
                    },
                    "POIID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a POI System or a POI Terminal for the Sale to POI protocol.\nSent if requested in the message request."
                    },
                    "SaleID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a Sale System or a Sale Terminal for the Sale to POI protocol.\nSent if requested in the message request."
                    },
                    "OperatorID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the Cashier or Operator.\nSent if requested in the message request."
                    },
                    "ShiftNumber": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Shift number.\nSent if requested in the message request."
                    },
                    "TotalsGroupID": {
                        "type": "string",
                        "pattern": "^.{1,16}$",
                        "description": "Identification of a group of transaction on a POI Terminal, having the same Sale features.\nSent if requested in the message request."
                    },
                    "PaymentCurrency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount."
                    },
                    "PaymentTotals": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PaymentTotals"
                        },
                        "description": "Totals of the payment transaction during the reconciliation period.\nIf both `TransactionCount` and `TransactionAmount` are not equal to zero."
                    },
                    "LoyaltyUnit": {
                        "$ref": "#/components/schemas/LoyaltyUnit",
                        "description": "Unit of a loyalty amount.\nPossible values:\n* **Monetary**\n* **Point**"
                    },
                    "LoyaltyCurrency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount.\nSent if `LoyaltyUnit` is Monetary."
                    },
                    "LoyaltyTotals": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/LoyaltyTotals"
                        },
                        "description": "Totals of the loyalty transaction during the reconciliation period.\nIf both `TransactionCount` and `TransactionAmount` are not equal to zero."
                    }
                },
                "required": [
                    "PaymentInstrumentType"
                ]
            },
            "TotalFilter": {
                "type": "object",
                "properties": {
                    "POIID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a POI System or a POI Terminal for the Sale to POI protocol."
                    },
                    "SaleID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a Sale System or a Sale Terminal for the Sale to POI protocol."
                    },
                    "OperatorID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the Cashier or Operator."
                    },
                    "ShiftNumber": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Shift number."
                    },
                    "TotalsGroupID": {
                        "type": "string",
                        "pattern": "^.{1,16}$",
                        "description": "Sent if totals in the response have to be computed only for this particular value of TotalsGroupID."
                    }
                }
            },
            "PaymentAccountReq": {
                "type": "object",
                "properties": {
                    "AccountType": {
                        "$ref": "#/components/schemas/AccountType",
                        "description": "Type of cardholder account used for the transaction. Allows a cardholder to select the type of account used for the transaction.\nPossible values:\n* **CardTotals**\n* **Checking**\n* **CreditCard**\n* **Default**\n* **EpurseCard**\n* **Investment**\n* **Savings**\n* **Universal**"
                    },
                    "CardAcquisitionReference": {
                        "$ref": "#/components/schemas/TransactionIDType"
                    },
                    "PaymentInstrumentData": {
                        "$ref": "#/components/schemas/PaymentInstrumentData"
                    }
                }
            },
            "LoyaltyAccountReq": {
                "type": "object",
                "properties": {
                    "CardAcquisitionReference": {
                        "$ref": "#/components/schemas/TransactionIDType"
                    },
                    "LoyaltyAccountID": {
                        "$ref": "#/components/schemas/LoyaltyAccountID"
                    }
                }
            },
            "PaymentAccountStatus": {
                "type": "object",
                "properties": {
                    "PaymentInstrumentData": {
                        "$ref": "#/components/schemas/PaymentInstrumentData"
                    },
                    "CurrentBalance": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Balance of an account after processing of the transaction."
                    },
                    "Currency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount."
                    },
                    "PaymentAcquirerData": {
                        "$ref": "#/components/schemas/PaymentAcquirerData"
                    }
                }
            },
            "LoyaltyAccountStatus": {
                "type": "object",
                "properties": {
                    "LoyaltyAccount": {
                        "$ref": "#/components/schemas/LoyaltyAccount"
                    },
                    "CurrentBalance": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Balance of an account after processing of the transaction."
                    },
                    "LoyaltyUnit": {
                        "$ref": "#/components/schemas/LoyaltyUnit",
                        "description": "Unit of a loyalty amount. The amount could be expressed in point or in a monetary value and a currency.\nPossible values:\n* **Monetary**\n* **Point**"
                    },
                    "Currency": {
                        "type": "string",
                        "pattern": "^[A-Z]{3,3}$",
                        "description": "Currency of a monetary amount."
                    }
                },
                "required": [
                    "LoyaltyAccount"
                ]
            },
            "MessageReference": {
                "type": "object",
                "description": "Identification of a previous POI transaction.\nTo abort a transaction in progress or to request the status of a transaction from which no response has been received. It identifies the message header of the message request to abort or request the status.",
                "properties": {
                    "MessageCategory": {
                        "$ref": "#/components/schemas/MessageCategory",
                        "description": "Category of message.\nCardAcquisition, Display, Input, Loyalty, Payment, Print, CardReaderAPDU, CardReaderInit, CardReaderPowerOff.\nPossible values:\n* **Abort**\n* **Admin**\n* **BalanceInquiry**\n* **Batch**\n* **CardAcquisition**\n* **CardReaderAPDU**\n* **CardReaderInit**\n* **CardReaderPowerOff**\n* **Diagnosis**\n* **Display**\n* **EnableService**\n* **Event**\n* **GetTotals**\n* **Input**\n* **InputUpdate**\n* **Login**\n* **Logout**\n* **Loyalty**\n* **None**\n* **PIN**\n* **Payment**\n* **Print**\n* **Reconciliation**\n* **Reversal**\n* **Sound**\n* **StoredValue**\n* **TransactionStatus**\n* **Transmit**"
                    },
                    "ServiceID": {
                        "type": "string",
                        "pattern": "^.{1,10}$",
                        "description": "Identification of a message pair, which processes a transaction."
                    },
                    "DeviceID": {
                        "type": "string",
                        "pattern": "^.{1,10}$",
                        "description": "Identification of a device message pair."
                    },
                    "SaleID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a Sale System or a Sale Terminal for the Sale to POI protocol.\ndefault MessageHeader.SaleID."
                    },
                    "POIID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a POI System or a POI Terminal for the Sale to POI protocol.\nDefault `MessageHeader.POIID`."
                    }
                }
            },
            "MessageHeader": {
                "type": "object",
                "description": "Message header of the Sale to POI protocol message.\nIt conveys Information related to the Sale to POI protocol management.",
                "properties": {
                    "ProtocolVersion": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "If MessageCategory is Login or Diagnosis."
                    },
                    "MessageClass": {
                        "$ref": "#/components/schemas/MessageClass",
                        "description": "Class of the message.\nPossible values:\n* **Device**\n* **Event**\n* **Service**"
                    },
                    "MessageCategory": {
                        "$ref": "#/components/schemas/MessageCategory",
                        "description": "Category of message.\nPossible values:\n* **Abort**\n* **Admin**\n* **BalanceInquiry**\n* **Batch**\n* **CardAcquisition**\n* **CardReaderAPDU**\n* **CardReaderInit**\n* **CardReaderPowerOff**\n* **Diagnosis**\n* **Display**\n* **EnableService**\n* **Event**\n* **GetTotals**\n* **Input**\n* **InputUpdate**\n* **Login**\n* **Logout**\n* **Loyalty**\n* **None**\n* **PIN**\n* **Payment**\n* **Print**\n* **Reconciliation**\n* **Reversal**\n* **Sound**\n* **StoredValue**\n* **TransactionStatus**\n* **Transmit**"
                    },
                    "MessageType": {
                        "$ref": "#/components/schemas/MessageType",
                        "description": "Type of message of the Sale to POI protocol.\nPossible values:\n* **Notification**\n* **Request**\n* **Response**"
                    },
                    "ServiceID": {
                        "type": "string",
                        "pattern": "^.{1,10}$",
                        "description": "Identification of a message pair, which processes a transaction.\nRequired if Service or Event MessageClass message or if Device MessageClass and request from POI or response from Sale."
                    },
                    "DeviceID": {
                        "type": "string",
                        "pattern": "^.{1,10}$",
                        "description": "Identification of a device message pair.\nIf Device MessageClass."
                    },
                    "SaleID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a Sale System or a Sale Terminal for the Sale to POI protocol."
                    },
                    "POIID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a POI System or a POI Terminal for the Sale to POI protocol."
                    }
                },
                "required": [
                    "MessageClass",
                    "MessageCategory",
                    "MessageType",
                    "SaleID",
                    "POIID"
                ]
            },
            "RepeatedResponseMessageBody": {
                "type": "object",
                "properties": {
                    "LoyaltyResponse": {
                        "$ref": "#/components/schemas/LoyaltyResponse"
                    },
                    "PaymentResponse": {
                        "$ref": "#/components/schemas/PaymentResponse"
                    },
                    "ReversalResponse": {
                        "$ref": "#/components/schemas/ReversalResponse"
                    },
                    "StoredValueResponse": {
                        "$ref": "#/components/schemas/StoredValueResponse"
                    },
                    "CardAcquisitionResponse": {
                        "$ref": "#/components/schemas/CardAcquisitionResponse"
                    },
                    "CardReaderAPDUResponse": {
                        "$ref": "#/components/schemas/CardReaderAPDUResponse"
                    }
                }
            },
            "RepeatedMessageResponse": {
                "type": "object",
                "properties": {
                    "MessageHeader": {
                        "$ref": "#/components/schemas/MessageHeader"
                    },
                    "RepeatedResponseMessageBody": {
                        "$ref": "#/components/schemas/RepeatedResponseMessageBody"
                    }
                },
                "required": [
                    "MessageHeader",
                    "RepeatedResponseMessageBody"
                ]
            },
            "HostStatus": {
                "type": "object",
                "description": "Indicate the reachability of the host by the POI Terminal.\nState of a Host.",
                "properties": {
                    "AcquirerID": {
                        "type": "integer",
                        "description": "Identification of the Acquirer."
                    },
                    "IsReachableFlag": {
                        "type": "boolean",
                        "default": true,
                        "description": "Indicate if a Host is reachable."
                    }
                },
                "required": [
                    "AcquirerID"
                ]
            },
            "OutputResult": {
                "type": "object",
                "description": "In the message response, it contains the result of the output, if required in the message request.\nInformation related to the result the output (display, print, input).",
                "properties": {
                    "Device": {
                        "$ref": "#/components/schemas/Device",
                        "description": "Logical device located on a Sale Terminal or a POI Terminal, in term of class of information to output (display, print or store), or input (keyboard) for the Cashier or the Customer.\nCopy.\nPossible values:\n* **CashierDisplay**\n* **CashierInput**\n* **CustomerDisplay**\n* **CustomerInput**"
                    },
                    "InfoQualify": {
                        "$ref": "#/components/schemas/InfoQualify",
                        "description": "Qualification of the information to sent to an output logical device, to display or print to the Cashier or the Customer.\nCopy.\nPossible values:\n* **CustomerAssistance**\n* **Display**\n* **Document**\n* **Error**\n* **Input**\n* **POIReplication**\n* **Receipt**\n* **Sound**\n* **Status**\n* **Voucher**"
                    },
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    }
                },
                "required": [
                    "Device",
                    "InfoQualify",
                    "Response"
                ]
            },
            "InputData": {
                "type": "object",
                "properties": {
                    "Device": {
                        "$ref": "#/components/schemas/Device",
                        "description": "Logical device located on a Sale Terminal or a POI Terminal, regarding the class of information to output (display, print or store), or input (keyboard) for the Cashier or the Customer.\nPossible values:\n* **CashierDisplay**\n* **CashierInput**\n* **CustomerDisplay**\n* **CustomerInput**"
                    },
                    "InfoQualify": {
                        "$ref": "#/components/schemas/InfoQualify",
                        "description": "Qualification of the information to send to an output logical device, to display or print to the Cashier or the Customer.\nPossible values:\n* **CustomerAssistance**\n* **Display**\n* **Document**\n* **Error**\n* **Input**\n* **POIReplication**\n* **Receipt**\n* **Sound**\n* **Status**\n* **Voucher**"
                    },
                    "InputCommand": {
                        "$ref": "#/components/schemas/InputCommand",
                        "description": "Type of requested input. Can be: **GetConfirmation**, **TextString**, **DigitString**, **DecimalString** or **GetMenuEntry**.\nPossible values:\n* **DecimalString**\n* **DigitString**\n* **GetAnyKey**\n* **GetConfirmation**\n* **GetFunctionKey**\n* **GetMenuEntry**\n* **Password**\n* **SiteManager**\n* **TextString**"
                    },
                    "NotifyCardInputFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Request Notification of the card entered in the POI card reader."
                    },
                    "MaxInputTime": {
                        "type": "integer",
                        "description": "Maximum input time in seconds. Limits the time to answer to an Input request message."
                    },
                    "ImmediateResponseFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates whether to request an Immediate response to the message without waiting for the completion of the command."
                    },
                    "MinLength": {
                        "type": "integer",
                        "description": "Minimum length of an entered string, or minimum number of entries that can be selected in a menu."
                    },
                    "MaxLength": {
                        "type": "integer",
                        "description": "Maximum length of an entered string, or maximum number of entries that can be selected in a menu."
                    },
                    "MaxDecimalLength": {
                        "type": "integer",
                        "description": "Maximum input length of the decimal part (without decimal point)."
                    },
                    "WaitUserValidationFlag": {
                        "type": "boolean",
                        "default": true,
                        "description": "Indicates that the user must confirm the entered characters, when the maximum allowed length is reached. During the processing of an Input command `TextString`, `DigitString` or `DecimalString` with `MaxLength` or `MaxDecimalLength` present in the request."
                    },
                    "DefaultInputString": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Default string value for an input command. On the `TextString`, `DigitString` and `DecimalString` input commands: default string displayed on the input field before entering the string. In `GetConfirmation` input command: **Y** for yes, **N** for no."
                    },
                    "DefaultLayoutString": {
                        "type": "string",
                        "pattern": "^.+$"
                    },
                    "StringMask": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "String mask to get information requiring a specific format. For the processing of an Input command `TextString`, `DigitString` or `DecimalString`. Some information as date or plate number required to be entered with a certain format."
                    },
                    "FromRightToLeftFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates if the entered character has to be displayed from the right to the left of the display field."
                    },
                    "MaskCharactersFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates to mask the characters entered by the user (i.e. replacing in the display of the input, the entered character by a standard character as *)."
                    },
                    "BeepKeyFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates, when the user press a key, if a beep has to be generated (value True)."
                    },
                    "GlobalCorrectionFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates, when the user presses the Correct function key in an input entry, if all the entered characters are removed (value True) or only the last entered character if any (value False)."
                    },
                    "DisableCancelFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates if the Cancel function key has to be deactivated (value True)."
                    },
                    "DisableCorrectFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates if the Correct function key has to be deactivated (value True). During the processing of an Input command `GetConfirmation`, `SiteManager`, or `GetMenuEntry`."
                    },
                    "DisableValidFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates if the Valid function key has to be deactivated (value True). During the processing of an Input command `GetConfirmation`, `SiteManager`, or `GetMenuEntry`."
                    },
                    "MenuBackFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "If it has the value True, it indicates that the Back function key (respectively Home function key) may be used to go back to the immediate upper level of the menu. If it has the value False, it indicates that the current menu level has no parent menu."
                    }
                },
                "required": [
                    "Device",
                    "InfoQualify",
                    "InputCommand"
                ]
            },
            "Input": {
                "type": "object",
                "properties": {
                    "InputCommand": {
                        "$ref": "#/components/schemas/InputCommand",
                        "description": "Type of requested input. Can be: **GetConfirmation**, **TextString**, **DigitString**, **DecimalString** or **GetMenuEntry**.\nPossible values:\n* **DecimalString**\n* **DigitString**\n* **GetAnyKey**\n* **GetConfirmation**\n* **GetFunctionKey**\n* **GetMenuEntry**\n* **Password**\n* **SiteManager**\n* **TextString**"
                    },
                    "ConfirmedFlag": {
                        "type": "boolean",
                        "description": "Indicates te response of the user from the `GetConfirmation` input command."
                    },
                    "FunctionKey": {
                        "type": "integer",
                        "description": "The number of the function key which is typed by the Customer on the POI or the Cashier on the Sale Terminal."
                    },
                    "TextInput": {
                        "type": "string",
                        "description": "The text typed by the Customer on the POI or by the Cashier on the Sale Terminal."
                    },
                    "DigitInput": {
                        "type": "integer",
                        "description": "The digits typed by the Customer on the POI or by the Cashier on the Sale Terminal."
                    },
                    "Password": {
                        "type": "string",
                        "description": "The text password typed by the Customer on the POI or by the Cashier on the Sale Terminal."
                    },
                    "MenuEntryNumber": {
                        "type": "array",
                        "items": {
                            "type": "integer",
                            "description": "The index of the menu item (from 1 to n) which is selected by the Cashier on the Sale Terminal. The value -1 indicates that the immediate upper level of the menu is requested. The value 0 indicates that the root of the menu is requested."
                        },
                        "description": "The index of the menu item (from 1 to n) which is selected by the Cashier on the Sale Terminal. The value -1 indicates that the immediate upper level of the menu is requested. The value 0 indicates that the root of the menu is requested."
                    }
                },
                "required": [
                    "InputCommand"
                ]
            },
            "InputResult": {
                "type": "object",
                "properties": {
                    "Device": {
                        "$ref": "#/components/schemas/Device",
                        "description": "Logical device located on a Sale Terminal or a POI Terminal, in terms of class of information to output (display, print or store), or input (keyboard) for the Cashier or the Customer.\nPossible values:\n* **CashierDisplay**\n* **CashierInput**\n* **CustomerDisplay**\n* **CustomerInput**"
                    },
                    "InfoQualify": {
                        "$ref": "#/components/schemas/InfoQualify",
                        "description": "Qualification of the information to send to an output logical device, to display or print to the Cashier or the Customer.\nPossible values:\n* **CustomerAssistance**\n* **Display**\n* **Document**\n* **Error**\n* **Input**\n* **POIReplication**\n* **Receipt**\n* **Sound**\n* **Status**\n* **Voucher**"
                    },
                    "Response": {
                        "$ref": "#/components/schemas/Response"
                    },
                    "Input": {
                        "$ref": "#/components/schemas/Input",
                        "description": "Data entered by the user, related to the input command."
                    }
                },
                "required": [
                    "Device",
                    "InfoQualify",
                    "Response"
                ]
            },
            "PrintOutput": {
                "type": "object",
                "properties": {
                    "DocumentQualifier": {
                        "$ref": "#/components/schemas/DocumentQualifier",
                        "description": "Qualification of the document to print to the Cashier or the Customer. Allows the manager of the printer, Sale or POI Terminal, to send information to a physical printer or to use the paper type accordingly.\nPossible values:\n* **CashierReceipt**\n* **CustomerReceipt**\n* **Document**\n* **Journal**\n* **SaleReceipt**\n* **Voucher**"
                    },
                    "ResponseMode": {
                        "$ref": "#/components/schemas/ResponseMode",
                        "description": "Message response awaited by the initiator of the Request. Allows various types and synchronisation of requests for Print or Sound.\nPossible values:\n* **Immediate**\n* **NotRequired**\n* **PrintEnd**\n* **SoundEnd**"
                    },
                    "IntegratedPrintFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Type of the print integrated in other prints. Allows a separated printing (paper cut if available), or integration with the sale receipt or other print. If the printing is integrated, the response is always immediate, even if the `ResponseMode` is set to `PrintEnd`."
                    },
                    "RequiredSignatureFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates that the cardholder payment receipt requires a physical signature by the Customer."
                    },
                    "OutputContent": {
                        "$ref": "#/components/schemas/OutputContent",
                        "description": "Content to display or print. This is a sequence of elements if they have different formats."
                    }
                },
                "required": [
                    "DocumentQualifier",
                    "ResponseMode",
                    "OutputContent"
                ]
            },
            "SoundContent": {
                "type": "object",
                "properties": {
                    "SoundFormat": {
                        "$ref": "#/components/schemas/SoundFormat",
                        "description": "Possible values:\n* **MessageRef**\n* **SoundRef**\n* **Text**"
                    },
                    "Language": {
                        "type": "string",
                        "pattern": "^[a-z]{2,2}$"
                    },
                    "ReferenceID": {
                        "type": "string",
                        "pattern": "^.+$"
                    },
                    "Text": {
                        "type": "string",
                        "pattern": "^.+$"
                    }
                },
                "required": [
                    "SoundFormat"
                ]
            },
            "CardHolderPIN": {
                "type": "object",
                "properties": {
                    "EncrPINBlock": {
                        "type": "string"
                    },
                    "PINFormat": {
                        "$ref": "#/components/schemas/PINFormat",
                        "description": "Possible values:\n* **ISO0**\n* **ISO1**\n* **ISO2**\n* **ISO3**"
                    },
                    "AdditionalInput": {
                        "type": "string",
                        "pattern": "^.+$"
                    }
                },
                "required": [
                    "EncrPINBlock",
                    "PINFormat"
                ]
            },
            "ICCResetData": {
                "type": "object",
                "properties": {
                    "ATRValue": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.{1,100}$"
                    },
                    "CardStatusWords": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.{2,2}$"
                    }
                }
            },
            "SecurityTrailer": {
                "type": "object",
                "description": "It contains information related to the security of the message.\nSecurityTrailer as used by Adyen.",
                "properties": {
                    "AdyenCryptoVersion": {
                        "type": "integer"
                    },
                    "KeyIdentifier": {
                        "type": "string",
                        "pattern": "^.+$"
                    },
                    "KeyVersion": {
                        "type": "integer"
                    },
                    "Nonce": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.+$"
                    },
                    "Hmac": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.+$"
                    }
                },
                "required": [
                    "AdyenCryptoVersion",
                    "KeyIdentifier",
                    "KeyVersion",
                    "Nonce",
                    "Hmac"
                ]
            },
            "LoginRequest": {
                "type": "object",
                "description": "It conveys information related to the session (period between a Login and the following Logout) to process.\nContent of the `LoginRequest` message.",
                "properties": {
                    "DateTime": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Date and Time. In the Login request message, the Sale System gives its date and time to the POI System. In the Login response, the POI System gives its date and time to the Sale System."
                    },
                    "SaleSoftware": {
                        "$ref": "#/components/schemas/SaleSoftware",
                        "description": "Information related to the software of the Sale System which manages the Sale to POI protocol."
                    },
                    "SaleTerminalData": {
                        "$ref": "#/components/schemas/SaleTerminalData",
                        "description": "Information related to the software and hardware feature of the Sale Terminal.\nPresent if the login involve a Sale Terminal."
                    },
                    "TrainingModeFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Training mode.\nThis flag indicates to the POI that the entire session will be not used to make real transaction, but is used for test of system or operator training."
                    },
                    "OperatorLanguage": {
                        "type": "string",
                        "pattern": "^[a-z]{2,2}$",
                        "description": "Language of the Cashier or Operator.\nDefault value for Device type displays."
                    },
                    "OperatorID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the Cashier or Operator.\nFour conditions to send it:\n* The Sale System wants the POI to log it in the transaction log.\n* Because of reconciliation with total on OperatorID.\n* Because the POI needs it.\n* Acquirer or issuer need it."
                    },
                    "ShiftNumber": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Shift number.\nSame as OperatorID."
                    },
                    "TokenRequestedType": {
                        "$ref": "#/components/schemas/TokenRequestedType",
                        "description": "Type of token replacing the PAN of a payment card to identify the payment\n mean of the customer. It allows, for a merchant, to use a token for a transaction\n only or for a longer period.\nPossible values:\n* **Customer**\n* **Transaction**"
                    },
                    "CustomerOrderReq": {
                        "$ref": "#/components/schemas/CustomerOrderReq",
                        "description": "List of customer order open, closed or both to be sent in the response messages.\nPossible values:\n* **Both**\n* **Closed**\n* **Open**"
                    },
                    "POISerialNumber": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Serial number of a POI Terminal.\nIf the login involve a POI Terminal and not the first Login to the POI System."
                    }
                },
                "required": [
                    "DateTime",
                    "SaleSoftware",
                    "OperatorLanguage"
                ]
            },
            "LogoutRequest": {
                "type": "object",
                "description": "Empty.\nContent of the Logout Request message.",
                "properties": {
                    "MaintenanceAllowed": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates that the POI terminal is able to or has to go to maintenance. Sent in the Logout Request to express that after closing the session, the POI may go to maintenance."
                    }
                }
            },
            "EnableServiceRequest": {
                "type": "object",
                "description": "It conveys the services that will be enabled for the POI Terminal without the request of the Sale System, and a possible invitation for the Customer to start the services.\nContent of the Enable Service Request message.",
                "properties": {
                    "TransactionAction": {
                        "$ref": "#/components/schemas/TransactionAction",
                        "description": "Action to realise on a transaction. In an `EnableService` request message:\n  - Starts a transaction by a swipe-ahead mechanism, with the services which are enabled.\n  - Aborts a swipe-ahead transaction or started by a `CardAcquisition`, and not followed by a service request from the Sale System to complete the transaction.\nPossible values:\n* **AbortTransaction**\n* **StartTransaction**"
                    },
                    "ServicesEnabled": {
                        "$ref": "#/components/schemas/ServicesEnabled",
                        "description": "Services which are enabled before the start-up of a transaction.\nMandatory if `TransactionAction` is `StartTransaction`, absent if not.\nPossible values:\n* **CardAcquisition**\n* **Loyalty**\n* **Payment**"
                    },
                    "DisplayOutput": {
                        "$ref": "#/components/schemas/DisplayOutput",
                        "description": "Information to display and the way to process the display."
                    }
                },
                "required": [
                    "TransactionAction"
                ]
            },
            "AdminRequest": {
                "type": "object",
                "description": "Empty.\nContent of the Custom Admin Request message.",
                "properties": {
                    "ServiceIdentification": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of the administrative service to process."
                    }
                }
            },
            "PaymentRequest": {
                "type": "object",
                "description": "Request sent to terminal to initiate payment.\nIt conveys Information related to the Payment transaction to process.\nContent of the `PaymentRequest` message.",
                "properties": {
                    "SaleData": {
                        "$ref": "#/components/schemas/SaleData",
                        "description": "Data related to the Sale System."
                    },
                    "PaymentTransaction": {
                        "$ref": "#/components/schemas/PaymentTransaction",
                        "description": "Data related to the payment and loyalty transaction."
                    },
                    "PaymentData": {
                        "$ref": "#/components/schemas/PaymentData",
                        "description": "Data related to the payment transaction.\nIf one data element is present."
                    },
                    "LoyaltyData": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/LoyaltyData"
                        },
                        "description": "Data related to a Loyalty program or account.\nLoyalty cards used with the payment transaction and read by the Sale System."
                    }
                },
                "required": [
                    "SaleData",
                    "PaymentTransaction"
                ]
            },
            "CardAcquisitionRequest": {
                "type": "object",
                "description": "It conveys Information related to the payment and loyalty cards to read and analyse. This message pair is usually followed by a message pair (e.g. payment or loyalty) which refers to this Card Acquisition message pair.\nContent of the Card Acquisition Request message.",
                "properties": {
                    "SaleData": {
                        "$ref": "#/components/schemas/SaleData",
                        "description": "Data related to the Sale System."
                    },
                    "CardAcquisitionTransaction": {
                        "$ref": "#/components/schemas/CardAcquisitionTransaction",
                        "description": "Data related to the payment and loyalty card acquisition."
                    }
                },
                "required": [
                    "SaleData",
                    "CardAcquisitionTransaction"
                ]
            },
            "LoyaltyRequest": {
                "type": "object",
                "description": "It conveys Information related to the Loyalty transaction to process.\nContent of the Loyalty Request message.",
                "properties": {
                    "SaleData": {
                        "$ref": "#/components/schemas/SaleData",
                        "description": "Data related to the Sale System."
                    },
                    "LoyaltyTransaction": {
                        "$ref": "#/components/schemas/LoyaltyTransaction",
                        "description": "Data related to the loyalty transaction."
                    },
                    "LoyaltyData": {
                        "$ref": "#/components/schemas/LoyaltyData",
                        "description": "Data related to a Loyalty program or account."
                    }
                },
                "required": [
                    "SaleData",
                    "LoyaltyTransaction",
                    "LoyaltyData"
                ]
            },
            "StoredValueRequest": {
                "type": "object",
                "description": "It conveys Information related to the Stored Value transaction to process.\nContent of the Stored Value Request message.",
                "properties": {
                    "SaleData": {
                        "$ref": "#/components/schemas/SaleData",
                        "description": "Data related to the Sale System."
                    },
                    "StoredValueData": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/StoredValueData"
                        },
                        "description": "Data related to the stored value card."
                    }
                },
                "required": [
                    "SaleData",
                    "StoredValueData"
                ]
            },
            "ReversalRequest": {
                "type": "object",
                "description": "It conveys Information related to the reversal of a previous payment or a loyalty transaction.\nContent of the Reversal Request message.",
                "properties": {
                    "SaleData": {
                        "$ref": "#/components/schemas/SaleData"
                    },
                    "OriginalPOITransaction": {
                        "$ref": "#/components/schemas/OriginalPOITransaction",
                        "description": "Identification of a previous POI transaction."
                    },
                    "ReversedAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Amount of the payment or loyalty to reverse..\nReversedAmount is implicitely the AuthorizedAmount if absent."
                    },
                    "ReversalReason": {
                        "$ref": "#/components/schemas/ReversalReason",
                        "description": "Reason of the payment or loyalty reversal..\nPossible values:\n* **CustCancel**\n* **Malfunction**\n* **MerchantCancel**\n* **Unable2Compl**"
                    },
                    "CustomerOrder": {
                        "$ref": "#/components/schemas/CustomerOrder"
                    }
                },
                "required": [
                    "OriginalPOITransaction",
                    "ReversalReason"
                ]
            },
            "ReconciliationRequest": {
                "type": "object",
                "description": "Content of the Reconciliation Request message.\nIt conveys Information related to the Reconciliation requested by the Sale System.",
                "properties": {
                    "ReconciliationType": {
                        "$ref": "#/components/schemas/ReconciliationType",
                        "description": "Type of Reconciliation requested by the Sale to the POI.\nPossible values:\n* **AcquirerReconciliation**\n* **AcquirerSynchronisation**\n* **PreviousReconciliation**\n* **SaleReconciliation**"
                    },
                    "AcquirerID": {
                        "type": "array",
                        "items": {
                            "type": "integer",
                            "description": "Identification of the Acquirer.\nCould be present only if ReconciliationType is AcquirerReconciliation or AcquirerSynchronisation."
                        },
                        "description": "Identification of the Acquirer.\nCould be present only if ReconciliationType is AcquirerReconciliation or AcquirerSynchronisation."
                    },
                    "POIReconciliationID": {
                        "type": "integer",
                        "description": "Identification of the reconciliation period between Sale and POI.\nAbsent if ReconciliationType is not PreviousReconciliation."
                    }
                },
                "required": [
                    "ReconciliationType"
                ]
            },
            "GetTotalsRequest": {
                "type": "object",
                "description": "It conveys information from the Sale System related to the scope and the format of the totals to be computed by the POI System.\nContent of the Get Totals Request message.",
                "properties": {
                    "TotalDetails": {
                        "$ref": "#/components/schemas/TotalDetails",
                        "description": "Indicates the hierarchical structure of the reconciliation result of the Sale to POI reconciliation.\nRequired to present totals per value of element included in this cluster (POI Terminal, Sale Terminal, Cashier, Shift, TotalsGroupID).\nPossible values:\n* **OperatorID**\n* **POIID**\n* **SaleID**\n* **ShiftNumber**\n* **TotalsGroupID**"
                    },
                    "TotalFilter": {
                        "$ref": "#/components/schemas/TotalFilter",
                        "description": "Filter to compute the totals.\nUsed for the Get Totals, to request totals for a (or a combination of) particular value of the POI Terminal, Sale Terminal, Cashier, Shift, or TotalsGroupID."
                    }
                }
            },
            "BalanceInquiryRequest": {
                "type": "object",
                "description": "It conveys Information related to the account for which a Balance Inquiry is requested.\nContent of the Balance Inquiry Request message.",
                "properties": {
                    "PaymentAccountReq": {
                        "$ref": "#/components/schemas/PaymentAccountReq",
                        "description": "Data related to the account pointed by the payment card."
                    },
                    "LoyaltyAccountReq": {
                        "$ref": "#/components/schemas/LoyaltyAccountReq",
                        "description": "Data related to a requested Loyalty program or account."
                    }
                }
            },
            "TransactionStatusRequest": {
                "type": "object",
                "description": "Content of the TransactionStatus Request message.\nIt conveys Information requested for status of the last or current Payment, Loyalty or Reversal transaction.",
                "properties": {
                    "MessageReference": {
                        "$ref": "#/components/schemas/MessageReference",
                        "description": "Identification of a previous POI transaction.\nPresent if it contains any data."
                    },
                    "ReceiptReprintFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Request to reprint the POI receipt(s). Allows reprinting a receipt with a `TransactionStatus` message"
                    },
                    "DocumentQualifier": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/DocumentQualifier"
                        },
                        "description": "Qualification of the document to print to the Cashier or the Customer. Allows the manager of the printer, Sale or POI Terminal, to send the information to a particular physical printer or to use the paper type accordingly.\nPossible values:\n* **CashierReceipt**\n* **CustomerReceipt**\n* **Document**\n* **Journal**\n* **SaleReceipt**\n* **Voucher**"
                    }
                }
            },
            "AbortRequest": {
                "type": "object",
                "description": "Body of the Abort Request message.\nIt conveys Information requested for identification of the message request carrying the transaction to abort. A message to display on the CustomerError Device could be sent by the Sale System (DisplayOutput).",
                "properties": {
                    "MessageReference": {
                        "$ref": "#/components/schemas/MessageReference",
                        "description": "Identification of a previous POI transaction."
                    },
                    "AbortReason": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Reason of aborting a transaction."
                    },
                    "DisplayOutput": {
                        "$ref": "#/components/schemas/DisplayOutput",
                        "description": "Information to display and the way to process the display.\nTo display an abort message to the Customer."
                    }
                },
                "required": [
                    "MessageReference",
                    "AbortReason"
                ]
            },
            "EventNotification": {
                "type": "object",
                "description": "Content of the EventNotification message.\nIt conveys Information related to the event, and possible action (maintenance, message to display).",
                "properties": {
                    "TimeStamp": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Date and time of a transaction for the Sale System, the POI System or the Acquirer."
                    },
                    "EventToNotify": {
                        "$ref": "#/components/schemas/EventToNotify",
                        "description": "Event the POI notifies to the Sale System.\nPossible values:\n* **Abort**\n* **BeginMaintenance**\n* **CardInserted**\n* **CardRemoved**\n* **Completed**\n* **CustomerLanguage**\n* **EndMaintenance**\n* **Initialised**\n* **KeyPressed**\n* **OutOfOrder**\n* **Reject**\n* **SaleAdmin**\n* **SaleWakeUp**\n* **SecurityAlarm**\n* **Shutdown**\n* **StopAssistance**\n* **UseAnotherCardForPreauth**"
                    },
                    "EventDetails": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Information about the event the POI notifies to the Sale System.\nIf present, the Sale logs it for further examination."
                    },
                    "RejectedMessage": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.+$",
                        "description": "Message request rejected by the receiver.\nMandatory if EventToNotify is Reject, absent in other cases."
                    },
                    "MaintenanceRequiredFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates if the occurred event requires maintenance call or action."
                    },
                    "DisplayOutput": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/DisplayOutput"
                        },
                        "description": "Information to display and the way to process the display.\nTo display an event message."
                    }
                },
                "required": [
                    "TimeStamp",
                    "EventToNotify"
                ]
            },
            "DiagnosisRequest": {
                "type": "object",
                "description": "It conveys Information related to the target POI for which the diagnosis is requested.\nContent of the Diagnosis Request message.",
                "properties": {
                    "POIID": {
                        "type": "string",
                        "pattern": "^.+$",
                        "description": "Identification of a POI System or a POI Terminal for the Sale to POI protocol.\nMessageHeader.POIID."
                    },
                    "HostDiagnosisFlag": {
                        "type": "boolean",
                        "default": false,
                        "description": "Indicates if Host Diagnosis are required."
                    },
                    "AcquirerID": {
                        "type": "array",
                        "items": {
                            "type": "integer",
                            "description": "Identification of the Acquirer.\nPresent if requesting the diagnosis of these hosts only."
                        },
                        "description": "Identification of the Acquirer.\nPresent if requesting the diagnosis of these hosts only."
                    }
                }
            },
            "DisplayRequest": {
                "type": "object",
                "description": "It conveys the data to display and the way to process the display. It contains the complete content to display. It might contain an operation (the DisplayOutput element) per Display Device type.\nContent of the Display Request message.",
                "properties": {
                    "DisplayOutput": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/DisplayOutput"
                        },
                        "description": "Information to display and the way to process the display.\nComplete display content for output devices. At most one DisplayOutput per Device/ InfoQualify pair."
                    }
                },
                "required": [
                    "DisplayOutput"
                ]
            },
            "InputRequest": {
                "type": "object",
                "description": "Content of the `InputRequest` message. It conveys the data to display and how to process it. In addition to the display on the Input Device, it might contain an operation (the `DisplayOutput` element) per Display Device type.",
                "properties": {
                    "DisplayOutput": {
                        "$ref": "#/components/schemas/DisplayOutput",
                        "description": "Information to display and the way to process the display."
                    },
                    "InputData": {
                        "$ref": "#/components/schemas/InputData",
                        "description": "Information related to an Input request. It conveys the target input logical device, the type of input command, and possible minimum and maximum length of the input. In addition, if the requestor might require to receive an Event Notification if a card is inserted in a card reader, with the `NotifyCardInputFlag`."
                    }
                },
                "required": [
                    "InputData"
                ]
            },
            "InputUpdate": {
                "type": "object",
                "description": "Definition: Content of the Input Update message. : It conveys\nupdate of the display of an Input request in progress.",
                "properties": {
                    "MessageReference": {
                        "$ref": "#/components/schemas/MessageReference"
                    },
                    "OutputContent": {
                        "$ref": "#/components/schemas/OutputContent"
                    },
                    "MenuEntry": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/MenuEntry"
                        }
                    },
                    "OutputSignature": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.+$"
                    },
                    "MinLength": {
                        "type": "integer"
                    },
                    "MaxLength": {
                        "type": "integer"
                    },
                    "MaxDecimalLength": {
                        "type": "integer"
                    }
                },
                "required": [
                    "MessageReference",
                    "OutputContent"
                ]
            },
            "PrintRequest": {
                "type": "object",
                "description": "Content of the Print Request message.\nIt conveys the complete data to print and how to process the print.",
                "properties": {
                    "PrintOutput": {
                        "$ref": "#/components/schemas/PrintOutput",
                        "description": "Information to print and how to process it."
                    }
                },
                "required": [
                    "PrintOutput"
                ]
            },
            "CardReaderAPDURequest": {
                "type": "object",
                "description": "It contains the APDU request to send to the chip of the card, and a possible invitation message to display on the CashierInterface or the CustomerInterface.\nContent of the Card Reader APDU Request message.",
                "properties": {
                    "APDUClass": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.{1,1}$",
                        "description": "Class field of the APDU command (CLA). APDU request for Card Reader device request. For specific card like synchronous card, a private value should be used in accordance to ISO 7816- 4 (private range D0-FE)."
                    },
                    "APDUInstruction": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.{1,1}$",
                        "description": "Instruction field of the APDU command (INS)."
                    },
                    "APDUPar1": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.{1,1}$",
                        "description": "Parameter 1 field of the APDU command (P1)."
                    },
                    "APDUPar2": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.{1,1}$",
                        "description": "Parameter 2 field of the APDU command(P2)."
                    },
                    "APDUData": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.+$",
                        "description": "Data field of the APDU command (Lc + Data)."
                    },
                    "APDUExpectedLength": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.{1,1}$",
                        "description": "Expected length of the data field of the APDU response to the command (Le)."
                    }
                },
                "required": [
                    "APDUClass",
                    "APDUInstruction",
                    "APDUPar1",
                    "APDUPar2"
                ]
            },
            "LoginResponse": {
                "type": "object",
                "description": "It conveys Information related to the Login to process.\nContent of the Login Response message.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    },
                    "POISystemData": {
                        "$ref": "#/components/schemas/POISystemData",
                        "description": "Information related to the POI System.\nReturned if the response result is Success."
                    },
                    "TokenRequestStatus": {
                        "type": "boolean",
                        "description": "If token is managed by the POI, the status of the token request."
                    },
                    "CustomerOrderStatus": {
                        "type": "boolean",
                        "description": "If the POI supports the CustomerOrder functionality, the status of the customer order."
                    }
                },
                "required": [
                    "Response"
                ]
            },
            "LogoutResponse": {
                "type": "object",
                "description": "It conveys the result of the Logout.\nContent of the Logout Response message.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    }
                },
                "required": [
                    "Response"
                ]
            },
            "EnableServiceResponse": {
                "type": "object",
                "description": "It conveys the result of the Enable Service processing.\nContent of the Enable Service Response message.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    }
                },
                "required": [
                    "Response"
                ]
            },
            "AdminResponse": {
                "type": "object",
                "description": "It conveys the result of the Custom Admin.\nContent of the Custom Admin Response message.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    }
                },
                "required": [
                    "Response"
                ]
            },
            "PaymentResponse": {
                "type": "object",
                "description": "It conveys Information related to the Payment transaction processed by the POI System.\nContent of the Payment Response message.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    },
                    "SaleData": {
                        "$ref": "#/components/schemas/SaleData",
                        "description": "Data related to the Sale System.\nCopy."
                    },
                    "POIData": {
                        "$ref": "#/components/schemas/POIData",
                        "description": "Data related to the POI System."
                    },
                    "PaymentResult": {
                        "$ref": "#/components/schemas/PaymentResult",
                        "description": "Data related to the result of a processed payment transaction.\nIf one data element is present."
                    },
                    "LoyaltyResult": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/LoyaltyResult"
                        },
                        "description": "Data related to the result of a processed loyalty transaction.\nLoyalty cards used with the payment transaction."
                    },
                    "PaymentReceipt": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PaymentReceipt"
                        },
                        "description": "Customer or Merchant payment receipt. If the payment receipts are printed by the Sale system and the POI or the Sale does not implement the Print exchange (Basic profile)."
                    },
                    "CustomerOrder": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CustomerOrder"
                        }
                    }
                },
                "required": [
                    "Response",
                    "SaleData",
                    "POIData"
                ]
            },
            "CardAcquisitionResponse": {
                "type": "object",
                "description": "It conveys Information related to the payment and loyalty cards read and processed by the POI System and entered by the Customer.\nContent of the Card Acquisition Response message.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    },
                    "SaleData": {
                        "$ref": "#/components/schemas/SaleData",
                        "description": "Data related to the Sale System."
                    },
                    "POIData": {
                        "$ref": "#/components/schemas/POIData",
                        "description": "Data related to the POI System."
                    },
                    "PaymentBrand": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "pattern": "^.+$",
                            "description": "Type of payment card.\nBrands available for payment by the card and not chosen by the Customer."
                        },
                        "description": "Type of payment card.\nBrands available for payment by the card and not chosen by the Customer."
                    },
                    "PaymentInstrumentData": {
                        "$ref": "#/components/schemas/PaymentInstrumentData",
                        "description": "Data related to the instrument of payment for the transaction.\nIf this type of payment card is configured to send information if the CardAcquisition response."
                    },
                    "LoyaltyAccount": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/LoyaltyAccount"
                        },
                        "description": "Data related to the loyalty System."
                    }
                },
                "required": [
                    "Response",
                    "SaleData",
                    "POIData"
                ]
            },
            "LoyaltyResponse": {
                "type": "object",
                "description": "It conveys Information related to the Loyalty transaction processed by the POI System.\nContent of the Loyalty Response message.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    },
                    "SaleData": {
                        "$ref": "#/components/schemas/SaleData",
                        "description": "Data related to the Sale System."
                    },
                    "POIData": {
                        "$ref": "#/components/schemas/POIData",
                        "description": "Data related to the POI System."
                    },
                    "LoyaltyResult": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/LoyaltyResult"
                        },
                        "description": "Data related to the result of a processed loyalty transaction.\nIf loyalty account identified."
                    },
                    "PaymentReceipt": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PaymentReceipt"
                        }
                    }
                },
                "required": [
                    "Response",
                    "SaleData",
                    "POIData"
                ]
            },
            "StoredValueResponse": {
                "type": "object",
                "description": "It conveys Information related to the Stored Value transaction processed by the POI System.\nContent of the Stored Value Response message.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    },
                    "SaleData": {
                        "$ref": "#/components/schemas/SaleData",
                        "description": "Data related to the Sale System."
                    },
                    "POIData": {
                        "$ref": "#/components/schemas/POIData",
                        "description": "Data related to the POI System."
                    },
                    "StoredValueResult": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/StoredValueResult"
                        },
                        "description": "Result of loading/reloading a stored value card..\nIf StoredValueResponse.Result is Success or Partial, one entry per StoredValueRequest.StoredValueData loaded or activated."
                    },
                    "PaymentReceipt": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PaymentReceipt"
                        }
                    }
                },
                "required": [
                    "Response",
                    "SaleData",
                    "POIData"
                ]
            },
            "ReversalResponse": {
                "type": "object",
                "description": "It conveys Information related to the reversal processed by the POI System.\nContent of the Reversal Response message.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    },
                    "POIData": {
                        "$ref": "#/components/schemas/POIData",
                        "description": "Data related to the POI System.\nIf Result is Success."
                    },
                    "OriginalPOITransaction": {
                        "$ref": "#/components/schemas/OriginalPOITransaction"
                    },
                    "ReversedAmount": {
                        "type": "number",
                        "maximum": 99999999.999999,
                        "minimum": 0.0,
                        "description": "Amount of the payment or loyalty to reverse..\nCopy."
                    },
                    "CustomerOrder": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CustomerOrder"
                        }
                    },
                    "PaymentReceipt": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PaymentReceipt"
                        }
                    }
                },
                "required": [
                    "Response"
                ]
            },
            "ReconciliationResponse": {
                "type": "object",
                "description": "It conveys Information related to the Reconciliation transaction processed by the POI System.\nContent of the Reconciliation Response message.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    },
                    "ReconciliationType": {
                        "$ref": "#/components/schemas/ReconciliationType",
                        "description": "Type of Reconciliation requested by the Sale to the POI.\nPossible values:\n* **AcquirerReconciliation**\n* **AcquirerSynchronisation**\n* **PreviousReconciliation**\n* **SaleReconciliation**"
                    },
                    "POIReconciliationID": {
                        "type": "integer",
                        "description": "Identification of the reconciliation period between Sale and POI.\nAbsent if ReconciliationType is `AcquirerReconciliation`."
                    },
                    "TransactionTotals": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/TransactionTotals"
                        },
                        "description": "Result of the Sale to POI Reconciliation processing.\nIf `Response.Result` is Success."
                    }
                },
                "required": [
                    "Response",
                    "ReconciliationType"
                ]
            },
            "GetTotalsResponse": {
                "type": "object",
                "description": "Content of the Reconciliation Response message.\nIt conveys Information related to the Reconciliation transaction processed by the POI System.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    },
                    "POIReconciliationID": {
                        "type": "integer",
                        "description": "Identification of the reconciliation period between Sale and POI."
                    },
                    "TransactionTotals": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/TransactionTotals"
                        },
                        "description": "Result of the Sale to POI Reconciliation processing.\nIf `Response.Result` is Success."
                    }
                },
                "required": [
                    "Response",
                    "POIReconciliationID"
                ]
            },
            "BalanceInquiryResponse": {
                "type": "object",
                "description": "Content of the Balance Inquiry Response message.\nIt conveys the balance and the identification of the associated payment, loyalty or stored value account.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    },
                    "PaymentAccountStatus": {
                        "$ref": "#/components/schemas/PaymentAccountStatus",
                        "description": "Data related to the result of a Balance Inquiry request.\nIf BalanceInquiryRequest. PaymentAccount present."
                    },
                    "LoyaltyAccountStatus": {
                        "$ref": "#/components/schemas/LoyaltyAccountStatus",
                        "description": "Data related to the result of a loyalty Balance Inquiry.\nIf BalanceInquiryRequest. LoyaltyData present."
                    },
                    "PaymentReceipt": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PaymentReceipt"
                        }
                    }
                },
                "required": [
                    "Response"
                ]
            },
            "CardReaderAPDUResponse": {
                "type": "object",
                "description": "Content of the Card Reader APDU Response message.\nIt contains the result of the requested service, APDU response sent by the chip of the card in response to the APDU request.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    },
                    "APDUData": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.+$",
                        "description": "Data field of the APDU command (Lc + Data)."
                    },
                    "CardStatusWords": {
                        "type": "string",
                        "format": "byte",
                        "pattern": "^.{2,2}$",
                        "description": "Status of a smartcard response to a command (SW1-SW2)."
                    }
                },
                "required": [
                    "Response",
                    "CardStatusWords"
                ]
            },
            "TransactionStatusResponse": {
                "type": "object",
                "description": "Content of the TransactionStatus Response message.\nIt conveys Information related to the status of the last or current Payment, Loyalty or Reversal transaction.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    },
                    "MessageReference": {
                        "$ref": "#/components/schemas/MessageReference",
                        "description": "Identification of a previous POI transaction.\nIf `Response.Result` is Success."
                    },
                    "RepeatedMessageResponse": {
                        "$ref": "#/components/schemas/RepeatedMessageResponse",
                        "description": "Content of the requested Message Response.\nIf Result is Success (process completed)."
                    }
                },
                "required": [
                    "Response"
                ]
            },
            "AbortResponse": {
                "type": "object",
                "description": "A successful `AbortRequest` returns a response with a **200 OK** HTTP status code and no body.",
                "properties": {}
            },
            "DiagnosisResponse": {
                "type": "object",
                "description": "It conveys the result of the requested diagnosis and a possible message to display on a logical device.\nContent of the Diagnosis Response message.",
                "properties": {
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    },
                    "LoggedSaleID": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "pattern": "^.+$",
                            "description": "Sale Terminal logged to.\nIf Sale Terminal logged to this POI Terminal."
                        },
                        "description": "Sale Terminal logged to.\nIf Sale Terminal logged to this POI Terminal."
                    },
                    "POIStatus": {
                        "$ref": "#/components/schemas/POIStatus",
                        "description": "State of a POI Terminal.\nIf `Response.Result` is Success."
                    },
                    "HostStatus": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/HostStatus"
                        },
                        "description": "State of a Host."
                    }
                },
                "required": [
                    "Response"
                ]
            },
            "DisplayResponse": {
                "type": "object",
                "description": "It conveys the result of the display, parallel to the message request, except if response not required and absent.\nContent of the Display Response message.",
                "properties": {
                    "OutputResult": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/OutputResult"
                        },
                        "description": "Information related to the result the output (display, print, input).\nOne per DisplayOutput item of the request, and in the same order."
                    }
                },
                "required": [
                    "OutputResult"
                ]
            },
            "InputResponse": {
                "type": "object",
                "description": "It conveys the result of the input or the result of the outputs, parallel to the message request, except if response not required and absent.\nContent of the Input Response message.",
                "properties": {
                    "OutputResult": {
                        "$ref": "#/components/schemas/OutputResult",
                        "description": "Information related to the result the output (display, print, input).\nIf DisplayOutput present in the request."
                    },
                    "InputResult": {
                        "$ref": "#/components/schemas/InputResult",
                        "description": "Contains the result and the content of the input."
                    }
                },
                "required": [
                    "InputResult"
                ]
            },
            "PrintResponse": {
                "type": "object",
                "description": "It conveys the result of the print, parallel to the message request, except if response not required and absent.\nContent of the Print Response message.",
                "properties": {
                    "DocumentQualifier": {
                        "$ref": "#/components/schemas/DocumentQualifier",
                        "description": "Qualification of the document to print to the Cashier or the Customer. Allows the manager of the printer, Sale or POI Terminal, to send information to a physical printer or to use the paper type accordingly.\nPossible values:\n* **CashierReceipt**\n* **CustomerReceipt**\n* **Document**\n* **Journal**\n* **SaleReceipt**\n* **Voucher**"
                    },
                    "Response": {
                        "$ref": "#/components/schemas/Response",
                        "description": "Result of a message request processing."
                    }
                },
                "required": [
                    "DocumentQualifier",
                    "Response"
                ]
            }
        },
        "securitySchemes": {
            "ApiKeyAuth": {
                "in": "header",
                "name": "X-API-Key",
                "type": "apiKey"
            },
            "BasicAuth": {
                "scheme": "basic",
                "type": "http"
            }
        }
    }
}