---
updatedAt: 2026-05-27T07:59:25.000Z
agentTools:
  siteIndex: https://developer.eagleeye.com/llms.txt
  projectIndex: https://developer.eagleeye.com/eagleeye-developer/llms.txt
---

# Spend

This API endpoint allows the calling application to Spend Points from a Requested Account of Type (Loyalty) Points

# OpenAPI definition

```json
{
  "x-explorer-enabled": false,
  "openapi": "3.0.3",
  "servers": [
    {
      "url": "https://pos.uk.eagleeye.com/2.0",
      "description": "UK Production"
    }
  ],
  "info": {
    "version": "1.76.0",
    "title": "POS-Connect API",
    "description": "# AIR POS API\n\nSet of RESTFul API endpoints allowing Clients to integrate their physical or virtual Points of Sales (POS) into AIR platform.\n\nPlease note: Client Settings, agreed during each Client onboarding (and documented in their Config Document) could affect things and behaviours detailed there.\nFor example list of returned accounts for Open Wallet endpoint, could be automatically filtered-out to narrow down the amount of returned accounts. Also some of the entities sub-attributes could be ignored/hidden to reduce verbosity and to save bandwidth.\n\nList of the entity's attributes that could be \"hidden\"/ignored consist of:\n * walletEntity-&gt;meta\n * walletEntity-&gt;relationships\n * walletIdentity-&gt;meta\n * accountEntity-&gt;meta\n * accountEntity-&gt;relationships\n * walletConsumer-&gt;meta\n * walletIdentity-&gt;meta\n * fundEntity-&gt;meta\n\nPlease note:\n\n* Above mechanism will not change nor unset any data stored in the AIR Database(s). Instead, appropriate attributes will be ignored while constructing and sending a response to the calling application. Please refer to your Config Documentation for details.\n* The authentication mechanic requires the receipt of the full payload so any headers that would chunk the request up, such as transfer-encoding: chunked could potentially cause authentication failures.\n"
  },
  "tags": [
    {
      "name": "Account",
      "description": "Set of API endpoints exposing a lower-level AIR functionality allowing the calling application to operate on individual Account(s). The purpose of these endpoints is to supplement/extend supported flows or even allowing Clients to build their own flows utilizing more granular functionality, to satisfy specific requirements. Please note - all endpoints in this namespace accepts one of the following `accountId`, `accountId + walletId` or `token` (with obvious exception for Create Account endpoint)"
    }
  ],
  "paths": {
    "/connect/account/spend": {
      "post": {
        "summary": "Spend",
        "operationId": "spendPoints",
        "tags": [
          "Account"
        ],
        "description": "This API endpoint allows the calling application to Spend Points from a Requested Account of Type (Loyalty) Points",
        "requestBody": {
          "$ref": "#/components/requestBodies/spendAccountPayload"
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/httpAcceptEncodingRequest"
          },
          {
            "$ref": "#/components/parameters/httpConnectionRequest"
          },
          {
            "$ref": "#/components/parameters/httpContentTypeRequest"
          },
          {
            "$ref": "#/components/parameters/eesAuthenticationClientId"
          },
          {
            "$ref": "#/components/parameters/eesAuthenticationRequestHash"
          },
          {
            "$ref": "#/components/parameters/eesDateTimeOverride"
          },
          {
            "$ref": "#/components/parameters/eesMessageId"
          },
          {
            "$ref": "#/components/parameters/customSubsystemId"
          },
          {
            "$ref": "#/components/parameters/customWildCard"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/accountResponsePayload",
            "x-eventNotifications": {
              "events": [
                {
                  "eventName": "POSCONNECT.ACCOUNT.SPEND",
                  "atomicOperations": [
                    {
                      "schema": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/accountTransactionEntity"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "account": {
                                "$ref": "#/components/schemas/accountEntity"
                              }
                            }
                          }
                        ]
                      },
                      "operationType": "CREATE"
                    }
                  ]
                }
              ]
            }
          },
          "400": {
            "$ref": "#/components/responses/error400Response"
          },
          "401": {
            "$ref": "#/components/responses/error401Response"
          },
          "403": {
            "$ref": "#/components/responses/error403Response"
          },
          "404": {
            "$ref": "#/components/responses/error404Response"
          },
          "409": {
            "$ref": "#/components/responses/error409Response"
          },
          "415": {
            "$ref": "#/components/responses/error415Response"
          },
          "429": {
            "$ref": "#/components/responses/error429Response"
          },
          "500": {
            "$ref": "#/components/responses/error500Response"
          },
          "503": {
            "$ref": "#/components/responses/error503Response"
          },
          "504": {
            "$ref": "#/components/responses/error504Response"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "accountResponse": {
        "type": "object",
        "required": [
          "accountTransaction"
        ],
        "properties": {
          "accountTransaction": {
            "allOf": [
              {
                "$ref": "#/components/schemas/accountTransactionEntity"
              },
              {
                "type": "object",
                "properties": {
                  "account": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/accountEntity"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "enriched": {
                            "$ref": "#/components/schemas/accountEnrichmentEntity"
                          }
                        }
                      }
                    ]
                  }
                }
              }
            ]
          },
          "message": {
            "type": "object"
          }
        }
      },
      "accountEntity": {
        "type": "object",
        "required": [
          "accountId",
          "walletId",
          "campaignId",
          "campaign",
          "type",
          "clientType",
          "accountMeta",
          "overrides",
          "status",
          "state",
          "dates",
          "meta",
          "balances",
          "dateCreated",
          "lastUpdated"
        ],
        "description": "EES AIR Account object.",
        "properties": {
          "accountId": {
            "type": "string",
            "format": "string",
            "nullable": true,
            "description": "EES AIR Account ID. (Please note for open offers this field will be null)"
          },
          "walletId": {
            "type": "string",
            "format": "string",
            "nullable": true,
            "description": "EES AIR Wallet ID. (Please note for non-wallet Clients this value will be empty)"
          },
          "campaignId": {
            "type": "string",
            "nullable": false,
            "description": "The Campaign ID (Scheme ID, Programme ID or Plan ID) this Account belongs to."
          },
          "campaign": {
            "type": "object",
            "description": "The campaign payload. See campaign documentation for details.",
            "properties": {
              "campaignId": {
                "type": "string",
                "nullable": false,
                "description": "The Campaign ID (Scheme ID, Programme ID or Plan ID) this Account belongs to."
              },
              "campaignTypeId": {
                "type": "string",
                "nullable": false,
                "description": "The Campaign type ID of this campaign."
              },
              "campaignMode": {
                "type": "string",
                "nullable": false,
                "enum": [
                  "OPEN",
                  "RESTRICTED"
                ],
                "description": "Determines if the campaign operates in open or restricted mode."
              },
              "campaignName": {
                "type": "string",
                "nullable": false,
                "description": "The name of the campaign."
              },
              "accountTypeId": {
                "type": "integer",
                "description": "Account Type ID (EES Internal Type Reference)."
              },
              "startDate": {
                "type": "string",
                "format": "ees-date-time",
                "description": "Start date of the campaign."
              },
              "endDate": {
                "type": "string",
                "format": "ees-date-time",
                "description": "End date of the campaign.",
                "nullable": true
              },
              "status": {
                "type": "string",
                "description": "The status of the Campaign.",
                "enum": [
                  "ACTIVE",
                  "INACTIVE",
                  "EXPIRED",
                  "DELETED",
                  "PENDING",
                  "DRAFT",
                  "REJECTED",
                  "READY",
                  "STOPPED",
                  "SUSPENDED"
                ]
              },
              "sequenceKey": {
                "type": "string",
                "nullable": true,
                "description": "The value of the barcode."
              },
              "reference": {
                "type": "string",
                "format": "string",
                "description": "A reference string that is unique to this campaign.",
                "nullable": true
              },
              "dateCreated": {
                "type": "string",
                "format": "ees-date-time",
                "description": "Date that this campaign was created on."
              },
              "lastUpdated": {
                "type": "string",
                "format": "ees-date-time",
                "description": "Date that this campaign was last updated."
              },
              "relationships": {
                "type": "object",
                "nullable": true,
                "properties": {
                  "OBJECTIVE_OF": {
                    "type": "object",
                    "nullable": true,
                    "properties": {
                      "CAMPAIGN": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "campaignId": {
                              "type": "string",
                              "description": "The ID of the campaign that this campaign is an objective of."
                            },
                            "dateCreated": {
                              "type": "string",
                              "format": "ees-date-time",
                              "description": "The date that this relationship was created on."
                            }
                          }
                        }
                      }
                    }
                  },
                  "OBJECTIVE": {
                    "type": "object",
                    "nullable": true,
                    "properties": {
                      "CAMPAIGN": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "campaignId": {
                              "type": "string",
                              "description": "The campaign ID of the objective campaign"
                            },
                            "dateCreated": {
                              "type": "string",
                              "format": "ees-date-time",
                              "description": "The date that this relationship was created on."
                            }
                          }
                        }
                      }
                    }
                  },
                  "ENTITLEMENT": {
                    "type": "object",
                    "nullable": true,
                    "properties": {
                      "CAMPAIGN": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "accountId": {
                              "type": "string",
                              "description": "The campaignId that the entitlement accounts will be created from."
                            },
                            "dateCreated": {
                              "type": "string",
                              "format": "ees-date-time",
                              "description": "The date that this relationship was created on."
                            }
                          }
                        }
                      }
                    }
                  },
                  "ENTITLEMENT_OF": {
                    "type": "object",
                    "nullable": true,
                    "properties": {
                      "PLAN": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "campaignId": {
                              "type": "string",
                              "description": "The campaignId of the plan that uses this campaign to create entitlement accounts."
                            },
                            "dateCreated": {
                              "type": "string",
                              "format": "ees-date-time",
                              "description": "The date that this relationship was created on."
                            }
                          }
                        }
                      }
                    }
                  },
                  "AGGREGATE_CHILD": {
                    "type": "object",
                    "nullable": true,
                    "properties": {
                      "SCHEME": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "campaignId": {
                              "type": "string",
                              "description": "The campaignId of the scheme that is a child of this scheme."
                            },
                            "dateCreated": {
                              "type": "string",
                              "format": "ees-date-time",
                              "description": "The date that this relationship was created on."
                            }
                          }
                        }
                      }
                    }
                  },
                  "AGGREGATE_CHILD_OF": {
                    "type": "object",
                    "nullable": true,
                    "properties": {
                      "SCHEME": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "campaignId": {
                              "type": "string",
                              "description": "The campaignId of the scheme that this is the child of."
                            },
                            "dateCreated": {
                              "type": "string",
                              "format": "ees-date-time",
                              "description": "The date that this relationship was created on."
                            }
                          }
                        }
                      }
                    }
                  },
                  "PROMOTION": {
                    "type": "object",
                    "nullable": true,
                    "properties": {
                      "CAMPAIGN": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "campaignId": {
                              "type": "string",
                              "description": "The campaignId of promotions a customer maybe eligible for.."
                            },
                            "dateCreated": {
                              "type": "string",
                              "format": "ees-date-time",
                              "description": "The date that this relationship was created on."
                            }
                          }
                        }
                      }
                    }
                  },
                  "PROMOTION_OF": {
                    "type": "object",
                    "nullable": true,
                    "properties": {
                      "CAMPAIGN": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "campaignId": {
                              "type": "string",
                              "description": "The campaignId of the multi-discount coupon that triggers rewards from this campaign."
                            },
                            "dateCreated": {
                              "type": "string",
                              "format": "ees-date-time",
                              "description": "The date that this relationship was created on."
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "type": {
            "type": "string",
            "nullable": false,
            "description": "EES AIR Wallet Account Type.",
            "enum": [
              "ECOUPON",
              "VOUCHER",
              "STAMP_CARD",
              "PAPER",
              "DEBIT",
              "PLASTIC",
              "POINTS",
              "BASIC_SUBSCRIPTION",
              "CONTINUITY"
            ]
          },
          "clientType": {
            "type": "string",
            "description": "Account Client's type, managed per EES AIR tenant, list of possible enum values could be set-up as part of the Onboarding process. (Please note&#58; for non-wallet Clients this value will be empty)",
            "format": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "Account Status",
            "nullable": false,
            "enum": [
              "ACTIVE",
              "BLOCKED",
              "CANCELLED",
              "DELETED",
              "EXPIRED",
              "INACTIVE",
              "INVALIDATED",
              "LOCKED",
              "STOLEN",
              "USED"
            ]
          },
          "state": {
            "type": "string",
            "format": "string",
            "nullable": true,
            "description": "Account State, managed per EES AIR tenant, list of possible enum values could be set-up as part of the Onboarding process. (Please note&#58; for non-wallet Clients this value will be empty)"
          },
          "dates": {
            "$ref": "#/components/schemas/datesEntity"
          },
          "accountMeta": {
            "$ref": "#/components/schemas/metaEntity"
          },
          "balances": {
            "$ref": "#/components/schemas/accountBalancesEntity"
          },
          "overrides": {
            "$ref": "#/components/schemas/accountOverridesEntity"
          },
          "dateCreated": {
            "description": "Account Creation Date-Time (Atom format)",
            "type": "string",
            "format": "ees-date-time",
            "nullable": false,
            "pattern": "^((((19|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00))\\-02\\-29|((19\\d{2}|[2-9]\\d{3})\\-((0[13578]|1[02])\\-31))|((19\\d{2}|[2-9]\\d{3})\\-(0[13-9]|1[0-2])\\-(29|30))|((19\\d{2}|[2-9]\\d{3})\\-(0[1-9]|1[0-2])\\-(0[1-9]|1[0-9]|2[0-8])))\\T([01][0-9]\\:[0-5][0-9]\\:[0-5][0-9]|2[0-3]\\:[0-5][0-9]\\:[0-5][0-9]))(\\+|\\-)([01][0-9]\\:[0-5][0-9]|2[0-3]\\:[0-5][0-9])$"
          },
          "lastUpdated": {
            "description": "Account Last Update Date-Time (Atom format)",
            "type": "string",
            "format": "ees-date-time",
            "nullable": false,
            "pattern": "^((((19|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00))\\-02\\-29|((19\\d{2}|[2-9]\\d{3})\\-((0[13578]|1[02])\\-31))|((19\\d{2}|[2-9]\\d{3})\\-(0[13-9]|1[0-2])\\-(29|30))|((19\\d{2}|[2-9]\\d{3})\\-(0[1-9]|1[0-2])\\-(0[1-9]|1[0-9]|2[0-8])))\\T([01][0-9]\\:[0-5][0-9]\\:[0-5][0-9]|2[0-3]\\:[0-5][0-9]\\:[0-5][0-9]))(\\+|\\-)([01][0-9]\\:[0-5][0-9]|2[0-3]\\:[0-5][0-9])$"
          }
        }
      },
      "accountOverridesEntity": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/couponAccountOverridesEntity"
          },
          {
            "$ref": "#/components/schemas/continuityAccountOverridesEntity"
          }
        ]
      },
      "continuityAccountOverridesEntity": {
        "type": "object",
        "nullable": true,
        "description": "Account Override for Continuity Type Account.",
        "properties": {
          "continuityQualification": {
            "type": "object",
            "description": "Overrides for continuity qualification.",
            "nullable": true,
            "properties": {
              "totalTransactionCount": {
                "type": "integer",
                "description": "Account override for totalTransactionCount - Only valid if campaign uses totalTransactionCount.",
                "nullable": true
              },
              "totalTransactionSpend": {
                "type": "integer",
                "description": "Account override for totalTransactionSpend - Only valid if campaign uses totalTransactionSpend.",
                "nullable": true
              },
              "totalTransactionUnits": {
                "type": "integer",
                "description": "Account override for totalTransactionUnits - Only valid if campaign uses totalTransactionUnits.",
                "nullable": true
              }
            }
          },
          "reward": {
            "type": "object",
            "description": "Overrides for continuity rewards",
            "nullable": true,
            "properties": {
              "creditAmount": {
                "type": "integer",
                "description": "Account override for the amount of points to be awarded."
              }
            }
          }
        }
      },
      "couponAccountOverridesEntity": {
        "type": "object",
        "nullable": true,
        "required": [
          "offer",
          "campaign"
        ],
        "properties": {
          "offer": {
            "type": "object",
            "description": "Account's Offer Override (applicable for `COUPON` Account type)",
            "required": [
              "reward",
              "qualification"
            ],
            "properties": {
              "reward": {
                "type": "object",
                "nullable": true,
                "minProperties": 0,
                "maxProperties": 5,
                "description": "Account's Offer Reward Override",
                "properties": {
                  "discountValue": {
                    "type": "number",
                    "format": "float",
                    "description": "EES AIR Account Override&#58; Discount Value",
                    "nullable": true
                  },
                  "discountPercentage": {
                    "type": "number",
                    "format": "float",
                    "description": "EES AIR Account Override&#58; Discount Percentage",
                    "nullable": true
                  },
                  "creditAmount": {
                    "type": "number",
                    "format": "float",
                    "description": "EES AIR Account Override&#58; Credit Amount",
                    "nullable": true
                  },
                  "finalAmount": {
                    "type": "number",
                    "format": "float",
                    "description": "EES AIR Account Override&#58; Final Amount",
                    "nullable": true
                  },
                  "percentageAmount": {
                    "type": "number",
                    "format": "float",
                    "description": "EES AIR Account Override&#58; Percentage Amount",
                    "nullable": true
                  }
                }
              },
              "qualification": {
                "type": "object",
                "description": "Account's Offer Qualification Override (Structure TBC)"
              }
            }
          },
          "campaign": {
            "type": "object",
            "description": "Campaign Rules Override (applicable for `COUPON` Account type )",
            "nullable": true,
            "properties": {
              "rules": {
                "type": "object",
                "properties": {
                  "couponLimit": {
                    "type": "integer",
                    "format": "int32",
                    "nullable": true,
                    "description": "Limit of Maximum number of times a Coupon Account can be redeemed"
                  }
                }
              }
            }
          }
        }
      },
      "campaignAccountEnrichment": {
        "type": "object",
        "required": [
          "enrichmentType",
          "campaignName",
          "campaignReference",
          "qualifier",
          "reward"
        ],
        "properties": {
          "enrichmentType": {
            "type": "string",
            "enum": [
              "COUPON"
            ]
          },
          "campaignName": {
            "type": "string",
            "format": "string",
            "description": "Campaign Name"
          },
          "campaignReference": {
            "type": "string",
            "format": "string",
            "description": "Campaign Reference"
          },
          "qualifier": {
            "type": "array",
            "nullable": true,
            "items": {
              "type": "object",
              "description": "TBC (reserved for future use)"
            }
          },
          "token": {
            "type": "string",
            "format": "string",
            "description": "Token",
            "nullable": true
          },
          "reward": {
            "type": "object",
            "nullable": true,
            "required": [
              "offerId",
              "offerName",
              "posReference"
            ],
            "properties": {
              "offerId": {
                "type": "string",
                "format": "string",
                "description": "Offer ID",
                "nullable": true
              },
              "offerName": {
                "type": "string",
                "format": "string",
                "description": "Offer Name",
                "nullable": true
              },
              "posReference": {
                "type": "string",
                "format": "string",
                "description": "Offer reference (Promo Id)",
                "nullable": true
              }
            }
          },
          "custom": {
            "description": "Configured custom form fields in key-value pair format, grouped by form.",
            "nullable": true,
            "type": "object"
          },
          "restrictions": {
            "type": "object",
            "properties": {
              "limits": {
                "type": "object",
                "properties": {
                  "period": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "threshold": {
                          "type": "string",
                          "description": "Redemption Restriction Type.",
                          "enum": [
                            "LIFETIME",
                            "DAY",
                            "WEEK",
                            "MONTH",
                            "YEAR"
                          ]
                        },
                        "start": {
                          "type": "string",
                          "format": "ees-date-time",
                          "description": "Information when next restriction cycle would start in ATOM date-time format.",
                          "nullable": false
                        },
                        "limit": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Numeric limit for this Redemption Restriction Type.",
                          "nullable": false
                        },
                        "used": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Amount of Redemptions for that particular Restriction Type.",
                          "nullable": false
                        },
                        "remaining": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Remaining Redemptions for that particular Restriction Type.",
                          "nullable": false
                        },
                        "lockedRedemptions": {
                          "type": "integer",
                          "format": "int32",
                          "description": "The number of locked redemptions prior to this open call.",
                          "nullable": false
                        }
                      }
                    }
                  },
                  "creditsPerPeriod": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "threshold": {
                          "type": "string",
                          "description": "Credit Restriction Type.",
                          "enum": [
                            "ACCOUNT_REWARD_DAY",
                            "ACCOUNT_REWARD_WEEK"
                          ]
                        },
                        "start": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Information when next restriction cycle would start in ATOM date-time format.",
                          "nullable": false
                        },
                        "limit": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Numeric limit for this Credit Restriction Type.",
                          "nullable": false
                        },
                        "used": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Amount of Credits for that particular Restriction Type.",
                          "nullable": false
                        },
                        "remaining": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Remaining Credits for that particular Restriction Type.",
                          "nullable": false
                        }
                      }
                    }
                  },
                  "rewardsPerPeriod": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "threshold": {
                          "type": "string",
                          "description": "Reward Restriction Type.",
                          "enum": [
                            "ACCOUNT_REWARD_DAY",
                            "ACCOUNT_REWARD_UNITS_DAY",
                            "ACCOUNT_REWARD_UNITS_WEEK                          -",
                            "ACCOUNT_REWARD_MONTH",
                            "ACCOUNT_REWARD_UNITS_MONTH",
                            "ACCOUNT_REWARD_UNITS_YEAR",
                            "ACCOUNT_REWARD_UNITS_LIFETIME"
                          ]
                        },
                        "start": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Information when next restriction cycle would start in ATOM date-time format.",
                          "nullable": false
                        },
                        "limit": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Numeric limit for this Reward Restriction Type.",
                          "nullable": false
                        },
                        "used": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Amount of Rewards for that particular Restriction Type.",
                          "nullable": false
                        },
                        "remaining": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Remaining Rewards for that particular Restriction Type.",
                          "nullable": false
                        }
                      }
                    }
                  },
                  "lifetime": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer",
                          "format": "int32",
                          "description": "The maximum number of redemptions for this account. 0 means an unlimited account.",
                          "nullable": false
                        },
                        "used": {
                          "type": "integer",
                          "format": "int32",
                          "description": "The number of redemptions that have been used.",
                          "nullable": false
                        },
                        "remaining": {
                          "type": "integer",
                          "format": "int32",
                          "description": "The number of remaining redemptions. Will be null for unlimited accounts.",
                          "nullable": true
                        },
                        "lockedRedemptions": {
                          "type": "integer",
                          "format": "int32",
                          "description": "The number of locked redemptions prior to this request.",
                          "nullable": false
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "redemptionWindows": {
            "type": "object",
            "properties": {
              "rolling": {
                "type": "array",
                "nullable": true,
                "items": {
                  "$ref": "#/components/schemas/windowEntity"
                }
              },
              "exclusions": {
                "type": "array",
                "nullable": true,
                "items": {
                  "$ref": "#/components/schemas/exclusionWindowEntity"
                }
              }
            }
          }
        }
      },
      "programmeAccountEnrichment": {
        "type": "object",
        "required": [
          "enrichmentType",
          "programmeName",
          "programmeReference"
        ],
        "properties": {
          "enrichmentType": {
            "type": "string",
            "nullable": false,
            "enum": [
              "PROGRAMME"
            ]
          },
          "programmeName": {
            "type": "string",
            "format": "string",
            "nullable": false,
            "description": "Programme Name"
          },
          "programmeReference": {
            "type": "string",
            "format": "string",
            "nullable": false,
            "description": "Programme Reference"
          },
          "token": {
            "type": "string",
            "format": "string",
            "description": "Token",
            "nullable": true
          }
        }
      },
      "stampAccountEnrichment": {
        "type": "object",
        "required": [
          "enrichmentType",
          "schemeName",
          "schemeReference"
        ],
        "properties": {
          "enrichmentType": {
            "type": "string",
            "enum": [
              "STAMP"
            ]
          },
          "schemeName": {
            "type": "string",
            "format": "string",
            "description": "Scheme Name"
          },
          "schemeReference": {
            "type": "string",
            "format": "string",
            "description": "Scheme Reference"
          },
          "properties": {
            "type": "object"
          }
        }
      },
      "pointsAccountEnrichment": {
        "type": "object",
        "required": [
          "enrichmentType",
          "schemeName",
          "schemeReference"
        ],
        "properties": {
          "enrichmentType": {
            "type": "string",
            "enum": [
              "POINTS"
            ]
          },
          "schemeName": {
            "type": "string",
            "format": "string",
            "description": "Scheme Name"
          },
          "schemeReference": {
            "type": "string",
            "format": "string",
            "description": "Scheme Reference"
          },
          "properties": {
            "type": "object",
            "properties": {
              "redemptionRates": {
                "type": "object",
                "nullable": true,
                "description": "Scheme Redemption Rates"
              },
              "goodwill": {
                "type": "object",
                "nullable": true,
                "description": "Scheme Goodwill"
              },
              "credit": {
                "type": "object",
                "nullable": true,
                "description": "Scheme Redemption Rates"
              },
              "debit": {
                "type": "object",
                "nullable": true,
                "description": "Scheme Debit"
              },
              "details": {
                "type": "object",
                "nullable": true,
                "description": "Scheme Details"
              },
              "earnRates": {
                "type": "object",
                "nullable": true,
                "description": "Scheme Earn Rates"
              },
              "baseEarn": {
                "type": "object",
                "nullable": true,
                "description": "Scheme Base Earn"
              },
              "pointsExpiry": {
                "type": "object",
                "nullable": true,
                "properties": {
                  "validTo": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": false,
                    "description": "Time at which the points expire."
                  },
                  "points": {
                    "type": "integer",
                    "format": "int32",
                    "nullable": false,
                    "default": 0,
                    "description": "Number of points."
                  }
                }
              }
            }
          },
          "tierMembership": {
            "type": "object",
            "required": [
              "tierMembershipId",
              "tierId",
              "status",
              "accountIds",
              "balances",
              "expiryDate",
              "dateCreated",
              "lastUpdated"
            ],
            "nullable": true,
            "properties": {
              "tierMembershipId": {
                "type": "integer",
                "description": "The Id of the tier membership."
              },
              "tierId": {
                "type": "integer",
                "description": "The Id of the tier the membership belongs to."
              },
              "status": {
                "type": "string",
                "description": "The current status of this tier membership.",
                "enum": [
                  "ACTIVE",
                  "DELETED"
                ]
              },
              "accountIds": {
                "type": "array",
                "description": "A list of any accountIds in this membership",
                "items": {
                  "type": "string",
                  "format": "string",
                  "description": "EES AIR Account ID"
                }
              },
              "balances": {
                "type": "object",
                "required": [
                  "points",
                  "spend",
                  "transactions"
                ],
                "properties": {
                  "points": {
                    "type": "integer",
                    "description": "The tier membership points balance."
                  },
                  "spend": {
                    "type": "integer",
                    "description": "The tier membership total spend."
                  },
                  "transactions": {
                    "type": "integer",
                    "description": "The number of transactions against this tier membership."
                  }
                }
              },
              "expiryDate": {
                "type": "string",
                "format": "date-time",
                "description": "DateTime string with the expiry date of the membership."
              },
              "dateCreated": {
                "type": "string",
                "format": "date-time",
                "description": "DateTime string with the time the membership was created."
              },
              "lastUpdated": {
                "type": "string",
                "format": "date-time",
                "description": "DateTime string with the time the membership was last updated."
              },
              "tierBalancesResetDate": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "DateTime string containing the date when membership balances reset (if set)"
              },
              "enriched": {
                "type": "object",
                "description": "Holds any extra details required about the tier membership.",
                "properties": {
                  "tierName": {
                    "type": "string",
                    "description": "The name of the tier associated with this membership."
                  }
                }
              }
            }
          }
        }
      },
      "continuityAccountEnrichment": {
        "type": "object",
        "required": [
          "enrichmentType",
          "campaignName",
          "campaignReference"
        ],
        "properties": {
          "token": {
            "type": "string",
            "nullable": true,
            "description": "The account's token"
          },
          "qualifier": {
            "type": "object",
            "description": "The campaign's qualifications",
            "properties": {
              "continuity": {
                "type": "object",
                "properties": {
                  "totalTransactionCount": {
                    "nullable": true,
                    "type": "integer",
                    "description": "The number of transactions required to qualify for this coupon."
                  },
                  "totalTransactionSpend": {
                    "nullable": true,
                    "type": "integer",
                    "description": "The total spend amount required to qualify for this coupon."
                  },
                  "totalTransactionUnits": {
                    "nullable": true,
                    "type": "integer",
                    "description": "Account override for totalTransactionUnits - Only valid if campaign uses totalTransactionUnits."
                  }
                }
              }
            }
          },
          "reward": {
            "type": "object",
            "nullable": true,
            "required": [
              "offerId",
              "offerName",
              "posReference"
            ],
            "properties": {
              "offerId": {
                "type": "string",
                "format": "string",
                "description": "Offer ID",
                "nullable": true
              },
              "offerName": {
                "type": "string",
                "format": "string",
                "description": "Offer Name",
                "nullable": true
              },
              "posReference": {
                "type": "string",
                "format": "string",
                "description": "Offer reference (Promo Id)",
                "nullable": true
              }
            }
          },
          "custom": {
            "description": "Configured custom form fields in key-value pair format, grouped by form",
            "nullable": true,
            "type": "object"
          },
          "restrictions": {
            "type": "object",
            "properties": {
              "limits": {
                "type": "object",
                "properties": {
                  "period": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "threshold": {
                          "type": "string",
                          "description": "Redemption Restriction Type",
                          "enum": [
                            "LIFETIME",
                            "DAY",
                            "WEEK",
                            "MONTH",
                            "YEAR"
                          ]
                        },
                        "start": {
                          "type": "string",
                          "format": "ees-date-time",
                          "description": "Information when next restriction cycle would start in ATOM date-time format",
                          "nullable": false
                        },
                        "limit": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Numeric limit for this Redemption Restriction Type",
                          "nullable": false
                        },
                        "used": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Amount of Redemptions for that particular Restriction Type",
                          "nullable": false
                        },
                        "remaining": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Remaining Redemptions for that particular Restriction Type",
                          "nullable": false
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "redemptionWindows": {
            "type": "object",
            "properties": {
              "rolling": {
                "type": "array",
                "nullable": true,
                "items": {
                  "$ref": "#/components/schemas/windowEntity"
                }
              },
              "exclusions": {
                "type": "array",
                "nullable": true,
                "items": {
                  "$ref": "#/components/schemas/exclusionWindowEntity"
                }
              }
            }
          },
          "enrichmentType": {
            "type": "string",
            "enum": [
              "CONTINUITY"
            ]
          },
          "campaignName": {
            "type": "string",
            "format": "string",
            "description": "Campaign Name."
          },
          "campaignReference": {
            "type": "string",
            "format": "string",
            "description": "Campaign Reference."
          }
        }
      },
      "accountEnrichmentEntity": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/campaignAccountEnrichment"
          },
          {
            "$ref": "#/components/schemas/programmeAccountEnrichment"
          },
          {
            "$ref": "#/components/schemas/pointsAccountEnrichment"
          },
          {
            "$ref": "#/components/schemas/stampAccountEnrichment"
          },
          {
            "$ref": "#/components/schemas/continuityAccountEnrichment"
          }
        ]
      },
      "accountPayloadEntity": {
        "allOf": [
          {
            "oneOf": [
              {
                "type": "object",
                "required": [
                  "accountId"
                ],
                "properties": {
                  "accountId": {
                    "type": "string",
                    "format": "string",
                    "nullable": false,
                    "description": "EES AIR Account ID."
                  },
                  "walletId": {
                    "type": "string",
                    "format": "string",
                    "nullable": false,
                    "description": "Wallet ID, if this optional attribute is provided EES AIR will perform an additional sanity check if requested accountId belongs to a specified Wallet."
                  }
                }
              },
              {
                "type": "object",
                "required": [
                  "token"
                ],
                "properties": {
                  "token": {
                    "type": "string",
                    "format": "string",
                    "nullable": false,
                    "description": "Token identifying an EES AIR Account."
                  }
                }
              }
            ]
          },
          {
            "type": "object",
            "properties": {
              "pin": {
                "type": "string",
                "format": "string",
                "nullable": false,
                "description": "Optional Token's PIN."
              },
              "transactionDetails": {
                "$ref": "#/components/schemas/metaEntity"
              }
            }
          }
        ]
      },
      "locationPayloadEntity": {
        "type": "object",
        "properties": {
          "location": {
            "$ref": "#/components/schemas/locationEntity"
          }
        }
      },
      "windowEntity": {
        "type": "object",
        "required": [
          "startDay",
          "startTime",
          "endDay",
          "endTime"
        ],
        "properties": {
          "startDay": {
            "type": "string",
            "description": "Window definition Start Day (Weekday name)",
            "enum": [
              "MONDAY",
              "TUESDAY",
              "WEDNESDAY",
              "THURSDAY",
              "FRIDAY",
              "SATURDAY",
              "SUNDAY"
            ]
          },
          "startTime": {
            "type": "string",
            "format": "time",
            "pattern": "^([01]?[0-9]|2[0-3]):([0-5][0-9])$",
            "description": "Window definition Start Time (in 24h format)"
          },
          "endDay": {
            "type": "string",
            "description": "Window definition End Day (Weekday name)",
            "enum": [
              "MONDAY",
              "TUESDAY",
              "WEDNESDAY",
              "THURSDAY",
              "FRIDAY",
              "SATURDAY",
              "SUNDAY"
            ]
          },
          "endTime": {
            "type": "string",
            "format": "time",
            "pattern": "^([01]?[0-9]|2[0-3]):([0-5][0-9])$",
            "description": "Window definition End Time (in 24h format)"
          }
        }
      },
      "exclusionWindowEntity": {
        "type": "object",
        "required": [
          "start",
          "end"
        ],
        "properties": {
          "start": {
            "type": "string",
            "format": "ees-date-time",
            "description": "Exclusion Window Start (ATOM format)",
            "pattern": "^((((19|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00))\\-02\\-29|((19\\d{2}|[2-9]\\d{3})\\-((0[13578]|1[02])\\-31))|((19\\d{2}|[2-9]\\d{3})\\-(0[13-9]|1[0-2])\\-(29|30))|((19\\d{2}|[2-9]\\d{3})\\-(0[1-9]|1[0-2])\\-(0[1-9]|1[0-9]|2[0-8])))\\T([01][0-9]\\:[0-5][0-9]\\:[0-5][0-9]|2[0-3]\\:[0-5][0-9]\\:[0-5][0-9]))(\\+|\\-)([01][0-9]\\:[0-5][0-9]|2[0-3]\\:[0-5][0-9])$"
          },
          "end": {
            "type": "string",
            "format": "string",
            "description": "Exclusion Window End (ATOM format)",
            "pattern": "^((((19|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00))\\-02\\-29|((19\\d{2}|[2-9]\\d{3})\\-((0[13578]|1[02])\\-31))|((19\\d{2}|[2-9]\\d{3})\\-(0[13-9]|1[0-2])\\-(29|30))|((19\\d{2}|[2-9]\\d{3})\\-(0[1-9]|1[0-2])\\-(0[1-9]|1[0-9]|2[0-8])))\\T([01][0-9]\\:[0-5][0-9]\\:[0-5][0-9]|2[0-3]\\:[0-5][0-9]\\:[0-5][0-9]))(\\+|\\-)([01][0-9]\\:[0-5][0-9]|2[0-3]\\:[0-5][0-9])$"
          }
        }
      },
      "accountTransactionEntity": {
        "type": "object",
        "description": "Object representing an account transaction.",
        "required": [
          "accountTransactionId",
          "accountId",
          "parentAccountTransactionId",
          "event",
          "value",
          "source",
          "transactionDetails",
          "balancesBefore",
          "balancesAfter",
          "properties",
          "dateCreated",
          "lastUpdated"
        ],
        "properties": {
          "accountTransactionId": {
            "type": "string",
            "description": "The account transaction ID.",
            "nullable": false
          },
          "accountId": {
            "type": "string",
            "description": "The account id related to this transaction.",
            "nullable": false
          },
          "parentAccountTransactionId": {
            "type": "string",
            "description": "The parent account transaction.",
            "nullable": true
          },
          "event": {
            "type": "string",
            "description": "The type of transaction.",
            "nullable": false,
            "enum": [
              "CREATE",
              "REDEEM",
              "LOCK",
              "UNLOCK",
              "UNREDEEM",
              "VERIFY",
              "ACTIVATE",
              "INACTIVATE",
              "REACTIVATE",
              "LOAD",
              "CREDIT",
              "DEBIT",
              "BALANCE",
              "INVALIDATE",
              "BLOCK",
              "UNBLOCK",
              "RESEND",
              "STOLEN",
              "CANCEL",
              "VOID",
              "REISSUE",
              "REFUND",
              "TRANSFER",
              "TRANSFER_IN",
              "TOPUP",
              "AUTOTOPUP",
              "STAMP",
              "SPEND"
            ]
          },
          "value": {
            "type": "integer",
            "format": "int32",
            "description": "The value related to this Account Transaction. Typically, if an account transaction like credit was executed with a value, then this value will be stored here. For Continuity, however, this value should always be 0, and the same for Coupon (since there is no value for a coupon)."
          },
          "source": {
            "type": "string",
            "nullable": false,
            "description": "The source of this transaction e.g. from a client (1), or triggered automatically (2) from within EES AIR (e.g. auto-top-up or the incrementation of Quest balances).",
            "enum": [
              1,
              2
            ]
          },
          "transactionDetails": {
            "type": "object",
            "nullable": true,
            "description": "An simple object of key value pairs representing the transaction details."
          },
          "balancesBefore": {
            "$ref": "#/components/schemas/accountTransactionBalancesHistoryEntity"
          },
          "balancesAfter": {
            "$ref": "#/components/schemas/accountTransactionBalancesHistoryEntity"
          },
          "properties": {
            "type": "object",
            "description": "Properties related to the account transaction.",
            "nullable": true
          },
          "dateCreated": {
            "description": "Date-time (ATOM format) this account transaction was created",
            "type": "string",
            "format": "date-time",
            "nullable": false
          },
          "lastUpdated": {
            "description": "Date-time (ATOM format) this account transaction was last updated",
            "type": "string",
            "format": "date-time",
            "nullable": false
          }
        }
      },
      "metaEntity": {
        "type": "object",
        "description": "Key-Value object, please note key name length should be less then 255 characters and key values should be less then 255 characters"
      },
      "datesEntity": {
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "accountBalancesEntity": {
        "type": "object",
        "description": "The object of balances. Some balances only apply to certain types of accounts. See notes below on balances.\n",
        "properties": {
          "available": {
            "type": "integer",
            "description": "The available balance. This is applicable for all account types, except POINTS and CONTINUITY, which uses its own balance keys. For ECOUPON account type this property will be returned and will be equal to zero.\n"
          },
          "refundable": {
            "type": "integer",
            "description": "The refundable balance. This is applicable for all account types except POINTS and CONTINUITY, but is not used during account creation. For an Account Entity, the amount displayed here is the total refundable balance available. Please note for ECOUPON account type this property will be returned and equal to zero.\n"
          },
          "totalSpend": {
            "type": "integer",
            "description": "The total spend balance. Applicable only to accounts of type CONTINUITY.\n"
          },
          "transactionCount": {
            "type": "integer",
            "description": "The transaction counter. Applicable only to accounts of type CONTINUITY.\n"
          },
          "current": {
            "type": "integer",
            "description": "The current balance. Applicable only to accounts of type POINTS and STAMP. If current is not provided on creation, this will be set to 0.\n"
          },
          "usable": {
            "type": "integer",
            "description": "The usable balance. Applicable only to accounts of type POINTS. If usable is not provided on creation, this will be set to 0.\n"
          },
          "locked": {
            "type": "integer",
            "description": "The locked balance. Applicable only to accounts of type POINTS. If locked is not provided on creation, this will be set to 0.\n"
          },
          "lifetime": {
            "type": "integer",
            "description": "The lifetime balance. Applicable only to accounts of type POINTS and STAMP. If lifetime is not provided on creation, this will be set to 0."
          },
          "totalUnits": {
            "type": "integer",
            "description": "The total units purchased balance. Applicable only to accounts of type CONTINUITY.\n"
          }
        }
      },
      "accountTransactionBalancesHistoryEntity": {
        "type": "object",
        "description": "The object of balances to show for either before or after the account transaction. Some balances only apply to certain types of accounts. See notes below on balances.\n",
        "properties": {
          "available": {
            "description": "The available balance. This is applicable for all account types, except STAMP, POINTS and CONTINUITY, which uses its own balance keys, and ECOUPON, which has no concept of a balance.\n",
            "type": "integer"
          },
          "refundable": {
            "description": "The refundable balance. This is applicable for all account types, except STAMP, ECOUPON, POINTS and CONTINUITY.\n",
            "type": "integer"
          },
          "current": {
            "type": "integer",
            "description": "The current balance. Applicable only to accounts of type Points and Stamp.\n"
          },
          "lifetime": {
            "type": "integer",
            "description": "The lifetime balance. Applicable only to accounts of type Points and Stamp.\n"
          },
          "totalSpend": {
            "type": "integer",
            "description": "The total spend balance. Applicable only to accounts of type Continuity.\n"
          },
          "transactionCount": {
            "type": "integer",
            "description": "The transaction counter. Applicable only to accounts of type Continuity.\n"
          }
        }
      },
      "locationEntity": {
        "type": "object",
        "nullable": false,
        "required": [
          "incomingIdentifier"
        ],
        "properties": {
          "incomingIdentifier": {
            "type": "string",
            "format": "string",
            "nullable": false,
            "description": "Optional Outlet Incoming Identifier allowing to override location arisen from used API Key of where this transaction has happened"
          },
          "parentIncomingIdentifier": {
            "type": "string",
            "format": "string",
            "nullable": false,
            "description": "Outlet's Parent unit Incoming Identifier allowing to uniquely identify an Outlet override arisen from used API Key location where this transaction has happened. Please note this optional JSON attribute should be used in case incoming identifiers are not unique within a Client's Hierarchy"
          }
        }
      },
      "defaultErrorEntity": {
        "type": "object",
        "properties": {
          "errorCode": {
            "type": "string",
            "description": "EES AIR Error Code",
            "enum": [
              "NF",
              "IR",
              "U",
              "AF",
              "AT",
              "IFU",
              "CE",
              "IPR",
              "MNA",
              "MPA",
              "P",
              "ALR",
              "CX",
              "CI",
              "CP",
              "CR",
              "CU",
              "CORQ",
              "CTNR",
              "DSN",
              "IW",
              "RW",
              "VURC",
              "VURI",
              "FES",
              "IOC",
              "AA",
              "ILA",
              "IP",
              "LIR",
              "LNA",
              "LPR",
              "MAC",
              "MTLE",
              "MLV",
              "MAR",
              "OC",
              "RWI",
              "TEXP",
              "TULR",
              "UAS",
              "UV",
              "VA",
              "VC",
              "VXP",
              "VI",
              "VL",
              "VNL",
              "VPUF",
              "VSM",
              "VUA",
              "VU",
              "ITID",
              "WTF",
              "IH",
              "RFL"
            ]
          },
          "errorMessage": {
            "type": "string",
            "format": "string",
            "description": "Human Friendly Error Message"
          }
        },
        "x-enum": [
          {
            "errorCode": "NF",
            "errorMessage": "Not Found"
          },
          {
            "errorCode": "IR",
            "errorMessage": "Invalid Request"
          },
          {
            "errorCode": "U",
            "errorMessage": "Unknown Error"
          },
          {
            "errorCode": "AF",
            "errorMessage": "Authorisation Failed"
          },
          {
            "errorCode": "AT",
            "errorMessage": "Account Type"
          },
          {
            "errorCode": "IFU",
            "errorMessage": "Insufficient Funds"
          },
          {
            "errorCode": "CE",
            "errorMessage": "Configuration Error"
          },
          {
            "errorCode": "IPR",
            "errorMessage": "IP Address Rejected"
          },
          {
            "errorCode": "MNA",
            "errorMessage": "Method Not Allowed"
          },
          {
            "errorCode": "MPA",
            "errorMessage": "Missing Parameter"
          },
          {
            "errorCode": "P",
            "errorMessage": "Privileges"
          },
          {
            "errorCode": "ALR",
            "errorMessage": "Account Limit Reached"
          },
          {
            "errorCode": "CX",
            "errorMessage": "Campaign Expired"
          },
          {
            "errorCode": "CI",
            "errorMessage": "Campaign Inactive"
          },
          {
            "errorCode": "CP",
            "errorMessage": "Campaign Pending"
          },
          {
            "errorCode": "CR",
            "errorMessage": "Campaign Removed"
          },
          {
            "errorCode": "CU",
            "errorMessage": "Campaign Unknown"
          },
          {
            "errorCode": "CORQ",
            "errorMessage": "Consumer Required"
          },
          {
            "errorCode": "CTNR",
            "errorMessage": "Consumer Type Not Recognized"
          },
          {
            "errorCode": "DSN",
            "errorMessage": "Duplicated Serial Number"
          },
          {
            "errorCode": "IW",
            "errorMessage": "Voucher Can Not Be Created"
          },
          {
            "errorCode": "RW",
            "errorMessage": "Voucher Can Not Be Redeemed"
          },
          {
            "errorCode": "VURC",
            "errorMessage": "No Voucher Available to Redeem for Campaign"
          },
          {
            "errorCode": "VURI",
            "errorMessage": "No Voucher Available to Redeem for this Identity"
          },
          {
            "errorCode": "FES",
            "errorMessage": "Scheduling Format Incorrect"
          },
          {
            "errorCode": "IOC",
            "errorMessage": "Improper Offer Configuration"
          },
          {
            "errorCode": "AA",
            "errorMessage": "Invalid Access to API Method"
          },
          {
            "errorCode": "ILA",
            "errorMessage": "Invalid Load Amount"
          },
          {
            "errorCode": "IP",
            "errorMessage": "Invalid Parameter"
          },
          {
            "errorCode": "LIR",
            "errorMessage": "Outlet Identifier Required"
          },
          {
            "errorCode": "LNA",
            "errorMessage": "Outlet Not Allowed"
          },
          {
            "errorCode": "LPR",
            "errorMessage": "Outlet Prohibited by Campaign Settings"
          },
          {
            "errorCode": "MAC",
            "errorMessage": "Maximum Number of Code Variations"
          },
          {
            "errorCode": "MTLE",
            "errorMessage": "Max Active Tokens Limit Exceeded"
          },
          {
            "errorCode": "MLV",
            "errorMessage": "Maximum Voucher Value Exceeded"
          },
          {
            "errorCode": "MAR",
            "errorMessage": "Minimum Amount Required"
          },
          {
            "errorCode": "OC",
            "errorMessage": "Campaign has no Offer"
          },
          {
            "errorCode": "RWI",
            "errorMessage": "Token can not be Redeemed at this time. Blocked by redemption windows."
          },
          {
            "errorCode": "TEXP",
            "errorMessage": "Token Expired"
          },
          {
            "errorCode": "TULR",
            "errorMessage": "Token Usage Limit Reached"
          },
          {
            "errorCode": "UAS",
            "errorMessage": "Transaction Not Allowed by current account status"
          },
          {
            "errorCode": "UV",
            "errorMessage": "Voucher Unknown"
          },
          {
            "errorCode": "VA",
            "errorMessage": "Voucher already been sent"
          },
          {
            "errorCode": "VC",
            "errorMessage": "Voucher Cancelled"
          },
          {
            "errorCode": "VXP",
            "errorMessage": "Voucher Expired"
          },
          {
            "errorCode": "VI",
            "errorMessage": "Voucher Invalid"
          },
          {
            "errorCode": "VL",
            "errorMessage": "Voucher Locked"
          },
          {
            "errorCode": "VNL",
            "errorMessage": "Voucher Not Locked"
          },
          {
            "errorCode": "VPUF",
            "errorMessage": "Voucher You don't have privileges to unlock this token"
          },
          {
            "errorCode": "VSM",
            "errorMessage": "Voucher Serial Mismatch"
          },
          {
            "errorCode": "VUA",
            "errorMessage": "No vouchers available for this campaign"
          },
          {
            "errorCode": "VU",
            "errorMessage": "Voucher already redeemed"
          },
          {
            "errorCode": "ITID",
            "errorMessage": "Invalid Transaction ID"
          },
          {
            "errorCode": "WTF",
            "errorMessage": "Wallet Transaction Failure"
          },
          {
            "errorCode": "IH",
            "errorMessage": "Invalid Header set"
          },
          {
            "errorCode": "RFL",
            "errorMessage": "Redemption failed: Max redemption limit ... per period ... has been exceeded"
          }
        ]
      }
    },
    "requestBodies": {
      "spendAccountPayload": {
        "description": "JSON Payload",
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/accountPayloadEntity"
                },
                {
                  "$ref": "#/components/schemas/locationPayloadEntity"
                },
                {
                  "type": "object",
                  "description": "Please note&#58; `amount` and `balances` Request's attributes are mutually exclusive (`balance` attribute allows to spend different amounts from a specified balance).",
                  "properties": {
                    "amount": {
                      "type": "integer",
                      "format": "int32",
                      "nullable": false,
                      "description": "Spend Amount denominated to a currency smallest unit (e.g. for USD this value should be in cents)."
                    },
                    "balances": {
                      "$ref": "#/components/schemas/accountBalancesEntity"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    },
    "parameters": {
      "httpContentTypeRequest": {
        "name": "Content-Type",
        "in": "header",
        "required": false,
        "description": "Standard HTTP header to inform EES API what type of content was passed in request payload",
        "schema": {
          "type": "string",
          "format": "string",
          "default": "application/json"
        },
        "allowEmptyValue": false
      },
      "eesDateTimeOverride": {
        "name": "X-POSCONNECT-TRANSACTION-DATETIME",
        "in": "header",
        "required": false,
        "description": "The ability to specify the date and time that should be used to adjudicate. This can be used to create transactions for past events, whilst ensuring the consumer receives the rewards that they were eligible for at that time. This functionality is only available for events less than 6 months in the past.  Please note requested transaction date-time has to use ATOM Date-Time format Y-m-d\\TH:i:sP, (e.g. 2017-12-31T23:59:59+09:00).",
        "schema": {
          "type": "string",
          "format": "eesDateTime",
          "nullable": false,
          "pattern": "^((((19|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00))\\-02\\-29|((19\\d{2}|[2-9]\\d{3})\\-((0[13578]|1[02])\\-31))|((19\\d{2}|[2-9]\\d{3})\\-(0[13-9]|1[0-2])\\-(29|30))|((19\\d{2}|[2-9]\\d{3})\\-(0[1-9]|1[0-2])\\-(0[1-9]|1[0-9]|2[0-8])))\\T([01][0-9]\\:[0-5][0-9]\\:[0-5][0-9]|2[0-3]\\:[0-5][0-9]\\:[0-5][0-9]))(\\+|\\-)([01][0-9]\\:[0-5][0-9]|2[0-3]\\:[0-5][0-9])$"
        },
        "allowEmptyValue": false
      },
      "httpAcceptEncodingRequest": {
        "name": "Accept-Encoding",
        "in": "header",
        "required": false,
        "description": "This request HTTP header advertises which content encoding (usually a compression algorithm) the calling application is able to understand. The server selects one of the proposals, use it and informs the client of its choice with the `Content-Encoding` Response header. Currently supported `gzip` and `deflate`. Please note if this request header is not present, no compression will be used.",
        "schema": {
          "type": "string",
          "default": "''",
          "enum": [
            "''",
            "'gzip'",
            "'deflate'",
            "'gzip,deflate'",
            "'deflate,gzip'"
          ]
        },
        "allowEmptyValue": true
      },
      "httpConnectionRequest": {
        "name": "Connection",
        "in": "header",
        "required": false,
        "description": "This general HTTP header controls (or rather influences) whether the network connection stays open after the current request finishes. If the sent value is `keep-alive`, the connection should stay in a special state, allowing to be reused for subsequent requests to the same server. Please note these connections will be closed after reaching timeout threshold controlled by EES server (usually after 5 seconds).",
        "schema": {
          "type": "string",
          "enum": [
            "keep-alive",
            "close"
          ],
          "default": "close"
        }
      },
      "eesAuthenticationClientId": {
        "name": "X-EES-AUTH-CLIENT-ID",
        "in": "header",
        "description": "Client ID, provided by EES during on-boarding. Please note&#58; the authentication mechanic requires the receipt of the full payload so any headers that would chunk the request up, such as `transfer-encoding: chunked` could potentially cause authentication failures.",
        "required": true,
        "schema": {
          "type": "string",
          "format": "string"
        }
      },
      "eesAuthenticationRequestHash": {
        "name": "X-EES-AUTH-HASH",
        "in": "header",
        "description": "Request Authentication Hash, calculated by concatenating Request URI Path with API prefix, Request Query String(s) if applicable, Request Payload if applicable and Client Secret. Please note&#58; the authentication mechanic requires the receipt of the full payload so any headers that would chunk the request up, such as `transfer-encoding: chunked` could potentially cause authentication failures.",
        "required": true,
        "schema": {
          "type": "string",
          "format": "string"
        }
      },
      "eesMessageId": {
        "name": "X-EES-TRANSACTION-ID",
        "in": "header",
        "description": "Optional Unique Reference for the API Request (Transaction) within the calling company",
        "required": false,
        "schema": {
          "type": "string",
          "format": "string"
        }
      },
      "customSubsystemId": {
        "name": "X-CUSTOM-SUBSYSTEM-ID",
        "in": "header",
        "description": "Optional header provided by the calling application for EES AIR to identify what was the external Subsystem ID / Name. Please note this header is not essential for AIR to process a Request, this header and its value will be intercepted by AIR and will show up in Wallet Event Notifications, if applicable.",
        "required": false,
        "schema": {
          "type": "string",
          "format": "string"
        }
      },
      "customWildCard": {
        "name": "X-CUSTOM-KEY",
        "in": "header",
        "description": "Optional header(s) provided by the calling application to EES AIR. Please note a) this header name has to follow pattern X-CUSTOM-* (i.e. X-CUSTOM-EMAIL) b) this header is not essential for AIR to process a Request, this header and its value will be intercepted by AIR and will show up in Wallet Event Notifications, if applicable.\n",
        "required": false,
        "schema": {
          "type": "string",
          "format": "string"
        }
      }
    },
    "responses": {
      "accountResponsePayload": {
        "description": "EES AIR has successfully processed a Request",
        "headers": {
          "X-EES-TRANSACTION-ID-RESULT": {
            "$ref": "#/components/headers/uniquenessCheckResult"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/accountResponse"
            }
          }
        }
      },
      "error400Response": {
        "description": "EES AIR Refuse to process that particular Request as there is something wrong with the Request (e.g. missing Mandatory Request parameter or Mandatory Request Payload attribute is missing, Request payload is unprocessable, etc)",
        "headers": {
          "X-EES-TRANSACTION-ID-RESULT": {
            "$ref": "#/components/headers/uniquenessCheckResult"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/defaultErrorEntity"
                }
              ]
            }
          }
        }
      },
      "error401Response": {
        "description": "EES AIR Refuse to process that particular Request due to Authentication error. This could be caused by missing mandatory AUTH header(s), invalid Hash calculation, invalid or inactive API Key used, etc.",
        "headers": {
          "X-EES-TRANSACTION-ID-RESULT": {
            "$ref": "#/components/headers/uniquenessCheckResult"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/defaultErrorEntity"
                }
              ]
            }
          }
        }
      },
      "error403Response": {
        "description": "EES AIR Refuse to process that particular Request due to Request Authorization error(s). This indicates that used API Key has not got required permissions to perform this operation.",
        "headers": {
          "X-EES-TRANSACTION-ID-RESULT": {
            "$ref": "#/components/headers/uniquenessCheckResult"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/defaultErrorEntity"
                }
              ]
            }
          }
        }
      },
      "error404Response": {
        "description": "EES AIR Refuse to process that particular Request as requested/referenced resource could not be found.",
        "headers": {
          "X-EES-TRANSACTION-ID-RESULT": {
            "$ref": "#/components/headers/uniquenessCheckResult"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/defaultErrorEntity"
                }
              ]
            }
          }
        }
      },
      "error409Response": {
        "description": "EES AIR understands this request, but refuses to process it, due to present Conflict with the current state of the target resource or because performing this operation would lead to a Conflict within AIR.",
        "headers": {
          "X-EES-TRANSACTION-ID-RESULT": {
            "$ref": "#/components/headers/uniquenessCheckResult"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/defaultErrorEntity"
                }
              ]
            }
          }
        }
      },
      "error415Response": {
        "description": "EES AIR is not able to understand that request due to not supported `Content-Type` value.",
        "headers": {
          "X-EES-TRANSACTION-ID-RESULT": {
            "$ref": "#/components/headers/uniquenessCheckResult"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/defaultErrorEntity"
                }
              ]
            }
          }
        }
      },
      "error429Response": {
        "description": "EES AIR refuses to process that particular Request as Client's API Requests Limit was exceeded.",
        "headers": {
          "X-EES-TRANSACTION-ID-RESULT": {
            "$ref": "#/components/headers/uniquenessCheckResult"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/defaultErrorEntity"
                }
              ]
            }
          }
        }
      },
      "error500Response": {
        "description": "EES AIR refuses to process that particular Request due to Unexpected Server Error.",
        "headers": {
          "X-EES-TRANSACTION-ID-RESULT": {
            "$ref": "#/components/headers/uniquenessCheckResult"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/defaultErrorEntity"
                }
              ]
            }
          }
        }
      },
      "error503Response": {
        "description": "EES AIR refuses to process that particular Request due to Service(s) being Unavailable (i.e. Scheduled Maintenance)",
        "headers": {
          "X-EES-TRANSACTION-ID-RESULT": {
            "$ref": "#/components/headers/uniquenessCheckResult"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/defaultErrorEntity"
                }
              ]
            }
          }
        }
      },
      "error504Response": {
        "description": "EES AIR refuses to process that particular Request due to Networking Issues",
        "headers": {
          "X-EES-TRANSACTION-ID-RESULT": {
            "$ref": "#/components/headers/uniquenessCheckResult"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/defaultErrorEntity"
                }
              ]
            }
          }
        }
      }
    },
    "headers": {
      "uniquenessCheckResult": {
        "required": false,
        "description": "If Request Uniqueness checking is enabled for a Client, this Header will contain details regarding Request uniqueness check performed within EES AIR. `PASSED` means it was checked and a Request is unique, `FAILED` means check was performed and it fails, `UNABLE TO CHECK` means EES AIR was not able to perform uniqueness check.",
        "schema": {
          "type": "string",
          "nullable": false,
          "enum": [
            "PASSED",
            "FAILED",
            "UNABLE TO CHECK"
          ]
        }
      }
    },
    "securitySchemes": {
      "eesAuthClientId": {
        "type": "apiKey",
        "in": "header",
        "description": "Client ID, provided during onboarding to each EES AIR Client. Please note&#58; API Key consist of `Client ID` and `Client Secret` required for calculating Authentication Hash (`X-EES-AUTH-HASH`). Each Unit from the Client Hierarchy can have one or more API Key(s).",
        "name": "X-EES-AUTH-CLIENT-ID"
      },
      "eesAuthHash": {
        "type": "apiKey",
        "in": "header",
        "description": "Request Authentication Hash, obtained by concatenating Full Request URI Path (with API prefix), Request Query String(s) (if applicable), Request Payload (if applicable), Client Secret and then calculating SHA256 from this concatenated string.",
        "name": "X-EES-AUTH-HASH"
      }
    }
  },
  "security": [
    {
      "eesAuthClientId": [],
      "eesAuthHash": []
    }
  ]
}
```