{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/marsello/main/json-schema/marsello-account-model-schema.json",
  "title": "AccountModel",
  "x-generated": "2026-10-27",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/marsello-loyalty-api-v1.json#/components/schemas/AccountModel",
  "type": "object",
  "properties": {
    "name": {
      "type": [
        "string",
        "null"
      ],
      "description": "The name of this account",
      "readOnly": true
    },
    "id": {
      "type": [
        "string",
        "null"
      ],
      "description": "The Id of this account",
      "readOnly": true
    },
    "pointsLabel": {
      "type": [
        "string",
        "null"
      ],
      "description": "The points label of this account",
      "readOnly": true
    },
    "loyaltyProgramName": {
      "type": [
        "string",
        "null"
      ],
      "description": "The loyalty program name of this account",
      "readOnly": true
    },
    "defaultTierOneName": {
      "type": [
        "string",
        "null"
      ],
      "description": "The default tier one name of this account",
      "readOnly": true
    },
    "earnActivities": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/EarnActivityModel"
      },
      "description": "Loyalty activities on this account",
      "readOnly": true
    },
    "rewards": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/RewardModel"
      },
      "description": "Rewards on this account",
      "readOnly": true
    },
    "tiers": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/TierModel"
      },
      "description": "The tiers on this account",
      "readOnly": true
    },
    "branding": {
      "$ref": "#/$defs/AccountBranding"
    }
  },
  "additionalProperties": false,
  "$defs": {
    "AccountBranding": {
      "type": "object",
      "properties": {
        "signupBannerUrl": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        },
        "navLogoUrl": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        },
        "bannerBackgroundColor": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        },
        "buttonBackgroundColor": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        },
        "buttonSelectedBackgroundColor": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        },
        "buttonTextColor": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        },
        "headerText": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        },
        "tabSelectedBackgroundColor": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        },
        "primaryFont": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        },
        "primaryFontUrl": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        },
        "primaryUseWebFont": {
          "type": "boolean",
          "readOnly": true
        },
        "signupUrl": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        },
        "appIconUrl": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        },
        "appShortName": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true
        }
      },
      "additionalProperties": false
    },
    "ActivityType": {
      "enum": [
        "Undefined",
        "OrderOnline",
        "OrderInstore",
        "Order",
        "OrderRefund",
        "CouponReactivated",
        "ManualAdjustment",
        "Referral",
        "ClaimedReward",
        "RedeemedReward",
        "CreatedOffer",
        "ClaimedOffer",
        "RedeemedOffer",
        "FacebookShare",
        "TwitterShare",
        "ExpirePoints",
        "ApiAdjustment",
        "FacebookLike",
        "InstagramFollow",
        "TwitterFollow",
        "ProductReview",
        "Birthday",
        "CreatedAccount",
        "CancelledOrder",
        "CompletedProfile",
        "TierAssignment",
        "UnclaimCoupon",
        "DeletedCoupon",
        "RefundedCoupon",
        "TotalBalanceAdjustmentOnly",
        "PointsPromotion",
        "OrderUpdate",
        "InStoreVisit",
        "CustomEarnOptionManuallyFulfilled",
        "CustomEarnOptionApiFulfilled",
        "CustomerPortalEmailLogin",
        "UnknownMigrated",
        "CustomRewardFulfilled"
      ],
      "type": "string"
    },
    "ApiRewardType": {
      "enum": [
        "Reward",
        "Coupon"
      ],
      "type": "string"
    },
    "EarnActivityModel": {
      "type": "object",
      "properties": {
        "id": {
          "type": [
            "string",
            "null"
          ],
          "description": "Unique string representing the specific earn activity"
        },
        "available": {
          "type": "boolean",
          "description": "Whether this earn activity is available to perform"
        },
        "title": {
          "type": [
            "string",
            "null"
          ],
          "description": "Title of the earning activity"
        },
        "description": {
          "type": [
            "string",
            "null"
          ],
          "description": "Description of this activity"
        },
        "points": {
          "type": "number",
          "description": "Points rewarded for this activity",
          "format": "double"
        },
        "lastRewarded": {
          "type": [
            "string",
            "null"
          ],
          "description": "The last time this earn activity was rewarded",
          "format": "date-time"
        },
        "url": {
          "type": [
            "string",
            "null"
          ],
          "description": "Optional url to send the customer \r\nto this activity"
        },
        "threshold": {
          "type": "number",
          "description": "The number of units required to gain points",
          "format": "double"
        },
        "type": {
          "$ref": "#/$defs/ActivityType"
        }
      },
      "additionalProperties": false,
      "description": "Order get model"
    },
    "RewardModel": {
      "type": "object",
      "properties": {
        "id": {
          "type": [
            "string",
            "null"
          ],
          "description": "Id of this reward"
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the reward"
        },
        "points": {
          "type": "integer",
          "description": "Number of points required to claim this reward",
          "format": "int32"
        },
        "description": {
          "type": [
            "string",
            "null"
          ],
          "description": "Description of the reward"
        },
        "expires": {
          "type": [
            "string",
            "null"
          ],
          "description": "Expiry",
          "format": "date-time"
        },
        "redeemCode": {
          "type": [
            "string",
            "null"
          ],
          "description": "Code used to redeem this reward on the external system"
        },
        "fixedValue": {
          "type": [
            "number",
            "null"
          ],
          "description": "Dollar or Percent-Off value of the discount to be applied",
          "format": "double"
        },
        "minimumSpend": {
          "type": [
            "number",
            "null"
          ],
          "description": "The minimum dollar value required to allow this reward to be redeemed",
          "format": "double"
        },
        "discountType": {
          "type": [
            "string",
            "null"
          ],
          "description": "Discount type of the reward, dollar-off or percent-off"
        },
        "eligibleProducts": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "description": "The products that this discount can be applied to"
        },
        "eligibleCategories": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "description": "The categories this discount can be applied to"
        },
        "tierName": {
          "type": [
            "string",
            "null"
          ],
          "description": "The name of the associated tier"
        },
        "terms": {
          "type": [
            "string",
            "null"
          ],
          "description": "The terms of the reward"
        },
        "customRewardRedeemedFulfillmentMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "The fulfullment message if the reward is Custom"
        },
        "type": {
          "$ref": "#/$defs/ApiRewardType"
        }
      },
      "additionalProperties": false,
      "description": "Represents a reward available at a store"
    },
    "TierModel": {
      "type": "object",
      "properties": {
        "id": {
          "type": [
            "string",
            "null"
          ],
          "description": "Tier id"
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Tier name"
        },
        "thresholdValue": {
          "type": "integer",
          "description": "Tier entry threshold value",
          "format": "int32"
        },
        "pointsPerDollar": {
          "type": "integer",
          "description": "Points awarded per dollar/currency spent",
          "format": "int32"
        },
        "spendPerPoint": {
          "type": "number",
          "description": "Dollars/currency spent per point earned",
          "format": "double"
        },
        "description": {
          "type": [
            "string",
            "null"
          ],
          "description": "Description of the tier, editable from within the dashboard app"
        },
        "benefitsList": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "description": "List of benefits for the tier, editable from within the dashboard app"
        }
      },
      "additionalProperties": false,
      "description": "Represents a tier available in the VIP program"
    }
  }
}