{
    "openapi": "3.0.1",
    "info": {
      "title": "External",
      "description": "# INFO\nPublic API endpoints intended for 3rd party integrations",
      "version": "v1"
    },
    "paths": {
      "/api/v1/display/analytics/rewards": {
        "get": {
          "tags": [
            "Analytics"
          ],
          "summary": "Return analytics for a specific reward",
          "description": "This endpoint returns detailed analytics for a specific reward.",
          "parameters": [
            {
              "name": "rewardId",
              "in": "query",
              "description": "ID of the reward.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "Reward analytics",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/RewardAnalyticsResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/RewardAnalyticsResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/RewardAnalyticsResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            },
            "404": {
              "description": "Reward not found"
            }
          }
        }
      },
      "/api/v1/display/analytics/coupons": {
        "get": {
          "tags": [
            "Analytics"
          ],
          "summary": "Return analytics for a specific coupon",
          "description": "This endpoint returns detailed analytics for a specific coupon.",
          "parameters": [
            {
              "name": "couponCode",
              "in": "query",
              "description": "Code of the coupon.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "Coupon analytics",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/CouponAnalyticsResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/CouponAnalyticsResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/CouponAnalyticsResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            },
            "404": {
              "description": "Coupon not found"
            }
          }
        }
      },
      "/api/v1/me": {
        "get": {
          "tags": [
            "Base"
          ],
          "summary": "Returns the information about the currently used API key.",
          "responses": {
            "200": {
              "description": "OK",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ApiKeyInfoResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ApiKeyInfoResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ApiKeyInfoResponseValueResponse"
                  }
                }
              }
            },
            "401": {
              "description": "Unauthorized"
            }
          }
        }
      },
      "/api/v1/display/coupons": {
        "get": {
          "tags": [
            "Coupons"
          ],
          "summary": "Return all coupons for a customer",
          "description": "This endpoint returns a list of all coupons for a specific customer.",
          "parameters": [
            {
              "name": "customerId",
              "in": "query",
              "description": "ID of the customer.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "List of coupons",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/CouponResponseListValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/CouponResponseListValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/CouponResponseListValueResponse"
                  }
                }
              }
            },
            "404": {
              "description": "Customer not found"
            }
          }
        }
      },
      "/api/v1/display/coupons/transfer": {
        "post": {
          "tags": [
            "Coupons"
          ],
          "summary": "Transfer a coupon to another customer",
          "description": "This endpoint transfers a coupon from one customer to another.",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferCouponRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferCouponRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferCouponRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Transfer result",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/TransferCouponResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/TransferCouponResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/TransferCouponResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            },
            "404": {
              "description": "Customer not found"
            }
          }
        }
      },
      "/api/v1/display/coupons/redeem": {
        "post": {
          "tags": [
            "Coupons"
          ],
          "summary": "Redeem coupon for a customer",
          "description": "This endpoint redeems a coupon for a specific customer.",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RedeemCouponRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/RedeemCouponRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/RedeemCouponRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Redeem result",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/RedeemCouponResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/RedeemCouponResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/RedeemCouponResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            },
            "404": {
              "description": "Customer not found"
            }
          }
        }
      },
      "/api/v1/display/customers": {
        "post": {
          "tags": [
            "Customers"
          ],
          "summary": "Create a customer",
          "description": "This endpoint creates a new customer according to the parameters in the request body. The confirmation URL is sent to user's email.",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateCustomerRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateCustomerRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateCustomerRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Success",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/CreateCustomerResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/CreateCustomerResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/CreateCustomerResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            }
          }
        }
      },
      "/api/v1/display/customers/login": {
        "post": {
          "tags": [
            "Customers"
          ],
          "summary": "Login a customer",
          "description": "This endpoint logs a specific customer into EpisXperience using email and password.",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoginCustomerRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoginCustomerRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/LoginCustomerRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Success",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/LoginCustomerResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/LoginCustomerResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/LoginCustomerResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            }
          }
        }
      },
      "/api/v1/display/customers/request-password": {
        "post": {
          "tags": [
            "Customers"
          ],
          "summary": "Request password reset for a customer",
          "description": "This endpoint sends an email with the URL for resetting password to a specific customer.",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RequestPasswordRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/RequestPasswordRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/RequestPasswordRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Success",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            }
          }
        }
      },
      "/api/v1/display/customers/request-set-password": {
        "post": {
          "tags": [
            "Customers"
          ],
          "summary": "Reset password for a customer",
          "description": "This endpoint resets password for a specific customer using a valid reset token.",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RequestSetPasswordRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/RequestSetPasswordRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/RequestSetPasswordRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Success",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            }
          }
        }
      },
      "/api/v1/display/customers/confirm-registration": {
        "post": {
          "tags": [
            "Customers"
          ],
          "summary": "Confirm registration",
          "description": "This endpoint verifies customer's account using the registration token.",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfirmRegistrationRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfirmRegistrationRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfirmRegistrationRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Customer registration confirmed",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            }
          }
        }
      },
      "/api/v1/data-import/download/{uploadId}": {
        "get": {
          "tags": [
            "Data Import"
          ],
          "summary": "Download file",
          "description": "This endpoint is used for downloading a previously uploaded document as an Excel file.",
          "parameters": [
            {
              "name": "uploadId",
              "in": "path",
              "description": "Upload ID of the uploaded file.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "Excel file successfully downloaded"
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            },
            "404": {
              "description": "Upload not found",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/data-import/define-upload": {
        "post": {
          "tags": [
            "Data Import"
          ],
          "summary": "Define upload",
          "description": "\nThis endpoint is used to signal the intent to upload a file and define the uploaded file's definition.\r\n\nThe upload definition includes type of data to import and type of file that the data is being imported from. Response contains an Upload ID that is used in subsequent requests of importing data.",
          "requestBody": {
            "description": "Data import definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DataImportDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DataImportDto"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/DataImportDto"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Upload ID",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/GuidResultValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/GuidResultValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/GuidResultValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/data-import/upload/{uploadId}": {
        "post": {
          "tags": [
            "Data Import"
          ],
          "summary": "Upload file",
          "description": "\nThis endpoint is used for uploading a file to an upload that was previously defined using the `/define-upload` endpoint.\r\n\nFile is sent in the body as `multipart/form-data`. Its columns should reflect the custom properties of the custom property owner that was defined in the upload definition\r\n\nThe response includes a list of discovered columns in the uploaded file and a recommended mapping between the discovered columns and custom properties. The mapping is automatically generated by matching property and column names. If the recommended mapping is correct, user should save it for the next step of data import.",
          "parameters": [
            {
              "name": "uploadId",
              "in": "path",
              "description": "ID of the defined upload returned from the `/define-upload` endpoint.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "requestBody": {
            "description": "File to upload.",
            "content": {
              "multipart/form-data": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "file": {
                      "type": "string",
                      "format": "binary"
                    }
                  }
                },
                "encoding": {
                  "file": {
                    "style": "form"
                  }
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "File successfully uploaded",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ColumnMappingDtoResultValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ColumnMappingDtoResultValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ColumnMappingDtoResultValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            },
            "404": {
              "description": "Upload not found",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/data-import/validate-and-import/{uploadId}": {
        "post": {
          "tags": [
            "Data Import"
          ],
          "summary": "Validate data and import file",
          "description": "\nThis endpoint validates data and imports the uploaded file into the system if the validation is successful.\r\n\nRequest body contains a mapping between discovered columns in the file and custom properties. The recommended mapping from response of the `/upload/{uploadId}` endpoint can be used for this purpose.",
          "parameters": [
            {
              "name": "uploadId",
              "in": "path",
              "description": "ID of the defined upload returned from the `/define-upload` endpoint.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "requestBody": {
            "description": "Mapping between discovered columns and custom properties.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomPropertyColumnMapDto"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomPropertyColumnMapDto"
                  }
                }
              },
              "application/*+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomPropertyColumnMapDto"
                  }
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "File successfully imported",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            },
            "404": {
              "description": "Upload not found",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/event": {
        "post": {
          "tags": [
            "Events"
          ],
          "summary": "Submit an event",
          "description": "This endpoint allows submitting of one event.",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateEventRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateEventRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateEventRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Success",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/CreateEventResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/CreateEventResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/CreateEventResponseValueResponse"
                  }
                }
              }
            },
            "404": {
              "description": "Member or event type not found"
            }
          }
        }
      },
      "/api/v1/events": {
        "post": {
          "tags": [
            "Events"
          ],
          "summary": "Submit a list of events",
          "description": "This endpoint allows submitting a list of events.",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CreateEventRequest"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CreateEventRequest"
                  }
                }
              },
              "application/*+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CreateEventRequest"
                  }
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Success",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/CreateEventResponseListValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/CreateEventResponseListValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/CreateEventResponseListValueResponse"
                  }
                }
              }
            },
            "404": {
              "description": "Member or event type not found"
            }
          }
        }
      },
      "/api/v1/customers/list": {
        "get": {
          "tags": [
            "Audience"
          ],
          "summary": "Return a list of customers",
          "description": "\nThis endpoint fetches a list of all registered customers.\r\n\n**Use Case:** Retrieve an overview of all customers for analysis or recordkeeping.",
          "parameters": [
            {
              "name": "skip",
              "in": "query",
              "description": "The number of customers to skip from start (by setting to more than 0).",
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            },
            {
              "name": "take",
              "in": "query",
              "description": "The number of customers to return (by setting to more than 0).",
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "List of customers",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/LcrMemberListValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/LcrMemberListValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/LcrMemberListValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/customers/{customerId}": {
        "get": {
          "tags": [
            "Audience"
          ],
          "summary": "Return a specific customer",
          "description": "\nThis endpoint fetches detailed information about a specific customer using their unique ID.\r\n\n**Use Case:** Access customer details for updates or viewing.",
          "parameters": [
            {
              "name": "customerId",
              "in": "path",
              "description": "ID of the customer to return.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "Customer details",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/LcrMemberValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/LcrMemberValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/LcrMemberValueResponse"
                  }
                }
              }
            },
            "404": {
              "description": "Customer not found",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        },
        "put": {
          "tags": [
            "Audience"
          ],
          "summary": "Update a customer",
          "description": "\nThis endpoint updates the information of an existing customer.\r\n\n**Use Case:** Modify customer details, such as contact information or preferences.",
          "parameters": [
            {
              "name": "customerId",
              "in": "path",
              "description": "ID of the customer to update.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "requestBody": {
            "description": "New data for customer.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModifyMemberRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModifyMemberRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/ModifyMemberRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Customer successfully updated",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        },
        "delete": {
          "tags": [
            "Audience"
          ],
          "summary": "Remove a customer",
          "description": "\nThis endpoint removes a specific customer from the system.\r\n\n**Use Case:** Clean up records or delete inactive accounts.",
          "parameters": [
            {
              "name": "customerId",
              "in": "path",
              "description": "ID of the customer to remove.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "Customer successfully removed",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/customers": {
        "post": {
          "tags": [
            "Audience"
          ],
          "summary": "Create a new customer",
          "description": "\nThis endpoint adds a new customer to the system.\r\n\n**Use Case:** Register a new user or account.",
          "requestBody": {
            "description": "Data for new customer.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModifyMemberRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModifyMemberRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/ModifyMemberRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "ID of created customer",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/GuidValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/GuidValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/GuidValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/customers/count": {
        "get": {
          "tags": [
            "Audience"
          ],
          "summary": "Return the count of all customers",
          "description": "\nThis endpoint retrieves the total number of customers in the system.\r\n\n**Use Case:** Monitor the growth of the customer database or validate data.",
          "responses": {
            "200": {
              "description": "Total number of customers",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/Int64ValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Int64ValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Int64ValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/customers/import/{uploadId}": {
        "post": {
          "tags": [
            "Audience"
          ],
          "summary": "Import customers",
          "description": "\nThis endpoint facilitates batch uploads of multiple customers in one operation.\r\n            Customers are imported from a file that was previously uploaded using **Data Import API** endpoints.\r\n            \n**Use Case:** Efficiently populate the customer database or update large datasets.",
          "parameters": [
            {
              "name": "uploadId",
              "in": "path",
              "description": "Upload ID of the previously uploaded file.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "Customers successfully imported",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/pos/calculate-sale-informally": {
        "put": {
          "tags": [
            "Pos"
          ],
          "summary": "Calculate sale informally",
          "description": "This endpoint simulates a sale without actually executing it.\n</br>\r\nPOS terminals or eCommerce platform can use this endpoint to evaluate potential loyalty-related effects, such as points earned, discounts applied, or other benefits available for the transaction. Moreover, it provides insights into future options or rewards based on the simulated transaction.\r\n\n</br><b>Use Case:</b> Ideal for providing customers with a preview of loyalty rewards or benefits before completing a purchase.",
          "requestBody": {
            "description": "Sale request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaleRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaleRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/SaleRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "OK",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/SaleResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/SaleResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/SaleResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad Request"
            },
            "401": {
              "description": "Unauthorized"
            },
            "403": {
              "description": "Forbidden"
            },
            "500": {
              "description": "Internal Server Error"
            }
          }
        }
      },
      "/api/v1/pos/complete-sale": {
        "post": {
          "tags": [
            "Pos"
          ],
          "summary": "Complete sale",
          "description": "This endpoint processes the actual sale and performs all loyalty-related operations. It accepts the same parameters as calculate-sale-informally, however, it actualy finalizes the transaction, updating the loyalty account with earned points, redeemed rewards, or applied benefits.\r\nThe endpoint returns the effects of the completed sale, such as updated balances or triggered rewards.\r\n\n</br><b>Use Case:</b> Used to finalize transactions and ensure loyalty benefits are applied.",
          "requestBody": {
            "description": "The sale request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaleRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaleRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/SaleRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "OK",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/SaleResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/SaleResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/SaleResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad Request"
            },
            "401": {
              "description": "Unauthorized"
            },
            "403": {
              "description": "Forbidden"
            },
            "500": {
              "description": "Internal Server Error"
            }
          }
        }
      },
      "/api/v1/pos/revert-sale": {
        "post": {
          "tags": [
            "Pos"
          ],
          "summary": "Revert sale",
          "description": "This endpoint cancels all loyalty-related operations for a previously completed sale.\n</br>\r\nTo trigger the revert of sale, POS terminals or eCommerce platform must send the transaction ID of the sale to reverse all loyalty points, benefits, or rewards applied during the sale.\r\n\n</br><b>Use Case:</b> Useful for handling refunds or correcting errors in completed transactions.",
          "requestBody": {
            "description": "Revert request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RevertRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/RevertRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/RevertRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "OK",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/RevertResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/RevertResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/RevertResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad Request"
            },
            "401": {
              "description": "Unauthorized"
            },
            "403": {
              "description": "Forbidden"
            },
            "500": {
              "description": "Internal Server Error"
            }
          }
        }
      },
      "/api/v1/products/list": {
        "get": {
          "tags": [
            "Products"
          ],
          "summary": "Return a list of products",
          "description": "\nThis endpoint fetches a complete list of products available in the Product catalog.\r\n\n**Use Case:** Retrieve an overview of all products for display or inventory management.",
          "parameters": [
            {
              "name": "skip",
              "in": "query",
              "description": "The number of products to skip (by setting to more than 0).",
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            },
            {
              "name": "take",
              "in": "query",
              "description": "The number of products to take (by setting to more than 0).",
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "List of products",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/LcrProductListValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/LcrProductListValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/LcrProductListValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/products/{productId}": {
        "get": {
          "tags": [
            "Products"
          ],
          "summary": "Return a specific product",
          "description": "\nThis method fetches detailed information about a single product by its unique identifier.\r\n\n**Use Case:** Retrieve product details for viewing or updating purposes.",
          "parameters": [
            {
              "name": "productId",
              "in": "path",
              "description": "ID of the product to return.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "Product details",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/LcrProductValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/LcrProductValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/LcrProductValueResponse"
                  }
                }
              }
            },
            "404": {
              "description": "Product not found",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        },
        "put": {
          "tags": [
            "Products"
          ],
          "summary": "Update a product",
          "description": "\nThis endpoint updates the details of an existing product in the catalog.\r\n\n**Use Case:** Modify product attributes, such as price, availability, or description.",
          "parameters": [
            {
              "name": "productId",
              "in": "path",
              "description": "ID of the product to update.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "requestBody": {
            "description": "New data for product.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductHolderUpdateRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductHolderUpdateRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductHolderUpdateRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Product successfully updated",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/Int64ValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Int64ValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Int64ValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            }
          }
        },
        "delete": {
          "tags": [
            "Products"
          ],
          "summary": "Remove a product",
          "description": "\nThis endpoint deletes a specific product from the catalog.\r\n\n**Use Case:** Remove outdated or discontinued products.",
          "parameters": [
            {
              "name": "productId",
              "in": "path",
              "description": "ID of the product to remove.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "Product successfully removed",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/products": {
        "post": {
          "tags": [
            "Products"
          ],
          "summary": "Create a new product",
          "description": "\nThis method adds a new product to the catalog.\r\n\n**Use Case:** Introduce new items to the product inventory.",
          "requestBody": {
            "description": "Data for new product.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductHolderCreateRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductHolderCreateRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductHolderCreateRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "ID of created product",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/Int64ValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Int64ValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Int64ValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            }
          }
        }
      },
      "/api/v1/products/count": {
        "get": {
          "tags": [
            "Products"
          ],
          "summary": "Return the count of all products",
          "description": "\nThis endpoint retrieves the total number of products in the catalog.\r\n\n**Use Case:** Monitor inventory size or validate data.",
          "responses": {
            "200": {
              "description": "Total number of products",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/Int64ValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Int64ValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Int64ValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/products/import/{uploadId}": {
        "post": {
          "tags": [
            "Products"
          ],
          "summary": "Import products",
          "description": "\nThis endpoint facilitates batch uploads of multiple products in a single operation.\r\n            Products are imported from a file that was previously uploaded using **Data Import API** endpoints.\r\n            \n**Use Case:** Quickly populate the catalog with new product data or perform mass updates.",
          "parameters": [
            {
              "name": "uploadId",
              "in": "path",
              "description": "Upload ID of the previously uploaded file.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "Products successfully imported",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/OkResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/api/v1/display/rewards": {
        "get": {
          "tags": [
            "Rewards"
          ],
          "summary": "Return all rewards for a customer",
          "description": "This endpoint returns a list of all rewards for a specific customer.",
          "parameters": [
            {
              "name": "customerId",
              "in": "query",
              "description": "ID of the customer.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            },
            {
              "name": "status",
              "in": "query",
              "description": "Status of the reward.\n</br>Options: `active`, `inactive`, `completed`, `restricted`.",
              "schema": {
                "type": "string"
              }
            },
            {
              "name": "segment",
              "in": "query",
              "description": "Name of customer's segment for filtering rewards.",
              "schema": {
                "type": "string"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "List of rewards",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/RewardResponseListValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/RewardResponseListValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/RewardResponseListValueResponse"
                  }
                }
              }
            },
            "404": {
              "description": "Customer not found"
            }
          }
        }
      },
      "/api/v1/display/rewards/{rewardId}": {
        "get": {
          "tags": [
            "Rewards"
          ],
          "summary": "Return a specific reward",
          "description": "This endpoint returns details of a specific reward.",
          "parameters": [
            {
              "name": "rewardId",
              "in": "path",
              "description": "ID of the reward.",
              "required": true,
              "schema": {
                "type": "string",
                "format": "uuid"
              }
            }
          ],
          "responses": {
            "200": {
              "description": "Reward details",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ReadRewardResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ReadRewardResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ReadRewardResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            },
            "404": {
              "description": "Reward not found"
            }
          }
        }
      },
      "/api/v1/display/rewards/claim": {
        "post": {
          "tags": [
            "Rewards"
          ],
          "summary": "Claim reward for a customer",
          "description": "This endpoint claims a reward for a specific customer.",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimRewardRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimRewardRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimRewardRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Claim result",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/ClaimRewardResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ClaimRewardResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/ClaimRewardResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            },
            "404": {
              "description": "Customer not found"
            }
          }
        }
      },
      "/api/v1/display/rewards/revoke": {
        "post": {
          "tags": [
            "Rewards"
          ],
          "summary": "Revoke a claimed reward",
          "description": "This endpoint revokes a specific previously claimed reward.\n</br>Reward must be revoked within 8 days of having been claimed.",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RevokeRewardRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/RevokeRewardRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/RevokeRewardRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Revoke result",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/RevokeRewardResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/RevokeRewardResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/RevokeRewardResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            },
            "404": {
              "description": "Customer not found"
            }
          }
        }
      },
      "/api/v1/display/rewards/transfer": {
        "post": {
          "tags": [
            "Rewards"
          ],
          "summary": "Transfer a reward to another customer",
          "description": "This endpoint transfers a reward from one customer to another.",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferRewardRequest"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferRewardRequest"
                }
              },
              "application/*+json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferRewardRequest"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Transfer result",
              "content": {
                "text/plain": {
                  "schema": {
                    "$ref": "#/components/schemas/TransferRewardResponseValueResponse"
                  }
                },
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/TransferRewardResponseValueResponse"
                  }
                },
                "text/json": {
                  "schema": {
                    "$ref": "#/components/schemas/TransferRewardResponseValueResponse"
                  }
                }
              }
            },
            "400": {
              "description": "Bad request"
            },
            "404": {
              "description": "Customer not found"
            }
          }
        }
      }
    },
    "components": {
      "schemas": {
        "ApiKeyInfoResponse": {
          "required": [
            "description",
            "expiryDate",
            "id",
            "space",
            "tenant"
          ],
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "Unique identifier of the API key",
              "format": "uuid"
            },
            "expiryDate": {
              "$ref": "#/components/schemas/Instant"
            },
            "description": {
              "type": "string",
              "description": "Description of the API key"
            },
            "tenant": {
              "$ref": "#/components/schemas/TenantInfo"
            },
            "space": {
              "$ref": "#/components/schemas/SpaceInfo"
            }
          },
          "additionalProperties": false,
          "description": "DTO used to return information about currenttly used API key"
        },
        "ApiKeyInfoResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/ApiKeyInfoResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "BsonBinaryData": {
          "required": [
            "asBoolean",
            "asBsonBinaryData",
            "asBsonDateTime",
            "asBsonJavaScript",
            "asBsonJavaScriptWithScope",
            "asBsonMaxKey",
            "asBsonMinKey",
            "asBsonNull",
            "asBsonRegularExpression",
            "asBsonSymbol",
            "asBsonTimestamp",
            "asBsonUndefined",
            "asBsonValue",
            "asDateTime",
            "asDecimal",
            "asDecimal128",
            "asDouble",
            "asGuid",
            "asInt32",
            "asInt64",
            "asLocalTime",
            "asNullableDecimal128",
            "asNullableObjectId",
            "asObjectId",
            "asRegex",
            "asUniversalTime",
            "bsonType",
            "guidRepresentation",
            "isBoolean",
            "isBsonArray",
            "isBsonBinaryData",
            "isBsonDateTime",
            "isBsonDocument",
            "isBsonJavaScript",
            "isBsonJavaScriptWithScope",
            "isBsonMaxKey",
            "isBsonMinKey",
            "isBsonNull",
            "isBsonRegularExpression",
            "isBsonSymbol",
            "isBsonTimestamp",
            "isBsonUndefined",
            "isDateTime",
            "isDecimal128",
            "isDouble",
            "isGuid",
            "isInt32",
            "isInt64",
            "isNumeric",
            "isObjectId",
            "isString",
            "isValidDateTime",
            "subType"
          ],
          "type": "object",
          "properties": {
            "asBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "asBsonArray": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonValue"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonBinaryData": {
              "$ref": "#/components/schemas/BsonBinaryData"
            },
            "asBsonDateTime": {
              "$ref": "#/components/schemas/BsonDateTime"
            },
            "asBsonDocument": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonJavaScript": {
              "$ref": "#/components/schemas/BsonJavaScript"
            },
            "asBsonJavaScriptWithScope": {
              "$ref": "#/components/schemas/BsonJavaScriptWithScope"
            },
            "asBsonMaxKey": {
              "$ref": "#/components/schemas/BsonMaxKey"
            },
            "asBsonMinKey": {
              "$ref": "#/components/schemas/BsonMinKey"
            },
            "asBsonNull": {
              "$ref": "#/components/schemas/BsonNull"
            },
            "asBsonRegularExpression": {
              "$ref": "#/components/schemas/BsonRegularExpression"
            },
            "asBsonSymbol": {
              "$ref": "#/components/schemas/BsonSymbol"
            },
            "asBsonTimestamp": {
              "$ref": "#/components/schemas/BsonTimestamp"
            },
            "asBsonUndefined": {
              "$ref": "#/components/schemas/BsonUndefined"
            },
            "asBsonValue": {
              "$ref": "#/components/schemas/BsonValue"
            },
            "asByteArray": {
              "type": "string",
              "format": "byte",
              "nullable": true,
              "readOnly": true
            },
            "asDateTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asDecimal": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asDouble": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asGuid": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "asInt32": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "asLocalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asInt64": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "asNullableBoolean": {
              "type": "boolean",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDateTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "asNullableDecimal": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asNullableDouble": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableGuid": {
              "type": "string",
              "format": "uuid",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt32": {
              "type": "integer",
              "format": "int32",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt64": {
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "readOnly": true
            },
            "asNullableObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asRegex": {
              "$ref": "#/components/schemas/Regex"
            },
            "asString": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "asUniversalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "isBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonArray": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonBinaryData": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDocument": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScript": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScriptWithScope": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMaxKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMinKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonNull": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonRegularExpression": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonSymbol": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonTimestamp": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonUndefined": {
              "type": "boolean",
              "readOnly": true
            },
            "isDateTime": {
              "type": "boolean",
              "readOnly": true,
              "deprecated": true
            },
            "isDecimal128": {
              "type": "boolean",
              "readOnly": true
            },
            "isDouble": {
              "type": "boolean",
              "readOnly": true
            },
            "isGuid": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt32": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt64": {
              "type": "boolean",
              "readOnly": true
            },
            "isNumeric": {
              "type": "boolean",
              "readOnly": true
            },
            "isObjectId": {
              "type": "boolean",
              "readOnly": true
            },
            "isString": {
              "type": "boolean",
              "readOnly": true
            },
            "isValidDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "bsonType": {
              "$ref": "#/components/schemas/BsonType"
            },
            "bytes": {
              "type": "string",
              "format": "byte",
              "nullable": true
            },
            "guidRepresentation": {
              "$ref": "#/components/schemas/GuidRepresentation"
            },
            "rawValue": {
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "subType": {
              "$ref": "#/components/schemas/BsonBinarySubType"
            }
          },
          "additionalProperties": false
        },
        "BsonBinarySubType": {
          "enum": [
            "Binary",
            "Function",
            "OldBinary",
            "UuidLegacy",
            "UuidStandard",
            "MD5",
            "Encrypted",
            "Column",
            "Sensitive",
            "UserDefined"
          ],
          "type": "string"
        },
        "BsonDateTime": {
          "required": [
            "asBoolean",
            "asBsonBinaryData",
            "asBsonDateTime",
            "asBsonJavaScript",
            "asBsonJavaScriptWithScope",
            "asBsonMaxKey",
            "asBsonMinKey",
            "asBsonNull",
            "asBsonRegularExpression",
            "asBsonSymbol",
            "asBsonTimestamp",
            "asBsonUndefined",
            "asBsonValue",
            "asDateTime",
            "asDecimal",
            "asDecimal128",
            "asDouble",
            "asGuid",
            "asInt32",
            "asInt64",
            "asLocalTime",
            "asNullableDecimal128",
            "asNullableObjectId",
            "asObjectId",
            "asRegex",
            "asUniversalTime",
            "bsonType",
            "isBoolean",
            "isBsonArray",
            "isBsonBinaryData",
            "isBsonDateTime",
            "isBsonDocument",
            "isBsonJavaScript",
            "isBsonJavaScriptWithScope",
            "isBsonMaxKey",
            "isBsonMinKey",
            "isBsonNull",
            "isBsonRegularExpression",
            "isBsonSymbol",
            "isBsonTimestamp",
            "isBsonUndefined",
            "isDateTime",
            "isDecimal128",
            "isDouble",
            "isGuid",
            "isInt32",
            "isInt64",
            "isNumeric",
            "isObjectId",
            "isString",
            "isValidDateTime",
            "millisecondsSinceEpoch",
            "value"
          ],
          "type": "object",
          "properties": {
            "asBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "asBsonArray": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonValue"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonBinaryData": {
              "$ref": "#/components/schemas/BsonBinaryData"
            },
            "asBsonDateTime": {
              "$ref": "#/components/schemas/BsonDateTime"
            },
            "asBsonDocument": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonJavaScript": {
              "$ref": "#/components/schemas/BsonJavaScript"
            },
            "asBsonJavaScriptWithScope": {
              "$ref": "#/components/schemas/BsonJavaScriptWithScope"
            },
            "asBsonMaxKey": {
              "$ref": "#/components/schemas/BsonMaxKey"
            },
            "asBsonMinKey": {
              "$ref": "#/components/schemas/BsonMinKey"
            },
            "asBsonNull": {
              "$ref": "#/components/schemas/BsonNull"
            },
            "asBsonRegularExpression": {
              "$ref": "#/components/schemas/BsonRegularExpression"
            },
            "asBsonSymbol": {
              "$ref": "#/components/schemas/BsonSymbol"
            },
            "asBsonTimestamp": {
              "$ref": "#/components/schemas/BsonTimestamp"
            },
            "asBsonUndefined": {
              "$ref": "#/components/schemas/BsonUndefined"
            },
            "asBsonValue": {
              "$ref": "#/components/schemas/BsonValue"
            },
            "asByteArray": {
              "type": "string",
              "format": "byte",
              "nullable": true,
              "readOnly": true
            },
            "asDateTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asDecimal": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asDouble": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asGuid": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "asInt32": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "asLocalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asInt64": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "asNullableBoolean": {
              "type": "boolean",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDateTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "asNullableDecimal": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asNullableDouble": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableGuid": {
              "type": "string",
              "format": "uuid",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt32": {
              "type": "integer",
              "format": "int32",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt64": {
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "readOnly": true
            },
            "asNullableObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asRegex": {
              "$ref": "#/components/schemas/Regex"
            },
            "asString": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "asUniversalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "isBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonArray": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonBinaryData": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDocument": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScript": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScriptWithScope": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMaxKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMinKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonNull": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonRegularExpression": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonSymbol": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonTimestamp": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonUndefined": {
              "type": "boolean",
              "readOnly": true
            },
            "isDateTime": {
              "type": "boolean",
              "readOnly": true,
              "deprecated": true
            },
            "isDecimal128": {
              "type": "boolean",
              "readOnly": true
            },
            "isDouble": {
              "type": "boolean",
              "readOnly": true
            },
            "isGuid": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt32": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt64": {
              "type": "boolean",
              "readOnly": true
            },
            "isNumeric": {
              "type": "boolean",
              "readOnly": true
            },
            "isObjectId": {
              "type": "boolean",
              "readOnly": true
            },
            "isString": {
              "type": "boolean",
              "readOnly": true
            },
            "bsonType": {
              "$ref": "#/components/schemas/BsonType"
            },
            "isValidDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "millisecondsSinceEpoch": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "rawValue": {
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "value": {
              "type": "string",
              "format": "date-time",
              "deprecated": true
            }
          },
          "additionalProperties": false
        },
        "BsonElement": {
          "required": [
            "value"
          ],
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "nullable": true
            },
            "value": {
              "$ref": "#/components/schemas/BsonValue"
            }
          },
          "additionalProperties": false
        },
        "BsonJavaScript": {
          "required": [
            "asBoolean",
            "asBsonBinaryData",
            "asBsonDateTime",
            "asBsonJavaScript",
            "asBsonJavaScriptWithScope",
            "asBsonMaxKey",
            "asBsonMinKey",
            "asBsonNull",
            "asBsonRegularExpression",
            "asBsonSymbol",
            "asBsonTimestamp",
            "asBsonUndefined",
            "asBsonValue",
            "asDateTime",
            "asDecimal",
            "asDecimal128",
            "asDouble",
            "asGuid",
            "asInt32",
            "asInt64",
            "asLocalTime",
            "asNullableDecimal128",
            "asNullableObjectId",
            "asObjectId",
            "asRegex",
            "asUniversalTime",
            "bsonType",
            "isBoolean",
            "isBsonArray",
            "isBsonBinaryData",
            "isBsonDateTime",
            "isBsonDocument",
            "isBsonJavaScript",
            "isBsonJavaScriptWithScope",
            "isBsonMaxKey",
            "isBsonMinKey",
            "isBsonNull",
            "isBsonRegularExpression",
            "isBsonSymbol",
            "isBsonTimestamp",
            "isBsonUndefined",
            "isDateTime",
            "isDecimal128",
            "isDouble",
            "isGuid",
            "isInt32",
            "isInt64",
            "isNumeric",
            "isObjectId",
            "isString",
            "isValidDateTime"
          ],
          "type": "object",
          "properties": {
            "asBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "asBsonArray": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonValue"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonBinaryData": {
              "$ref": "#/components/schemas/BsonBinaryData"
            },
            "asBsonDateTime": {
              "$ref": "#/components/schemas/BsonDateTime"
            },
            "asBsonDocument": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonJavaScript": {
              "$ref": "#/components/schemas/BsonJavaScript"
            },
            "asBsonJavaScriptWithScope": {
              "$ref": "#/components/schemas/BsonJavaScriptWithScope"
            },
            "asBsonMaxKey": {
              "$ref": "#/components/schemas/BsonMaxKey"
            },
            "asBsonMinKey": {
              "$ref": "#/components/schemas/BsonMinKey"
            },
            "asBsonNull": {
              "$ref": "#/components/schemas/BsonNull"
            },
            "asBsonRegularExpression": {
              "$ref": "#/components/schemas/BsonRegularExpression"
            },
            "asBsonSymbol": {
              "$ref": "#/components/schemas/BsonSymbol"
            },
            "asBsonTimestamp": {
              "$ref": "#/components/schemas/BsonTimestamp"
            },
            "asBsonUndefined": {
              "$ref": "#/components/schemas/BsonUndefined"
            },
            "asBsonValue": {
              "$ref": "#/components/schemas/BsonValue"
            },
            "asByteArray": {
              "type": "string",
              "format": "byte",
              "nullable": true,
              "readOnly": true
            },
            "asDateTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asDecimal": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asDouble": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asGuid": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "asInt32": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "asLocalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asInt64": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "asNullableBoolean": {
              "type": "boolean",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDateTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "asNullableDecimal": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asNullableDouble": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableGuid": {
              "type": "string",
              "format": "uuid",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt32": {
              "type": "integer",
              "format": "int32",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt64": {
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "readOnly": true
            },
            "asNullableObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asRegex": {
              "$ref": "#/components/schemas/Regex"
            },
            "asString": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "asUniversalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "isBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonArray": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonBinaryData": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDocument": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScript": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScriptWithScope": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMaxKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMinKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonNull": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonRegularExpression": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonSymbol": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonTimestamp": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonUndefined": {
              "type": "boolean",
              "readOnly": true
            },
            "isDateTime": {
              "type": "boolean",
              "readOnly": true,
              "deprecated": true
            },
            "isDecimal128": {
              "type": "boolean",
              "readOnly": true
            },
            "isDouble": {
              "type": "boolean",
              "readOnly": true
            },
            "isGuid": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt32": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt64": {
              "type": "boolean",
              "readOnly": true
            },
            "isNumeric": {
              "type": "boolean",
              "readOnly": true
            },
            "isObjectId": {
              "type": "boolean",
              "readOnly": true
            },
            "isString": {
              "type": "boolean",
              "readOnly": true
            },
            "isValidDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "rawValue": {
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "bsonType": {
              "$ref": "#/components/schemas/BsonType"
            },
            "code": {
              "type": "string",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "BsonJavaScriptWithScope": {
          "required": [
            "asBoolean",
            "asBsonBinaryData",
            "asBsonDateTime",
            "asBsonJavaScript",
            "asBsonJavaScriptWithScope",
            "asBsonMaxKey",
            "asBsonMinKey",
            "asBsonNull",
            "asBsonRegularExpression",
            "asBsonSymbol",
            "asBsonTimestamp",
            "asBsonUndefined",
            "asBsonValue",
            "asDateTime",
            "asDecimal",
            "asDecimal128",
            "asDouble",
            "asGuid",
            "asInt32",
            "asInt64",
            "asLocalTime",
            "asNullableDecimal128",
            "asNullableObjectId",
            "asObjectId",
            "asRegex",
            "asUniversalTime",
            "bsonType",
            "isBoolean",
            "isBsonArray",
            "isBsonBinaryData",
            "isBsonDateTime",
            "isBsonDocument",
            "isBsonJavaScript",
            "isBsonJavaScriptWithScope",
            "isBsonMaxKey",
            "isBsonMinKey",
            "isBsonNull",
            "isBsonRegularExpression",
            "isBsonSymbol",
            "isBsonTimestamp",
            "isBsonUndefined",
            "isDateTime",
            "isDecimal128",
            "isDouble",
            "isGuid",
            "isInt32",
            "isInt64",
            "isNumeric",
            "isObjectId",
            "isString",
            "isValidDateTime"
          ],
          "type": "object",
          "properties": {
            "asBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "asBsonArray": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonValue"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonBinaryData": {
              "$ref": "#/components/schemas/BsonBinaryData"
            },
            "asBsonDateTime": {
              "$ref": "#/components/schemas/BsonDateTime"
            },
            "asBsonDocument": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonJavaScript": {
              "$ref": "#/components/schemas/BsonJavaScript"
            },
            "asBsonJavaScriptWithScope": {
              "$ref": "#/components/schemas/BsonJavaScriptWithScope"
            },
            "asBsonMaxKey": {
              "$ref": "#/components/schemas/BsonMaxKey"
            },
            "asBsonMinKey": {
              "$ref": "#/components/schemas/BsonMinKey"
            },
            "asBsonNull": {
              "$ref": "#/components/schemas/BsonNull"
            },
            "asBsonRegularExpression": {
              "$ref": "#/components/schemas/BsonRegularExpression"
            },
            "asBsonSymbol": {
              "$ref": "#/components/schemas/BsonSymbol"
            },
            "asBsonTimestamp": {
              "$ref": "#/components/schemas/BsonTimestamp"
            },
            "asBsonUndefined": {
              "$ref": "#/components/schemas/BsonUndefined"
            },
            "asBsonValue": {
              "$ref": "#/components/schemas/BsonValue"
            },
            "asByteArray": {
              "type": "string",
              "format": "byte",
              "nullable": true,
              "readOnly": true
            },
            "asDateTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asDecimal": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asDouble": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asGuid": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "asInt32": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "asLocalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asInt64": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "asNullableBoolean": {
              "type": "boolean",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDateTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "asNullableDecimal": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asNullableDouble": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableGuid": {
              "type": "string",
              "format": "uuid",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt32": {
              "type": "integer",
              "format": "int32",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt64": {
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "readOnly": true
            },
            "asNullableObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asRegex": {
              "$ref": "#/components/schemas/Regex"
            },
            "asString": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "asUniversalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "isBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonArray": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonBinaryData": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDocument": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScript": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScriptWithScope": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMaxKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMinKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonNull": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonRegularExpression": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonSymbol": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonTimestamp": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonUndefined": {
              "type": "boolean",
              "readOnly": true
            },
            "isDateTime": {
              "type": "boolean",
              "readOnly": true,
              "deprecated": true
            },
            "isDecimal128": {
              "type": "boolean",
              "readOnly": true
            },
            "isDouble": {
              "type": "boolean",
              "readOnly": true
            },
            "isGuid": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt32": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt64": {
              "type": "boolean",
              "readOnly": true
            },
            "isNumeric": {
              "type": "boolean",
              "readOnly": true
            },
            "isObjectId": {
              "type": "boolean",
              "readOnly": true
            },
            "isString": {
              "type": "boolean",
              "readOnly": true
            },
            "isValidDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "rawValue": {
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "code": {
              "type": "string",
              "nullable": true
            },
            "bsonType": {
              "$ref": "#/components/schemas/BsonType"
            },
            "scope": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "BsonMaxKey": {
          "required": [
            "asBoolean",
            "asBsonBinaryData",
            "asBsonDateTime",
            "asBsonJavaScript",
            "asBsonJavaScriptWithScope",
            "asBsonMaxKey",
            "asBsonMinKey",
            "asBsonNull",
            "asBsonRegularExpression",
            "asBsonSymbol",
            "asBsonTimestamp",
            "asBsonUndefined",
            "asBsonValue",
            "asDateTime",
            "asDecimal",
            "asDecimal128",
            "asDouble",
            "asGuid",
            "asInt32",
            "asInt64",
            "asLocalTime",
            "asNullableDecimal128",
            "asNullableObjectId",
            "asObjectId",
            "asRegex",
            "asUniversalTime",
            "bsonType",
            "isBoolean",
            "isBsonArray",
            "isBsonBinaryData",
            "isBsonDateTime",
            "isBsonDocument",
            "isBsonJavaScript",
            "isBsonJavaScriptWithScope",
            "isBsonMaxKey",
            "isBsonMinKey",
            "isBsonNull",
            "isBsonRegularExpression",
            "isBsonSymbol",
            "isBsonTimestamp",
            "isBsonUndefined",
            "isDateTime",
            "isDecimal128",
            "isDouble",
            "isGuid",
            "isInt32",
            "isInt64",
            "isNumeric",
            "isObjectId",
            "isString",
            "isValidDateTime"
          ],
          "type": "object",
          "properties": {
            "asBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "asBsonArray": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonValue"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonBinaryData": {
              "$ref": "#/components/schemas/BsonBinaryData"
            },
            "asBsonDateTime": {
              "$ref": "#/components/schemas/BsonDateTime"
            },
            "asBsonDocument": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonJavaScript": {
              "$ref": "#/components/schemas/BsonJavaScript"
            },
            "asBsonJavaScriptWithScope": {
              "$ref": "#/components/schemas/BsonJavaScriptWithScope"
            },
            "asBsonMaxKey": {
              "$ref": "#/components/schemas/BsonMaxKey"
            },
            "asBsonMinKey": {
              "$ref": "#/components/schemas/BsonMinKey"
            },
            "asBsonNull": {
              "$ref": "#/components/schemas/BsonNull"
            },
            "asBsonRegularExpression": {
              "$ref": "#/components/schemas/BsonRegularExpression"
            },
            "asBsonSymbol": {
              "$ref": "#/components/schemas/BsonSymbol"
            },
            "asBsonTimestamp": {
              "$ref": "#/components/schemas/BsonTimestamp"
            },
            "asBsonUndefined": {
              "$ref": "#/components/schemas/BsonUndefined"
            },
            "asBsonValue": {
              "$ref": "#/components/schemas/BsonValue"
            },
            "asByteArray": {
              "type": "string",
              "format": "byte",
              "nullable": true,
              "readOnly": true
            },
            "asDateTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asDecimal": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asDouble": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asGuid": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "asInt32": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "asLocalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asInt64": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "asNullableBoolean": {
              "type": "boolean",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDateTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "asNullableDecimal": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asNullableDouble": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableGuid": {
              "type": "string",
              "format": "uuid",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt32": {
              "type": "integer",
              "format": "int32",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt64": {
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "readOnly": true
            },
            "asNullableObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asRegex": {
              "$ref": "#/components/schemas/Regex"
            },
            "asString": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "asUniversalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "isBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonArray": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonBinaryData": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDocument": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScript": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScriptWithScope": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMaxKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMinKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonNull": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonRegularExpression": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonSymbol": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonTimestamp": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonUndefined": {
              "type": "boolean",
              "readOnly": true
            },
            "isDateTime": {
              "type": "boolean",
              "readOnly": true,
              "deprecated": true
            },
            "isDecimal128": {
              "type": "boolean",
              "readOnly": true
            },
            "isDouble": {
              "type": "boolean",
              "readOnly": true
            },
            "isGuid": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt32": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt64": {
              "type": "boolean",
              "readOnly": true
            },
            "isNumeric": {
              "type": "boolean",
              "readOnly": true
            },
            "isObjectId": {
              "type": "boolean",
              "readOnly": true
            },
            "isString": {
              "type": "boolean",
              "readOnly": true
            },
            "isValidDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "rawValue": {
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "bsonType": {
              "$ref": "#/components/schemas/BsonType"
            }
          },
          "additionalProperties": false
        },
        "BsonMinKey": {
          "required": [
            "asBoolean",
            "asBsonBinaryData",
            "asBsonDateTime",
            "asBsonJavaScript",
            "asBsonJavaScriptWithScope",
            "asBsonMaxKey",
            "asBsonMinKey",
            "asBsonNull",
            "asBsonRegularExpression",
            "asBsonSymbol",
            "asBsonTimestamp",
            "asBsonUndefined",
            "asBsonValue",
            "asDateTime",
            "asDecimal",
            "asDecimal128",
            "asDouble",
            "asGuid",
            "asInt32",
            "asInt64",
            "asLocalTime",
            "asNullableDecimal128",
            "asNullableObjectId",
            "asObjectId",
            "asRegex",
            "asUniversalTime",
            "bsonType",
            "isBoolean",
            "isBsonArray",
            "isBsonBinaryData",
            "isBsonDateTime",
            "isBsonDocument",
            "isBsonJavaScript",
            "isBsonJavaScriptWithScope",
            "isBsonMaxKey",
            "isBsonMinKey",
            "isBsonNull",
            "isBsonRegularExpression",
            "isBsonSymbol",
            "isBsonTimestamp",
            "isBsonUndefined",
            "isDateTime",
            "isDecimal128",
            "isDouble",
            "isGuid",
            "isInt32",
            "isInt64",
            "isNumeric",
            "isObjectId",
            "isString",
            "isValidDateTime"
          ],
          "type": "object",
          "properties": {
            "asBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "asBsonArray": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonValue"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonBinaryData": {
              "$ref": "#/components/schemas/BsonBinaryData"
            },
            "asBsonDateTime": {
              "$ref": "#/components/schemas/BsonDateTime"
            },
            "asBsonDocument": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonJavaScript": {
              "$ref": "#/components/schemas/BsonJavaScript"
            },
            "asBsonJavaScriptWithScope": {
              "$ref": "#/components/schemas/BsonJavaScriptWithScope"
            },
            "asBsonMaxKey": {
              "$ref": "#/components/schemas/BsonMaxKey"
            },
            "asBsonMinKey": {
              "$ref": "#/components/schemas/BsonMinKey"
            },
            "asBsonNull": {
              "$ref": "#/components/schemas/BsonNull"
            },
            "asBsonRegularExpression": {
              "$ref": "#/components/schemas/BsonRegularExpression"
            },
            "asBsonSymbol": {
              "$ref": "#/components/schemas/BsonSymbol"
            },
            "asBsonTimestamp": {
              "$ref": "#/components/schemas/BsonTimestamp"
            },
            "asBsonUndefined": {
              "$ref": "#/components/schemas/BsonUndefined"
            },
            "asBsonValue": {
              "$ref": "#/components/schemas/BsonValue"
            },
            "asByteArray": {
              "type": "string",
              "format": "byte",
              "nullable": true,
              "readOnly": true
            },
            "asDateTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asDecimal": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asDouble": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asGuid": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "asInt32": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "asLocalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asInt64": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "asNullableBoolean": {
              "type": "boolean",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDateTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "asNullableDecimal": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asNullableDouble": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableGuid": {
              "type": "string",
              "format": "uuid",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt32": {
              "type": "integer",
              "format": "int32",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt64": {
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "readOnly": true
            },
            "asNullableObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asRegex": {
              "$ref": "#/components/schemas/Regex"
            },
            "asString": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "asUniversalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "isBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonArray": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonBinaryData": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDocument": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScript": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScriptWithScope": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMaxKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMinKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonNull": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonRegularExpression": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonSymbol": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonTimestamp": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonUndefined": {
              "type": "boolean",
              "readOnly": true
            },
            "isDateTime": {
              "type": "boolean",
              "readOnly": true,
              "deprecated": true
            },
            "isDecimal128": {
              "type": "boolean",
              "readOnly": true
            },
            "isDouble": {
              "type": "boolean",
              "readOnly": true
            },
            "isGuid": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt32": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt64": {
              "type": "boolean",
              "readOnly": true
            },
            "isNumeric": {
              "type": "boolean",
              "readOnly": true
            },
            "isObjectId": {
              "type": "boolean",
              "readOnly": true
            },
            "isString": {
              "type": "boolean",
              "readOnly": true
            },
            "isValidDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "rawValue": {
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "bsonType": {
              "$ref": "#/components/schemas/BsonType"
            }
          },
          "additionalProperties": false
        },
        "BsonNull": {
          "required": [
            "asBoolean",
            "asBsonBinaryData",
            "asBsonDateTime",
            "asBsonJavaScript",
            "asBsonJavaScriptWithScope",
            "asBsonMaxKey",
            "asBsonMinKey",
            "asBsonNull",
            "asBsonRegularExpression",
            "asBsonSymbol",
            "asBsonTimestamp",
            "asBsonUndefined",
            "asBsonValue",
            "asDateTime",
            "asDecimal",
            "asDecimal128",
            "asDouble",
            "asGuid",
            "asInt32",
            "asInt64",
            "asLocalTime",
            "asNullableDecimal128",
            "asNullableObjectId",
            "asObjectId",
            "asRegex",
            "asUniversalTime",
            "bsonType",
            "isBoolean",
            "isBsonArray",
            "isBsonBinaryData",
            "isBsonDateTime",
            "isBsonDocument",
            "isBsonJavaScript",
            "isBsonJavaScriptWithScope",
            "isBsonMaxKey",
            "isBsonMinKey",
            "isBsonNull",
            "isBsonRegularExpression",
            "isBsonSymbol",
            "isBsonTimestamp",
            "isBsonUndefined",
            "isDateTime",
            "isDecimal128",
            "isDouble",
            "isGuid",
            "isInt32",
            "isInt64",
            "isNumeric",
            "isObjectId",
            "isString",
            "isValidDateTime"
          ],
          "type": "object",
          "properties": {
            "asBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "asBsonArray": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonValue"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonBinaryData": {
              "$ref": "#/components/schemas/BsonBinaryData"
            },
            "asBsonDateTime": {
              "$ref": "#/components/schemas/BsonDateTime"
            },
            "asBsonDocument": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonJavaScript": {
              "$ref": "#/components/schemas/BsonJavaScript"
            },
            "asBsonJavaScriptWithScope": {
              "$ref": "#/components/schemas/BsonJavaScriptWithScope"
            },
            "asBsonMaxKey": {
              "$ref": "#/components/schemas/BsonMaxKey"
            },
            "asBsonMinKey": {
              "$ref": "#/components/schemas/BsonMinKey"
            },
            "asBsonNull": {
              "$ref": "#/components/schemas/BsonNull"
            },
            "asBsonRegularExpression": {
              "$ref": "#/components/schemas/BsonRegularExpression"
            },
            "asBsonSymbol": {
              "$ref": "#/components/schemas/BsonSymbol"
            },
            "asBsonTimestamp": {
              "$ref": "#/components/schemas/BsonTimestamp"
            },
            "asBsonUndefined": {
              "$ref": "#/components/schemas/BsonUndefined"
            },
            "asBsonValue": {
              "$ref": "#/components/schemas/BsonValue"
            },
            "asByteArray": {
              "type": "string",
              "format": "byte",
              "nullable": true,
              "readOnly": true
            },
            "asDateTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asDecimal": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asDouble": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asGuid": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "asInt32": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "asLocalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asInt64": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "asNullableBoolean": {
              "type": "boolean",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDateTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "asNullableDecimal": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asNullableDouble": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableGuid": {
              "type": "string",
              "format": "uuid",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt32": {
              "type": "integer",
              "format": "int32",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt64": {
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "readOnly": true
            },
            "asNullableObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asRegex": {
              "$ref": "#/components/schemas/Regex"
            },
            "asString": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "asUniversalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "isBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonArray": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonBinaryData": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDocument": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScript": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScriptWithScope": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMaxKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMinKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonNull": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonRegularExpression": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonSymbol": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonTimestamp": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonUndefined": {
              "type": "boolean",
              "readOnly": true
            },
            "isDateTime": {
              "type": "boolean",
              "readOnly": true,
              "deprecated": true
            },
            "isDecimal128": {
              "type": "boolean",
              "readOnly": true
            },
            "isDouble": {
              "type": "boolean",
              "readOnly": true
            },
            "isGuid": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt32": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt64": {
              "type": "boolean",
              "readOnly": true
            },
            "isNumeric": {
              "type": "boolean",
              "readOnly": true
            },
            "isObjectId": {
              "type": "boolean",
              "readOnly": true
            },
            "isString": {
              "type": "boolean",
              "readOnly": true
            },
            "isValidDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "rawValue": {
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "bsonType": {
              "$ref": "#/components/schemas/BsonType"
            }
          },
          "additionalProperties": false
        },
        "BsonRegularExpression": {
          "required": [
            "asBoolean",
            "asBsonBinaryData",
            "asBsonDateTime",
            "asBsonJavaScript",
            "asBsonJavaScriptWithScope",
            "asBsonMaxKey",
            "asBsonMinKey",
            "asBsonNull",
            "asBsonRegularExpression",
            "asBsonSymbol",
            "asBsonTimestamp",
            "asBsonUndefined",
            "asBsonValue",
            "asDateTime",
            "asDecimal",
            "asDecimal128",
            "asDouble",
            "asGuid",
            "asInt32",
            "asInt64",
            "asLocalTime",
            "asNullableDecimal128",
            "asNullableObjectId",
            "asObjectId",
            "asRegex",
            "asUniversalTime",
            "bsonType",
            "isBoolean",
            "isBsonArray",
            "isBsonBinaryData",
            "isBsonDateTime",
            "isBsonDocument",
            "isBsonJavaScript",
            "isBsonJavaScriptWithScope",
            "isBsonMaxKey",
            "isBsonMinKey",
            "isBsonNull",
            "isBsonRegularExpression",
            "isBsonSymbol",
            "isBsonTimestamp",
            "isBsonUndefined",
            "isDateTime",
            "isDecimal128",
            "isDouble",
            "isGuid",
            "isInt32",
            "isInt64",
            "isNumeric",
            "isObjectId",
            "isString",
            "isValidDateTime"
          ],
          "type": "object",
          "properties": {
            "asBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "asBsonArray": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonValue"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonBinaryData": {
              "$ref": "#/components/schemas/BsonBinaryData"
            },
            "asBsonDateTime": {
              "$ref": "#/components/schemas/BsonDateTime"
            },
            "asBsonDocument": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonJavaScript": {
              "$ref": "#/components/schemas/BsonJavaScript"
            },
            "asBsonJavaScriptWithScope": {
              "$ref": "#/components/schemas/BsonJavaScriptWithScope"
            },
            "asBsonMaxKey": {
              "$ref": "#/components/schemas/BsonMaxKey"
            },
            "asBsonMinKey": {
              "$ref": "#/components/schemas/BsonMinKey"
            },
            "asBsonNull": {
              "$ref": "#/components/schemas/BsonNull"
            },
            "asBsonRegularExpression": {
              "$ref": "#/components/schemas/BsonRegularExpression"
            },
            "asBsonSymbol": {
              "$ref": "#/components/schemas/BsonSymbol"
            },
            "asBsonTimestamp": {
              "$ref": "#/components/schemas/BsonTimestamp"
            },
            "asBsonUndefined": {
              "$ref": "#/components/schemas/BsonUndefined"
            },
            "asBsonValue": {
              "$ref": "#/components/schemas/BsonValue"
            },
            "asByteArray": {
              "type": "string",
              "format": "byte",
              "nullable": true,
              "readOnly": true
            },
            "asDateTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asDecimal": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asDouble": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asGuid": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "asInt32": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "asLocalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asInt64": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "asNullableBoolean": {
              "type": "boolean",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDateTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "asNullableDecimal": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asNullableDouble": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableGuid": {
              "type": "string",
              "format": "uuid",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt32": {
              "type": "integer",
              "format": "int32",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt64": {
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "readOnly": true
            },
            "asNullableObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asRegex": {
              "$ref": "#/components/schemas/Regex"
            },
            "asString": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "asUniversalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "isBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonArray": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonBinaryData": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDocument": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScript": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScriptWithScope": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMaxKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMinKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonNull": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonRegularExpression": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonSymbol": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonTimestamp": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonUndefined": {
              "type": "boolean",
              "readOnly": true
            },
            "isDateTime": {
              "type": "boolean",
              "readOnly": true,
              "deprecated": true
            },
            "isDecimal128": {
              "type": "boolean",
              "readOnly": true
            },
            "isDouble": {
              "type": "boolean",
              "readOnly": true
            },
            "isGuid": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt32": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt64": {
              "type": "boolean",
              "readOnly": true
            },
            "isNumeric": {
              "type": "boolean",
              "readOnly": true
            },
            "isObjectId": {
              "type": "boolean",
              "readOnly": true
            },
            "isString": {
              "type": "boolean",
              "readOnly": true
            },
            "isValidDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "rawValue": {
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "bsonType": {
              "$ref": "#/components/schemas/BsonType"
            },
            "pattern": {
              "type": "string",
              "nullable": true
            },
            "options": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "BsonSymbol": {
          "required": [
            "asBoolean",
            "asBsonBinaryData",
            "asBsonDateTime",
            "asBsonJavaScript",
            "asBsonJavaScriptWithScope",
            "asBsonMaxKey",
            "asBsonMinKey",
            "asBsonNull",
            "asBsonRegularExpression",
            "asBsonSymbol",
            "asBsonTimestamp",
            "asBsonUndefined",
            "asBsonValue",
            "asDateTime",
            "asDecimal",
            "asDecimal128",
            "asDouble",
            "asGuid",
            "asInt32",
            "asInt64",
            "asLocalTime",
            "asNullableDecimal128",
            "asNullableObjectId",
            "asObjectId",
            "asRegex",
            "asUniversalTime",
            "bsonType",
            "isBoolean",
            "isBsonArray",
            "isBsonBinaryData",
            "isBsonDateTime",
            "isBsonDocument",
            "isBsonJavaScript",
            "isBsonJavaScriptWithScope",
            "isBsonMaxKey",
            "isBsonMinKey",
            "isBsonNull",
            "isBsonRegularExpression",
            "isBsonSymbol",
            "isBsonTimestamp",
            "isBsonUndefined",
            "isDateTime",
            "isDecimal128",
            "isDouble",
            "isGuid",
            "isInt32",
            "isInt64",
            "isNumeric",
            "isObjectId",
            "isString",
            "isValidDateTime"
          ],
          "type": "object",
          "properties": {
            "asBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "asBsonArray": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonValue"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonBinaryData": {
              "$ref": "#/components/schemas/BsonBinaryData"
            },
            "asBsonDateTime": {
              "$ref": "#/components/schemas/BsonDateTime"
            },
            "asBsonDocument": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonJavaScript": {
              "$ref": "#/components/schemas/BsonJavaScript"
            },
            "asBsonJavaScriptWithScope": {
              "$ref": "#/components/schemas/BsonJavaScriptWithScope"
            },
            "asBsonMaxKey": {
              "$ref": "#/components/schemas/BsonMaxKey"
            },
            "asBsonMinKey": {
              "$ref": "#/components/schemas/BsonMinKey"
            },
            "asBsonNull": {
              "$ref": "#/components/schemas/BsonNull"
            },
            "asBsonRegularExpression": {
              "$ref": "#/components/schemas/BsonRegularExpression"
            },
            "asBsonSymbol": {
              "$ref": "#/components/schemas/BsonSymbol"
            },
            "asBsonTimestamp": {
              "$ref": "#/components/schemas/BsonTimestamp"
            },
            "asBsonUndefined": {
              "$ref": "#/components/schemas/BsonUndefined"
            },
            "asBsonValue": {
              "$ref": "#/components/schemas/BsonValue"
            },
            "asByteArray": {
              "type": "string",
              "format": "byte",
              "nullable": true,
              "readOnly": true
            },
            "asDateTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asDecimal": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asDouble": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asGuid": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "asInt32": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "asLocalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asInt64": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "asNullableBoolean": {
              "type": "boolean",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDateTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "asNullableDecimal": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asNullableDouble": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableGuid": {
              "type": "string",
              "format": "uuid",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt32": {
              "type": "integer",
              "format": "int32",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt64": {
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "readOnly": true
            },
            "asNullableObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asRegex": {
              "$ref": "#/components/schemas/Regex"
            },
            "asString": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "asUniversalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "isBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonArray": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonBinaryData": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDocument": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScript": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScriptWithScope": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMaxKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMinKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonNull": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonRegularExpression": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonSymbol": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonTimestamp": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonUndefined": {
              "type": "boolean",
              "readOnly": true
            },
            "isDateTime": {
              "type": "boolean",
              "readOnly": true,
              "deprecated": true
            },
            "isDecimal128": {
              "type": "boolean",
              "readOnly": true
            },
            "isDouble": {
              "type": "boolean",
              "readOnly": true
            },
            "isGuid": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt32": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt64": {
              "type": "boolean",
              "readOnly": true
            },
            "isNumeric": {
              "type": "boolean",
              "readOnly": true
            },
            "isObjectId": {
              "type": "boolean",
              "readOnly": true
            },
            "isString": {
              "type": "boolean",
              "readOnly": true
            },
            "isValidDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "rawValue": {
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "bsonType": {
              "$ref": "#/components/schemas/BsonType"
            },
            "name": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "BsonTimestamp": {
          "required": [
            "asBoolean",
            "asBsonBinaryData",
            "asBsonDateTime",
            "asBsonJavaScript",
            "asBsonJavaScriptWithScope",
            "asBsonMaxKey",
            "asBsonMinKey",
            "asBsonNull",
            "asBsonRegularExpression",
            "asBsonSymbol",
            "asBsonTimestamp",
            "asBsonUndefined",
            "asBsonValue",
            "asDateTime",
            "asDecimal",
            "asDecimal128",
            "asDouble",
            "asGuid",
            "asInt32",
            "asInt64",
            "asLocalTime",
            "asNullableDecimal128",
            "asNullableObjectId",
            "asObjectId",
            "asRegex",
            "asUniversalTime",
            "bsonType",
            "increment",
            "isBoolean",
            "isBsonArray",
            "isBsonBinaryData",
            "isBsonDateTime",
            "isBsonDocument",
            "isBsonJavaScript",
            "isBsonJavaScriptWithScope",
            "isBsonMaxKey",
            "isBsonMinKey",
            "isBsonNull",
            "isBsonRegularExpression",
            "isBsonSymbol",
            "isBsonTimestamp",
            "isBsonUndefined",
            "isDateTime",
            "isDecimal128",
            "isDouble",
            "isGuid",
            "isInt32",
            "isInt64",
            "isNumeric",
            "isObjectId",
            "isString",
            "isValidDateTime",
            "timestamp",
            "value"
          ],
          "type": "object",
          "properties": {
            "asBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "asBsonArray": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonValue"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonBinaryData": {
              "$ref": "#/components/schemas/BsonBinaryData"
            },
            "asBsonDateTime": {
              "$ref": "#/components/schemas/BsonDateTime"
            },
            "asBsonDocument": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonJavaScript": {
              "$ref": "#/components/schemas/BsonJavaScript"
            },
            "asBsonJavaScriptWithScope": {
              "$ref": "#/components/schemas/BsonJavaScriptWithScope"
            },
            "asBsonMaxKey": {
              "$ref": "#/components/schemas/BsonMaxKey"
            },
            "asBsonMinKey": {
              "$ref": "#/components/schemas/BsonMinKey"
            },
            "asBsonNull": {
              "$ref": "#/components/schemas/BsonNull"
            },
            "asBsonRegularExpression": {
              "$ref": "#/components/schemas/BsonRegularExpression"
            },
            "asBsonSymbol": {
              "$ref": "#/components/schemas/BsonSymbol"
            },
            "asBsonTimestamp": {
              "$ref": "#/components/schemas/BsonTimestamp"
            },
            "asBsonUndefined": {
              "$ref": "#/components/schemas/BsonUndefined"
            },
            "asBsonValue": {
              "$ref": "#/components/schemas/BsonValue"
            },
            "asByteArray": {
              "type": "string",
              "format": "byte",
              "nullable": true,
              "readOnly": true
            },
            "asDateTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asDecimal": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asDouble": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asGuid": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "asInt32": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "asLocalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asInt64": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "asNullableBoolean": {
              "type": "boolean",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDateTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "asNullableDecimal": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asNullableDouble": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableGuid": {
              "type": "string",
              "format": "uuid",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt32": {
              "type": "integer",
              "format": "int32",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt64": {
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "readOnly": true
            },
            "asNullableObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asRegex": {
              "$ref": "#/components/schemas/Regex"
            },
            "asString": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "asUniversalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "isBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonArray": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonBinaryData": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDocument": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScript": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScriptWithScope": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMaxKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMinKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonNull": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonRegularExpression": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonSymbol": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonTimestamp": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonUndefined": {
              "type": "boolean",
              "readOnly": true
            },
            "isDateTime": {
              "type": "boolean",
              "readOnly": true,
              "deprecated": true
            },
            "isDecimal128": {
              "type": "boolean",
              "readOnly": true
            },
            "isDouble": {
              "type": "boolean",
              "readOnly": true
            },
            "isGuid": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt32": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt64": {
              "type": "boolean",
              "readOnly": true
            },
            "isNumeric": {
              "type": "boolean",
              "readOnly": true
            },
            "isObjectId": {
              "type": "boolean",
              "readOnly": true
            },
            "isString": {
              "type": "boolean",
              "readOnly": true
            },
            "isValidDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "rawValue": {
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "bsonType": {
              "$ref": "#/components/schemas/BsonType"
            },
            "value": {
              "type": "integer",
              "format": "int64"
            },
            "increment": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "timestamp": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "BsonType": {
          "enum": [
            "EndOfDocument",
            "Double",
            "String",
            "Document",
            "Array",
            "Binary",
            "Undefined",
            "ObjectId",
            "Boolean",
            "DateTime",
            "Null",
            "RegularExpression",
            "JavaScript",
            "Symbol",
            "JavaScriptWithScope",
            "Int32",
            "Timestamp",
            "Int64",
            "Decimal128",
            "MaxKey",
            "MinKey"
          ],
          "type": "string"
        },
        "BsonUndefined": {
          "required": [
            "asBoolean",
            "asBsonBinaryData",
            "asBsonDateTime",
            "asBsonJavaScript",
            "asBsonJavaScriptWithScope",
            "asBsonMaxKey",
            "asBsonMinKey",
            "asBsonNull",
            "asBsonRegularExpression",
            "asBsonSymbol",
            "asBsonTimestamp",
            "asBsonUndefined",
            "asBsonValue",
            "asDateTime",
            "asDecimal",
            "asDecimal128",
            "asDouble",
            "asGuid",
            "asInt32",
            "asInt64",
            "asLocalTime",
            "asNullableDecimal128",
            "asNullableObjectId",
            "asObjectId",
            "asRegex",
            "asUniversalTime",
            "bsonType",
            "isBoolean",
            "isBsonArray",
            "isBsonBinaryData",
            "isBsonDateTime",
            "isBsonDocument",
            "isBsonJavaScript",
            "isBsonJavaScriptWithScope",
            "isBsonMaxKey",
            "isBsonMinKey",
            "isBsonNull",
            "isBsonRegularExpression",
            "isBsonSymbol",
            "isBsonTimestamp",
            "isBsonUndefined",
            "isDateTime",
            "isDecimal128",
            "isDouble",
            "isGuid",
            "isInt32",
            "isInt64",
            "isNumeric",
            "isObjectId",
            "isString",
            "isValidDateTime"
          ],
          "type": "object",
          "properties": {
            "asBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "asBsonArray": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonValue"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonBinaryData": {
              "$ref": "#/components/schemas/BsonBinaryData"
            },
            "asBsonDateTime": {
              "$ref": "#/components/schemas/BsonDateTime"
            },
            "asBsonDocument": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonJavaScript": {
              "$ref": "#/components/schemas/BsonJavaScript"
            },
            "asBsonJavaScriptWithScope": {
              "$ref": "#/components/schemas/BsonJavaScriptWithScope"
            },
            "asBsonMaxKey": {
              "$ref": "#/components/schemas/BsonMaxKey"
            },
            "asBsonMinKey": {
              "$ref": "#/components/schemas/BsonMinKey"
            },
            "asBsonNull": {
              "$ref": "#/components/schemas/BsonNull"
            },
            "asBsonRegularExpression": {
              "$ref": "#/components/schemas/BsonRegularExpression"
            },
            "asBsonSymbol": {
              "$ref": "#/components/schemas/BsonSymbol"
            },
            "asBsonTimestamp": {
              "$ref": "#/components/schemas/BsonTimestamp"
            },
            "asBsonUndefined": {
              "$ref": "#/components/schemas/BsonUndefined"
            },
            "asBsonValue": {
              "$ref": "#/components/schemas/BsonValue"
            },
            "asByteArray": {
              "type": "string",
              "format": "byte",
              "nullable": true,
              "readOnly": true
            },
            "asDateTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asDecimal": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asDouble": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asGuid": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "asInt32": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "asLocalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asInt64": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "asNullableBoolean": {
              "type": "boolean",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDateTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "asNullableDecimal": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asNullableDouble": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableGuid": {
              "type": "string",
              "format": "uuid",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt32": {
              "type": "integer",
              "format": "int32",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt64": {
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "readOnly": true
            },
            "asNullableObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asRegex": {
              "$ref": "#/components/schemas/Regex"
            },
            "asString": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "asUniversalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "isBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonArray": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonBinaryData": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDocument": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScript": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScriptWithScope": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMaxKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMinKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonNull": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonRegularExpression": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonSymbol": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonTimestamp": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonUndefined": {
              "type": "boolean",
              "readOnly": true
            },
            "isDateTime": {
              "type": "boolean",
              "readOnly": true,
              "deprecated": true
            },
            "isDecimal128": {
              "type": "boolean",
              "readOnly": true
            },
            "isDouble": {
              "type": "boolean",
              "readOnly": true
            },
            "isGuid": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt32": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt64": {
              "type": "boolean",
              "readOnly": true
            },
            "isNumeric": {
              "type": "boolean",
              "readOnly": true
            },
            "isObjectId": {
              "type": "boolean",
              "readOnly": true
            },
            "isString": {
              "type": "boolean",
              "readOnly": true
            },
            "isValidDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "rawValue": {
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "bsonType": {
              "$ref": "#/components/schemas/BsonType"
            }
          },
          "additionalProperties": false
        },
        "BsonValue": {
          "required": [
            "asBoolean",
            "asBsonBinaryData",
            "asBsonDateTime",
            "asBsonJavaScript",
            "asBsonJavaScriptWithScope",
            "asBsonMaxKey",
            "asBsonMinKey",
            "asBsonNull",
            "asBsonRegularExpression",
            "asBsonSymbol",
            "asBsonTimestamp",
            "asBsonUndefined",
            "asBsonValue",
            "asDateTime",
            "asDecimal",
            "asDecimal128",
            "asDouble",
            "asGuid",
            "asInt32",
            "asInt64",
            "asLocalTime",
            "asNullableDecimal128",
            "asNullableObjectId",
            "asObjectId",
            "asRegex",
            "asUniversalTime",
            "bsonType",
            "isBoolean",
            "isBsonArray",
            "isBsonBinaryData",
            "isBsonDateTime",
            "isBsonDocument",
            "isBsonJavaScript",
            "isBsonJavaScriptWithScope",
            "isBsonMaxKey",
            "isBsonMinKey",
            "isBsonNull",
            "isBsonRegularExpression",
            "isBsonSymbol",
            "isBsonTimestamp",
            "isBsonUndefined",
            "isDateTime",
            "isDecimal128",
            "isDouble",
            "isGuid",
            "isInt32",
            "isInt64",
            "isNumeric",
            "isObjectId",
            "isString",
            "isValidDateTime"
          ],
          "type": "object",
          "properties": {
            "asBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "asBsonArray": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonValue"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonBinaryData": {
              "$ref": "#/components/schemas/BsonBinaryData"
            },
            "asBsonDateTime": {
              "$ref": "#/components/schemas/BsonDateTime"
            },
            "asBsonDocument": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "nullable": true,
              "readOnly": true
            },
            "asBsonJavaScript": {
              "$ref": "#/components/schemas/BsonJavaScript"
            },
            "asBsonJavaScriptWithScope": {
              "$ref": "#/components/schemas/BsonJavaScriptWithScope"
            },
            "asBsonMaxKey": {
              "$ref": "#/components/schemas/BsonMaxKey"
            },
            "asBsonMinKey": {
              "$ref": "#/components/schemas/BsonMinKey"
            },
            "asBsonNull": {
              "$ref": "#/components/schemas/BsonNull"
            },
            "asBsonRegularExpression": {
              "$ref": "#/components/schemas/BsonRegularExpression"
            },
            "asBsonSymbol": {
              "$ref": "#/components/schemas/BsonSymbol"
            },
            "asBsonTimestamp": {
              "$ref": "#/components/schemas/BsonTimestamp"
            },
            "asBsonUndefined": {
              "$ref": "#/components/schemas/BsonUndefined"
            },
            "asBsonValue": {
              "$ref": "#/components/schemas/BsonValue"
            },
            "asByteArray": {
              "type": "string",
              "format": "byte",
              "nullable": true,
              "readOnly": true
            },
            "asDateTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asDecimal": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asDouble": {
              "type": "number",
              "format": "double",
              "readOnly": true
            },
            "asGuid": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "asInt32": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "asLocalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "asInt64": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "asNullableBoolean": {
              "type": "boolean",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDateTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            },
            "asNullableDecimal": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableDecimal128": {
              "$ref": "#/components/schemas/Decimal128"
            },
            "asNullableDouble": {
              "type": "number",
              "format": "double",
              "nullable": true,
              "readOnly": true
            },
            "asNullableGuid": {
              "type": "string",
              "format": "uuid",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt32": {
              "type": "integer",
              "format": "int32",
              "nullable": true,
              "readOnly": true
            },
            "asNullableInt64": {
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "readOnly": true
            },
            "asNullableObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asObjectId": {
              "$ref": "#/components/schemas/ObjectId"
            },
            "asRegex": {
              "$ref": "#/components/schemas/Regex"
            },
            "asString": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "asUniversalTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true,
              "deprecated": true
            },
            "bsonType": {
              "$ref": "#/components/schemas/BsonType"
            },
            "isBoolean": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonArray": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonBinaryData": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonDocument": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScript": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonJavaScriptWithScope": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMaxKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonMinKey": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonNull": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonRegularExpression": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonSymbol": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonTimestamp": {
              "type": "boolean",
              "readOnly": true
            },
            "isBsonUndefined": {
              "type": "boolean",
              "readOnly": true
            },
            "isDateTime": {
              "type": "boolean",
              "readOnly": true,
              "deprecated": true
            },
            "isDecimal128": {
              "type": "boolean",
              "readOnly": true
            },
            "isDouble": {
              "type": "boolean",
              "readOnly": true
            },
            "isGuid": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt32": {
              "type": "boolean",
              "readOnly": true
            },
            "isInt64": {
              "type": "boolean",
              "readOnly": true
            },
            "isNumeric": {
              "type": "boolean",
              "readOnly": true
            },
            "isObjectId": {
              "type": "boolean",
              "readOnly": true
            },
            "isString": {
              "type": "boolean",
              "readOnly": true
            },
            "isValidDateTime": {
              "type": "boolean",
              "readOnly": true
            },
            "rawValue": {
              "nullable": true,
              "readOnly": true,
              "deprecated": true
            }
          },
          "additionalProperties": false
        },
        "CalendarSystem": {
          "required": [
            "eras",
            "id",
            "maxYear",
            "minYear",
            "name"
          ],
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "readOnly": true
            },
            "name": {
              "type": "string",
              "readOnly": true
            },
            "minYear": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "maxYear": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "eras": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Era"
              },
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "ClaimRewardRequest": {
          "required": [
            "customerId",
            "points",
            "rewardId"
          ],
          "type": "object",
          "properties": {
            "customerId": {
              "type": "string",
              "description": "ID of the customer.",
              "format": "uuid"
            },
            "rewardId": {
              "type": "string",
              "description": "ID of the reward.",
              "format": "uuid"
            },
            "points": {
              "type": "integer",
              "description": "Number of used points.",
              "format": "int32"
            }
          },
          "additionalProperties": false
        },
        "ClaimRewardResponse": {
          "required": [
            "claimId",
            "message",
            "status"
          ],
          "type": "object",
          "properties": {
            "claimId": {
              "type": "string",
              "description": "ID of the created claim.",
              "format": "uuid"
            },
            "status": {
              "$ref": "#/components/schemas/ClaimStatus"
            },
            "message": {
              "type": "string",
              "description": "Description of the status."
            }
          },
          "additionalProperties": false
        },
        "ClaimRewardResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/ClaimRewardResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "ClaimStatus": {
          "enum": [
            "success",
            "failed"
          ],
          "type": "string",
          "description": "Status of the claim."
        },
        "ColumnDto": {
          "required": [
            "index",
            "name"
          ],
          "type": "object",
          "properties": {
            "index": {
              "type": "integer",
              "description": "Index of the discovered column.",
              "format": "int32"
            },
            "name": {
              "type": "string",
              "description": "Name of the discovered column."
            }
          },
          "additionalProperties": false
        },
        "ColumnMappingDto": {
          "required": [
            "customProperies",
            "discoveredColumns",
            "headerFound",
            "recommendedMapping"
          ],
          "type": "object",
          "properties": {
            "headerFound": {
              "type": "boolean",
              "description": "Whether a header with column names was found in the uploaded file."
            },
            "customProperies": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/CustomPropertyDto"
              },
              "description": "Custom properties of the owner."
            },
            "discoveredColumns": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/ColumnDto"
              },
              "description": "Discovered columns in the uploaded file."
            },
            "recommendedMapping": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/CustomPropertyColumnMapDto"
              },
              "description": "Recommended mapping between custom properties and discovered columns."
            }
          },
          "additionalProperties": false
        },
        "ColumnMappingDtoResult": {
          "required": [
            "isFailed",
            "isSuccess",
            "value",
            "valueOrDefault"
          ],
          "type": "object",
          "properties": {
            "isFailed": {
              "type": "boolean",
              "readOnly": true
            },
            "isSuccess": {
              "type": "boolean",
              "readOnly": true
            },
            "reasons": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/IReason"
              },
              "nullable": true,
              "readOnly": true
            },
            "errors": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/IError"
              },
              "nullable": true,
              "readOnly": true
            },
            "successes": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/ISuccess"
              },
              "nullable": true,
              "readOnly": true
            },
            "valueOrDefault": {
              "$ref": "#/components/schemas/ColumnMappingDto"
            },
            "value": {
              "$ref": "#/components/schemas/ColumnMappingDto"
            }
          },
          "additionalProperties": false
        },
        "ColumnMappingDtoResultValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/ColumnMappingDtoResult"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "ConfirmRegistrationRequest": {
          "required": [
            "token"
          ],
          "type": "object",
          "properties": {
            "token": {
              "type": "string",
              "description": "Confirmation token."
            }
          },
          "additionalProperties": false
        },
        "Coupon": {
          "required": [
            "couponCode",
            "issueLimitations",
            "redemptionLimitations"
          ],
          "type": "object",
          "properties": {
            "couponCode": {
              "type": "string",
              "description": "Coupon Code"
            },
            "description": {
              "type": "string",
              "description": "A brief description of the item for the POS display.",
              "nullable": true
            },
            "couponType": {
              "type": "string",
              "description": "Type of coupon.",
              "nullable": true
            },
            "issueLimitations": {
              "$ref": "#/components/schemas/CouponIssueLimitations"
            },
            "redemptionLimitations": {
              "$ref": "#/components/schemas/CouponRedemptionLimitations"
            }
          },
          "additionalProperties": false,
          "description": "Describes a voucher, coupon or related document, used to gain a promotion.\r\n            \r\nSuch a document can have a limited issue, making it either valid for a certain amount of redemptions,\r\nor it being totally unique.\r\n            \r\nThe optional number of redeemed documents is an approximation."
        },
        "CouponAnalyticsResponse": {
          "required": [
            "expirationRate",
            "totalClaims",
            "totalRedemptions"
          ],
          "type": "object",
          "properties": {
            "totalClaims": {
              "type": "integer",
              "description": "Total number of claims.",
              "format": "int32"
            },
            "totalRedemptions": {
              "type": "integer",
              "description": "Total number of redemptions.",
              "format": "int32"
            },
            "expirationRate": {
              "type": "number",
              "description": "Ratio between number of redemptions and number of claims.",
              "format": "double"
            }
          },
          "additionalProperties": false
        },
        "CouponAnalyticsResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/CouponAnalyticsResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "CouponIssueLimitations": {
          "enum": [
            "Unlimited",
            "Limited",
            "Unique"
          ],
          "type": "string",
          "description": "The limitations of issue for vouchers, coupons and related documents.\r\n            \r\nUnlimited:\r\n  No control over the issue of the document is enabled. It may be applied unlimited times to various sales.\r\n            \r\nLimited:\r\n  The document is valid for a limited amount of applications. For example, its code can be used 100 times\r\n  (100 customers).\r\n            \r\nUnique:\r\n   This document is unique can be applied only once."
        },
        "CouponRedemptionLimitations": {
          "enum": [
            "OnceOnSale",
            "OnceOnPosition",
            "OnceOnSalePerSale",
            "OnceOnPositionPerSale",
            "OnMultiplePositionPerSale"
          ],
          "type": "string",
          "description": "Describes how coupons and related documents are redeemed withing the sales.\r\n\r\nOnceOnSale - can be redeemed on one sale, once\r\nOnceOnPosition - can be redeemed on one sale position, once \r\nOnceOnSalePerSale - can be applied several times on sales\r\nOnceOnPositionPerSale - can be applied on one position on several sales\r\nOnMultiplePositionPerSale - can be applied on multiple position on several sales"
        },
        "CouponResponse": {
          "required": [
            "claimedAt",
            "couponCode",
            "expirationDate",
            "status"
          ],
          "type": "object",
          "properties": {
            "couponCode": {
              "type": "string",
              "description": "Code of the coupon.",
              "format": "uuid"
            },
            "status": {
              "$ref": "#/components/schemas/CouponStatus"
            },
            "claimedAt": {
              "type": "string",
              "description": "Date when coupon was claimed.",
              "format": "date-time"
            },
            "expirationDate": {
              "type": "string",
              "description": "Date of coupon's expiry.",
              "format": "date-time"
            }
          },
          "additionalProperties": false
        },
        "CouponResponseListValueResponse": {
          "required": [
            "success"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/CouponResponse"
              },
              "description": "Returned value.",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "CouponStatus": {
          "enum": [
            "claimed",
            "unclaimed"
          ],
          "type": "string",
          "description": "Status of the coupon."
        },
        "CpOwner": {
          "enum": [
            "Product",
            "Member",
            "Transaction",
            "CustomEvent"
          ],
          "type": "string",
          "description": "Custom property owner."
        },
        "CreateCustomerRequest": {
          "required": [
            "email",
            "password"
          ],
          "type": "object",
          "properties": {
            "email": {
              "type": "string",
              "description": "Customer's email."
            },
            "password": {
              "type": "string",
              "description": "Customer's password."
            },
            "optIn": {
              "type": "boolean",
              "description": "Consent for marketing activities.",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "CreateCustomerResponse": {
          "required": [
            "customerId"
          ],
          "type": "object",
          "properties": {
            "customerId": {
              "type": "string",
              "description": "ID of the created customer.",
              "format": "uuid"
            }
          },
          "additionalProperties": false
        },
        "CreateCustomerResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/CreateCustomerResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "CreateEventRequest": {
          "type": "object",
          "properties": {
            "eventTypeExternalId": {
              "type": "string",
              "description": "External ID of the type of event. Either `eventTypeExternalId` or `eventTypeInternalId` or both must be defined.",
              "nullable": true
            },
            "eventTypeInternalId": {
              "type": "string",
              "description": "Internal ID of the type of event. Either `eventTypeExternalId` or `eventTypeInternalId` or both must be defined.",
              "format": "uuid",
              "nullable": true
            },
            "memberExternalId": {
              "type": "string",
              "description": "External ID of member. Either `memberExternalId` or `memberInternalId` or both must be defined.",
              "nullable": true
            },
            "memberInternalId": {
              "type": "string",
              "description": "Internal ID of member. Either `memberExternalId` or `memberInternalId` or both must be defined. If `memberInternalId` is missing, an additional lookup phase happens to find the members memberInternalId, slowing down the processing of the events.",
              "format": "uuid",
              "nullable": true
            },
            "eventExternalId": {
              "type": "string",
              "description": "External ID of this instance of event type. If missing, the event can still be identified with the internal ID the loyalty system will assign.",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "CreateEventResponse": {
          "required": [
            "eventInternalId"
          ],
          "type": "object",
          "properties": {
            "eventInternalId": {
              "type": "string",
              "description": "Internal ID of event that the loyalty system assigned.",
              "format": "uuid"
            },
            "eventExternalId": {
              "type": "string",
              "description": "External ID of event, contained if it was send in the request.",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "CreateEventResponseListValueResponse": {
          "required": [
            "success"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/CreateEventResponse"
              },
              "description": "Returned value.",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "CreateEventResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/CreateEventResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "CustomPropertyColumnMapDto": {
          "required": [
            "columnIndex",
            "customPropertyId"
          ],
          "type": "object",
          "properties": {
            "customPropertyId": {
              "type": "string",
              "description": "ID of the custom property.",
              "format": "uuid"
            },
            "columnIndex": {
              "type": "integer",
              "description": "Index of the discovered column.",
              "format": "int32"
            }
          },
          "additionalProperties": false
        },
        "CustomPropertyDto": {
          "required": [
            "customPropertyId",
            "name"
          ],
          "type": "object",
          "properties": {
            "customPropertyId": {
              "type": "string",
              "description": "ID of the custom property.",
              "format": "uuid"
            },
            "name": {
              "type": "string",
              "description": "Name of the custom property."
            }
          },
          "additionalProperties": false
        },
        "DataImportDefinitionDto": {
          "required": [
            "type"
          ],
          "type": "object",
          "properties": {
            "type": {
              "$ref": "#/components/schemas/UdFileType"
            }
          },
          "additionalProperties": false,
          "description": "Data import definition DTO."
        },
        "DataImportDto": {
          "required": [
            "definition",
            "group"
          ],
          "type": "object",
          "properties": {
            "group": {
              "$ref": "#/components/schemas/Group"
            },
            "definition": {
              "$ref": "#/components/schemas/DataImportDefinitionDto"
            }
          },
          "additionalProperties": false,
          "description": "Data import DTO."
        },
        "DateTimeZone": {
          "required": [
            "id",
            "maxOffset",
            "minOffset"
          ],
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "readOnly": true
            },
            "minOffset": {
              "$ref": "#/components/schemas/Offset"
            },
            "maxOffset": {
              "$ref": "#/components/schemas/Offset"
            }
          },
          "additionalProperties": false
        },
        "Decimal128": {
          "type": "object",
          "additionalProperties": false
        },
        "Era": {
          "required": [
            "name"
          ],
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "Error": {
          "required": [
            "message",
            "type"
          ],
          "type": "object",
          "properties": {
            "type": {
              "$ref": "#/components/schemas/ErrorType"
            },
            "message": {
              "type": "string",
              "description": "Detailed human readable error message."
            }
          },
          "additionalProperties": false,
          "description": "Report of one error."
        },
        "ErrorResponse": {
          "required": [
            "errorCode",
            "errorMessage",
            "success"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "errorCode": {
              "type": "string",
              "description": "Error code."
            },
            "errorMessage": {
              "type": "string",
              "description": "Human readable error message."
            }
          },
          "additionalProperties": false,
          "description": "Error response wrapper, used to return error details from an endpoint."
        },
        "ErrorType": {
          "enum": [
            "Unspecified",
            "UnknownProduct",
            "UnknownMember",
            "UnknownPromotion",
            "UnknownCoupon",
            "UnknownLocation",
            "UnknownSale",
            "NotEnoughPoints",
            "FraudDetection",
            "FunctionalityNotAvailable"
          ],
          "type": "string",
          "description": "Enum representing different types of errors.\r\n            \r\nUnspecified - The enum won't classify this. Find details in the accompanying error message.\r\nUnknownProduct - Product with given code or barcode  was not found in the system.\r\nUnknownMember - Member with given code was not found in the system. \r\nUnknownPromotion - Promotion with given code was not found in the system.\r\nUnknownCoupon - Coupon with given code was not found in the system.\r\nUnknownLocation - Location with given code was not found in the system.\r\nUnknownSale - No transaction under this sale code were found in the system.\r\nNotEnoughPoints - Member has not enough points for given action.\r\nFraudDetection - Event triggered fraud detection.\r\nFunctionalityNotAvailable - Attempted functionality is currently disabled or not installed."
        },
        "Group": {
          "required": [
            "cpOwner"
          ],
          "type": "object",
          "properties": {
            "cpOwner": {
              "$ref": "#/components/schemas/CpOwner"
            },
            "groupId": {
              "type": "string",
              "description": "Optional group identifier.",
              "format": "uuid",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Group DTO."
        },
        "GuidRepresentation": {
          "enum": [
            "Unspecified",
            "Standard",
            "CSharpLegacy",
            "JavaLegacy",
            "PythonLegacy"
          ],
          "type": "string"
        },
        "GuidResult": {
          "required": [
            "isFailed",
            "isSuccess",
            "value",
            "valueOrDefault"
          ],
          "type": "object",
          "properties": {
            "isFailed": {
              "type": "boolean",
              "readOnly": true
            },
            "isSuccess": {
              "type": "boolean",
              "readOnly": true
            },
            "reasons": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/IReason"
              },
              "nullable": true,
              "readOnly": true
            },
            "errors": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/IError"
              },
              "nullable": true,
              "readOnly": true
            },
            "successes": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/ISuccess"
              },
              "nullable": true,
              "readOnly": true
            },
            "valueOrDefault": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            },
            "value": {
              "type": "string",
              "format": "uuid",
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "GuidResultValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/GuidResult"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "GuidValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "type": "string",
              "description": "Returned value.",
              "format": "uuid"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "IError": {
          "type": "object",
          "properties": {
            "message": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "metadata": {
              "type": "object",
              "additionalProperties": {
                "nullable": true
              },
              "nullable": true,
              "readOnly": true
            },
            "reasons": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/IError"
              },
              "nullable": true,
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "IReason": {
          "type": "object",
          "properties": {
            "message": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "metadata": {
              "type": "object",
              "additionalProperties": {
                "nullable": true
              },
              "nullable": true,
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "ISuccess": {
          "type": "object",
          "properties": {
            "message": {
              "type": "string",
              "nullable": true,
              "readOnly": true
            },
            "metadata": {
              "type": "object",
              "additionalProperties": {
                "nullable": true
              },
              "nullable": true,
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "Instant": {
          "type": "integer",
          "additionalProperties": false,
          "description": "Timestamp (if missing, current time is used).",
          "format": "int64",
          "example": 1742893510697
        },
        "Int64ValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "type": "integer",
              "description": "Returned value.",
              "format": "int64"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "IsoDayOfWeek": {
          "enum": [
            "None",
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday",
            "Sunday"
          ],
          "type": "string"
        },
        "LcrMember": {
          "required": [
            "createdOn",
            "customData",
            "flags",
            "id",
            "updatedOn",
            "validFrom",
            "validTo"
          ],
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "ID of the customer.",
              "format": "uuid"
            },
            "code": {
              "type": "string",
              "description": "Customer external identifier.",
              "nullable": true
            },
            "validFrom": {
              "$ref": "#/components/schemas/ZonedDateTime"
            },
            "validTo": {
              "$ref": "#/components/schemas/ZonedDateTime"
            },
            "createdOn": {
              "$ref": "#/components/schemas/Instant"
            },
            "updatedOn": {
              "$ref": "#/components/schemas/Instant"
            },
            "flags": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              },
              "description": "Flags for this record."
            },
            "customData": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "description": "Custom data for customers (pairs of property names and property values)."
            }
          },
          "additionalProperties": false,
          "description": "A record from the LC member repository."
        },
        "LcrMemberListValueResponse": {
          "required": [
            "success"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/LcrMember"
              },
              "description": "Returned value.",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "LcrMemberValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/LcrMember"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "LcrProduct": {
          "required": [
            "createdOn",
            "customData",
            "flags",
            "id",
            "updatedOn",
            "validFrom",
            "validTo"
          ],
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "ID of the product.",
              "format": "uuid"
            },
            "code": {
              "type": "string",
              "description": "Product external identifier.",
              "nullable": true
            },
            "validFrom": {
              "$ref": "#/components/schemas/ZonedDateTime"
            },
            "validTo": {
              "$ref": "#/components/schemas/ZonedDateTime"
            },
            "createdOn": {
              "$ref": "#/components/schemas/Instant"
            },
            "updatedOn": {
              "$ref": "#/components/schemas/Instant"
            },
            "flags": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              },
              "description": "Flags for this record."
            },
            "customData": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BsonElement"
              },
              "description": "Custom data for products (pairs of property names and property values)."
            },
            "variantGroupId": {
              "type": "string",
              "format": "uuid",
              "nullable": true
            },
            "variantGroupCode": {
              "type": "string",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "A record from the LC product repository."
        },
        "LcrProductListValueResponse": {
          "required": [
            "success"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/LcrProduct"
              },
              "description": "Returned value.",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "LcrProductValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/LcrProduct"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "LocalDate": {
          "required": [
            "calendar",
            "day",
            "dayOfWeek",
            "dayOfYear",
            "era",
            "month",
            "year",
            "yearOfEra"
          ],
          "type": "object",
          "properties": {
            "calendar": {
              "$ref": "#/components/schemas/CalendarSystem"
            },
            "year": {
              "type": "integer",
              "format": "int32"
            },
            "month": {
              "type": "integer",
              "format": "int32"
            },
            "day": {
              "type": "integer",
              "format": "int32"
            },
            "dayOfWeek": {
              "$ref": "#/components/schemas/IsoDayOfWeek"
            },
            "yearOfEra": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "era": {
              "$ref": "#/components/schemas/Era"
            },
            "dayOfYear": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "LocalDateTime": {
          "required": [
            "calendar",
            "clockHourOfHalfDay",
            "date",
            "day",
            "dayOfWeek",
            "dayOfYear",
            "era",
            "hour",
            "millisecond",
            "minute",
            "month",
            "nanosecondOfDay",
            "nanosecondOfSecond",
            "second",
            "tickOfDay",
            "tickOfSecond",
            "timeOfDay",
            "year",
            "yearOfEra"
          ],
          "type": "object",
          "properties": {
            "calendar": {
              "$ref": "#/components/schemas/CalendarSystem"
            },
            "year": {
              "type": "integer",
              "format": "int32"
            },
            "yearOfEra": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "era": {
              "$ref": "#/components/schemas/Era"
            },
            "month": {
              "type": "integer",
              "format": "int32"
            },
            "dayOfYear": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "day": {
              "type": "integer",
              "format": "int32"
            },
            "dayOfWeek": {
              "$ref": "#/components/schemas/IsoDayOfWeek"
            },
            "hour": {
              "type": "integer",
              "format": "int32"
            },
            "clockHourOfHalfDay": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "minute": {
              "type": "integer",
              "format": "int32"
            },
            "second": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "millisecond": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "tickOfSecond": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "tickOfDay": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "nanosecondOfSecond": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "nanosecondOfDay": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "timeOfDay": {
              "$ref": "#/components/schemas/LocalTime"
            },
            "date": {
              "$ref": "#/components/schemas/LocalDate"
            }
          },
          "additionalProperties": false
        },
        "LocalTime": {
          "required": [
            "clockHourOfHalfDay",
            "hour",
            "millisecond",
            "minute",
            "nanosecondOfDay",
            "nanosecondOfSecond",
            "second",
            "tickOfDay",
            "tickOfSecond"
          ],
          "type": "object",
          "properties": {
            "hour": {
              "type": "integer",
              "format": "int32"
            },
            "clockHourOfHalfDay": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "minute": {
              "type": "integer",
              "format": "int32"
            },
            "second": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "millisecond": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "tickOfSecond": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "tickOfDay": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "nanosecondOfSecond": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "nanosecondOfDay": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "LoginCustomerRequest": {
          "required": [
            "email",
            "password"
          ],
          "type": "object",
          "properties": {
            "email": {
              "type": "string",
              "description": "Customer's email."
            },
            "password": {
              "type": "string",
              "description": "Customer's password."
            }
          },
          "additionalProperties": false
        },
        "LoginCustomerResponse": {
          "required": [
            "authToken"
          ],
          "type": "object",
          "properties": {
            "authToken": {
              "type": "string",
              "description": "Authentication token for future requests."
            }
          },
          "additionalProperties": false
        },
        "LoginCustomerResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/LoginCustomerResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "LoyaltyPoints": {
          "required": [
            "value"
          ],
          "type": "object",
          "properties": {
            "value": {
              "type": "number",
              "description": "How many points/balance?",
              "format": "double"
            },
            "currency": {
              "maxLength": 32,
              "minLength": 1,
              "type": "string",
              "description": "Currency of points if multi currency system",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Represents a class that holds the loyalty points of a customer."
        },
        "ModifyMemberRequest": {
          "required": [
            "createdOn",
            "customData",
            "updatedOn",
            "validFrom",
            "validTo"
          ],
          "type": "object",
          "properties": {
            "code": {
              "type": "string",
              "description": "Optional customer external identifier.",
              "nullable": true
            },
            "validFrom": {
              "$ref": "#/components/schemas/ZonedDateTime"
            },
            "validTo": {
              "$ref": "#/components/schemas/ZonedDateTime"
            },
            "createdOn": {
              "$ref": "#/components/schemas/Instant"
            },
            "updatedOn": {
              "$ref": "#/components/schemas/Instant"
            },
            "customData": {
              "type": "object",
              "additionalProperties": {
                "type": "string",
                "nullable": true,
                "example": "string,number,date,date-time,array"
              },
              "description": "Custom data for customers (dictionary of pairs of property names and property values)."
            }
          },
          "additionalProperties": false,
          "description": "Request to update or create a customer."
        },
        "ObjectId": {
          "required": [
            "creationTime",
            "increment",
            "machine",
            "pid",
            "timestamp"
          ],
          "type": "object",
          "properties": {
            "timestamp": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "machine": {
              "type": "integer",
              "format": "int32",
              "readOnly": true,
              "deprecated": true
            },
            "pid": {
              "type": "integer",
              "format": "int32",
              "readOnly": true,
              "deprecated": true
            },
            "increment": {
              "type": "integer",
              "format": "int32",
              "readOnly": true,
              "deprecated": true
            },
            "creationTime": {
              "type": "string",
              "format": "date-time",
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "Offset": {
          "required": [
            "milliseconds",
            "nanoseconds",
            "seconds",
            "ticks"
          ],
          "type": "object",
          "properties": {
            "seconds": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "milliseconds": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "ticks": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "nanoseconds": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "OkResponse": {
          "required": [
            "success"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            }
          },
          "additionalProperties": false,
          "description": "Success response wrapper, used to indicate a successful outcome from an endpoint."
        },
        "Product": {
          "required": [
            "createdOn",
            "customData",
            "flags",
            "id",
            "updatedOn",
            "validFrom",
            "validTo"
          ],
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "UUID system-wide ID for record",
              "format": "uuid"
            },
            "code": {
              "type": "string",
              "description": "optional custom code for external systems",
              "nullable": true
            },
            "validFrom": {
              "$ref": "#/components/schemas/ZonedDateTime"
            },
            "validTo": {
              "$ref": "#/components/schemas/ZonedDateTime"
            },
            "createdOn": {
              "$ref": "#/components/schemas/Instant"
            },
            "updatedOn": {
              "$ref": "#/components/schemas/Instant"
            },
            "flags": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              },
              "description": "product flags"
            },
            "customData": {
              "type": "object",
              "additionalProperties": {
                "type": "string",
                "nullable": true,
                "example": "string,number,date,date-time,array"
              },
              "description": "custom data inside this record"
            },
            "variantGroupId": {
              "type": "string",
              "description": "UUID of the variant group this product belongs to",
              "format": "uuid",
              "nullable": true
            },
            "variantGroupCode": {
              "type": "string",
              "description": "code of the variant group this product belongs to",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "A record from the LC product repository."
        },
        "ProductHolderCreateRequest": {
          "required": [
            "name",
            "products"
          ],
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "mainGroupId": {
              "type": "string",
              "format": "uuid",
              "nullable": true
            },
            "products": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": false
        },
        "ProductHolderUpdateRequest": {
          "required": [
            "customProperties",
            "name",
            "products"
          ],
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "The name of the product holder."
            },
            "customProperties": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "A list of custom properties associated with the product holder."
            },
            "products": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/ProductUpdateWrapper"
              },
              "description": "A dictionary of products with actions to be performed on them."
            }
          },
          "additionalProperties": false,
          "description": "Represents a request to update a product holder."
        },
        "ProductHolderUpdateRequestAction": {
          "enum": [
            "Update",
            "Delete",
            "Create"
          ],
          "type": "string",
          "description": "Defines the possible actions that can be performed on a product holder."
        },
        "ProductRequest": {
          "type": "object",
          "properties": {
            "productCode": {
              "type": "string",
              "description": "The product code.",
              "nullable": true
            },
            "skuCode": {
              "type": "string",
              "description": "Optional SKU code.",
              "nullable": true
            },
            "variationAttributes": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Optional attributes for attribute based SKU system.",
              "nullable": true
            },
            "basePricePerUnit": {
              "type": "number",
              "description": "Optional price per unit (positive).",
              "format": "double",
              "nullable": true
            },
            "barCode": {
              "type": "string",
              "description": "An optional bar code for the item.",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Part of request with product data.\r\n            \r\nIn a baseline system, the POS will provide the product code and the base price per unit.\r\n            \r\nA setup without pricing processing on the loyalty side is possible. Then prices are not\r\nsend via the inquiry request, and are not received in the response. Such a setup leaves\r\ncomplete control over the prices and application of promotions over the pricing to the\r\ncustomer side system.\r\n\r\nAn extended system may forego sending the price, instead relying on the price being stored\r\ninside the loyalty system.\r\n            \r\nAnother extension allows for barcodes (usually EAN13) to be send to the loyalty system.\r\n            \r\nSKU codes are present in specific setups, which can describe SKU's with a\r\nsecondary code instead of a unique product code or variation attributes."
        },
        "ProductResponse": {
          "required": [
            "productCode"
          ],
          "type": "object",
          "properties": {
            "productCode": {
              "type": "string",
              "description": "The product code."
            },
            "skuCode": {
              "type": "string",
              "description": "Optional SKU code.",
              "nullable": true
            },
            "variationAttributes": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Optional variation attributes.",
              "nullable": true
            },
            "properties": {
              "type": "object",
              "additionalProperties": {
                "type": "string",
                "nullable": true,
                "example": "string,number,date,date-time,array"
              },
              "description": "Optional configuration dependent product properties.",
              "nullable": true
            },
            "basePricePerUnit": {
              "type": "number",
              "description": "Optional price per unit.",
              "format": "double",
              "nullable": true
            },
            "barCode": {
              "type": "string",
              "description": "An optional bar code for the item.",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Represents a response containing information about a product in a sale.\r\n            \r\nThe product code is always returned, should there be no customer side code be available,\r\nthe system's own code is provided.\r\n            \r\nThe description present here is usually equal to the product name, but some\r\nsystem configurations using SKUs (stock keeping units) may provide a more\r\nextensive or generated name.\r\n            \r\nThe price per unit can originate from the POS's own request, or in from the\r\nsystems own price list in an extended system configuration. It could be also\r\nbe missing in case no price source is available (neither a system internal\r\nprice list nor was it provided inside the request).\r\n            \r\nIn case of promotional products, and when internal price lists are enabled,\r\nit is possible for them also to carry a price tag, usually reduced from their\r\nregular counterparts, to be paid to be eligible for the promotion.\r\n            \r\nSKU codes are present in specific setups, which can describe SKU's with a\r\nsecondary code instead of a unique product code or variation attributes."
        },
        "ProductUpdateWrapper": {
          "required": [
            "action",
            "product"
          ],
          "type": "object",
          "properties": {
            "action": {
              "$ref": "#/components/schemas/ProductHolderUpdateRequestAction"
            },
            "product": {
              "$ref": "#/components/schemas/Product"
            }
          },
          "additionalProperties": false
        },
        "PromotionResponse": {
          "required": [
            "description",
            "promotionCode"
          ],
          "type": "object",
          "properties": {
            "promotionCode": {
              "type": "string",
              "description": "Promotion code to refer to."
            },
            "description": {
              "type": "string",
              "description": "A description of the promotion."
            },
            "adjustment": {
              "type": "number",
              "description": "Optional information about the absolute price adjustment.",
              "format": "double",
              "nullable": true
            },
            "factor": {
              "type": "number",
              "description": "Optional information about relative price adjustment.",
              "format": "double",
              "nullable": true
            },
            "promotionalProducts": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/ProductResponse"
              },
              "description": "Optional information about promotional products.",
              "nullable": true
            },
            "pointsChange": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/LoyaltyPoints"
              },
              "description": "Optional loyalty points added or deducted.",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "This describes a promotion in the response, either applied or applicable.\r\n            \r\nAn applied promotion has been considered in the pricing structure of the returned\r\nsale information. Usually all available promotions except those containing\r\npromotional items with a price will be auto-applied on request.\r\n            \r\nAn applicable promotion is available, but has not (yet) been applied / considered in the\r\npricing and rewards.\r\n            \r\nThe adjustment fields can optionally carry information about the absolute price adjustment\r\nthis promotion causes, for example -10 for a price lowered for -10€. \r\n            \r\nThe factor field can optionally carry information about the relative price adjustment this\r\npromotion causes, for example .8 for a 80% price (20% discount).\r\n            \r\nPromotional products are products offered with this promotion. Keep in mind this can be vouchers."
        },
        "ReadRewardResponse": {
          "required": [
            "analytics",
            "reward"
          ],
          "type": "object",
          "properties": {
            "reward": {
              "$ref": "#/components/schemas/RewardResponse"
            },
            "analytics": {
              "$ref": "#/components/schemas/RewardAnalyticsResponse"
            }
          },
          "additionalProperties": false
        },
        "ReadRewardResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/ReadRewardResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "RedeemCouponRequest": {
          "required": [
            "couponCode",
            "customerId"
          ],
          "type": "object",
          "properties": {
            "customerId": {
              "type": "string",
              "description": "ID of the customer.",
              "format": "uuid"
            },
            "couponCode": {
              "type": "string",
              "description": "Code of the coupon.",
              "format": "uuid"
            }
          },
          "additionalProperties": false
        },
        "RedeemCouponResponse": {
          "required": [
            "redemptionId"
          ],
          "type": "object",
          "properties": {
            "redemptionId": {
              "type": "string",
              "description": "ID of the redemption.",
              "format": "uuid"
            }
          },
          "additionalProperties": false
        },
        "RedeemCouponResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/RedeemCouponResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "Regex": {
          "required": [
            "matchTimeout",
            "options",
            "rightToLeft"
          ],
          "type": "object",
          "properties": {
            "options": {
              "$ref": "#/components/schemas/RegexOptions"
            },
            "rightToLeft": {
              "type": "boolean",
              "readOnly": true
            },
            "matchTimeout": {
              "type": "string",
              "format": "date-span",
              "readOnly": true
            }
          },
          "additionalProperties": false
        },
        "RegexOptions": {
          "enum": [
            "None",
            "IgnoreCase",
            "Multiline",
            "ExplicitCapture",
            "Compiled",
            "Singleline",
            "IgnorePatternWhitespace",
            "RightToLeft",
            "ECMAScript",
            "CultureInvariant",
            "NonBacktracking"
          ],
          "type": "string"
        },
        "RequestPasswordRequest": {
          "required": [
            "email"
          ],
          "type": "object",
          "properties": {
            "email": {
              "type": "string",
              "description": "Customer's email."
            }
          },
          "additionalProperties": false
        },
        "RequestSetPasswordRequest": {
          "required": [
            "newPassword",
            "token"
          ],
          "type": "object",
          "properties": {
            "token": {
              "type": "string",
              "description": "Reset token sent from the URL for resetting password."
            },
            "newPassword": {
              "type": "string",
              "description": "Customer's new password."
            }
          },
          "additionalProperties": false
        },
        "RestrictionsResponse": {
          "required": [
            "claimLimit",
            "repeatInterval",
            "segments",
            "stock"
          ],
          "type": "object",
          "properties": {
            "segments": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Restrictions by segments of customers."
            },
            "stock": {
              "type": "integer",
              "description": "Stock.",
              "format": "int32"
            },
            "claimLimit": {
              "type": "integer",
              "description": "Limit of number of claims per customer.",
              "format": "int32"
            },
            "repeatInterval": {
              "type": "integer",
              "description": "Interval between two claims in seconds.",
              "format": "int32"
            }
          },
          "additionalProperties": false
        },
        "RevertRequest": {
          "required": [
            "dateTime",
            "saleCode"
          ],
          "type": "object",
          "properties": {
            "saleCode": {
              "type": "string",
              "description": "Code to identify sale."
            },
            "dateTime": {
              "$ref": "#/components/schemas/ZonedDateTime"
            }
          },
          "additionalProperties": false,
          "description": "The reqiest to revert a sale, and take all rewards away.\r\n            \r\nHere the SaleCode is mandatory, since we need it to identify the transactions to revert.\r\nNo MemberCode is required for a reversal."
        },
        "RevertResponse": {
          "required": [
            "dateTime",
            "saleCode",
            "success"
          ],
          "type": "object",
          "properties": {
            "saleCode": {
              "type": "string",
              "description": "Code to identify sale."
            },
            "dateTime": {
              "$ref": "#/components/schemas/ZonedDateTime"
            },
            "success": {
              "type": "boolean",
              "description": "True if successfully."
            },
            "errors": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Error"
              },
              "description": "Optional list of errors.",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "The response to the revert request with optional errors."
        },
        "RevertResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/RevertResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "RevokeRewardRequest": {
          "required": [
            "claimId",
            "reason"
          ],
          "type": "object",
          "properties": {
            "claimId": {
              "type": "string",
              "description": "ID of the claim.",
              "format": "uuid"
            },
            "reason": {
              "type": "string",
              "description": "Reason for revoking the claim."
            }
          },
          "additionalProperties": false
        },
        "RevokeRewardResponse": {
          "required": [
            "message",
            "status"
          ],
          "type": "object",
          "properties": {
            "status": {
              "$ref": "#/components/schemas/RevokeStatus"
            },
            "message": {
              "type": "string",
              "description": "Description of the status."
            }
          },
          "additionalProperties": false
        },
        "RevokeRewardResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/RevokeRewardResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "RevokeStatus": {
          "enum": [
            "revoked",
            "failed"
          ],
          "type": "string",
          "description": "Status of the claim."
        },
        "RewardAnalyticsResponse": {
          "required": [
            "rank",
            "totalClaims",
            "totalViews",
            "uniqueClaimers"
          ],
          "type": "object",
          "properties": {
            "totalClaims": {
              "type": "integer",
              "description": "Total number of claims.",
              "format": "int32"
            },
            "uniqueClaimers": {
              "type": "integer",
              "description": "Number of unique customers that claimed the reward.",
              "format": "int32"
            },
            "totalViews": {
              "type": "integer",
              "description": "Total views of reward's page.",
              "format": "int32"
            },
            "rank": {
              "type": "integer",
              "description": "Rank of reward among all rewards.",
              "format": "int32"
            }
          },
          "additionalProperties": false
        },
        "RewardAnalyticsResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/RewardAnalyticsResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "RewardResponse": {
          "required": [
            "category",
            "claimTimeFrame",
            "description",
            "displayName",
            "imageGallery",
            "imageUrl",
            "notificationsEnabled",
            "pointsPrice",
            "redeemInstructions",
            "restrictions",
            "rewardId",
            "status",
            "tags",
            "termsAndConditions"
          ],
          "type": "object",
          "properties": {
            "rewardId": {
              "type": "string",
              "description": "ID of the reward.",
              "format": "uuid"
            },
            "externalId": {
              "type": "string",
              "description": "External ID of the reward if it exists.",
              "nullable": true
            },
            "displayName": {
              "type": "string",
              "description": "Localized name of the reward."
            },
            "description": {
              "type": "string",
              "description": "Localized description of the reward."
            },
            "redeemInstructions": {
              "type": "string",
              "description": "Localized instructions to redeem the reward."
            },
            "termsAndConditions": {
              "type": "string",
              "description": "Localized terms and conditions."
            },
            "imageUrl": {
              "type": "string",
              "description": "URL of reward's image."
            },
            "imageGallery": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "URLs of additional images."
            },
            "category": {
              "type": "string",
              "description": "Category of the reward."
            },
            "tags": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "List of tags."
            },
            "status": {
              "$ref": "#/components/schemas/RewardStatus"
            },
            "pointsPrice": {
              "type": "integer",
              "description": "Price in points.",
              "format": "int32"
            },
            "claimTimeFrame": {
              "$ref": "#/components/schemas/TimeFrameResponse"
            },
            "restrictions": {
              "$ref": "#/components/schemas/RestrictionsResponse"
            },
            "notificationsEnabled": {
              "type": "boolean",
              "description": "Whether the notifications are enabled."
            }
          },
          "additionalProperties": false
        },
        "RewardResponseListValueResponse": {
          "required": [
            "success"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/RewardResponse"
              },
              "description": "Returned value.",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "RewardStatus": {
          "enum": [
            "active",
            "inactive",
            "completed",
            "restricted"
          ],
          "type": "string",
          "description": "Status of the reward."
        },
        "SalePositionRequest": {
          "required": [
            "product"
          ],
          "type": "object",
          "properties": {
            "product": {
              "$ref": "#/components/schemas/ProductRequest"
            },
            "amount": {
              "type": "number",
              "description": "The (positive) amount of product selling.",
              "format": "double",
              "nullable": true
            },
            "promotionsToApply": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Which promotions shall apply to this position.",
              "nullable": true
            },
            "barCode": {
              "type": "string",
              "description": "Optional barcode (Usually EAN13) of product.",
              "nullable": true
            },
            "couponsToApply": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Represents a position on the sale in process. Part of the SaleRequest.\r\n            \r\nWhen missing, an amount of 1 is assumed.\r\n\r\nIf a voucher or coupon subsystem is present, they can be send with the request for\r\nadditional promotions. Those promotions will be per default applied in the response."
        },
        "SalePositionResponse": {
          "required": [
            "amount",
            "product"
          ],
          "type": "object",
          "properties": {
            "product": {
              "$ref": "#/components/schemas/ProductResponse"
            },
            "amount": {
              "type": "number",
              "description": "The (positive) amount of the product.",
              "format": "double"
            },
            "adjustedPrice": {
              "type": "number",
              "description": "The complete price of this position.",
              "format": "double",
              "nullable": true
            },
            "pointsChange": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/LoyaltyPoints"
              },
              "description": "Optional loyalty points added or deducted.",
              "nullable": true
            },
            "appliedPromotions": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/PromotionResponse"
              },
              "description": "Which promotions have been applied to this position.",
              "nullable": true
            },
            "applicablePromotions": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/PromotionResponse"
              },
              "description": "Which promotions still could be applied to this position.",
              "nullable": true
            },
            "appliedCoupons": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Coupon"
              },
              "description": "Vouchers or coupons applied to this sale.",
              "nullable": true
            },
            "errors": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Error"
              },
              "description": "An optional list of errors, if Success in the top response is false.",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Describes the position of a sale.\r\n            \r\nProvided is data of the product, the amount, all applied (these have been taken into\r\naccount on this position) and applicable (these have not yet been enabled for this position,\r\nbut could be applied), and an optional adjusted price.\r\n            \r\nThe adjusted price is provided if either a per unit price is provided with the request or\r\nthe pricing module is active.\r\n            \r\nIf this purchase earns or costs the user any loyalty currency, it is described in PointsChange."
        },
        "SaleRequest": {
          "required": [
            "dateTime",
            "positions"
          ],
          "type": "object",
          "properties": {
            "saleCode": {
              "type": "string",
              "description": "Optional code to identify sale.",
              "nullable": true
            },
            "dateTime": {
              "$ref": "#/components/schemas/ZonedDateTime"
            },
            "memberCode": {
              "type": "string",
              "description": "Optional loyalty member code.",
              "nullable": true
            },
            "positions": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/SalePositionRequest"
              },
              "description": "The positions of the sale."
            },
            "promotionsToApply": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Which promotions are to be applied to the sale as a whole.",
              "nullable": true
            },
            "couponsToApply": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Optional list of vouchers or coupons to apply.",
              "nullable": true
            },
            "locationCode": {
              "type": "string",
              "description": "Option code of the location of sale.",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Used to convey data about about a sale in progress to the loyalty system.\r\n            \r\nIn its basic configuration, this carries a list of sale positions (\"items on the receipt\"),\r\nand a list of promotions applied to the sale as a whole.\r\n            \r\nWhen the price extension is active, an optional location code can be send to allow variations of\r\nprices per location.\r\n            \r\nFor some (most) promotions to apply, a customer must have identified itself and his code is provided here.\r\n            \r\nApplied vouchers or coupons reported here will be applied to their appropriate positions, if possible.\r\nRequests where this fails (ambiguity, no valid position found, ...) will fail. \r\n            \r\nThe order of positions in the request is preserved in the response.\r\n            \r\nIn case the date and time of the purchase is not \"now\", it can be optionally send."
        },
        "SaleResponse": {
          "required": [
            "dateTime",
            "saleCode",
            "success"
          ],
          "type": "object",
          "properties": {
            "saleCode": {
              "type": "string",
              "description": "Code to identify sale."
            },
            "dateTime": {
              "$ref": "#/components/schemas/ZonedDateTime"
            },
            "memberCode": {
              "type": "string",
              "description": "Optional loyalty member code.",
              "nullable": true
            },
            "memberProperties": {
              "type": "object",
              "additionalProperties": {
                "type": "string",
                "nullable": true,
                "example": "string,number,date,date-time,array"
              },
              "description": "Optional configuration dependent member properties.",
              "nullable": true
            },
            "success": {
              "type": "boolean",
              "description": "True is request was successfully processed."
            },
            "adjustedTotalPrice": {
              "type": "number",
              "description": "The current complete price of the sale.",
              "format": "double",
              "nullable": true
            },
            "positions": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/SalePositionResponse"
              },
              "description": "The positions of this sale.",
              "nullable": true
            },
            "appliedPromotions": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/PromotionResponse"
              },
              "description": "Which promotions have been applied to the sale.",
              "nullable": true
            },
            "applicablePromotions": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/PromotionResponse"
              },
              "description": "Which promotions still could be applied to the sale.",
              "nullable": true
            },
            "appliedCoupons": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Coupon"
              },
              "description": "Vouchers or coupons applied to this sale.",
              "nullable": true
            },
            "errors": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Error"
              },
              "description": "A list of errors, if Success is false.",
              "nullable": true
            },
            "balance": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/LoyaltyPoints"
              },
              "description": "Optional point balance of customer.",
              "nullable": true
            }
          },
          "additionalProperties": false,
          "description": "Gives information of the ongoing (or finalized) sale, and its promotions.\r\n\r\nProvided are all applied (these have been taken into  account on this position) and\r\napplicable (these have not yet been enabled for this position, but could be applied),\r\nand an optional adjusted total price.\r\n            \r\nThe price will be available if the position prices are.\r\n            \r\nThe sale code is either a copy of the one provided in the request, or will be generated\r\nby the loyalty system. \r\n \r\nThe order of positions in the request is preserved in the response.\r\n            \r\nIf the request was processed, but unsuccessfully, Success will be false, and Errors may\r\ncontain one or more error messages applicable to the sale as whole. Messages related to\r\nthe various positions are provided inside the positions. There will be at least one error\r\nmessage in the structure of the reply."
        },
        "SaleResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/SaleResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "SpaceInfo": {
          "required": [
            "name"
          ],
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "Name of the space"
            }
          },
          "additionalProperties": false,
          "description": "Brief information about the space the API key belongs to"
        },
        "TenantInfo": {
          "required": [
            "name",
            "slug"
          ],
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "Name of the tenant"
            },
            "slug": {
              "type": "string",
              "description": "Slug of the tenant"
            }
          },
          "additionalProperties": false,
          "description": "Brief information about the tenant the API key belongs to"
        },
        "TimeFrameResponse": {
          "required": [
            "endDate",
            "startDate"
          ],
          "type": "object",
          "properties": {
            "startDate": {
              "type": "string",
              "description": "Date of redeem window's start.",
              "format": "date-time"
            },
            "endDate": {
              "type": "string",
              "description": "Date of redeem window's end.",
              "format": "date-time"
            }
          },
          "additionalProperties": false
        },
        "TransferCouponRequest": {
          "required": [
            "couponCode",
            "customerId",
            "recipientId"
          ],
          "type": "object",
          "properties": {
            "customerId": {
              "type": "string",
              "description": "ID of the customer transfering the coupon.",
              "format": "uuid"
            },
            "recipientId": {
              "type": "string",
              "description": "ID of the customer the coupon is being transferred to.",
              "format": "uuid"
            },
            "couponCode": {
              "type": "string",
              "description": "Code of the coupon.",
              "format": "uuid"
            }
          },
          "additionalProperties": false
        },
        "TransferCouponResponse": {
          "required": [
            "expirationDate",
            "transferId"
          ],
          "type": "object",
          "properties": {
            "transferId": {
              "type": "string",
              "description": "ID of the transfer.",
              "format": "uuid"
            },
            "expirationDate": {
              "type": "string",
              "description": "Date of expiry after the transfer.",
              "format": "date-time"
            }
          },
          "additionalProperties": false
        },
        "TransferCouponResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/TransferCouponResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "TransferRewardRequest": {
          "required": [
            "fromCustomerId",
            "rewardId",
            "toCustomerId",
            "transferPoints"
          ],
          "type": "object",
          "properties": {
            "rewardId": {
              "type": "string",
              "description": "ID of the reward.",
              "format": "uuid"
            },
            "fromCustomerId": {
              "type": "string",
              "description": "ID of the customer sending the reward.",
              "format": "uuid"
            },
            "toCustomerId": {
              "type": "string",
              "description": "ID of the customer receiving the reward.",
              "format": "uuid"
            },
            "transferPoints": {
              "type": "integer",
              "description": "Number of points for the transfer.",
              "format": "int32"
            }
          },
          "additionalProperties": false
        },
        "TransferRewardResponse": {
          "required": [
            "message",
            "status",
            "transferId"
          ],
          "type": "object",
          "properties": {
            "transferId": {
              "type": "string",
              "description": "ID of the transfer.",
              "format": "uuid"
            },
            "status": {
              "$ref": "#/components/schemas/TransferStatus"
            },
            "message": {
              "type": "string",
              "description": "Description of the status."
            }
          },
          "additionalProperties": false
        },
        "TransferRewardResponseValueResponse": {
          "required": [
            "success",
            "value"
          ],
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates whether the request was successful."
            },
            "value": {
              "$ref": "#/components/schemas/TransferRewardResponse"
            }
          },
          "additionalProperties": false,
          "description": "Basic value response wrapper, used to return a value from an endpoint."
        },
        "TransferStatus": {
          "enum": [
            "success",
            "failed"
          ],
          "type": "string",
          "description": "Status of the transfer."
        },
        "UdFileType": {
          "enum": [
            "Csv",
            "Excel"
          ],
          "type": "string",
          "description": "Type of file to upload."
        },
        "ZonedDateTime": {
          "required": [
            "calendar",
            "clockHourOfHalfDay",
            "date",
            "day",
            "dayOfWeek",
            "dayOfYear",
            "era",
            "hour",
            "localDateTime",
            "millisecond",
            "minute",
            "month",
            "nanosecondOfDay",
            "nanosecondOfSecond",
            "offset",
            "second",
            "tickOfDay",
            "tickOfSecond",
            "timeOfDay",
            "year",
            "yearOfEra",
            "zone"
          ],
          "type": "string",
          "properties": {
            "offset": {
              "$ref": "#/components/schemas/Offset"
            },
            "zone": {
              "$ref": "#/components/schemas/DateTimeZone"
            },
            "localDateTime": {
              "$ref": "#/components/schemas/LocalDateTime"
            },
            "calendar": {
              "$ref": "#/components/schemas/CalendarSystem"
            },
            "date": {
              "$ref": "#/components/schemas/LocalDate"
            },
            "timeOfDay": {
              "$ref": "#/components/schemas/LocalTime"
            },
            "era": {
              "$ref": "#/components/schemas/Era"
            },
            "year": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "yearOfEra": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "month": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "dayOfYear": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "day": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "dayOfWeek": {
              "$ref": "#/components/schemas/IsoDayOfWeek"
            },
            "hour": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "clockHourOfHalfDay": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "minute": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "second": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "millisecond": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "tickOfSecond": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "tickOfDay": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            },
            "nanosecondOfSecond": {
              "type": "integer",
              "format": "int32",
              "readOnly": true
            },
            "nanosecondOfDay": {
              "type": "integer",
              "format": "int64",
              "readOnly": true
            }
          },
          "additionalProperties": false,
          "description": "Description here does not work for some reason anyway",
          "format": "date-time",
          "example": "2025-03-25T10:05:10.6973854+01[Europe/Ljubljana]"
        }
      },
      "securitySchemes": {
        "Bearer": {
          "type": "apiKey",
          "description": "Please enter a valid token",
          "name": "Authorization",
          "in": "header"
        },
        "Space": {
          "type": "apiKey",
          "description": "Please enter a valid space token",
          "name": "EXP-Space",
          "in": "header"
        },
        "ApiKey": {
          "type": "apiKey",
          "description": "Please enter a valid api key",
          "name": "EXP-ApiKey",
          "in": "header"
        }
      }
    },
    "security": [
      {
        "Bearer": [ ]
      },
      {
        "Space": [ ]
      },
      {
        "ApiKey": [ ]
      }
    ],
    "x-tagGroups": [
      {
        "name": "Audience API",
        "tags": [
          "Audience"
        ]
      },
      {
        "name": "Products API",
        "tags": [
          "Products"
        ]
      },
      {
        "name": "Pos API",
        "tags": [
          "Pos"
        ]
      },
      {
        "name": "Display API",
        "tags": [
          "Rewards",
          "Coupons",
          "Customers",
          "Analytics"
        ]
      },
      {
        "name": "Events API",
        "tags": [
          "Events"
        ]
      },
      {
        "name": "Data Import API",
        "tags": [
          "Data Import"
        ]
      }
    ],
    "tags": [
      {
        "name": "Products",
        "description": "The Products API provides a robust and efficient solution for managing all aspects of your product catalog. It offers actions for handling individual products or product groups and supports large-scale operations, such as batch uploads for managing multiple products simultaneously.\r\n\r\n<h2>Key features and Benefits</h2>\r\n\r\n<ol type='1'><li><b>Efficient Catalog Management</b></li><ul type='circle'><li>Streamline product management with endpoints designed for both single product operations and batch processing, reducing manual effort.</li></ul><li><b>Scalability</b></li><ul type='circle'><li>Handle large-scale operations with the ability to upload multiple products in bulk, making it ideal for businesses with extensive product inventories.</li></ul><li><b>Granular Control</b></li><ul type='circle'><li>Manage individual products with precision, including creation, updates, retrieval, and removal, ensuring accuracy and consistency.</li></ul><li><b>Real-Time Data Access</b></li><ul type='circle'><li>Access product data instantly, enabling dynamic product updates and seamless integration with eCommerce platforms or other systems.</li></ul><li><b>Inventory Insights</b></li><ul type='circle'><li>Retrieve the total count of products to monitor inventory size and track catalog growth effectively.</li></ul></ol>"
      },
      {
        "name": "Audience",
        "description": "The Audience API provides a complete solution for managing all aspects of your customers. It supports actions for handling individual customer records and offers bulk operations, such as batch uploads, to efficiently manage multiple customers at once.\r\n\r\n<h2>Key features and Benefits</h2>\r\n\r\n<ol type='1'><li><b>Efficient Audience Management</b></li><ul type='circle'><li>Streamline audience management with endpoints designed for both single product operations and batch processing, reducing manual effort.</li></ul><li><b>Scalability</b></li><ul type='circle'><li>Handle large-scale operations with the ability to upload multiple customers in bulk, making it ideal for businesses with extensive databases of customers.</li></ul><li><b>Granular Control</b></li><ul type='circle'><li>Manage individual customer with precision, including creation, updates, retrieval, and removal, ensuring accuracy and consistency.</li></ul><li><b>Real-Time Data Access</b></li><ul type='circle'><li>Access customer data instantly, enabling dynamic customer updates and seamless integration with external system like eCommerce platforms, CRM platforms or other systems.</li></ul><li><b>Inventory Insights</b></li><ul type='circle'><li>Retrieve the total count of customers to monitor audience size and track audience growth effectively.</li></ul></ol>"
      },
      {
        "name": "Pos",
        "description": "The EpisXperience POS APIs are designed to provide a unified interface for integrating Point-of-Sale (POS) terminals and eCommerce platforms with the EpisXperience loyalty ecosystem. These APIs enable real-time interactions with the loyalty system, ensuring smooth processing of transactions while enhancing the customer experience."
      },
      {
        "name": "Rewards",
        "description": "Endpoints listing available rewards, allowing customers to claim or revoke rewards, submit bids for bidding rewards, and retrieve all claimed rewards for a specified customer."
      },
      {
        "name": "Coupons",
        "description": "Endpoints listing all coupons associated with a specified customer, allowing customers to claim or revoke coupons, and retrieve all claimed coupons for a specified customer."
      },
      {
        "name": "Customers",
        "description": "Endpoints providing core features for creating, logging in, activating customers, and resetting their passwords."
      },
      {
        "name": "Analytics",
        "description": "Endpoints providing detailed information and search capabilities for customer transactions, including transaction IDs, and statuses."
      },
      {
        "name": "Events",
        "description": "The Events API is designed to facilitate the submission and processing of events in a loyalty system. This API provides flexible functionality to support various event types, including standard and custom events, while accommodating both single and bulk submissions."
      },
      {
        "name": "Data Import",
        "description": "The Data Import API facilitates the process of importing data files into the system in 3 steps through the following endpoints:\r\n\r\n<ol type='1'><li><b>Define upload</b></li><li><b>Upload file</b></li><li><b>Validate data and import file</b></li></ol>"
      }
    ]
  }