{
  "openapi": "3.0.0",
  "info": {
    "description": "The Electrum Account Payments Service describes an interface for performing account payments\n                  transactions. These transactions require a reference number which uniquely identifies the account\n                  processor, account issuer, as well as the customer account, and is typically printed on a customer\n                  invoice. The customer then makes use of this reference number to make a payment towards the\n                  corresponding account. This API is often used to pay bills or to top up accounts.",
    "version": "4.19.0",
    "title": "Account Payments Service Interface",
    "contact": {
      "name": "Electrum Support",
      "url": "https://electrum.co.za/contact",
      "email": "support@electrum.co.za"
    },
    "license": {
      "name": "Apache 2.0",
      "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
    }
  },
  "paths": {
    "/accountLookups/policy/{requestId}": {
      "post": {
        "summary": "requestPolicyInfo",
        "description": "Requests the current status of the policy identified by the supplied `policyNumber`. In the case where this function is not supported by the service provider, a `501` HTTP status code may be returned.<br><br>This operation is deprecated. Use `lookupBills` instead.",
        "operationId": "requestPolicyInfo",
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "description": "The randomly generated UUID of this request",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PolicyLookupRequest"
              }
            }
          },
          "description": "A policy lookup request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PolicyLookupResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "501": {
            "description": "Not implemented",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ],
        "deprecated": true
      }
    },
    "/accountLookups/traffic/{requestId}": {
      "post": {
        "summary": "requestTrafficFineInfo",
        "description": "Requests information related to a specific traffic fine as identified by the `noticeNumber`. In the case where this function is not supported by the service provider, a `501` HTTP status code will be returned.<br><br>This operation is deprecated. Use `lookupBills` instead.",
        "operationId": "requestTrafficFineInfo",
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "description": "The randomly generated UUID of this request",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TrafficFineLookupRequest"
              }
            }
          },
          "description": "A traffic fine lookup request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrafficFineLookupResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "501": {
            "description": "Not implemented",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ],
        "deprecated": true
      }
    },
    "/accountLookups/{requestId}": {
      "post": {
        "summary": "requestAccountInfo",
        "description": "Requests the current status of the account identified by the supplied `accountRef`. In the case where this function is not supported by the service provider, a `501` HTTP status code will be returned. <br><br>This operation is deprecated. Use `lookupBills` instead.",
        "operationId": "requestAccountInfo",
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "description": "The randomly generated UUID of this request",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountLookupRequest"
              }
            }
          },
          "description": "An account lookup request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountLookupResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "501": {
            "description": "Not implemented",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ],
        "deprecated": true
      }
    },
    "/billers": {
      "get": {
        "summary": "listBillers",
        "description": "Request details on managed billers. Not all service providers support biller management. In the case where the function is not supported a `501` HTTP status code will be returned.",
        "operationId": "listBillers",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillerListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "501": {
            "description": "Not implemented"
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ]
      }
    },
    "/bills/{referenceNumber}": {
      "get": {
        "summary": "lookupBills",
        "description": "Requests all bills related to a specific reference number. The reference number can be in the form of a traffic fine notice number, ID number, or account reference number. Not all reference types are supported by all service providers and in these cases a `501` HTTP status code may be returned.",
        "operationId": "lookupBills",
        "parameters": [
          {
            "name": "referenceNumber",
            "in": "path",
            "description": "The reference number to use for the lookup",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "billsType",
            "in": "query",
            "description": "An enumerated value describing which bills to return, e.g., traffic fines or account bills.",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "TRAFFIC_FINES",
                "ACCOUNT_BILLS"
              ]
            }
          },
          {
            "name": "requestId",
            "in": "query",
            "description": "The unique ID of this request",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "merchantId",
            "in": "query",
            "description": "The assigned merchant identifier. Also known as card acceptor ID.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "terminalId",
            "in": "query",
            "description": "The ID that uniquely identifies each device or system in an originator's institution that is capable of sending requests",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "originatorInstId",
            "in": "query",
            "description": "Identifies the institution from which the transaction originates. Value to be assigned by Electrum.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "receiverId",
            "in": "query",
            "description": "Originating, acquiring, processing, or receiving institution details",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "basketRef",
            "in": "query",
            "description": "Used to group multiple transactions which would otherwise be considered independent",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "originatorCountryCode",
            "in": "query",
            "description": "The country code where the originator is located from ISO 3166-1 alpha-2, e.g. South African country code is encoded as ZA",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillLookupResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "501": {
            "description": "Not implemented",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ]
      }
    },
    "/payments/policy/{paymentId}": {
      "post": {
        "summary": "createPolicyPayment",
        "description": "Requests that a payment be made towards a policy.",
        "operationId": "createPolicyPayment",
        "parameters": [
          {
            "name": "paymentId",
            "in": "path",
            "description": "The randomly generated UUID of this request",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PolicyPaymentRequest"
              }
            }
          },
          "description": "A policy payment request",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "headers": {
              "Location": {
                "description": "The location of the created payments resource",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PolicyPaymentResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ],
        "deprecated": true
      }
    },
    "/payments/status/{paymentMsgId}": {
      "get": {
        "summary": "paymentStatus",
        "description": "In the case where a payment request reaches a timeout, the purchaseStatus operation should be used to determine the outcome of a prior payment. This operation will return the same PurchaseResponse or ErrorDetail as would have been returned had the original purchase completed normally. This operation should only be used for facilitating a single to dual flow on a digital channel.",
        "operationId": "paymentStatus",
        "parameters": [
          {
            "name": "paymentMsgId",
            "in": "path",
            "description": "The randomly generated UUID of the original failed PaymentRequest.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not found"
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ]
      }
    },
    "/payments/traffic/{paymentId}": {
      "post": {
        "summary": "createTrafficFinePayment",
        "description": "Requests that a payment be made towards a traffic fine.",
        "operationId": "createTrafficFinePayment",
        "parameters": [
          {
            "name": "paymentId",
            "in": "path",
            "description": "The randomly generated UUID of this request",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TrafficFinePaymentRequest"
              }
            }
          },
          "description": "A traffic fine payment request",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "headers": {
              "Location": {
                "description": "The location of the created payments resource",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrafficFinePaymentResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ]
      }
    },
    "/payments/{paymentId}": {
      "post": {
        "summary": "createAccountPayment",
        "description": "Requests that a payment be made towards a customer account.",
        "operationId": "createAccountPayment",
        "parameters": [
          {
            "name": "paymentId",
            "in": "path",
            "description": "The randomly generated UUID of this request",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentRequest"
              }
            }
          },
          "description": "A payment request",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "headers": {
              "Location": {
                "description": "The location of the created payments resource",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ]
      }
    },
    "/payments/{paymentId}/confirmations/{adviceId}": {
      "post": {
        "summary": "confirmPayment",
        "description": "If a payment request (`createPayment` operation) is successful, and returns a `201` status, it must be confirmed or cancelled in order to complete the transaction. Confirmation of a payment (this operation) will only succeed if the payment was previously created, but not cancelled. This operation must be repeated until a final HTTP status code is received (i.e. `202` or `400`). If a `5xx` status code is received, or no response is received, the request must be repeated. The confirmation operation is idempotent and may be called repeatedly on the same payment resource without adverse effect.",
        "operationId": "confirmPayment",
        "parameters": [
          {
            "name": "adviceId",
            "in": "path",
            "description": "The randomly generated UUID of this request",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "paymentId",
            "in": "path",
            "description": "The UUID generated for the original `createPayment` request",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TenderAdvice"
              }
            }
          },
          "description": "A payment confirmation",
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicAdviceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ]
      }
    },
    "/payments/{paymentId}/reversals/{adviceId}": {
      "post": {
        "summary": "reversePayment",
        "description": "If a payment request (`createPayment` operation) fails with a `5xx` HTTP status code, or no response was received within the timeout limit, it must be reversed. This is to ensure that the payment is not reflected on the customer's account. The reversal (this operation) must be repeated until a final HTTP status code is received (i.e. `202` or `400`). The operation is idempotent and so may be called repeatedly on the same payment resource without adverse effect.",
        "operationId": "reversePayment",
        "parameters": [
          {
            "name": "adviceId",
            "in": "path",
            "description": "The randomly generated UUID of this request",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "paymentId",
            "in": "path",
            "description": "The UUID generated for the original createPayment request",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BasicReversal"
              }
            }
          },
          "description": "A payment reversal",
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicAdviceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ]
      }
    },
    "/refunds/{refundId}": {
      "post": {
        "summary": "createRefund",
        "description": "If a payment is completed and confirmed successfully, some services allow customers to request a refund for a limited time after the payment took place. Not all service providers support refunds. In the case where this function is not supported, a `501` HTTP status code will be returned",
        "operationId": "createRefund",
        "parameters": [
          {
            "name": "refundId",
            "in": "path",
            "description": "The randomly generated UUID of this request",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RefundRequest"
              }
            }
          },
          "description": "A refund request",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "headers": {
              "Location": {
                "description": "The location of the created refund resource",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RefundResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "501": {
            "description": "Not implemented",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ]
      }
    },
    "/refunds/{refundId}/confirmations/{adviceId}": {
      "post": {
        "summary": "confirmRefund",
        "description": "If a refund request (`createRefund` operation) previously succeeded with a `201` status it must be confirmed or reversed to complete the transaction. The refund confirmation (this operation) can only succeed if a refund was created but not reversed. The operation must be repeated until a final HTTP status code is received (i.e. `202` or `400`). If a `5xx` status code is received, or no response is received, the request must be repeated. The operation may be called repeatedly on the same refund resource without adverse effect.",
        "operationId": "confirmRefund",
        "parameters": [
          {
            "name": "adviceId",
            "in": "path",
            "description": "The randomly generated UUID of this request",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "refundId",
            "in": "path",
            "description": "The UUID generated for the corresponding `createRefund` request",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BasicAdvice"
              }
            }
          },
          "description": "A refund confirmation",
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicAdviceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ]
      }
    },
    "/refunds/{refundId}/reversals/{adviceId}": {
      "post": {
        "summary": "reverseRefund",
        "description": "If a refund request (`createRefund` operation) fails with a `5xx` HTTP status code, or no response was received within the timeout period, it must be reversed. This is to ensure the refund is not refelected on a customer's account. The refund reversal (this operation) must be repeated until a final HTTP status code is received (i.e. `202` or `400`). The operation is idempotent and may be called repeatedly on the same payment resource without adverse effect.",
        "operationId": "reverseRefund",
        "parameters": [
          {
            "name": "adviceId",
            "in": "path",
            "description": "The randomly generated UUID of this request",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "refundId",
            "in": "path",
            "description": "The UUID generated for the corresponding `createRefund` request",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BasicReversal"
              }
            }
          },
          "description": "A refund reversal",
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicAdviceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2": []
          }
        ]
      }
    }
  },
  "servers": [
    {
      "url": "https://[placeholder].dev/billpay/v4"
    }
  ],
  "components": {
    "securitySchemes": {
      "httpBasic": {
        "description": "HTTP basic authentication. If you are doing a client side integration, Electrum will provide the username and password to the client. If you are doing a server side implementation, you will be expected to provide these credentials.",
        "type": "http",
        "scheme": "basic"
      },
      "oauth2": {
        "description": "OAuth2 password authentication, where the token URL, client ID, client secret, username, and password will be provided by Electrum if you implementing a client side integration. If you are doing a server side implementation, you will be expected to provide these credentials.",
        "type": "oauth2",
        "flows": {
          "password": {
            "tokenUrl": "https://auth.electrum.dev/auth/realms/Example-Realm/protocol/openid-connect/token",
            "scopes": {}
          }
        }
      }
    },
    "schemas": {
      "Account": {
        "type": "object",
        "required": [
          "accountRef"
        ],
        "properties": {
          "accountRef": {
            "type": "string",
            "description": "A reference number identifying the bill payments processor, bill issuer, and customer",
            "minLength": 6,
            "maxLength": 40
          },
          "dueDate": {
            "type": "string",
            "format": "date",
            "description": "The effective date of the current billing period in the format yyyy-MM-dd"
          }
        },
        "description": "Represents the status of a customer account."
      },
      "AccountLookupRequest": {
        "type": "object",
        "required": [
          "accountRef",
          "client",
          "id",
          "originator",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "selectedCategory": {
            "$ref": "#/components/schemas/Category"
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/SlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "accountRef": {
            "type": "string",
            "description": "A reference number identifying the bill payments processor, bill issuer, and customer",
            "minLength": 6,
            "maxLength": 40
          }
        },
        "description": "The data required to request account info. Replaced by new API call getBillInfo in v4.14.0."
      },
      "AccountLookupResponse": {
        "type": "object",
        "required": [
          "account",
          "amounts",
          "client",
          "id",
          "originator",
          "slipData",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/BillSlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "amounts": {
            "$ref": "#/components/schemas/BillpayAmounts"
          },
          "partPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be less than the amount due. Defaults to true.",
            "default": false
          },
          "overPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be more than the amount due. Defaults to true.",
            "default": false
          },
          "account": {
            "$ref": "#/components/schemas/Account"
          },
          "paymentOriginatorDetailsRequired": {
            "type": "boolean",
            "description": "A boolean flag which indicates whether payment originator details are required in the following payment request for FATF compliance.",
            "default": false
          }
        },
        "description": "The data resulting from an account lookup request. Replaced by a general BillLookupResponse in v4.14.0."
      },
      "AccountPayment": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PaymentMethod"
          },
          {
            "type": "object",
            "properties": {
              "srcAccountId": {
                "type": "string",
                "description": "Source AccountId from which this payment will be made."
              },
              "srcCustomerId": {
                "type": "string",
                "description": "Source CustomerId from which this payment will be made."
              },
              "destAccountId": {
                "type": "string",
                "description": "Destination AccountId to which this payment will be made."
              },
              "destCustomerId": {
                "type": "string",
                "description": "Destination CustomerId to which this payment will be made."
              }
            },
            "description": "Model for an account-to-account payment method"
          }
        ]
      },
      "Amounts": {
        "type": "object",
        "properties": {
          "requestAmount": {
            "$ref": "#/components/schemas/LedgerAmount"
          },
          "approvedAmount": {
            "$ref": "#/components/schemas/LedgerAmount"
          },
          "feeAmount": {
            "$ref": "#/components/schemas/LedgerAmount"
          },
          "balanceAmount": {
            "$ref": "#/components/schemas/LedgerAmount"
          },
          "additionalAmounts": {
            "type": "object",
            "description": "Any additional amounts that are involved in a transaction which don't appropriately fit into the other amount fields.",
            "additionalProperties": {
              "$ref": "#/components/schemas/LedgerAmount"
            }
          }
        },
        "description": "Amounts which make up the transaction. Absent amounts have zero value."
      },
      "An32TokenPayment": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PaymentMethod"
          },
          {
            "type": "object",
            "required": [
              "token"
            ],
            "properties": {
              "token": {
                "type": "string",
                "description": "32 character alphanumeric code which identifies a token",
                "pattern": "[a-zA-Z0-9]{32}"
              }
            },
            "description": "Model for token-based payments"
          }
        ]
      },
      "Barcode": {
        "type": "object",
        "required": [
          "data",
          "encoding"
        ],
        "properties": {
          "data": {
            "type": "string",
            "description": "Data to be encoded in the barcode"
          },
          "encoding": {
            "type": "string",
            "description": "Specifies the encoding used in the barcode"
          }
        },
        "description": "Used to indicate barcode information for a slip line."
      },
      "BasicAdvice": {
        "type": "object",
        "required": [
          "id",
          "requestId",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this advice, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "requestId": {
            "type": "string",
            "description": "The UUID identifying the request that this advice relates to"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "The unaltered thirdPartyIdentifiers array as supplied in the related BasicResponse message. Required if thirdPartyIdentifiers field was present in the BasicResponse. If no thirdPartyIdentifiers was received in the BasicResponse or no BasicResponse was received then this should be set to the thirdPartyIdentifiers sent in the original request.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "amounts": {
            "$ref": "#/components/schemas/Amounts"
          }
        },
        "description": "The data required in all advice messages"
      },
      "BasicAdviceResponse": {
        "type": "object",
        "required": [
          "id",
          "requestId",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this advice, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "requestId": {
            "type": "string",
            "description": "The UUID identifying the request that this advice relates to"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "The unaltered thirdPartyIdentifiers array as supplied in the related BasicResponse message. Required if thirdPartyIdentifiers field was present in the BasicResponse. If no thirdPartyIdentifiers was received in the BasicResponse or no BasicResponse was received then this should be set to the thirdPartyIdentifiers sent in the original request.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "amounts": {
            "$ref": "#/components/schemas/Amounts"
          }
        },
        "description": "Basic advice response information."
      },
      "BasicReversal": {
        "type": "object",
        "required": [
          "id",
          "requestId",
          "reversalReason",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this advice, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "requestId": {
            "type": "string",
            "description": "The UUID identifying the request that this advice relates to"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "The unaltered thirdPartyIdentifiers array as supplied in the related BasicResponse message. Required if thirdPartyIdentifiers field was present in the BasicResponse. If no thirdPartyIdentifiers was received in the BasicResponse or no BasicResponse was received then this should be set to the thirdPartyIdentifiers sent in the original request.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "amounts": {
            "$ref": "#/components/schemas/Amounts"
          },
          "reversalReason": {
            "type": "string",
            "description": "The reason for the reversal",
            "enum": [
              "TIMEOUT",
              "CANCELLED",
              "RESPONSE_NOT_FINAL",
              "REFUND",
              "VOID"
            ]
          }
        },
        "description": "An advice that notifies of the negative completion of a transaction. This can be either due to customer cancellation, as a result of receiving a non-final response (or no response) to a request, customer being refunded during the transaction, or the transaction being voided"
      },
      "Bill": {
        "type": "object",
        "required": [
          "amounts",
          "referenceNumber",
          "slipData",
          "type"
        ],
        "properties": {
          "referenceNumber": {
            "type": "string",
            "description": "A reference number identifying the bill payments processor, bill issuer, and customer",
            "minLength": 6,
            "maxLength": 40
          },
          "dueDate": {
            "type": "string",
            "format": "date",
            "description": "The effective date of the current billing period in the format yyyy-MM-dd"
          },
          "type": {
            "type": "string",
            "description": "The type of bill, e.g., traffic fine, account bill, etc.",
            "enum": [
              "TRAFFIC_FINE",
              "ACCOUNT",
              "UNKNOWN"
            ]
          },
          "amounts": {
            "$ref": "#/components/schemas/BillpayAmounts"
          },
          "slipData": {
            "$ref": "#/components/schemas/BillSlipData"
          },
          "partPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be less than the amount due. Defaults to null.",
            "default": false
          },
          "overPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be more than the amount due. Defaults to null.",
            "default": false
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          }
        }
      },
      "BillLookupResponse": {
        "type": "object",
        "required": [
          "time"
        ],
        "properties": {
          "requestId": {
            "type": "string",
            "description": "A unique ID used to identify the request"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision."
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers that identify the transaction within each entity's system",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "bills": {
            "type": "array",
            "description": "A list of all bills related to a reference number. If no bills were found, this defaults to an empty list",
            "items": {
              "$ref": "#/components/schemas/Bill"
            }
          },
          "paymentOriginatorDetailsRequired": {
            "type": "boolean",
            "description": "A boolean flag which indicates whether payment originator details are required in the following payment request for FATF compliance.",
            "default": false
          }
        }
      },
      "BillSlipData": {
        "type": "object",
        "properties": {
          "messageLines": {
            "type": "array",
            "description": "An array of text lines and optional formatting to be printed on the customer slip.",
            "items": {
              "$ref": "#/components/schemas/SlipLine"
            }
          },
          "slipWidth": {
            "type": "integer",
            "format": "int32",
            "description": "The width of the slip in normal (unformatted) characters."
          },
          "issuerReference": {
            "type": "string",
            "description": "An identifier that is printed on the customer slip and uniquely identifies the payment on the service provider's system. This value is used by the customer to request a refund when the service supports this function, and it is thus important that this number is unique.",
            "pattern": "[A-Z0-9]{1,40}"
          },
          "phoneNumber": {
            "type": "string",
            "description": "The call centre phone number"
          }
        },
        "description": "Data that may be printed on the customer slip for information purposes"
      },
      "Biller": {
        "type": "object",
        "required": [
          "billerInstitution"
        ],
        "properties": {
          "billerInstitution": {
            "$ref": "#/components/schemas/Institution"
          },
          "categories": {
            "type": "array",
            "description": "List of Categories to which this biller belongs",
            "items": {
              "$ref": "#/components/schemas/Category"
            }
          },
          "allowed": {
            "type": "boolean",
            "description": "Indicates if transactions should be blocked without sending them to the upstream biller. Transactions will be blocked if allowed is set to false, otherwise they will not be blocked.",
            "default": false
          }
        },
        "description": "Contains the information about the biller"
      },
      "BillerListResponse": {
        "type": "object",
        "properties": {
          "billers": {
            "type": "array",
            "description": "The billers supported by the catalog hosted on the Electrum system",
            "items": {
              "$ref": "#/components/schemas/Biller"
            }
          }
        },
        "description": "The data resulting from a biller list request"
      },
      "BillpayAmounts": {
        "type": "object",
        "properties": {
          "requestAmount": {
            "$ref": "#/components/schemas/LedgerAmount"
          },
          "approvedAmount": {
            "$ref": "#/components/schemas/LedgerAmount"
          },
          "feeAmount": {
            "$ref": "#/components/schemas/LedgerAmount"
          },
          "balanceAmount": {
            "$ref": "#/components/schemas/LedgerAmount"
          },
          "additionalAmounts": {
            "type": "object",
            "description": "Any additional amounts that are involved in a transaction which don't appropriately fit into the other amount fields.",
            "additionalProperties": {
              "$ref": "#/components/schemas/LedgerAmount"
            }
          },
          "maxPayableAmount": {
            "$ref": "#/components/schemas/LedgerAmount"
          },
          "minPayableAmount": {
            "$ref": "#/components/schemas/LedgerAmount"
          }
        },
        "description": "Amounts which make up the transaction. Absent amounts have zero value."
      },
      "CardPayment": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PaymentMethod"
          },
          {
            "type": "object",
            "required": [
              "pan"
            ],
            "properties": {
              "posInfo": {
                "$ref": "#/components/schemas/PosInfo"
              },
              "pin": {
                "$ref": "#/components/schemas/Pin"
              },
              "pan": {
                "type": "string",
                "description": "Primary account number that uniquely identifies this card.",
                "pattern": "[0-9]{1,19}"
              },
              "expiryDate": {
                "type": "string",
                "description": "The card expiry date, in YYMM format.",
                "pattern": "[0-9]{4}"
              },
              "threeDSecureData": {
                "$ref": "#/components/schemas/ThreeDSecureData"
              },
              "encryptedPin": {
                "$ref": "#/components/schemas/EncryptedPin"
              }
            },
            "description": "Model for card-based payments"
          }
        ]
      },
      "Category": {
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier for this category",
            "minLength": 0,
            "maxLength": 40
          },
          "name": {
            "type": "string",
            "description": "Category name",
            "minLength": 0,
            "maxLength": 100
          }
        },
        "description": "Category to which a bill issuer can belong"
      },
      "Customer": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "description": "The customer's first name(s)",
            "minLength": 0,
            "maxLength": 40
          },
          "lastName": {
            "type": "string",
            "description": "The customer's last name",
            "minLength": 0,
            "maxLength": 40
          },
          "address": {
            "type": "string",
            "description": "The customer's address",
            "minLength": 0,
            "maxLength": 80
          },
          "idNumber": {
            "type": "string",
            "description": "The customer's ID Number",
            "minLength": 0,
            "maxLength": 13
          },
          "idType": {
            "type": "string",
            "description": "The type of ID document presented by the customer",
            "enum": [
              "NATIONAL_ID",
              "PASSPORT",
              "DRIVERS_LICENCE",
              "ASYLUM_DOCUMENT",
              "UNKNOWN"
            ]
          },
          "contactNumber": {
            "type": "string",
            "description": "The customer's contact number",
            "minLength": 0,
            "maxLength": 40
          }
        },
        "description": "A bill payment customer"
      },
      "EncryptedPin": {
        "type": "object",
        "required": [
          "pinBlock"
        ],
        "properties": {
          "pinBlock": {
            "type": "string",
            "description": "Hexadecimal string representing the encrypted PIN to be used.",
            "pattern": "[a-fA-F0-9]{16}|[a-fA-F0-9]{32}"
          },
          "encryptionParameters": {
            "$ref": "#/components/schemas/EncryptionParameters"
          }
        },
        "description": "A PIN required to authorise a transaction. EncryptionParameters should be provided where the service will be performing operations on the encrypted PIN, such as PIN translation. Only the PIN block need be provided where the service is expected to forward it to a third party, where the calling client and said third party have agreed upon encryption parameters beforehand."
      },
      "EncryptionParameters": {
        "type": "object",
        "required": [
          "accountNumber"
        ],
        "properties": {
          "pinBlockFormat": {
            "type": "string",
            "description": "PIN block format that was used when encrypting the PIN. Defaults to ISO_9564_FORMAT_0.",
            "default": "ISO_9564_FORMAT_0",
            "enum": [
              "ISO_9564_FORMAT_0",
              "ISO_9564_FORMAT_1",
              "ISO_9564_FORMAT_3",
              "ISO_9564_FORMAT_4"
            ]
          },
          "accountNumber": {
            "type": "string",
            "description": "12 digit account number used when encrypting the PIN. When account number is a card number (PAN), this is the rightmost 12 digits excluding the check digit.",
            "pattern": "[0-9]{12}"
          },
          "keyIndex": {
            "type": "integer",
            "format": "int32",
            "description": "Index of the key under which the PIN block is encrypted. Where keys are exchanged in TR-31 KeyBlock format, this should be set to the key version number field of the key used for encryption. If this field is not populated, the most recently exchanged key will be used. Note that omitting this field may require a higher level of synchronization during automated key exchange in some environments."
          }
        },
        "description": "Parameters pertaining to the generation of the PIN block. Required if the service is to perform any operations on the encrypted PIN, such as translation."
      },
      "ErrorDetail": {
        "type": "object",
        "required": [
          "errorMessage",
          "errorType",
          "id",
          "requestType"
        ],
        "properties": {
          "errorType": {
            "type": "string",
            "description": "The type of error that occurred",
            "enum": [
              "DUPLICATE_RECORD",
              "FORMAT_ERROR",
              "FUNCTION_NOT_SUPPORTED",
              "GENERAL_ERROR",
              "INVALID_AMOUNT",
              "ROUTING_ERROR",
              "TRANSACTION_NOT_SUPPORTED",
              "UNABLE_TO_LOCATE_RECORD",
              "UNKNOWN_CUSTOMER_ACCOUNT",
              "UPSTREAM_UNAVAILABLE",
              "ACCOUNT_ALREADY_SETTLED",
              "INVALID_PRODUCT",
              "INVALID_MERCHANT",
              "RECEIVER_BLACKLISTED",
              "LUHN_CHECK_FAILED",
              "BLOCKED_USING_SETTLEMENT_ENTITY",
              "BELOW_MINIMUM_ALLOWED_AMOUNT",
              "ABOVE_MAXIMUM_ALLOWED_AMOUNT",
              "CUSTOMER_ACCOUNT_ERROR",
              "DO_NOT_HONOR",
              "SYSTEM_MALFUNCTION",
              "TRANSACTION_DECLINED",
              "INVALID_ACCOUNT",
              "LIMIT_EXCEEDED",
              "INSUFFICIENT_FUNDS",
              "OUTCOME_UNKNOWN",
              "PAYMENT_ORIGINATOR_ERROR"
            ]
          },
          "errorMessage": {
            "type": "string",
            "description": "A short description of the error",
            "minLength": 0,
            "maxLength": 20
          },
          "requestType": {
            "type": "string",
            "description": "The type of request being processed when the error occurred. Refer to Release Notes for deprecated values.",
            "enum": [
              "ACCOUNT_LOOKUP_REQUEST",
              "TRAFFIC_FINE_LOOKUP_REQUEST",
              "POLICY_LOOKUP_REQUEST",
              "PAYMENT_REQUEST",
              "TRAFFIC_FINE_PAYMENT_REQUEST",
              "POLICY_PAYMENT_REQUEST",
              "PAYMENT_REVERSAL",
              "TRAFFIC_FINE_PAYMENT_REVERSAL",
              "PAYMENT_CONFIRMATION",
              "TRAFFIC_FINE_PAYMENT_CONFIRMATION",
              "REFUND_REQUEST",
              "REFUND_REVERSAL",
              "REFUND_CONFIRMATION",
              "BILLER_LIST_REQUEST",
              "LOOKUP_BILLS",
              "PAYMENT_STATUS_REQUEST"
            ]
          },
          "id": {
            "type": "string",
            "description": "The UUID of the message for which error occurred."
          },
          "originalId": {
            "type": "string",
            "description": "The UUID of the original request message in the case of an error occurring for an advice message."
          },
          "detailMessage": {
            "type": "object",
            "description": "A free form detailed description of a particular failure condition may optionally be supplied"
          }
        },
        "description": "Represents the outcome of a completed transaction"
      },
      "HashedPinParameters": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the hashing algorithm.",
            "minLength": 0,
            "maxLength": 20
          }
        },
        "description": "A collection of parameters required to reliably reproduce the hashed value (excluding the actual PIN value)."
      },
      "Institution": {
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The institution's ID. API implementations should take care to set this field as appropriate for the implementation."
          },
          "name": {
            "type": "string",
            "description": "The institutions's name",
            "minLength": 0,
            "maxLength": 40
          }
        },
        "description": "Originating, acquiring, processing, or receiving institution details"
      },
      "LedgerAmount": {
        "type": "object",
        "required": [
          "amount",
          "currency"
        ],
        "properties": {
          "amount": {
            "type": "integer",
            "format": "int64",
            "description": "Amount in minor denomination, e.g. R799.95 is encoded as 79995"
          },
          "currency": {
            "type": "string",
            "description": "Three digit currency number from ISO 4217, e.g. South African Rand is encoded as 710",
            "pattern": "[0-9]{3}"
          },
          "ledgerIndicator": {
            "type": "string",
            "description": "Indicates whether this amount is a debit or a credit. Only required when the amount can be either a debit or a credit",
            "enum": [
              "DEBIT",
              "CREDIT"
            ]
          }
        },
        "description": "An amount object only containing value and currency, and optionally an indicator of DEBIT/CREDIT"
      },
      "LoyaltyCardPayment": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PaymentMethod"
          },
          {
            "type": "object",
            "required": [
              "cardNumber"
            ],
            "properties": {
              "cardNumber": {
                "type": "string",
                "description": "Primary account number of the loyalty programme card used to make a payment",
                "pattern": "[0-9]{16}"
              }
            },
            "description": "Model for payments made using loyalty programme cards"
          }
        ]
      },
      "Merchant": {
        "type": "object",
        "required": [
          "merchantId",
          "merchantName",
          "merchantType"
        ],
        "properties": {
          "merchantType": {
            "type": "string",
            "description": "The assigned four digit merchant category code",
            "pattern": "[0-9]{4}"
          },
          "merchantId": {
            "type": "string",
            "description": "The assigned merchant identifier. Also known as card acceptor id",
            "minLength": 15,
            "maxLength": 15
          },
          "merchantName": {
            "$ref": "#/components/schemas/MerchantName"
          }
        },
        "description": "Merchant related data. Must be included if available"
      },
      "MerchantName": {
        "type": "object",
        "required": [
          "city",
          "country",
          "name",
          "region"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The merchant or trading as name associated with the merchant",
            "minLength": 0,
            "maxLength": 23
          },
          "city": {
            "type": "string",
            "description": "The city where the merchant is located",
            "minLength": 0,
            "maxLength": 13
          },
          "region": {
            "type": "string",
            "description": "The state or region where the merchant is located",
            "minLength": 0,
            "maxLength": 2
          },
          "country": {
            "type": "string",
            "description": "The country where the merchant is located",
            "minLength": 0,
            "maxLength": 2
          }
        },
        "description": "A container object representing the Merchant Name and Location"
      },
      "Originator": {
        "type": "object",
        "required": [
          "institution",
          "merchant",
          "terminalId"
        ],
        "properties": {
          "institution": {
            "$ref": "#/components/schemas/Institution"
          },
          "terminalId": {
            "type": "string",
            "description": "The ID that uniquely identifies each device or system in an originator's institution capable of sending requests. Required for transactions initiated from physical card entry or point-of-sale devices",
            "minLength": 8,
            "maxLength": 8
          },
          "merchant": {
            "$ref": "#/components/schemas/Merchant"
          },
          "operatorId": {
            "type": "string",
            "description": "The ID that uniquely identifies the person operating the terminal specified by the terminalId field.",
            "minLength": 0,
            "maxLength": 30
          },
          "channelId": {
            "type": "string",
            "description": "The ID that uniquely identifies the originator's channel that this transaction was received through.",
            "minLength": 0,
            "maxLength": 50
          }
        },
        "description": "The Originator object encapsulates data relating to the originator of the transaction"
      },
      "PaymentMethod": {
        "type": "object",
        "required": [
          "type"
        ],
        "discriminator": {
          "propertyName": "type"
        },
        "properties": {
          "type": {
            "type": "string",
            "description": "The general method of payment used",
            "enum": [
              "AN_32_TOKEN",
              "LOYALTY_CARD",
              "CARD",
              "ACCOUNT",
              "REWARD",
              "WALLET",
              "QR"
            ]
          },
          "name": {
            "type": "string",
            "description": "The specific method of payment used"
          },
          "amount": {
            "$ref": "#/components/schemas/LedgerAmount"
          },
          "issuer": {
            "$ref": "#/components/schemas/Institution"
          },
          "pin": {
            "$ref": "#/components/schemas/Pin"
          },
          "proxy": {
            "type": "string",
            "description": "An alternative identifier for the customer's source of funds. Acts as a stand in for the customer identifier. E.g. a customer's MSISDN or email address.",
            "minLength": 0,
            "maxLength": 40
          },
          "proxyType": {
            "type": "string",
            "description": "An enumerated value describing the type of value used as the proxy.",
            "enum": [
              "MSISDN",
              "EMAIL",
              "UNKNOWN"
            ]
          }
        },
        "description": "Base model for all payment types"
      },
      "PaymentRequest": {
        "type": "object",
        "required": [
          "accountRef",
          "amounts",
          "client",
          "id",
          "originator",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "selectedCategory": {
            "$ref": "#/components/schemas/Category"
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/SlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "accountRef": {
            "type": "string",
            "description": "A reference number identifying the bill payments processor, bill issuer, and customer",
            "minLength": 6,
            "maxLength": 40
          },
          "amounts": {
            "$ref": "#/components/schemas/BillpayAmounts"
          },
          "tenders": {
            "type": "array",
            "description": "Contains the tenders for the payment request if available",
            "items": {
              "$ref": "#/components/schemas/Tender"
            }
          },
          "paymentMethods": {
            "type": "array",
            "description": "Contains the payment method for the payment request if available",
            "items": {
              "$ref": "#/components/schemas/PaymentMethod"
            }
          },
          "lookupId": {
            "type": "string",
            "description": "The UUID identifying the lookup that this request relates to"
          }
        },
        "description": "Represents a request to perform a payment"
      },
      "PaymentResponse": {
        "type": "object",
        "required": [
          "account",
          "amounts",
          "client",
          "id",
          "originator",
          "slipData",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/BillSlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "amounts": {
            "$ref": "#/components/schemas/BillpayAmounts"
          },
          "partPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be less than the amount due. Defaults to true.",
            "default": false
          },
          "overPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be more than the amount due. Defaults to true.",
            "default": false
          },
          "account": {
            "$ref": "#/components/schemas/Account"
          },
          "tenders": {
            "type": "array",
            "description": "Contains the tenders for the payment response if available",
            "items": {
              "$ref": "#/components/schemas/Tender"
            }
          },
          "paymentMethods": {
            "type": "array",
            "description": "Contains the payment method for the payment response if available",
            "items": {
              "$ref": "#/components/schemas/PaymentMethod"
            }
          }
        },
        "description": "Represents a response to a payment request"
      },
      "Pin": {
        "type": "object",
        "required": [
          "type"
        ],
        "discriminator": {
          "propertyName": "type"
        },
        "properties": {
          "type": {
            "type": "string",
            "description": "Whether the PIN is communicated in the clear or encrypted.",
            "enum": [
              "CLEAR_PIN",
              "ENCRYPTED_PIN",
              "HASHED_PIN"
            ]
          }
        },
        "description": "Base model for capturing either a clear PIN or encrypted PIN"
      },
      "PinClear": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Pin"
          },
          {
            "type": "object",
            "required": [
              "pin"
            ],
            "properties": {
              "pin": {
                "type": "string",
                "description": "A clear PIN",
                "pattern": ".{0,20}"
              }
            },
            "description": "A clear PIN required to authorise a transaction."
          }
        ]
      },
      "PinEncrypted": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Pin"
          },
          {
            "type": "object",
            "required": [
              "pinBlock"
            ],
            "properties": {
              "pinBlock": {
                "type": "string",
                "description": "Hexadecimal string representing the encrypted PIN to be used.",
                "pattern": "[a-fA-F0-9]{16}|[a-fA-F0-9]{32}"
              },
              "encryptionParameters": {
                "$ref": "#/components/schemas/EncryptionParameters"
              }
            },
            "description": "A PIN required to authorise a transaction. EncryptionParameters should be provided where the service will be performing operations on the encrypted PIN, such as PIN translation. Only the PIN block need be provided where the service is expected to forward it to a third party, where the calling client and said third party have agreed upon encryption parameters beforehand."
          }
        ]
      },
      "PinHashed": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Pin"
          },
          {
            "type": "object",
            "required": [
              "hash"
            ],
            "properties": {
              "hash": {
                "type": "string",
                "description": "A hashed PIN expressed as an ASCII string of hexadecimal values.",
                "pattern": "[0-9,A-F]{1,512}"
              },
              "hashedPinParameters": {
                "$ref": "#/components/schemas/HashedPinParameters"
              }
            },
            "description": "A PIN, required to authorise a transaction, which has been hashed according to some hashing algorithm."
          }
        ]
      },
      "Policy": {
        "type": "object",
        "required": [
          "policyNumber"
        ],
        "properties": {
          "policyNumber": {
            "type": "string",
            "description": "A reference number identifying the policy to the processor.",
            "minLength": 6,
            "maxLength": 40
          },
          "dueDate": {
            "type": "string",
            "format": "date",
            "description": "The date by which the next policy payment must be made in the format yyyy-MM-dd."
          }
        },
        "description": "Represents the status of a customer policy. Replaced by a general Bill object in v4.14.0."
      },
      "PolicyLookupRequest": {
        "type": "object",
        "required": [
          "client",
          "id",
          "originator",
          "policyNumber",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "selectedCategory": {
            "$ref": "#/components/schemas/Category"
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/SlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "policyNumber": {
            "type": "string",
            "description": "A reference number identifying the policy to the service provider.",
            "minLength": 6,
            "maxLength": 40
          }
        },
        "description": "The data required to request policy info. Replaced by new API call getBillInfo in v4.14.0."
      },
      "PolicyLookupResponse": {
        "type": "object",
        "required": [
          "amounts",
          "client",
          "id",
          "originator",
          "policy",
          "slipData",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/BillSlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "amounts": {
            "$ref": "#/components/schemas/BillpayAmounts"
          },
          "partPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be less than the amount due. Defaults to true.",
            "default": false
          },
          "overPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be more than the amount due. Defaults to true.",
            "default": false
          },
          "policy": {
            "$ref": "#/components/schemas/Policy"
          }
        },
        "description": "The data resulting from a policy lookup request. Replaced by a general BillLookupResponse in v4.14.0."
      },
      "PolicyPaymentRequest": {
        "type": "object",
        "required": [
          "amounts",
          "client",
          "id",
          "originator",
          "policyNumber",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "selectedCategory": {
            "$ref": "#/components/schemas/Category"
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/SlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "policyNumber": {
            "type": "string",
            "description": "A reference number identifying the policy to the service provider.",
            "minLength": 6,
            "maxLength": 40
          },
          "amounts": {
            "$ref": "#/components/schemas/BillpayAmounts"
          },
          "tenders": {
            "type": "array",
            "description": "Contains the tenders for the payment request if available",
            "items": {
              "$ref": "#/components/schemas/Tender"
            }
          },
          "paymentMethods": {
            "type": "array",
            "description": "Contains the payment method for the payment request if available",
            "items": {
              "$ref": "#/components/schemas/PaymentMethod"
            }
          },
          "lookupId": {
            "type": "string",
            "description": "The UUID identifying the lookup that this request relates to"
          }
        },
        "description": "Represents a request to perform a payment of a traffic fine."
      },
      "PolicyPaymentResponse": {
        "type": "object",
        "required": [
          "amounts",
          "client",
          "id",
          "originator",
          "policy",
          "slipData",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/BillSlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "amounts": {
            "$ref": "#/components/schemas/BillpayAmounts"
          },
          "partPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be less than the amount due. Defaults to true.",
            "default": false
          },
          "overPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be more than the amount due. Defaults to true.",
            "default": false
          },
          "policy": {
            "$ref": "#/components/schemas/Policy"
          }
        },
        "description": "Represents a response to a policy payment request"
      },
      "PosEntryMode": {
        "type": "object",
        "required": [
          "panEntryMode",
          "pinEntryCapability"
        ],
        "properties": {
          "panEntryMode": {
            "type": "string",
            "description": "Describes the method by which the PAN was captured.",
            "enum": [
              "UNKNOWN",
              "MANUAL",
              "MAGSTRIPE_NO_CVV",
              "BARCODE",
              "OCR",
              "ICC_CVV",
              "CONTACTLESS_ICC",
              "MAGSTRIPE_CVV",
              "CONTACTLESS_MAGSTRIPE",
              "ICC_NO_CVV",
              "ORIG_MODE",
              "FALLBACK"
            ]
          },
          "pinEntryCapability": {
            "type": "string",
            "description": "Describes whether the PIN can be entered.",
            "enum": [
              "UNKNOWN",
              "CAN_ACCEPT",
              "CANNOT_ACCEPT"
            ]
          }
        },
        "description": "Describes how the PAN and PIN were captured by the POS."
      },
      "PosInfo": {
        "type": "object",
        "properties": {
          "entryMode": {
            "$ref": "#/components/schemas/PosEntryMode"
          },
          "posConditionCode": {
            "type": "string",
            "description": "Describes the circumstances of the transaciton at the POS.",
            "enum": [
              "NORMAL_PRESENTMENT",
              "CUSTOMER_NOT_PRESENT",
              "CUSTOMER_PRESENT_AND_CARD_NOT_PRESENT",
              "CUSTOMER_IDENTITY_VERIFIED",
              "PUBLIC_UTILITY_TERMINAL",
              "CUSTOMER_TERMINAL",
              "MANUAL_REVERSAL",
              "UNATTENDED_TERMINAL_AND_CARD_CAN_BE_RETAINED",
              "UNATTENDED_TERMINAL_AND_CARD_CANNOT_BE_RETAINED"
            ]
          }
        },
        "description": "POS related data."
      },
      "QrPayment": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PaymentMethod"
          },
          {
            "type": "object",
            "required": [
              "tranId"
            ],
            "properties": {
              "tranId": {
                "type": "string",
                "description": "The unique transaction identifier related to this transaction. In QRs styled on the EMVCo specification, the tranId is embedded in sub-Tag 00 of the Electrum MAIT."
              },
              "partnerPaymentToken": {
                "type": "string",
                "description": "A payment token received from the Partner."
              }
            },
            "description": "Model for QR-based payments. This payment method should be used when a QR code is presented for payment."
          }
        ]
      },
      "RefundRequest": {
        "type": "object",
        "required": [
          "client",
          "id",
          "issuerReference",
          "originator",
          "refundReason",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "selectedCategory": {
            "$ref": "#/components/schemas/Category"
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/SlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "issuerReference": {
            "type": "string",
            "description": "An identifier that is printed on the customer slip and uniquely identifies the payment on the bill issuer's system. This value is used by the customer to request a refund when the service supports this function. It is thus important that this number is unique.",
            "pattern": "[A-Z0-9]{1,20}"
          },
          "refundReason": {
            "type": "string",
            "description": "The reason for the refund as given by the customer",
            "minLength": 0,
            "maxLength": 20
          }
        },
        "description": "Represents a request to refund a payment"
      },
      "RefundResponse": {
        "type": "object",
        "required": [
          "amounts",
          "client",
          "id",
          "originator",
          "slipData",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/BillSlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "amounts": {
            "$ref": "#/components/schemas/BillpayAmounts"
          },
          "partPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be less than the amount due. Defaults to true.",
            "default": false
          },
          "overPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be more than the amount due. Defaults to true.",
            "default": false
          },
          "account": {
            "$ref": "#/components/schemas/Account"
          },
          "trafficFine": {
            "$ref": "#/components/schemas/TrafficFine"
          },
          "policy": {
            "$ref": "#/components/schemas/Policy"
          }
        },
        "description": "Represents a response to a refund request"
      },
      "RewardPayment": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PaymentMethod"
          },
          {
            "type": "object",
            "required": [
              "rewardCode"
            ],
            "properties": {
              "rewardCode": {
                "type": "string",
                "description": "A code used to recognise the reward programme",
                "minLength": 0,
                "maxLength": 40
              }
            },
            "description": "Model for reward-based payments. This payment method should be used when the payment is offset using a reward programme"
          }
        ]
      },
      "SlipData": {
        "type": "object",
        "properties": {
          "messageLines": {
            "type": "array",
            "description": "An array of text lines and optional formatting to be printed on the customer slip.",
            "items": {
              "$ref": "#/components/schemas/SlipLine"
            }
          },
          "slipWidth": {
            "type": "integer",
            "format": "int32",
            "description": "The width of the slip in normal (unformatted) characters."
          },
          "issuerReference": {
            "type": "string",
            "description": "An identifier that is printed on the customer slip and uniquely identifies the payment on the service provider's system. This value is used by the customer to request a refund when the service supports this function, and it is thus important that this number is unique.",
            "pattern": "[A-Z0-9]{1,40}"
          }
        },
        "description": "Data that may be printed on the customer slip for information purposes"
      },
      "SlipLine": {
        "type": "object",
        "required": [
          "text"
        ],
        "properties": {
          "barcode": {
            "$ref": "#/components/schemas/Barcode"
          },
          "text": {
            "type": "string",
            "description": "Text contained on the line"
          },
          "fontWidthScaleFactor": {
            "type": "number",
            "format": "double",
            "description": "Scale factor for font width. Assume 1.0 (i.e. normal size) if not present."
          },
          "fontHeightScaleFactor": {
            "type": "number",
            "format": "double",
            "description": "Scale factor for font height. Assume 1.0 (i.e. normal size) if not present."
          },
          "line": {
            "type": "boolean",
            "description": "Denotes a solid line on the slip. Assume false if not present.",
            "default": false
          },
          "cut": {
            "type": "boolean",
            "description": "Indicates the slip should be cut at this line. Assume false if not present.",
            "default": false
          }
        },
        "description": "A line of text to be printed on the till slip"
      },
      "Tender": {
        "type": "object",
        "required": [
          "amount",
          "tenderType"
        ],
        "properties": {
          "accountType": {
            "type": "string",
            "description": "The type of account",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "STORED_VALUE"
            ]
          },
          "amount": {
            "$ref": "#/components/schemas/LedgerAmount"
          },
          "cardNumber": {
            "type": "string",
            "description": "A PCI compliant masked card number, with at least the first 6 digits in the clear. Only applicable to card based transactions",
            "pattern": "[0-9]{6}[0-9*]{0,13}"
          },
          "reference": {
            "type": "string",
            "description": "A free text reference",
            "minLength": 0,
            "maxLength": 40
          },
          "tenderType": {
            "type": "string",
            "description": "The type of tender used",
            "enum": [
              "CASH",
              "CHEQUE",
              "CREDIT_CARD",
              "DEBIT_CARD",
              "WALLET",
              "ROUNDING",
              "GIFT_CARD",
              "LOYALTY_CARD",
              "OTHER",
              "REWARD"
            ]
          }
        },
        "description": "Details of the Tender used by a customer towards a payment"
      },
      "TenderAdvice": {
        "type": "object",
        "required": [
          "id",
          "requestId",
          "tenders",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this advice, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "requestId": {
            "type": "string",
            "description": "The UUID identifying the request that this advice relates to"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "The unaltered thirdPartyIdentifiers array as supplied in the related BasicResponse message. Required if thirdPartyIdentifiers field was present in the BasicResponse. If no thirdPartyIdentifiers was received in the BasicResponse or no BasicResponse was received then this should be set to the thirdPartyIdentifiers sent in the original request.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "amounts": {
            "$ref": "#/components/schemas/Amounts"
          },
          "tenders": {
            "type": "array",
            "description": "An array of tenders used to pay for the transaction",
            "items": {
              "$ref": "#/components/schemas/Tender"
            }
          }
        },
        "description": "An advice that notifies of the successful completion of a transaction."
      },
      "ThirdPartyIdentifier": {
        "type": "object",
        "required": [
          "institutionId",
          "transactionIdentifier"
        ],
        "properties": {
          "institutionId": {
            "type": "string",
            "description": "The entity's institution ID."
          },
          "transactionIdentifier": {
            "type": "string",
            "description": "The identifier assigned to this transaction by the institution represented in institutionId. This value should be unique within the institution's system."
          }
        },
        "description": "An identifier assigned by an entity which process the message. Identifiers are keyed by institution ID thereby enabling any institution to recall a transaction within the entity's own system using the entity's own identifier. Entities must not alter the identifier set by another entity. Once an identifier has been set by an entity, all other entities must send that identifier in subsequent messages."
      },
      "ThreeDSecureData": {
        "type": "object",
        "required": [
          "version"
        ],
        "discriminator": {
          "propertyName": "version"
        },
        "properties": {
          "authenticationValue": {
            "type": "string",
            "description": "A 20-byte value that has been Base64 encoded. This value is provided by the Access Control Server as a proof of authentication."
          },
          "cardHolderAuthVerificationResult": {
            "type": "string",
            "description": "Authentication outcome set by the Access Control Server or Issuer.",
            "enum": [
              "CAVV_VALIDATION_PASSED",
              "CAVV_VALIDATION_FAILED_ISSUER_SYSTEM_ERROR",
              "CAVV_VALIDATION_FAILED_ISSUER_ATTEMPT_INCOMPLETE",
              "CAVV_NOT_VALIDATED",
              "CAVV_NOT_VALIDATED_INVALID_DATA",
              "CAVV_VALIDATION_FAILED"
            ]
          },
          "version": {
            "type": "string",
            "description": "The version of the 3-D Secure protocol that was used for cardholder authentication. Note that the version determines the format of the transaction identifier",
            "enum": [
              "V1",
              "V2"
            ]
          },
          "eci": {
            "type": "string",
            "description": "Electronic Commerce Indicator. This is Payment System-specific value provided by the Access Control Server to indicate the results of the attempt to authenticate the Cardholder.",
            "enum": [
              "AUTHENTICATION_NOT_ATTEMPTED_OR_UNSUCCESSFUL_00",
              "AUTHENTICATION_NOT_ENABLED_01",
              "AUTHENTICATION_SUCCESSFUL_02",
              "AUTHENTICATION_SUCCESSFUL_05",
              "AUTHENTICATION_NOT_ENABLED_06",
              "AUTHENTICATION_NOT_ATTEMPTED_OR_UNSUCCESSFUL_07"
            ]
          },
          "transactionStatus": {
            "type": "string",
            "description": "Indicates whether a transaction qualifies as an authenticated transaction or account verification. The values and their meanings are as follows: \nY = Authentication Verification Successful.\n N = Not Authenticated /Account Not Verified; Transaction denied.\n U = Authentication/ Account Verification Could Not Be Performed; Technical or other problem.\n A = Attempts Processing Performed; Not Authenticated/ Verified, but a proof of attempted authentication/verification is provided.\n C = Challenge Required; Additional authentication is required using the CReq/CRes \n D = Challenge Required; Decoupled Authentication confirmed. \n R = Authentication/ Account Verification Rejected; Issuer is rejecting authentication/verification and request that authorisation not be attempted.\n I = Informational Only; 3DS Requestor challenge preference acknowledged.\n S = Challenge using SPC \n ",
            "enum": [
              "Y",
              "N",
              "U",
              "A",
              "C",
              "D",
              "R",
              "I",
              "S"
            ]
          }
        },
        "description": "Data used to facilitate and communicate the result of 3-D Secure cardholder authentication."
      },
      "ThreeDSecureDataV1": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ThreeDSecureData"
          },
          {
            "type": "object",
            "properties": {
              "transactionId": {
                "type": "string",
                "description": "A 20-byte base 64 encoded string assigned by the 3DS Server to identify a single transaction. This ID can be used to prevent transaction replay."
              }
            },
            "description": "3-D Secure data in which the transaction identifier takes the format of a byte string."
          }
        ]
      },
      "ThreeDSecureDataV2": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ThreeDSecureData"
          },
          {
            "type": "object",
            "properties": {
              "transactionId": {
                "type": "string",
                "format": "uuid",
                "description": "A UUID assigned by the 3DS Server to identify a single transaction. This ID can be used to prevent transaction replay. This is based on version 2 the EMVCo 3-D Secure specification."
              }
            },
            "description": "3-D Secure data in which the transaction identifier takes the format of a UUID."
          }
        ]
      },
      "TrafficFine": {
        "type": "object",
        "required": [
          "noticeNumber"
        ],
        "properties": {
          "noticeNumber": {
            "type": "string",
            "description": "A reference number identifying the traffic fine to the processor's system.",
            "minLength": 6,
            "maxLength": 40
          },
          "dueDate": {
            "type": "string",
            "format": "date",
            "description": "The date by which the traffic fine should be paid in the format yyyy-MM-dd."
          }
        },
        "description": "Represents the status of a traffic fine."
      },
      "TrafficFineLookupRequest": {
        "type": "object",
        "required": [
          "client",
          "id",
          "noticeNumber",
          "originator",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "selectedCategory": {
            "$ref": "#/components/schemas/Category"
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/SlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "noticeNumber": {
            "type": "string",
            "description": "A reference number identifying the traffic fine to the service provider.",
            "minLength": 6,
            "maxLength": 40
          }
        },
        "description": "The data required to request traffic fine info. Replaced by new API call getBillInfo in v4.14.0."
      },
      "TrafficFineLookupResponse": {
        "type": "object",
        "required": [
          "amounts",
          "client",
          "id",
          "originator",
          "slipData",
          "thirdPartyIdentifiers",
          "time",
          "trafficFine"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/BillSlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "amounts": {
            "$ref": "#/components/schemas/BillpayAmounts"
          },
          "partPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be less than the amount due. Defaults to true.",
            "default": false
          },
          "overPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be more than the amount due. Defaults to true.",
            "default": false
          },
          "trafficFine": {
            "$ref": "#/components/schemas/TrafficFine"
          }
        },
        "description": "The data resulting from a traffic fine lookup request. Replaced by a general BillLookupResponse in v4.14.0."
      },
      "TrafficFinePaymentRequest": {
        "type": "object",
        "required": [
          "amounts",
          "client",
          "id",
          "noticeNumber",
          "originator",
          "thirdPartyIdentifiers",
          "time"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "selectedCategory": {
            "$ref": "#/components/schemas/Category"
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/SlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "noticeNumber": {
            "type": "string",
            "description": "A reference number identifying the traffic fine to the service provider.",
            "minLength": 6,
            "maxLength": 40
          },
          "amounts": {
            "$ref": "#/components/schemas/BillpayAmounts"
          },
          "tenders": {
            "type": "array",
            "description": "Contains the tenders for the payment request if available",
            "items": {
              "$ref": "#/components/schemas/Tender"
            }
          },
          "paymentMethods": {
            "type": "array",
            "description": "Contains the payment method for the payment request if available",
            "items": {
              "$ref": "#/components/schemas/PaymentMethod"
            }
          },
          "lookupId": {
            "type": "string",
            "description": "The UUID identifying the lookup that this request relates to"
          }
        },
        "description": "Represents a request to perform a payment of a traffic fine."
      },
      "TrafficFinePaymentResponse": {
        "type": "object",
        "required": [
          "amounts",
          "client",
          "id",
          "originator",
          "slipData",
          "thirdPartyIdentifiers",
          "time",
          "trafficFine"
        ],
        "properties": {
          "transactionLabels": {
            "type": "array",
            "description": "A list containing labels that can be used to discover this transaction or group it with other transactions sharing labels with the same label name and value. Transaction labels should never be used to make transaction processing decisions.",
            "items": {
              "$ref": "#/components/schemas/TransactionLabel"
            }
          },
          "id": {
            "type": "string",
            "description": "The randomly generated UUID identifying this transaction, as defined for a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)"
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of the message as recorded by the sender. The format shall be as defined for date-time in [RFC 3339 section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is recommended that the optional time-secfrac be included up to millisecond precision"
          },
          "originator": {
            "$ref": "#/components/schemas/Originator"
          },
          "client": {
            "$ref": "#/components/schemas/Institution"
          },
          "settlementEntity": {
            "$ref": "#/components/schemas/Institution"
          },
          "receiver": {
            "$ref": "#/components/schemas/Institution"
          },
          "thirdPartyIdentifiers": {
            "type": "array",
            "description": "An array of identifiers which each identify the transaction within each entity's system.",
            "items": {
              "$ref": "#/components/schemas/ThirdPartyIdentifier"
            }
          },
          "slipData": {
            "$ref": "#/components/schemas/BillSlipData"
          },
          "basketRef": {
            "type": "string",
            "description": "Used to group multiple transactions which would otherwise be considered independent."
          },
          "tranType": {
            "type": "string",
            "description": "Data relating to the type of transaction taking place (i.e. cash withdrawal, goods and services etc.).",
            "enum": [
              "GOODS_AND_SERVICES",
              "CASH_WITHDRAWAL",
              "DEBIT_ADJUSTMENT",
              "GOODS_AND_SERVICES_WITH_CASH_BACK",
              "NON_CASH",
              "RETURNS",
              "DEPOSIT",
              "CREDIT_ADJUSTMENT",
              "GENERAL_CREDIT",
              "AVAILABLE_FUNDS_INQUIRY",
              "BALANCE_INQUIRY",
              "GENERAL_INQUIRY",
              "CARD_VERIFICATION_INQUIRY",
              "CARDHOLDER_ACCOUNTS_TRANSFER",
              "GENERAL_TRANSFER",
              "PAYMENT_FROM_ACCOUNT",
              "GENERAL_PAYMENT",
              "PAYMENT_TO_ACCOUNT",
              "PAYMENT_FROM_ACCOUNT_TO_ACCOUNT",
              "PLACE_HOLD_ON_CARD",
              "GENERAL_ADMIN",
              "CHANGE_PIN",
              "CARD_HOLDER_INQUIRY",
              "POINTS_INQUIRY"
            ]
          },
          "srcAccType": {
            "type": "string",
            "description": "This specifies the type of source account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "destAccType": {
            "type": "string",
            "description": "This specifies the type of destination account being used in the transaction (i.e. cheque, savings).",
            "enum": [
              "DEFAULT",
              "SAVINGS",
              "CHEQUE",
              "CREDIT",
              "UNIVERSAL",
              "ELECTRONIC_PURSE",
              "GIFT_CARD",
              "STORED_VALUE"
            ]
          },
          "stan": {
            "type": "string",
            "description": "The System Trace Audit Number can be used to locate transactions across different systems."
          },
          "rrn": {
            "type": "string",
            "description": "This is a reference set by the original source of the transaction."
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "amounts": {
            "$ref": "#/components/schemas/BillpayAmounts"
          },
          "partPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be less than the amount due. Defaults to true.",
            "default": false
          },
          "overPaymentAllowed": {
            "type": "boolean",
            "description": "Indicates whether a payment amount may be more than the amount due. Defaults to true.",
            "default": false
          },
          "trafficFine": {
            "$ref": "#/components/schemas/TrafficFine"
          }
        },
        "description": "Represents a response to a payment request"
      },
      "TransactionLabel": {
        "type": "object",
        "required": [
          "name",
          "value"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Label name that indicates the type and intended use of the transaction label. The meaning of label names must be agreed upon by the parties involved in transaction processing.",
            "pattern": "^[a-zA-Z0-9_]{1,100}$"
          },
          "value": {
            "type": "string",
            "description": "The value assigned to the transaction label.",
            "pattern": "^[a-zA-Z.-9 _-]{1,100}$"
          }
        },
        "description": "A label assigned to a transaction by the entity processing the transaction. Labels are used for grouping or discovering transactions after transaction processing. Note that no transaction processing decision is made based on transaction labels."
      },
      "WalletPayment": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PaymentMethod"
          },
          {
            "type": "object",
            "required": [
              "walletId"
            ],
            "properties": {
              "walletId": {
                "type": "string",
                "description": "The unique identifier of the wallet account making the payment.",
                "readOnly": true
              },
              "walletPocket": {
                "$ref": "#/components/schemas/WalletPocket"
              }
            },
            "description": "Model for mobile wallet payments"
          }
        ]
      },
      "WalletPocket": {
        "type": "object",
        "required": [
          "pocketName"
        ],
        "properties": {
          "pocketName": {
            "type": "string",
            "description": "The name given to this wallet pocket."
          },
          "pocketId": {
            "type": "string",
            "description": "A programmatic ID that can be used to identify this pocket when the name is not enough"
          }
        }
      }
    }
  }
}