{
  "ownerName": "Google",
  "version": "v1",
  "protocol": "rest",
  "name": "walletobjects",
  "kind": "discovery#restDescription",
  "discoveryVersion": "v1",
  "schemas": {
    "CardTemplateOverride": {
      "properties": {
        "cardRowTemplateInfos": {
          "description": "Template information for rows in the card view. At most three rows are allowed to be specified.",
          "type": "array",
          "items": {
            "$ref": "CardRowTemplateInfo"
          }
        }
      },
      "id": "CardTemplateOverride",
      "type": "object"
    },
    "GenericClassListResponse": {
      "id": "GenericClassListResponse",
      "type": "object",
      "description": "List response which contains the list of all generic classes for a given issuer ID.",
      "properties": {
        "resources": {
          "type": "array",
          "description": "Resources corresponding to the list request.",
          "items": {
            "$ref": "GenericClass"
          }
        },
        "pagination": {
          "$ref": "Pagination",
          "description": "Pagination of the response."
        }
      }
    },
    "SetPassUpdateNoticeRequest": {
      "description": "Request to send a private pass update notice information to Google, so that devices can then fetch the notice prompting the user to update a pass.",
      "properties": {
        "externalPassId": {
          "type": "string",
          "description": "Required. A fully qualified identifier of the pass that the issuer wants to notify the pass holder(s) about. Formatted as ."
        },
        "updatedPassJwtSignature": {
          "type": "string",
          "description": "Required. The JWT signature of the updated pass that the issuer wants to notify Google about. Only devices that report a different JWT signature than this JWT signature will receive the update notification."
        },
        "updateUri": {
          "description": "Required. The issuer endpoint URI the pass holder needs to follow in order to receive an updated pass JWT. It can not contain any sensitive information. The endpoint needs to authenticate the user before giving the user the updated JWT. Example update URI https://someissuer.com/update/passId=someExternalPassId",
          "type": "string"
        }
      },
      "id": "SetPassUpdateNoticeRequest",
      "type": "object"
    },
    "OfferClassAddMessageResponse": {
      "id": "OfferClassAddMessageResponse",
      "type": "object",
      "properties": {
        "resource": {
          "$ref": "OfferClass",
          "description": "The updated OfferClass resource."
        }
      }
    },
    "FlightClassListResponse": {
      "id": "FlightClassListResponse",
      "type": "object",
      "properties": {
        "resources": {
          "type": "array",
          "description": "Resources corresponding to the list request.",
          "items": {
            "$ref": "FlightClass"
          }
        },
        "pagination": {
          "description": "Pagination of the response.",
          "$ref": "Pagination"
        }
      }
    },
    "LoyaltyClass": {
      "properties": {
        "localizedRewardsTier": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the rewards_tier. Recommended maximum length is 7 characters to ensure full string is displayed on smaller screens."
        },
        "multipleDevicesAndHoldersAllowedStatus": {
          "enumDescriptions": [
            "Unspecified preference.",
            "The Pass object is shareable by a user and can be saved by any number of different users, and on any number of devices. Partners typically use this setup for passes that do not need to be restricted to a single user or pinned to a single device.",
            "An object can only be saved by one user, but this user can view and use it on multiple of their devices. Once the first user saves the object, no other user will be allowed to view or save it.",
            "An object can only be saved by one user on a single device. Intended for use by select partners in limited circumstances. An example use case is a transit ticket that should be \"device pinned\", meaning it can be saved, viewed and used only by a single user on a single device. Contact support for additional information.",
            "Legacy alias for `MULTIPLE_HOLDERS`. Deprecated.",
            "Legacy alias for `ONE_USER_ALL_DEVICES`. Deprecated.",
            "Legacy alias for `ONE_USER_ONE_DEVICE`. Deprecated."
          ],
          "description": "Identifies whether multiple users and devices will save the same object referencing this class.",
          "enumDeprecated": [
            false,
            false,
            false,
            false,
            true,
            true,
            true
          ],
          "enum": [
            "STATUS_UNSPECIFIED",
            "MULTIPLE_HOLDERS",
            "ONE_USER_ALL_DEVICES",
            "ONE_USER_ONE_DEVICE",
            "multipleHolders",
            "oneUserAllDevices",
            "oneUserOneDevice"
          ],
          "type": "string"
        },
        "localizedAccountNameLabel": {
          "description": "Translated strings for the account_name_label. Recommended maximum length is 15 characters to ensure full string is displayed on smaller screens.",
          "$ref": "LocalizedString"
        },
        "review": {
          "description": "The review comments set by the platform when a class is marked `approved` or `rejected`.",
          "$ref": "Review"
        },
        "linksModuleData": {
          "$ref": "LinksModuleData",
          "description": "Links module data. If links module data is also defined on the object, both will be displayed."
        },
        "heroImage": {
          "description": "Optional banner image displayed on the front of the card. If none is present, nothing will be displayed. The image will display at 100% width.",
          "$ref": "Image"
        },
        "rewardsTierLabel": {
          "description": "The rewards tier label, such as \"Rewards Tier.\" Recommended maximum length is 9 characters to ensure full string is displayed on smaller screens.",
          "type": "string"
        },
        "enableSmartTap": {
          "type": "boolean",
          "description": "Identifies whether this class supports Smart Tap. The `redemptionIssuers` and one of object level `smartTapRedemptionLevel`, barcode.value`, or `accountId` fields must also be set up correctly in order for a pass to support Smart Tap."
        },
        "securityAnimation": {
          "$ref": "SecurityAnimation",
          "description": "Optional information about the security animation. If this is set a security animation will be rendered on pass details."
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#loyaltyClass\"`.",
          "deprecated": true,
          "type": "string"
        },
        "valueAddedModuleData": {
          "items": {
            "$ref": "ValueAddedModuleData"
          },
          "type": "array",
          "description": "Optional value added module data. Maximum of fifteen on the class. For a pass only fifteen will be displayed, prioritizing those from the object."
        },
        "locations": {
          "items": {
            "$ref": "LatLongPoint"
          },
          "description": "Note: This field is currently not supported to trigger geo notifications.",
          "deprecated": true,
          "type": "array"
        },
        "homepageUri": {
          "description": "The URI of your application's home page. Populating the URI in this field results in the exact same behavior as populating an URI in linksModuleData (when an object is rendered, a link to the homepage is shown in what would usually be thought of as the linksModuleData section of the object).",
          "$ref": "Uri"
        },
        "discoverableProgram": {
          "description": "Information about how the class may be discovered and instantiated from within the Google Pay app.",
          "$ref": "DiscoverableProgram"
        },
        "localizedProgramName": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the program_name. The app may display an ellipsis after the first 20 characters to ensure full string is displayed on smaller screens."
        },
        "secondaryRewardsTier": {
          "description": "The secondary rewards tier, such as \"Gold\" or \"Platinum.\"",
          "type": "string"
        },
        "wideProgramLogo": {
          "description": "The wide logo of the loyalty program or company. When provided, this will be used in place of the program logo in the top left of the card view.",
          "$ref": "Image"
        },
        "hexBackgroundColor": {
          "type": "string",
          "description": "The background color for the card. If not set the dominant color of the hero image is used, and if no hero image is set, the dominant color of the logo is used. The format is #rrggbb where rrggbb is a hex RGB triplet, such as `#ffcc00`. You can also use the shorthand version of the RGB triplet which is #rgb, such as `#fc0`."
        },
        "localizedSecondaryRewardsTier": {
          "description": "Translated strings for the secondary_rewards_tier.",
          "$ref": "LocalizedString"
        },
        "textModulesData": {
          "type": "array",
          "description": "Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class.",
          "items": {
            "$ref": "TextModuleData"
          }
        },
        "accountIdLabel": {
          "description": "The account ID label, such as \"Member ID.\" Recommended maximum length is 15 characters to ensure full string is displayed on smaller screens.",
          "type": "string"
        },
        "programName": {
          "description": "Required. The program name, such as \"Adam's Apparel\". The app may display an ellipsis after the first 20 characters to ensure full string is displayed on smaller screens.",
          "type": "string"
        },
        "notifyPreference": {
          "description": "Whether or not field updates to this class should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If not specified, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.",
          "enumDescriptions": [
            "Default behavior is no notifications sent.",
            "This value will result in a notification being sent, if the updated fields are part of an allowlist."
          ],
          "enum": [
            "NOTIFICATION_SETTINGS_FOR_UPDATES_UNSPECIFIED",
            "NOTIFY_ON_UPDATE"
          ],
          "type": "string"
        },
        "rewardsTier": {
          "type": "string",
          "description": "The rewards tier, such as \"Gold\" or \"Platinum.\" Recommended maximum length is 7 characters to ensure full string is displayed on smaller screens."
        },
        "version": {
          "deprecated": true,
          "type": "string",
          "description": "Deprecated",
          "format": "int64"
        },
        "appLinkData": {
          "$ref": "AppLinkData",
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding object that will be used instead."
        },
        "localizedSecondaryRewardsTierLabel": {
          "description": "Translated strings for the secondary_rewards_tier_label.",
          "$ref": "LocalizedString"
        },
        "redemptionIssuers": {
          "items": {
            "type": "string",
            "format": "int64"
          },
          "description": "Identifies which redemption issuers can redeem the pass over Smart Tap. Redemption issuers are identified by their issuer ID. Redemption issuers must have at least one Smart Tap key configured. The `enableSmartTap` and one of object level `smartTapRedemptionValue`, barcode.value`, or `accountId` fields must also be set up correctly in order for a pass to support Smart Tap.",
          "type": "array"
        },
        "id": {
          "type": "string",
          "description": "Required. The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
        },
        "messages": {
          "items": {
            "$ref": "Message"
          },
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.",
          "type": "array"
        },
        "infoModuleData": {
          "deprecated": true,
          "description": "Deprecated. Use textModulesData instead.",
          "$ref": "InfoModuleData"
        },
        "wordMark": {
          "$ref": "Image",
          "description": "Deprecated.",
          "deprecated": true
        },
        "programLogo": {
          "$ref": "Image",
          "description": "Required. The logo of the loyalty program or company. This logo is displayed in both the details and list views of the app."
        },
        "localizedAccountIdLabel": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the account_id_label. Recommended maximum length is 15 characters to ensure full string is displayed on smaller screens."
        },
        "accountNameLabel": {
          "description": "The account name label, such as \"Member Name.\" Recommended maximum length is 15 characters to ensure full string is displayed on smaller screens.",
          "type": "string"
        },
        "secondaryRewardsTierLabel": {
          "type": "string",
          "description": "The secondary rewards tier label, such as \"Rewards Tier.\""
        },
        "issuerName": {
          "type": "string",
          "description": "Required. The issuer name. Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens."
        },
        "allowMultipleUsersPerObject": {
          "description": "Deprecated. Use `multipleDevicesAndHoldersAllowedStatus` instead.",
          "deprecated": true,
          "type": "boolean"
        },
        "imageModulesData": {
          "type": "array",
          "description": "Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level.",
          "items": {
            "$ref": "ImageModuleData"
          }
        },
        "viewUnlockRequirement": {
          "description": "View Unlock Requirement options for the loyalty card.",
          "enumDescriptions": [
            "Default value, same as UNLOCK_NOT_REQUIRED.",
            "Default behavior for all the existing Passes if ViewUnlockRequirement is not set.",
            "Requires the user to unlock their device each time the pass is viewed. If the user removes their device lock after saving the pass, then they will be prompted to create a device lock before the pass can be viewed."
          ],
          "enum": [
            "VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED",
            "UNLOCK_NOT_REQUIRED",
            "UNLOCK_REQUIRED_TO_VIEW"
          ],
          "type": "string"
        },
        "reviewStatus": {
          "description": "Required. The status of the class. This field can be set to `draft` or `underReview` using the insert, patch, or update API calls. Once the review state is changed from `draft` it may not be changed back to `draft`. You should keep this field to `draft` when the class is under development. A `draft` class cannot be used to create any object. You should set this field to `underReview` when you believe the class is ready for use. The platform will automatically set this field to `approved` and it can be immediately used to create or migrate objects. When updating an already `approved` class you should keep setting this field to `underReview`.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "REVIEW_STATUS_UNSPECIFIED",
            "UNDER_REVIEW",
            "underReview",
            "APPROVED",
            "approved",
            "REJECTED",
            "rejected",
            "DRAFT",
            "draft"
          ],
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `UNDER_REVIEW`. Deprecated.",
            "",
            "Legacy alias for `APPROVED`. Deprecated.",
            "",
            "Legacy alias for `REJECTED`. Deprecated.",
            "",
            "Legacy alias for `DRAFT`. Deprecated."
          ]
        },
        "countryCode": {
          "type": "string",
          "description": "Country code used to display the card's country (when the user is not in that country), as well as to display localized content when content is not available in the user's locale."
        },
        "callbackOptions": {
          "$ref": "CallbackOptions",
          "description": "Callback options to be used to call the issuer back for every save/delete of an object for this class by the end-user. All objects of this class are eligible for the callback."
        },
        "localizedRewardsTierLabel": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the rewards_tier_label. Recommended maximum length is 9 characters to ensure full string is displayed on smaller screens."
        },
        "merchantLocations": {
          "items": {
            "$ref": "MerchantLocation"
          },
          "type": "array",
          "description": "Merchant locations. There is a maximum of ten on the class. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints."
        },
        "localizedIssuerName": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the issuer_name. Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens."
        },
        "classTemplateInfo": {
          "description": "Template information about how the class should be displayed. If unset, Google will fallback to a default set of fields to display.",
          "$ref": "ClassTemplateInfo"
        }
      },
      "id": "LoyaltyClass",
      "type": "object"
    },
    "AppLinkDataAppLinkInfoAppTarget": {
      "properties": {
        "targetUri": {
          "description": "URI for AppTarget. The description on the URI must be set. Prefer setting package field instead, if this target is defined for your application.",
          "$ref": "Uri"
        },
        "packageName": {
          "type": "string",
          "description": "Package name for AppTarget. For example: com.google.android.gm"
        }
      },
      "id": "AppLinkDataAppLinkInfoAppTarget",
      "type": "object"
    },
    "ModifyLinkedOfferObjectsRequest": {
      "properties": {
        "linkedOfferObjectIds": {
          "$ref": "ModifyLinkedOfferObjects",
          "description": "The linked offer object ids to add or remove from the object."
        }
      },
      "id": "ModifyLinkedOfferObjectsRequest",
      "type": "object"
    },
    "EventTicketObjectAddMessageResponse": {
      "properties": {
        "resource": {
          "$ref": "EventTicketObject",
          "description": "The updated EventTicketObject resource."
        }
      },
      "id": "EventTicketObjectAddMessageResponse",
      "type": "object"
    },
    "TicketLeg": {
      "id": "TicketLeg",
      "type": "object",
      "properties": {
        "transitTerminusName": {
          "$ref": "LocalizedString",
          "description": "Terminus station or destination of the train/bus/etc."
        },
        "arrivalDateTime": {
          "description": "The date/time of arrival. This is an ISO 8601 extended format date/time, with or without an offset. Time may be specified up to nanosecond precision. Offsets may be specified with seconds precision (even though offset seconds is not part of ISO 8601). For example: `1985-04-12T23:20:50.52Z` would be 20 minutes and 50.52 seconds after the 23rd hour of April 12th, 1985 in UTC. `1985-04-12T19:20:50.52-04:00` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985, 4 hours before UTC (same instant in time as the above example). If the event were in New York, this would be the equivalent of Eastern Daylight Time (EDT). Remember that offset varies in regions that observe Daylight Saving Time (or Summer Time), depending on the time of the year. `1985-04-12T19:20:50.52` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985 with no offset information. The portion of the date/time without the offset is considered the \"local date/time\". This should be the local date/time at the destination station. For example, if the event occurs at the 20th hour of June 5th, 2018 at the destination station, the local date/time portion should be `2018-06-05T20:00:00`. If the local date/time at the destination station is 4 hours before UTC, an offset of `-04:00` may be appended. Without offset information, some rich features may not be available.",
          "type": "string"
        },
        "platform": {
          "description": "The platform or gate where the passenger can board the carriage.",
          "type": "string"
        },
        "ticketSeats": {
          "items": {
            "$ref": "TicketSeat"
          },
          "type": "array",
          "description": "The reserved seat for the passenger(s). If only one seat is to be specified then use the `ticketSeat` field instead. Both `ticketSeat` and `ticketSeats` may not be set."
        },
        "destinationStationCode": {
          "description": "The destination station code.",
          "type": "string"
        },
        "destinationName": {
          "$ref": "LocalizedString",
          "description": "The destination name."
        },
        "fareName": {
          "$ref": "LocalizedString",
          "description": "Short description/name of the fare for this leg of travel. Eg \"Anytime Single Use\"."
        },
        "originStationCode": {
          "type": "string",
          "description": "The origin station code. This is required if `destinationStationCode` is present or if `originName` is not present."
        },
        "ticketSeat": {
          "description": "The reserved seat for the passenger(s). If more than one seat is to be specified then use the `ticketSeats` field instead. Both `ticketSeat` and `ticketSeats` may not be set.",
          "$ref": "TicketSeat"
        },
        "originName": {
          "$ref": "LocalizedString",
          "description": "The name of the origin station. This is required if `desinationName` is present or if `originStationCode` is not present."
        },
        "transitOperatorName": {
          "$ref": "LocalizedString",
          "description": "The name of the transit operator that is operating this leg of a trip."
        },
        "departureDateTime": {
          "description": "The date/time of departure. This is required if there is no validity time interval set on the transit object. This is an ISO 8601 extended format date/time, with or without an offset. Time may be specified up to nanosecond precision. Offsets may be specified with seconds precision (even though offset seconds is not part of ISO 8601). For example: `1985-04-12T23:20:50.52Z` would be 20 minutes and 50.52 seconds after the 23rd hour of April 12th, 1985 in UTC. `1985-04-12T19:20:50.52-04:00` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985, 4 hours before UTC (same instant in time as the above example). If the event were in New York, this would be the equivalent of Eastern Daylight Time (EDT). Remember that offset varies in regions that observe Daylight Saving Time (or Summer Time), depending on the time of the year. `1985-04-12T19:20:50.52` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985 with no offset information. The portion of the date/time without the offset is considered the \"local date/time\". This should be the local date/time at the origin station. For example, if the departure occurs at the 20th hour of June 5th, 2018 at the origin station, the local date/time portion should be `2018-06-05T20:00:00`. If the local date/time at the origin station is 4 hours before UTC, an offset of `-04:00` may be appended. Without offset information, some rich features may not be available.",
          "type": "string"
        },
        "carriage": {
          "description": "The train or ship name/number that the passsenger needs to board.",
          "type": "string"
        },
        "zone": {
          "type": "string",
          "description": "The zone of boarding within the platform."
        }
      }
    },
    "ActivationStatus": {
      "id": "ActivationStatus",
      "type": "object",
      "description": "The activation status of the object. This field includes activation status if valuable supports activation.",
      "properties": {
        "state": {
          "type": "string",
          "enumDescriptions": [
            "",
            "Not-Activated, this is the default status",
            "Legacy alias for `NOT_ACTIVATED`. Deprecated.",
            "Activated",
            "Legacy alias for `ACTIVATED`. Deprecated."
          ],
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "UNKNOWN_STATE",
            "NOT_ACTIVATED",
            "not_activated",
            "ACTIVATED",
            "activated"
          ]
        }
      }
    },
    "GenericClass": {
      "id": "GenericClass",
      "type": "object",
      "description": "Generic Class",
      "properties": {
        "enableSmartTap": {
          "description": "Available only to Smart Tap enabled partners. Contact support for additional guidance.",
          "type": "boolean"
        },
        "securityAnimation": {
          "$ref": "SecurityAnimation",
          "description": "Optional information about the security animation. If this is set a security animation will be rendered on pass details."
        },
        "valueAddedModuleData": {
          "description": "Optional value added module data. Maximum of fifteen on the class. For a pass only fifteen will be displayed, prioritizing those from the object.",
          "type": "array",
          "items": {
            "$ref": "ValueAddedModuleData"
          }
        },
        "redemptionIssuers": {
          "items": {
            "format": "int64",
            "type": "string"
          },
          "description": "Identifies which redemption issuers can redeem the pass over Smart Tap. Redemption issuers are identified by their issuer ID. Redemption issuers must have at least one Smart Tap key configured. The `enableSmartTap` and object level `smartTapRedemptionLevel` fields must also be set up correctly in order for a pass to support Smart Tap.",
          "type": "array"
        },
        "id": {
          "type": "string",
          "description": "Required. The unique identifier for the class. This ID must be unique across all from an issuer. This value needs to follow the format `issuerID.identifier` where `issuerID` is issued by Google and `identifier` is chosen by you. The unique identifier can only include alphanumeric characters, `.`, `_`, or `-`."
        },
        "messages": {
          "items": {
            "$ref": "Message"
          },
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.",
          "type": "array"
        },
        "multipleDevicesAndHoldersAllowedStatus": {
          "enumDescriptions": [
            "Unspecified preference.",
            "The Pass object is shareable by a user and can be saved by any number of different users, and on any number of devices. Partners typically use this setup for passes that do not need to be restricted to a single user or pinned to a single device.",
            "An object can only be saved by one user, but this user can view and use it on multiple of their devices. Once the first user saves the object, no other user will be allowed to view or save it.",
            "An object can only be saved by one user on a single device. Intended for use by select partners in limited circumstances. An example use case is a transit ticket that should be \"device pinned\", meaning it can be saved, viewed and used only by a single user on a single device. Contact support for additional information.",
            "Legacy alias for `MULTIPLE_HOLDERS`. Deprecated.",
            "Legacy alias for `ONE_USER_ALL_DEVICES`. Deprecated.",
            "Legacy alias for `ONE_USER_ONE_DEVICE`. Deprecated."
          ],
          "description": "Identifies whether multiple users and devices will save the same object referencing this class.",
          "enumDeprecated": [
            false,
            false,
            false,
            false,
            true,
            true,
            true
          ],
          "enum": [
            "STATUS_UNSPECIFIED",
            "MULTIPLE_HOLDERS",
            "ONE_USER_ALL_DEVICES",
            "ONE_USER_ONE_DEVICE",
            "multipleHolders",
            "oneUserAllDevices",
            "oneUserOneDevice"
          ],
          "type": "string"
        },
        "appLinkData": {
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding object that will be used instead.",
          "$ref": "AppLinkData"
        },
        "linksModuleData": {
          "$ref": "LinksModuleData",
          "description": "Links module data. If `linksModuleData` is also defined on the object, both will be displayed. The maximum number of these fields displayed is 10 from class and 10 from object."
        },
        "merchantLocations": {
          "description": "Merchant locations. There is a maximum of ten on the class. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints.",
          "type": "array",
          "items": {
            "$ref": "MerchantLocation"
          }
        },
        "classTemplateInfo": {
          "$ref": "ClassTemplateInfo",
          "description": "Template information about how the class should be displayed. If unset, Google will fallback to a default set of fields to display."
        },
        "callbackOptions": {
          "description": "Callback options to be used to call the issuer back for every save/delete of an object for this class by the end-user. All objects of this class are eligible for the callback.",
          "$ref": "CallbackOptions"
        },
        "textModulesData": {
          "items": {
            "$ref": "TextModuleData"
          },
          "type": "array",
          "description": "Text module data. If `textModulesData` is also defined on the object, both will be displayed. The maximum number of these fields displayed is 10 from class and 10 from object."
        },
        "imageModulesData": {
          "type": "array",
          "description": "Image module data. If `imageModulesData` is also defined on the object, both will be displayed. Only one of the image from class and one from object level will be rendered when both set.",
          "items": {
            "$ref": "ImageModuleData"
          }
        },
        "viewUnlockRequirement": {
          "description": "View Unlock Requirement options for the generic pass.",
          "enumDescriptions": [
            "Default value, same as UNLOCK_NOT_REQUIRED.",
            "Default behavior for all the existing Passes if ViewUnlockRequirement is not set.",
            "Requires the user to unlock their device each time the pass is viewed. If the user removes their device lock after saving the pass, then they will be prompted to create a device lock before the pass can be viewed."
          ],
          "enum": [
            "VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED",
            "UNLOCK_NOT_REQUIRED",
            "UNLOCK_REQUIRED_TO_VIEW"
          ],
          "type": "string"
        }
      }
    },
    "JsonResource": {
      "id": "JsonResource",
      "type": "object",
      "description": "A JSON representation of a pass.",
      "properties": {
        "json": {
          "type": "string",
          "description": "Required. A JSON string representing the unencoded JWT payload for a pass of the format described at https://developers.google.com/wallet/reference/rest/v1/Jwt. This can be set to either the entire JSON representation described at this link or just the contents of the payload field holding the relevant classes and objects."
        }
      }
    },
    "FlightObjectListResponse": {
      "properties": {
        "resources": {
          "type": "array",
          "description": "Resources corresponding to the list request.",
          "items": {
            "$ref": "FlightObject"
          }
        },
        "pagination": {
          "$ref": "Pagination",
          "description": "Pagination of the response."
        }
      },
      "id": "FlightObjectListResponse",
      "type": "object"
    },
    "RotatingBarcode": {
      "id": "RotatingBarcode",
      "type": "object",
      "properties": {
        "totpDetails": {
          "$ref": "RotatingBarcodeTotpDetails",
          "description": "Details used to evaluate the {totp_value_n} substitutions."
        },
        "showCodeText": {
          "description": "Optional text that will be shown when the barcode is hidden behind a click action. This happens in cases where a pass has Smart Tap enabled. If not specified, a default is chosen by Google.",
          "$ref": "LocalizedString"
        },
        "initialRotatingBarcodeValues": {
          "$ref": "RotatingBarcodeValues",
          "description": "Input only. NOTE: This feature is only available for the transit vertical. Optional set of initial rotating barcode values. This allows a small subset of barcodes to be included with the object. Further rotating barcode values must be uploaded with the UploadRotatingBarcodeValues endpoint."
        },
        "alternateText": {
          "type": "string",
          "description": "An optional text that will override the default text that shows under the barcode. This field is intended for a human readable equivalent of the barcode value, used when the barcode cannot be scanned."
        },
        "type": {
          "type": "string",
          "description": "The type of this barcode.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            true,
            false,
            true,
            false,
            true,
            true,
            false,
            true,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "BARCODE_TYPE_UNSPECIFIED",
            "AZTEC",
            "aztec",
            "CODE_39",
            "code39",
            "CODE_128",
            "code128",
            "CODABAR",
            "codabar",
            "DATA_MATRIX",
            "dataMatrix",
            "EAN_8",
            "ean8",
            "EAN_13",
            "ean13",
            "EAN13",
            "ITF_14",
            "itf14",
            "PDF_417",
            "pdf417",
            "PDF417",
            "QR_CODE",
            "qrCode",
            "qrcode",
            "UPC_A",
            "upcA",
            "TEXT_ONLY",
            "textOnly"
          ],
          "enumDescriptions": [
            "",
            "Not supported for Rotating Barcodes.",
            "Legacy alias for `AZTEC`. Deprecated. Not supported for Rotating Barcodes.",
            "Not supported for Rotating Barcodes.",
            "Legacy alias for `CODE_39`. Deprecated. Not supported for Rotating Barcodes.",
            "Not supported for Rotating Barcodes.",
            "Legacy alias for `CODE_128`. Deprecated. Not supported for Rotating Barcodes.",
            "Not supported for Rotating Barcodes.",
            "Legacy alias for `CODABAR`. Deprecated. Not supported for Rotating Barcodes.",
            "A 2D matrix barcode consisting of black and white. Cells or modules are arranged in either a square or rectangle. Not supported for Rotating Barcodes.",
            "Legacy alias for `DATA_MATRIX`. Deprecated. Not supported for Rotating Barcodes.",
            "Not supported for Rotating Barcodes.",
            "Legacy alias for `EAN_8`. Deprecated. Not supported for Rotating Barcodes.",
            "Not supported for Rotating Barcodes.",
            "Legacy alias for `EAN_13`. Deprecated. Not supported for Rotating Barcodes.",
            "Legacy alias for `EAN_13`. Deprecated. Not supported for Rotating Barcodes.",
            "14 digit ITF code Not supported for Rotating Barcodes.",
            "Legacy alias for `ITF_14`. Deprecated. Not supported for Rotating Barcodes.",
            "Supported for Rotating Barcodes.",
            "Legacy alias for `PDF_417`. Deprecated.",
            "Legacy alias for `PDF_417`. Deprecated.",
            "Supported for Rotating Barcodes.",
            "Legacy alias for `QR_CODE`. Deprecated.",
            "Legacy alias for `QR_CODE`. Deprecated.",
            "11 or 12 digit codes Not supported for Rotating Barcodes.",
            "Legacy alias for `UPC_A`. Deprecated. Not supported for Rotating Barcodes.",
            "Renders the field as a text field. The `alternateText` field may not be used with a barcode of type `textOnly`. Not supported for Rotating Barcodes.",
            "Legacy alias for `TEXT_ONLY`. Deprecated. Not supported for Rotating Barcodes."
          ]
        },
        "valuePattern": {
          "description": "String encoded barcode value. This string supports the following substitutions: * {totp_value_n}: Replaced with the TOTP value (see TotpDetails.parameters). * {totp_timestamp_millis}: Replaced with the timestamp (millis since epoch) at which the barcode was generated. * {totp_timestamp_seconds}: Replaced with the timestamp (seconds since epoch) at which the barcode was generated.",
          "type": "string"
        },
        "renderEncoding": {
          "type": "string",
          "description": "The render encoding for the barcode. When specified, barcode is rendered in the given encoding. Otherwise best known encoding is chosen by Google.",
          "enumDescriptions": [
            "",
            "UTF_8 encoding for barcodes. This is only supported for barcode type qrCode."
          ],
          "enum": [
            "RENDER_ENCODING_UNSPECIFIED",
            "UTF_8"
          ]
        }
      }
    },
    "JwtInsertResponse": {
      "properties": {
        "saveUri": {
          "description": "A URI that, when opened, will allow the end user to save the object(s) identified in the JWT to their Google account.",
          "type": "string"
        },
        "resources": {
          "description": "Data that corresponds to the ids of the provided classes and objects in the JWT. resources will only include the non-empty arrays (i.e. if the JWT only includes eventTicketObjects, then that is the only field that will be present in resources).",
          "$ref": "Resources"
        }
      },
      "id": "JwtInsertResponse",
      "type": "object"
    },
    "BoardingAndSeatingPolicy": {
      "properties": {
        "seatClassPolicy": {
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `CABIN_BASED`. Deprecated.",
            "",
            "Legacy alias for `CLASS_BASED`. Deprecated.",
            "",
            "Legacy alias for `TIER_BASED`. Deprecated.",
            "",
            "Legacy alias for `SEAT_CLASS_POLICY_OTHER`. Deprecated."
          ],
          "type": "string",
          "description": "Seating policy which dictates how we display the seat class. If unset, Google will default to `cabinBased`.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "SEAT_CLASS_POLICY_UNSPECIFIED",
            "CABIN_BASED",
            "cabinBased",
            "CLASS_BASED",
            "classBased",
            "TIER_BASED",
            "tierBased",
            "SEAT_CLASS_POLICY_OTHER",
            "seatClassPolicyOther"
          ]
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#boardingAndSeatingPolicy\"`."
        },
        "boardingPolicy": {
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `ZONE_BASED`. Deprecated.",
            "",
            "Legacy alias for `GROUP_BASED`. Deprecated.",
            "",
            "Legacy alias for `BOARDING_POLICY_OTHER`. Deprecated."
          ],
          "description": "Indicates the policy the airline uses for boarding. If unset, Google will default to `zoneBased`.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "BOARDING_POLICY_UNSPECIFIED",
            "ZONE_BASED",
            "zoneBased",
            "GROUP_BASED",
            "groupBased",
            "BOARDING_POLICY_OTHER",
            "boardingPolicyOther"
          ],
          "type": "string"
        }
      },
      "id": "BoardingAndSeatingPolicy",
      "type": "object"
    },
    "GiftCardClassAddMessageResponse": {
      "id": "GiftCardClassAddMessageResponse",
      "type": "object",
      "properties": {
        "resource": {
          "description": "The updated GiftCardClass resource.",
          "$ref": "GiftCardClass"
        }
      }
    },
    "TransitClassListResponse": {
      "properties": {
        "resources": {
          "description": "Resources corresponding to the list request.",
          "type": "array",
          "items": {
            "$ref": "TransitClass"
          }
        },
        "pagination": {
          "$ref": "Pagination",
          "description": "Pagination of the response."
        }
      },
      "id": "TransitClassListResponse",
      "type": "object"
    },
    "CardRowTwoItems": {
      "id": "CardRowTwoItems",
      "type": "object",
      "properties": {
        "startItem": {
          "$ref": "TemplateItem",
          "description": "The item to be displayed at the start of the row. This item will be aligned to the left."
        },
        "endItem": {
          "description": "The item to be displayed at the end of the row. This item will be aligned to the right.",
          "$ref": "TemplateItem"
        }
      }
    },
    "TranslatedString": {
      "id": "TranslatedString",
      "type": "object",
      "properties": {
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#translatedString\"`.",
          "deprecated": true,
          "type": "string"
        },
        "language": {
          "description": "Represents the BCP 47 language tag. Example values are \"en-US\", \"en-GB\", \"de\", or \"de-AT\".",
          "type": "string"
        },
        "value": {
          "description": "The UTF-8 encoded translated string.",
          "type": "string"
        }
      }
    },
    "IssuerContactInfo": {
      "id": "IssuerContactInfo",
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "description": "The primary contact email address."
        },
        "phone": {
          "type": "string",
          "description": "The primary contact phone number."
        },
        "name": {
          "type": "string",
          "description": "The primary contact name."
        },
        "alertsEmails": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Email addresses which will receive alerts."
        }
      }
    },
    "EventSeat": {
      "id": "EventSeat",
      "type": "object",
      "properties": {
        "row": {
          "$ref": "LocalizedString",
          "description": "The row of the seat, such as \"1\", E\", \"BB\", or \"A5\". This field is localizable so you may translate words or use different alphabets for the characters in an identifier."
        },
        "section": {
          "description": "The section of the seat, such as \"121\". This field is localizable so you may translate words or use different alphabets for the characters in an identifier.",
          "$ref": "LocalizedString"
        },
        "gate": {
          "$ref": "LocalizedString",
          "description": "The gate the ticket holder should enter to get to their seat, such as \"A\" or \"West\". This field is localizable so you may translate words or use different alphabets for the characters in an identifier."
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#eventSeat\"`."
        },
        "seat": {
          "$ref": "LocalizedString",
          "description": "The seat number, such as \"1\", \"2\", \"3\", or any other seat identifier. This field is localizable so you may translate words or use different alphabets for the characters in an identifier."
        }
      }
    },
    "GiftCardObject": {
      "id": "GiftCardObject",
      "type": "object",
      "properties": {
        "appLinkData": {
          "$ref": "AppLinkData",
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding class only object AppLinkData will be displayed."
        },
        "eventNumber": {
          "type": "string",
          "description": "The card's event number, an optional field used by some gift cards."
        },
        "id": {
          "description": "Required. The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
          "type": "string"
        },
        "messages": {
          "items": {
            "$ref": "Message"
          },
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.",
          "type": "array"
        },
        "infoModuleData": {
          "$ref": "InfoModuleData",
          "description": "Deprecated. Use textModulesData instead."
        },
        "linkedObjectIds": {
          "items": {
            "type": "string"
          },
          "description": "linked_object_ids are a list of other objects such as event ticket, loyalty, offer, generic, giftcard, transit and boarding pass that should be automatically attached to this giftcard object. If a user had saved this gift card, then these linked_object_ids would be automatically pushed to the user's wallet (unless they turned off the setting to receive such linked passes). Make sure that objects present in linked_object_ids are already inserted - if not, calls would fail. Once linked, the linked objects cannot be unlinked. You cannot link objects belonging to another issuer. There is a limit to the number of objects that can be linked to a single object. After the limit is reached, new linked objects in the call will be ignored silently. Object IDs should follow the format issuer ID. identifier where the former is issued by Google and the latter is chosen by you.",
          "type": "array"
        },
        "pin": {
          "description": "The card's PIN.",
          "type": "string"
        },
        "balanceUpdateTime": {
          "description": "The date and time when the balance was last updated. Offset is required. If balance is updated and this property is not provided, system will default to the current time.",
          "$ref": "DateTime"
        },
        "cardNumber": {
          "type": "string",
          "description": "Required. The card's number."
        },
        "passConstraints": {
          "$ref": "PassConstraints",
          "description": "Pass constraints for the object. Includes limiting NFC and screenshot behaviors."
        },
        "barcode": {
          "$ref": "Barcode",
          "description": "The barcode type and value."
        },
        "groupingInfo": {
          "$ref": "GroupingInfo",
          "description": "Information that controls how passes are grouped together."
        },
        "imageModulesData": {
          "items": {
            "$ref": "ImageModuleData"
          },
          "type": "array",
          "description": "Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level."
        },
        "smartTapRedemptionValue": {
          "type": "string",
          "description": "The value that will be transmitted to a Smart Tap certified terminal over NFC for this object. The class level fields `enableSmartTap` and `redemptionIssuers` must also be set up correctly in order for the pass to support Smart Tap. Only ASCII characters are supported."
        },
        "hasLinkedDevice": {
          "description": "Whether this object is currently linked to a single device. This field is set by the platform when a user saves the object, linking it to their device. Intended for use by select partners. Contact support for additional information.",
          "type": "boolean"
        },
        "merchantLocations": {
          "items": {
            "$ref": "MerchantLocation"
          },
          "description": "Merchant locations. There is a maximum of ten on the object. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints.",
          "type": "array"
        },
        "hasUsers": {
          "description": "Indicates if the object has users. This field is set by the platform.",
          "type": "boolean"
        },
        "state": {
          "enumDescriptions": [
            "Default value.",
            "Object is active and displayed to with other active objects.",
            "Legacy alias for `ACTIVE`. Deprecated.",
            "Object has completed it's lifecycle.",
            "Legacy alias for `COMPLETED`. Deprecated.",
            "Object is no longer valid (`validTimeInterval` passed).",
            "Legacy alias for `EXPIRED`. Deprecated.",
            "Object is no longer valid",
            "Legacy alias for `INACTIVE`. Deprecated."
          ],
          "description": "Required. The state of the object. This field is used to determine how an object is displayed in the app. For example, an `inactive` object is moved to the \"Expired passes\" section.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "ACTIVE",
            "active",
            "COMPLETED",
            "completed",
            "EXPIRED",
            "expired",
            "INACTIVE",
            "inactive"
          ],
          "type": "string"
        },
        "linksModuleData": {
          "$ref": "LinksModuleData",
          "description": "Links module data. If links module data is also defined on the class, both will be displayed."
        },
        "classReference": {
          "description": "A copy of the inherited fields of the parent class. These fields are retrieved during a GET.",
          "$ref": "GiftCardClass"
        },
        "saveRestrictions": {
          "$ref": "SaveRestrictions",
          "description": "Restrictions on the object that needs to be verified before the user tries to save the pass. Note that this restrictions will only be applied during save time. If the restrictions changed after a user saves the pass, the new restrictions will not be applied to an already saved pass."
        },
        "disableExpirationNotification": {
          "type": "boolean",
          "description": "Indicates if notifications should explicitly be suppressed. If this field is set to true, regardless of the `messages` field, expiration notifications to the user will be suppressed. By default, this field is set to false. Currently, this can only be set for offers."
        },
        "heroImage": {
          "description": "Optional banner image displayed on the front of the card. If none is present, hero image of the class, if present, will be displayed. If hero image of the class is also not present, nothing will be displayed.",
          "$ref": "Image"
        },
        "valueAddedModuleData": {
          "description": "Optional value added module data. Maximum of fifteen on the object. For a pass only fifteen will be displayed.",
          "type": "array",
          "items": {
            "$ref": "ValueAddedModuleData"
          }
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#giftCardObject\"`."
        },
        "locations": {
          "description": "Note: This field is currently not supported to trigger geo notifications.",
          "deprecated": true,
          "type": "array",
          "items": {
            "$ref": "LatLongPoint"
          }
        },
        "rotatingBarcode": {
          "description": "The rotating barcode type and value.",
          "$ref": "RotatingBarcode"
        },
        "balance": {
          "description": "The card's monetary balance.",
          "$ref": "Money"
        },
        "classId": {
          "type": "string",
          "description": "Required. The class associated with this object. The class must be of the same type as this object, must already exist, and must be approved. Class IDs should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you."
        },
        "textModulesData": {
          "description": "Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class.",
          "type": "array",
          "items": {
            "$ref": "TextModuleData"
          }
        },
        "version": {
          "deprecated": true,
          "type": "string",
          "description": "Deprecated",
          "format": "int64"
        },
        "validTimeInterval": {
          "description": "The time period this object will be `active` and object can be used. An object's state will be changed to `expired` when this time period has passed.",
          "$ref": "TimeInterval"
        },
        "notifyPreference": {
          "type": "string",
          "description": "Whether or not field updates to this object should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If set to DO_NOT_NOTIFY or NOTIFICATION_SETTINGS_UNSPECIFIED, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.",
          "enumDescriptions": [
            "Default behavior is no notifications sent.",
            "This value will result in a notification being sent, if the updated fields are part of an allowlist."
          ],
          "enum": [
            "NOTIFICATION_SETTINGS_FOR_UPDATES_UNSPECIFIED",
            "NOTIFY_ON_UPDATE"
          ]
        }
      }
    },
    "ContentTypeInfo": {
      "description": "Detailed Content-Type information from Scotty. The Content-Type of the media will typically be filled in by the header or Scotty's best_guess, but this extended information provides the backend with more information so that it can make a better decision if needed. This is only used on media upload requests from Scotty.",
      "properties": {
        "fromFusionId": {
          "type": "string",
          "description": "The content type of the file detected by Fusion ID. go/fusionid"
        },
        "fromBytes": {
          "description": "The content type of the file derived by looking at specific bytes (i.e. \"magic bytes\") of the actual file.",
          "type": "string"
        },
        "fromHeader": {
          "type": "string",
          "description": "The content type of the file as specified in the request headers, multipart headers, or RUPIO start request."
        },
        "fromUrlPath": {
          "description": "The content type of the file derived from the file extension of the URL path. The URL path is assumed to represent a file name (which is typically only true for agents that are providing a REST API).",
          "type": "string"
        },
        "fusionIdDetectionMetadata": {
          "format": "byte",
          "type": "string",
          "description": "Metadata information from Fusion ID detection. Serialized FusionIdDetectionMetadata proto. Only set if from_fusion_id is set."
        },
        "fromFileName": {
          "type": "string",
          "description": "The content type of the file derived from the file extension of the original file name used by the client."
        },
        "bestGuess": {
          "description": "Scotty's best guess of what the content type of the file is.",
          "type": "string"
        }
      },
      "id": "ContentTypeInfo",
      "type": "object"
    },
    "FlightClassAddMessageResponse": {
      "id": "FlightClassAddMessageResponse",
      "type": "object",
      "properties": {
        "resource": {
          "$ref": "FlightClass",
          "description": "The updated FlightClass resource."
        }
      }
    },
    "JwtValidateRequest": {
      "description": "Request to validate the JWT or JSON representation of a pass.",
      "properties": {
        "jwtResource": {
          "$ref": "JwtResource",
          "description": "Optional. A JWT representation of a pass to be validated. Either this or json_resource should be set. Requests setting both or neither will be rejected."
        },
        "jsonResource": {
          "description": "Optional. A JSON representation of a pass to be validated. Either this or jwt_resource should be set. Requests setting both or neither will be rejected.",
          "$ref": "JsonResource"
        }
      },
      "id": "JwtValidateRequest",
      "type": "object"
    },
    "ObjectId": {
      "description": "This is a copy of the tech.blob.ObjectId proto, which could not be used directly here due to transitive closure issues with JavaScript support; see http://b/8801763.",
      "properties": {
        "bucketName": {
          "type": "string",
          "description": "The name of the bucket to which this object belongs."
        },
        "generation": {
          "type": "string",
          "description": "Generation of the object. Generations are monotonically increasing across writes, allowing them to be be compared to determine which generation is newer. If this is omitted in a request, then you are requesting the live object. See http://go/bigstore-versions",
          "format": "int64"
        },
        "objectName": {
          "description": "The name of the object.",
          "type": "string"
        }
      },
      "id": "ObjectId",
      "type": "object"
    },
    "AppLinkDataAppLinkInfo": {
      "id": "AppLinkDataAppLinkInfo",
      "type": "object",
      "properties": {
        "title": {
          "description": "Deprecated. Title isn't supported in the app link module.",
          "deprecated": true,
          "$ref": "LocalizedString"
        },
        "appLogoImage": {
          "description": "Deprecated. Image isn't supported in the app link module.",
          "deprecated": true,
          "$ref": "Image"
        },
        "description": {
          "description": "Deprecated. Description isn't supported in the app link module.",
          "deprecated": true,
          "$ref": "LocalizedString"
        },
        "appTarget": {
          "$ref": "AppLinkDataAppLinkInfoAppTarget",
          "description": "Target to follow when opening the app link on clients. It will be used by partners to open their app or webpage."
        }
      }
    },
    "LabelValue": {
      "id": "LabelValue",
      "type": "object",
      "description": "A pair of text strings to be displayed in the details view. Note we no longer display LabelValue/LabelValueRow as a table, instead a list of items.",
      "properties": {
        "localizedValue": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the value. Recommended maximum is 15 characters for a two-column layout and 30 characters for a one-column layout."
        },
        "label": {
          "type": "string",
          "description": "The label for a specific row and column. Recommended maximum is 15 characters for a two-column layout and 30 characters for a one-column layout."
        },
        "value": {
          "description": "The value for a specific row and column. Recommended maximum is 15 characters for a two-column layout and 30 characters for a one-column layout.",
          "type": "string"
        },
        "localizedLabel": {
          "description": "Translated strings for the label. Recommended maximum is 15 characters for a two-column layout and 30 characters for a one-column layout.",
          "$ref": "LocalizedString"
        }
      }
    },
    "SignUpInfo": {
      "properties": {
        "classId": {
          "description": "ID of the class the user can sign up for.",
          "type": "string"
        }
      },
      "id": "SignUpInfo",
      "type": "object"
    },
    "TemplateItem": {
      "id": "TemplateItem",
      "type": "object",
      "properties": {
        "firstValue": {
          "$ref": "FieldSelector",
          "description": "A reference to a field to display. If both `firstValue` and `secondValue` are populated, they will both appear as one item with a slash between them. For example, values A and B would be shown as \"A / B\"."
        },
        "secondValue": {
          "description": "A reference to a field to display. This may only be populated if the `firstValue` field is populated.",
          "$ref": "FieldSelector"
        },
        "predefinedItem": {
          "type": "string",
          "description": "A predefined item to display. Only one of `firstValue` or `predefinedItem` may be set.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "PREDEFINED_ITEM_UNSPECIFIED",
            "FREQUENT_FLYER_PROGRAM_NAME_AND_NUMBER",
            "frequentFlyerProgramNameAndNumber",
            "FLIGHT_NUMBER_AND_OPERATING_FLIGHT_NUMBER",
            "flightNumberAndOperatingFlightNumber"
          ],
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `FREQUENT_FLYER_PROGRAM_NAME_AND_NUMBER`. Deprecated.",
            "",
            "Legacy alias for `FLIGHT_NUMBER_AND_OPERATING_FLIGHT_NUMBER`. Deprecated."
          ]
        }
      }
    },
    "EventReservationInfo": {
      "id": "EventReservationInfo",
      "type": "object",
      "properties": {
        "confirmationCode": {
          "description": "The confirmation code of the event reservation. This may also take the form of an \"order number\", \"confirmation number\", \"reservation number\", or other equivalent.",
          "type": "string"
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#eventReservationInfo\"`.",
          "deprecated": true,
          "type": "string"
        }
      }
    },
    "ImageModuleData": {
      "id": "ImageModuleData",
      "type": "object",
      "properties": {
        "mainImage": {
          "$ref": "Image",
          "description": "A 100% width image."
        },
        "id": {
          "description": "The ID associated with an image module. This field is here to enable ease of management of image modules.",
          "type": "string"
        }
      }
    },
    "LoyaltyObjectListResponse": {
      "properties": {
        "resources": {
          "description": "Resources corresponding to the list request.",
          "type": "array",
          "items": {
            "$ref": "LoyaltyObject"
          }
        },
        "pagination": {
          "$ref": "Pagination",
          "description": "Pagination of the response."
        }
      },
      "id": "LoyaltyObjectListResponse",
      "type": "object"
    },
    "GiftCardObjectAddMessageResponse": {
      "id": "GiftCardObjectAddMessageResponse",
      "type": "object",
      "properties": {
        "resource": {
          "description": "The updated GiftCardObject resource.",
          "$ref": "GiftCardObject"
        }
      }
    },
    "ActivationOptions": {
      "id": "ActivationOptions",
      "type": "object",
      "description": "ActivationOptions for the class",
      "properties": {
        "allowReactivation": {
          "type": "boolean",
          "description": "Flag to allow users to make activation call from different device. This allows client to render the activation button enabled even if the activationStatus is ACTIVATED but the requested device is different than the current device."
        },
        "activationUrl": {
          "type": "string",
          "description": "HTTPS URL that supports REST semantics. Would be used for requesting activation from partners for given valuable, triggered by the users."
        }
      }
    },
    "TransitObjectAddMessageResponse": {
      "id": "TransitObjectAddMessageResponse",
      "type": "object",
      "properties": {
        "resource": {
          "$ref": "TransitObject",
          "description": "The updated TransitObject resource."
        }
      }
    },
    "GroupingInfo": {
      "properties": {
        "sortIndex": {
          "type": "integer",
          "description": "Optional index for sorting the passes when they are grouped with other passes. Passes with lower sort index are shown before passes with higher sort index. If unspecified, the value is assumed to be INT_MAX. For two passes with the same sort index, the sorting behavior is undefined.",
          "format": "int32"
        },
        "groupingId": {
          "description": "Optional grouping ID for grouping the passes with the same ID visually together. Grouping with different types of passes is allowed.",
          "type": "string"
        }
      },
      "id": "GroupingInfo",
      "type": "object"
    },
    "OfferClass": {
      "properties": {
        "localizedProvider": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the provider. Recommended maximum length is 12 characters to ensure full string is displayed on smaller screens."
        },
        "version": {
          "deprecated": true,
          "type": "string",
          "description": "Deprecated",
          "format": "int64"
        },
        "notifyPreference": {
          "description": "Whether or not field updates to this class should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If not specified, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.",
          "enumDescriptions": [
            "Default behavior is no notifications sent.",
            "This value will result in a notification being sent, if the updated fields are part of an allowlist."
          ],
          "enum": [
            "NOTIFICATION_SETTINGS_FOR_UPDATES_UNSPECIFIED",
            "NOTIFY_ON_UPDATE"
          ],
          "type": "string"
        },
        "localizedTitle": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the title. Recommended maximum length is 60 characters to ensure full string is displayed on smaller screens."
        },
        "textModulesData": {
          "items": {
            "$ref": "TextModuleData"
          },
          "type": "array",
          "description": "Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class."
        },
        "hexBackgroundColor": {
          "description": "The background color for the card. If not set the dominant color of the hero image is used, and if no hero image is set, the dominant color of the logo is used. The format is #rrggbb where rrggbb is a hex RGB triplet, such as `#ffcc00`. You can also use the shorthand version of the RGB triplet which is #rgb, such as `#fc0`.",
          "type": "string"
        },
        "provider": {
          "description": "Required. The offer provider (either the aggregator name or merchant name). Recommended maximum length is 12 characters to ensure full string is displayed on smaller screens.",
          "type": "string"
        },
        "details": {
          "type": "string",
          "description": "The details of the offer."
        },
        "homepageUri": {
          "description": "The URI of your application's home page. Populating the URI in this field results in the exact same behavior as populating an URI in linksModuleData (when an object is rendered, a link to the homepage is shown in what would usually be thought of as the linksModuleData section of the object).",
          "$ref": "Uri"
        },
        "locations": {
          "description": "Note: This field is currently not supported to trigger geo notifications.",
          "deprecated": true,
          "type": "array",
          "items": {
            "$ref": "LatLongPoint"
          }
        },
        "valueAddedModuleData": {
          "type": "array",
          "description": "Optional value added module data. Maximum of fifteen on the class. For a pass only fifteen will be displayed, prioritizing those from the object.",
          "items": {
            "$ref": "ValueAddedModuleData"
          }
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#offerClass\"`."
        },
        "enableSmartTap": {
          "type": "boolean",
          "description": "Identifies whether this class supports Smart Tap. The `redemptionIssuers` and object level `smartTapRedemptionLevel` fields must also be set up correctly in order for a pass to support Smart Tap."
        },
        "securityAnimation": {
          "$ref": "SecurityAnimation",
          "description": "Optional information about the security animation. If this is set a security animation will be rendered on pass details."
        },
        "heroImage": {
          "description": "Optional banner image displayed on the front of the card. If none is present, nothing will be displayed. The image will display at 100% width.",
          "$ref": "Image"
        },
        "title": {
          "description": "Required. The title of the offer, such as \"20% off any t-shirt.\" Recommended maximum length is 60 characters to ensure full string is displayed on smaller screens.",
          "type": "string"
        },
        "wideTitleImage": {
          "description": "The wide title image of the offer. When provided, this will be used in place of the title image in the top left of the card view.",
          "$ref": "Image"
        },
        "review": {
          "$ref": "Review",
          "description": "The review comments set by the platform when a class is marked `approved` or `rejected`."
        },
        "linksModuleData": {
          "description": "Links module data. If links module data is also defined on the object, both will be displayed.",
          "$ref": "LinksModuleData"
        },
        "multipleDevicesAndHoldersAllowedStatus": {
          "type": "string",
          "description": "Identifies whether multiple users and devices will save the same object referencing this class.",
          "enumDeprecated": [
            false,
            false,
            false,
            false,
            true,
            true,
            true
          ],
          "enum": [
            "STATUS_UNSPECIFIED",
            "MULTIPLE_HOLDERS",
            "ONE_USER_ALL_DEVICES",
            "ONE_USER_ONE_DEVICE",
            "multipleHolders",
            "oneUserAllDevices",
            "oneUserOneDevice"
          ],
          "enumDescriptions": [
            "Unspecified preference.",
            "The Pass object is shareable by a user and can be saved by any number of different users, and on any number of devices. Partners typically use this setup for passes that do not need to be restricted to a single user or pinned to a single device.",
            "An object can only be saved by one user, but this user can view and use it on multiple of their devices. Once the first user saves the object, no other user will be allowed to view or save it.",
            "An object can only be saved by one user on a single device. Intended for use by select partners in limited circumstances. An example use case is a transit ticket that should be \"device pinned\", meaning it can be saved, viewed and used only by a single user on a single device. Contact support for additional information.",
            "Legacy alias for `MULTIPLE_HOLDERS`. Deprecated.",
            "Legacy alias for `ONE_USER_ALL_DEVICES`. Deprecated.",
            "Legacy alias for `ONE_USER_ONE_DEVICE`. Deprecated."
          ]
        },
        "classTemplateInfo": {
          "$ref": "ClassTemplateInfo",
          "description": "Template information about how the class should be displayed. If unset, Google will fallback to a default set of fields to display."
        },
        "finePrint": {
          "description": "The fine print or terms of the offer, such as \"20% off any t-shirt at Adam's Apparel.\"",
          "type": "string"
        },
        "localizedIssuerName": {
          "description": "Translated strings for the issuer_name. Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens.",
          "$ref": "LocalizedString"
        },
        "merchantLocations": {
          "items": {
            "$ref": "MerchantLocation"
          },
          "description": "Merchant locations. There is a maximum of ten on the class. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints.",
          "type": "array"
        },
        "countryCode": {
          "description": "Country code used to display the card's country (when the user is not in that country), as well as to display localized content when content is not available in the user's locale.",
          "type": "string"
        },
        "callbackOptions": {
          "$ref": "CallbackOptions",
          "description": "Callback options to be used to call the issuer back for every save/delete of an object for this class by the end-user. All objects of this class are eligible for the callback."
        },
        "reviewStatus": {
          "description": "Required. The status of the class. This field can be set to `draft` or The status of the class. This field can be set to `draft` or `underReview` using the insert, patch, or update API calls. Once the review state is changed from `draft` it may not be changed back to `draft`. You should keep this field to `draft` when the class is under development. A `draft` class cannot be used to create any object. You should set this field to `underReview` when you believe the class is ready for use. The platform will automatically set this field to `approved` and it can be immediately used to create or migrate objects. When updating an already `approved` class you should keep setting this field to `underReview`.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "REVIEW_STATUS_UNSPECIFIED",
            "UNDER_REVIEW",
            "underReview",
            "APPROVED",
            "approved",
            "REJECTED",
            "rejected",
            "DRAFT",
            "draft"
          ],
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `UNDER_REVIEW`. Deprecated.",
            "",
            "Legacy alias for `APPROVED`. Deprecated.",
            "",
            "Legacy alias for `REJECTED`. Deprecated.",
            "",
            "Legacy alias for `DRAFT`. Deprecated."
          ]
        },
        "shortTitle": {
          "type": "string",
          "description": "A shortened version of the title of the offer, such as \"20% off,\" shown to users as a quick reference to the offer contents. Recommended maximum length is 20 characters."
        },
        "imageModulesData": {
          "items": {
            "$ref": "ImageModuleData"
          },
          "type": "array",
          "description": "Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level."
        },
        "viewUnlockRequirement": {
          "type": "string",
          "description": "View Unlock Requirement options for the offer.",
          "enumDescriptions": [
            "Default value, same as UNLOCK_NOT_REQUIRED.",
            "Default behavior for all the existing Passes if ViewUnlockRequirement is not set.",
            "Requires the user to unlock their device each time the pass is viewed. If the user removes their device lock after saving the pass, then they will be prompted to create a device lock before the pass can be viewed."
          ],
          "enum": [
            "VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED",
            "UNLOCK_NOT_REQUIRED",
            "UNLOCK_REQUIRED_TO_VIEW"
          ]
        },
        "localizedShortTitle": {
          "description": "Translated strings for the short title. Recommended maximum length is 20 characters.",
          "$ref": "LocalizedString"
        },
        "localizedFinePrint": {
          "description": "Translated strings for the fine_print.",
          "$ref": "LocalizedString"
        },
        "allowMultipleUsersPerObject": {
          "description": "Deprecated. Use `multipleDevicesAndHoldersAllowedStatus` instead.",
          "deprecated": true,
          "type": "boolean"
        },
        "helpUri": {
          "description": "The help link for the offer, such as `http://myownpersonaldomain.com/help`",
          "$ref": "Uri"
        },
        "issuerName": {
          "description": "Required. The issuer name. Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens.",
          "type": "string"
        },
        "titleImage": {
          "description": "The title image of the offer. This image is displayed in both the details and list views of the app.",
          "$ref": "Image"
        },
        "localizedDetails": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the details."
        },
        "wordMark": {
          "$ref": "Image",
          "deprecated": true,
          "description": "Deprecated."
        },
        "id": {
          "type": "string",
          "description": "Required. The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
        },
        "messages": {
          "items": {
            "$ref": "Message"
          },
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.",
          "type": "array"
        },
        "infoModuleData": {
          "description": "Deprecated. Use textModulesData instead.",
          "deprecated": true,
          "$ref": "InfoModuleData"
        },
        "redemptionIssuers": {
          "type": "array",
          "description": "Identifies which redemption issuers can redeem the pass over Smart Tap. Redemption issuers are identified by their issuer ID. Redemption issuers must have at least one Smart Tap key configured. The `enableSmartTap` and object level `smartTapRedemptionLevel` fields must also be set up correctly in order for a pass to support Smart Tap.",
          "items": {
            "format": "int64",
            "type": "string"
          }
        },
        "redemptionChannel": {
          "type": "string",
          "description": "Required. The redemption channels applicable to this offer.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "REDEMPTION_CHANNEL_UNSPECIFIED",
            "INSTORE",
            "instore",
            "ONLINE",
            "online",
            "BOTH",
            "both",
            "TEMPORARY_PRICE_REDUCTION",
            "temporaryPriceReduction"
          ],
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `INSTORE`. Deprecated.",
            "",
            "Legacy alias for `ONLINE`. Deprecated.",
            "",
            "Legacy alias for `BOTH`. Deprecated.",
            "",
            "Legacy alias for `TEMPORARY_PRICE_REDUCTION`. Deprecated."
          ]
        },
        "appLinkData": {
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding object that will be used instead.",
          "$ref": "AppLinkData"
        }
      },
      "id": "OfferClass",
      "type": "object"
    },
    "FlightObjectAddMessageResponse": {
      "id": "FlightObjectAddMessageResponse",
      "type": "object",
      "properties": {
        "resource": {
          "description": "The updated FlightObject resource.",
          "$ref": "FlightObject"
        }
      }
    },
    "LoyaltyClassListResponse": {
      "id": "LoyaltyClassListResponse",
      "type": "object",
      "properties": {
        "resources": {
          "description": "Resources corresponding to the list request.",
          "type": "array",
          "items": {
            "$ref": "LoyaltyClass"
          }
        },
        "pagination": {
          "description": "Pagination of the response.",
          "$ref": "Pagination"
        }
      }
    },
    "InfoModuleData": {
      "id": "InfoModuleData",
      "type": "object",
      "properties": {
        "labelValueRows": {
          "type": "array",
          "description": "A list of collections of labels and values. These will be displayed one after the other in a singular column.",
          "items": {
            "$ref": "LabelValueRow"
          }
        },
        "showLastUpdateTime": {
          "deprecated": true,
          "type": "boolean"
        }
      }
    },
    "SecurityAnimation": {
      "properties": {
        "animationType": {
          "description": "Type of animation.",
          "enumDeprecated": [
            false,
            false,
            true
          ],
          "enum": [
            "ANIMATION_UNSPECIFIED",
            "FOIL_SHIMMER",
            "foilShimmer"
          ],
          "type": "string",
          "enumDescriptions": [
            "",
            "Default Foil & Shimmer animation",
            "Legacy alias for `FOIL_SHIMMER`. Deprecated."
          ]
        }
      },
      "id": "SecurityAnimation",
      "type": "object"
    },
    "Barcode": {
      "properties": {
        "showCodeText": {
          "$ref": "LocalizedString",
          "description": "Optional text that will be shown when the barcode is hidden behind a click action. This happens in cases where a pass has Smart Tap enabled. If not specified, a default is chosen by Google."
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#barcode\"`.",
          "deprecated": true,
          "type": "string"
        },
        "alternateText": {
          "type": "string",
          "description": "An optional text that will override the default text that shows under the barcode. This field is intended for a human readable equivalent of the barcode value, used when the barcode cannot be scanned."
        },
        "value": {
          "description": "The value encoded in the barcode.",
          "type": "string"
        },
        "type": {
          "enumDescriptions": [
            "",
            "Not supported for Rotating Barcodes.",
            "Legacy alias for `AZTEC`. Deprecated. Not supported for Rotating Barcodes.",
            "Not supported for Rotating Barcodes.",
            "Legacy alias for `CODE_39`. Deprecated. Not supported for Rotating Barcodes.",
            "Not supported for Rotating Barcodes.",
            "Legacy alias for `CODE_128`. Deprecated. Not supported for Rotating Barcodes.",
            "Not supported for Rotating Barcodes.",
            "Legacy alias for `CODABAR`. Deprecated. Not supported for Rotating Barcodes.",
            "A 2D matrix barcode consisting of black and white. Cells or modules are arranged in either a square or rectangle. Not supported for Rotating Barcodes.",
            "Legacy alias for `DATA_MATRIX`. Deprecated. Not supported for Rotating Barcodes.",
            "Not supported for Rotating Barcodes.",
            "Legacy alias for `EAN_8`. Deprecated. Not supported for Rotating Barcodes.",
            "Not supported for Rotating Barcodes.",
            "Legacy alias for `EAN_13`. Deprecated. Not supported for Rotating Barcodes.",
            "Legacy alias for `EAN_13`. Deprecated. Not supported for Rotating Barcodes.",
            "14 digit ITF code Not supported for Rotating Barcodes.",
            "Legacy alias for `ITF_14`. Deprecated. Not supported for Rotating Barcodes.",
            "Supported for Rotating Barcodes.",
            "Legacy alias for `PDF_417`. Deprecated.",
            "Legacy alias for `PDF_417`. Deprecated.",
            "Supported for Rotating Barcodes.",
            "Legacy alias for `QR_CODE`. Deprecated.",
            "Legacy alias for `QR_CODE`. Deprecated.",
            "11 or 12 digit codes Not supported for Rotating Barcodes.",
            "Legacy alias for `UPC_A`. Deprecated. Not supported for Rotating Barcodes.",
            "Renders the field as a text field. The `alternateText` field may not be used with a barcode of type `textOnly`. Not supported for Rotating Barcodes.",
            "Legacy alias for `TEXT_ONLY`. Deprecated. Not supported for Rotating Barcodes."
          ],
          "type": "string",
          "description": "The type of barcode.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            true,
            false,
            true,
            false,
            true,
            true,
            false,
            true,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "BARCODE_TYPE_UNSPECIFIED",
            "AZTEC",
            "aztec",
            "CODE_39",
            "code39",
            "CODE_128",
            "code128",
            "CODABAR",
            "codabar",
            "DATA_MATRIX",
            "dataMatrix",
            "EAN_8",
            "ean8",
            "EAN_13",
            "ean13",
            "EAN13",
            "ITF_14",
            "itf14",
            "PDF_417",
            "pdf417",
            "PDF417",
            "QR_CODE",
            "qrCode",
            "qrcode",
            "UPC_A",
            "upcA",
            "TEXT_ONLY",
            "textOnly"
          ]
        },
        "renderEncoding": {
          "type": "string",
          "description": "The render encoding for the barcode. When specified, barcode is rendered in the given encoding. Otherwise best known encoding is chosen by Google.",
          "enumDescriptions": [
            "",
            "UTF_8 encoding for barcodes. This is only supported for barcode type qrCode."
          ],
          "enum": [
            "RENDER_ENCODING_UNSPECIFIED",
            "UTF_8"
          ]
        }
      },
      "id": "Barcode",
      "type": "object"
    },
    "RotatingBarcodeTotpDetailsTotpParameters": {
      "id": "RotatingBarcodeTotpDetailsTotpParameters",
      "type": "object",
      "description": "Configuration for the key and value length. See https://www.rfc-editor.org/rfc/rfc4226#section-5.3",
      "properties": {
        "key": {
          "description": "The secret key used for the TOTP value generation, encoded as a Base16 string.",
          "type": "string"
        },
        "valueLength": {
          "type": "integer",
          "description": "The length of the TOTP value in decimal digits.",
          "format": "int32"
        }
      }
    },
    "UpcomingNotification": {
      "id": "UpcomingNotification",
      "type": "object",
      "description": "Indicates that the issuer would like Google Wallet to send an upcoming card validity notification 1 day before card becomes valid/usable.",
      "properties": {
        "enableNotification": {
          "description": "Indicates if the object needs to have upcoming notification enabled.",
          "type": "boolean"
        }
      }
    },
    "DiffVersionResponse": {
      "description": "Backend response for a Diff get version response. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol.",
      "properties": {
        "objectVersion": {
          "type": "string",
          "description": "The version of the object stored at the server."
        },
        "objectSizeBytes": {
          "description": "The total size of the server object.",
          "type": "string",
          "format": "int64"
        }
      },
      "id": "DiffVersionResponse",
      "type": "object"
    },
    "PassConstraints": {
      "description": "Container for any constraints that may be placed on passes.",
      "properties": {
        "screenshotEligibility": {
          "description": "The screenshot eligibility for the pass.",
          "enumDescriptions": [
            "Default value, same as ELIGIBLE.",
            "Default behavior for all existing Passes if ScreenshotEligibility is not set. Allows screenshots to be taken on Android devices.",
            "Disallows screenshots to be taken on Android devices. Note that older versions of Wallet may still allow screenshots to be taken."
          ],
          "enum": [
            "SCREENSHOT_ELIGIBILITY_UNSPECIFIED",
            "ELIGIBLE",
            "INELIGIBLE"
          ],
          "type": "string"
        },
        "nfcConstraint": {
          "type": "array",
          "description": "The NFC constraints for the pass.",
          "items": {
            "enumDescriptions": [
              "Default value, no specified constraint.",
              "Payment cards will not be conveyed while the pass is open.",
              "Closed loop transit cards will not be conveyed while the pass is open."
            ],
            "enum": [
              "NFC_CONSTRAINT_UNSPECIFIED",
              "BLOCK_PAYMENT",
              "BLOCK_CLOSED_LOOP_TRANSIT"
            ],
            "type": "string"
          }
        }
      },
      "id": "PassConstraints",
      "type": "object"
    },
    "GiftCardObjectListResponse": {
      "properties": {
        "resources": {
          "description": "Resources corresponding to the list request.",
          "type": "array",
          "items": {
            "$ref": "GiftCardObject"
          }
        },
        "pagination": {
          "$ref": "Pagination",
          "description": "Pagination of the response."
        }
      },
      "id": "GiftCardObjectListResponse",
      "type": "object"
    },
    "Blobstore2Info": {
      "description": "Information to read/write to blobstore2.",
      "properties": {
        "blobGeneration": {
          "format": "int64",
          "type": "string",
          "description": "The blob generation id."
        },
        "blobId": {
          "description": "The blob id, e.g., /blobstore/prod/playground/scotty",
          "type": "string"
        },
        "downloadReadHandle": {
          "type": "string",
          "description": "Read handle passed from Bigstore -\u003e Scotty for a GCS download. This is a signed, serialized blobstore2.ReadHandle proto which must never be set outside of Bigstore, and is not applicable to non-GCS media downloads.",
          "format": "byte"
        },
        "downloadExternalReadToken": {
          "type": "string",
          "description": "A serialized External Read Token passed from Bigstore -\u003e Scotty for a GCS download. This field must never be consumed outside of Bigstore, and is not applicable to non-GCS media uploads.",
          "format": "byte"
        },
        "readToken": {
          "type": "string",
          "description": "The blob read token. Needed to read blobs that have not been replicated. Might not be available until the final call."
        },
        "uploadFragmentListCreationInfo": {
          "format": "byte",
          "type": "string",
          "description": "A serialized Object Fragment List Creation Info passed from Bigstore -\u003e Scotty for a GCS upload. This field must never be consumed outside of Bigstore, and is not applicable to non-GCS media uploads."
        },
        "uploadMetadataContainer": {
          "format": "byte",
          "type": "string",
          "description": "Metadata passed from Blobstore -\u003e Scotty for a new GCS upload. This is a signed, serialized blobstore2.BlobMetadataContainer proto which must never be consumed outside of Bigstore, and is not applicable to non-GCS media uploads."
        }
      },
      "id": "Blobstore2Info",
      "type": "object"
    },
    "TimeInterval": {
      "properties": {
        "start": {
          "description": "Start time of the interval. Offset is not required. If an offset is provided and `end` time is set, `end` must also include an offset.",
          "$ref": "DateTime"
        },
        "end": {
          "$ref": "DateTime",
          "description": "End time of the interval. Offset is not required. If an offset is provided and `start` time is set, `start` must also include an offset."
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#timeInterval\"`.",
          "deprecated": true,
          "type": "string"
        }
      },
      "id": "TimeInterval",
      "type": "object"
    },
    "JwtValidateResponse": {
      "id": "JwtValidateResponse",
      "type": "object",
      "description": "Empty if the resource in the request is valid. Returns exception if invalid.",
      "properties": {}
    },
    "GenericClassAddMessageResponse": {
      "id": "GenericClassAddMessageResponse",
      "type": "object",
      "description": "Response to adding a new issuer message to the class. This contains the entire updated GenericClass.",
      "properties": {
        "resource": {
          "description": "The updated EventTicketClass resource.",
          "$ref": "GenericClass"
        }
      }
    },
    "GiftCardClassListResponse": {
      "properties": {
        "resources": {
          "items": {
            "$ref": "GiftCardClass"
          },
          "description": "Resources corresponding to the list request.",
          "type": "array"
        },
        "pagination": {
          "$ref": "Pagination",
          "description": "Pagination of the response."
        }
      },
      "id": "GiftCardClassListResponse",
      "type": "object"
    },
    "Issuer": {
      "id": "Issuer",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "The account name of the issuer."
        },
        "homepageUrl": {
          "description": "URL for the issuer's home page.",
          "type": "string"
        },
        "issuerId": {
          "type": "string",
          "description": "The unique identifier for an issuer account. This is automatically generated when the issuer is inserted.",
          "format": "int64"
        },
        "callbackOptions": {
          "description": "Allows the issuer to provide their callback settings.",
          "$ref": "CallbackOptions"
        },
        "contactInfo": {
          "$ref": "IssuerContactInfo",
          "description": "Issuer contact information."
        },
        "smartTapMerchantData": {
          "$ref": "SmartTapMerchantData",
          "description": "Available only to Smart Tap enabled partners. Contact support for additional guidance."
        }
      }
    },
    "EventTicketClassAddMessageResponse": {
      "properties": {
        "resource": {
          "$ref": "EventTicketClass",
          "description": "The updated EventTicketClass resource."
        }
      },
      "id": "EventTicketClassAddMessageResponse",
      "type": "object"
    },
    "Permissions": {
      "id": "Permissions",
      "type": "object",
      "properties": {
        "issuerId": {
          "type": "string",
          "description": "ID of the issuer the list of permissions refer to.",
          "format": "int64"
        },
        "permissions": {
          "type": "array",
          "description": "The complete list of permissions for the issuer account.",
          "items": {
            "$ref": "Permission"
          }
        }
      }
    },
    "FlightClass": {
      "properties": {
        "textModulesData": {
          "type": "array",
          "description": "Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class.",
          "items": {
            "$ref": "TextModuleData"
          }
        },
        "localGateClosingDateTime": {
          "type": "string",
          "description": "The gate closing time as it would be printed on the boarding pass. Do not set this field if you do not want to print it in the boarding pass. This is an ISO 8601 extended format date/time without an offset. Time may be specified up to millisecond precision. eg: `2027-03-05T06:30:00` This should be the local date/time at the airport (not a UTC time). Google will reject the request if UTC offset is provided. Time zones will be calculated by Google based on departure airport."
        },
        "version": {
          "format": "int64",
          "description": "Deprecated",
          "deprecated": true,
          "type": "string"
        },
        "localEstimatedOrActualDepartureDateTime": {
          "description": "The estimated time the aircraft plans to pull from the gate or the actual time the aircraft already pulled from the gate. Note: This is not the runway time. This field should be set if at least one of the below is true: - It differs from the scheduled time. Google will use it to calculate the delay. - The aircraft already pulled from the gate. Google will use it to inform the user when the flight actually departed. This is an ISO 8601 extended format date/time without an offset. Time may be specified up to millisecond precision. eg: `2027-03-05T06:30:00` This should be the local date/time at the airport (not a UTC time). Google will reject the request if UTC offset is provided. Time zones will be calculated by Google based on departure airport.",
          "type": "string"
        },
        "flightStatus": {
          "enumDescriptions": [
            "",
            "Flight is on time, early, or delayed.",
            "Legacy alias for `SCHEDULED`. Deprecated.",
            "Flight is in progress (taxiing, taking off, landing, airborne).",
            "Legacy alias for `ACTIVE`. Deprecated.",
            "Flight landed at the original destination.",
            "Legacy alias for `LANDED`. Deprecated.",
            "Flight is cancelled.",
            "Legacy alias for `CANCELLED`. Deprecated.",
            "Flight is airborne but heading to a different airport than the original destination.",
            "Legacy alias for `REDIRECTED`. Deprecated.",
            "Flight has already landed at a different airport than the original destination.",
            "Legacy alias for `DIVERTED`. Deprecated."
          ],
          "type": "string",
          "description": "Status of this flight. If unset, Google will compute status based on data from other sources, such as FlightStats, etc. Note: Google-computed status will not be returned in API responses.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "FLIGHT_STATUS_UNSPECIFIED",
            "SCHEDULED",
            "scheduled",
            "ACTIVE",
            "active",
            "LANDED",
            "landed",
            "CANCELLED",
            "cancelled",
            "REDIRECTED",
            "redirected",
            "DIVERTED",
            "diverted"
          ]
        },
        "notifyPreference": {
          "description": "Whether or not field updates to this class should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If not specified, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.",
          "enumDescriptions": [
            "Default behavior is no notifications sent.",
            "This value will result in a notification being sent, if the updated fields are part of an allowlist."
          ],
          "enum": [
            "NOTIFICATION_SETTINGS_FOR_UPDATES_UNSPECIFIED",
            "NOTIFY_ON_UPDATE"
          ],
          "type": "string"
        },
        "localScheduledDepartureDateTime": {
          "type": "string",
          "description": "Required. The scheduled date and time when the aircraft is expected to depart the gate (not the runway) Note: This field should not change too close to the departure time. For updates to departure times (delays, etc), please set `localEstimatedOrActualDepartureDateTime`. This is an ISO 8601 extended format date/time without an offset. Time may be specified up to millisecond precision. eg: `2027-03-05T06:30:00` This should be the local date/time at the airport (not a UTC time). Google will reject the request if UTC offset is provided. Time zones will be calculated by Google based on departure airport."
        },
        "hexBackgroundColor": {
          "type": "string",
          "description": "The background color for the card. If not set the dominant color of the hero image is used, and if no hero image is set, the dominant color of the logo is used. The format is #rrggbb where rrggbb is a hex RGB triplet, such as `#ffcc00`. You can also use the shorthand version of the RGB triplet which is #rgb, such as `#fc0`."
        },
        "languageOverride": {
          "description": "If this field is present, boarding passes served to a user's device will always be in this language. Represents the BCP 47 language tag. Example values are \"en-US\", \"en-GB\", \"de\", or \"de-AT\".",
          "type": "string"
        },
        "valueAddedModuleData": {
          "items": {
            "$ref": "ValueAddedModuleData"
          },
          "description": "Optional value added module data. Maximum of fifteen on the class. For a pass only fifteen will be displayed, prioritizing those from the object.",
          "type": "array"
        },
        "enableSmartTap": {
          "description": "Identifies whether this class supports Smart Tap. The `redemptionIssuers` and object level `smartTapRedemptionLevel` fields must also be set up correctly in order for a pass to support Smart Tap.",
          "type": "boolean"
        },
        "securityAnimation": {
          "$ref": "SecurityAnimation",
          "description": "Optional information about the security animation. If this is set a security animation will be rendered on pass details."
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#flightClass\"`."
        },
        "localEstimatedOrActualArrivalDateTime": {
          "type": "string",
          "description": "The estimated time the aircraft plans to reach the destination gate (not the runway) or the actual time it reached the gate. This field should be set if at least one of the below is true: - It differs from the scheduled time. Google will use it to calculate the delay. - The aircraft already arrived at the gate. Google will use it to inform the user that the flight has arrived at the gate. This is an ISO 8601 extended format date/time without an offset. Time may be specified up to millisecond precision. eg: `2027-03-05T06:30:00` This should be the local date/time at the airport (not a UTC time). Google will reject the request if UTC offset is provided. Time zones will be calculated by Google based on arrival airport."
        },
        "locations": {
          "items": {
            "$ref": "LatLongPoint"
          },
          "deprecated": true,
          "type": "array",
          "description": "Note: This field is currently not supported to trigger geo notifications."
        },
        "homepageUri": {
          "description": "The URI of your application's home page. Populating the URI in this field results in the exact same behavior as populating an URI in linksModuleData (when an object is rendered, a link to the homepage is shown in what would usually be thought of as the linksModuleData section of the object).",
          "$ref": "Uri"
        },
        "review": {
          "description": "The review comments set by the platform when a class is marked `approved` or `rejected`.",
          "$ref": "Review"
        },
        "linksModuleData": {
          "description": "Links module data. If links module data is also defined on the object, both will be displayed.",
          "$ref": "LinksModuleData"
        },
        "multipleDevicesAndHoldersAllowedStatus": {
          "enumDescriptions": [
            "Unspecified preference.",
            "The Pass object is shareable by a user and can be saved by any number of different users, and on any number of devices. Partners typically use this setup for passes that do not need to be restricted to a single user or pinned to a single device.",
            "An object can only be saved by one user, but this user can view and use it on multiple of their devices. Once the first user saves the object, no other user will be allowed to view or save it.",
            "An object can only be saved by one user on a single device. Intended for use by select partners in limited circumstances. An example use case is a transit ticket that should be \"device pinned\", meaning it can be saved, viewed and used only by a single user on a single device. Contact support for additional information.",
            "Legacy alias for `MULTIPLE_HOLDERS`. Deprecated.",
            "Legacy alias for `ONE_USER_ALL_DEVICES`. Deprecated.",
            "Legacy alias for `ONE_USER_ONE_DEVICE`. Deprecated."
          ],
          "description": "Identifies whether multiple users and devices will save the same object referencing this class.",
          "enumDeprecated": [
            false,
            false,
            false,
            false,
            true,
            true,
            true
          ],
          "enum": [
            "STATUS_UNSPECIFIED",
            "MULTIPLE_HOLDERS",
            "ONE_USER_ALL_DEVICES",
            "ONE_USER_ONE_DEVICE",
            "multipleHolders",
            "oneUserAllDevices",
            "oneUserOneDevice"
          ],
          "type": "string"
        },
        "heroImage": {
          "description": "Optional banner image displayed on the front of the card. If none is present, nothing will be displayed. The image will display at 100% width.",
          "$ref": "Image"
        },
        "origin": {
          "description": "Required. Origin airport.",
          "$ref": "AirportInfo"
        },
        "destination": {
          "description": "Required. Destination airport.",
          "$ref": "AirportInfo"
        },
        "flightHeader": {
          "$ref": "FlightHeader",
          "description": "Required. Information about the flight carrier and number."
        },
        "countryCode": {
          "description": "Country code used to display the card's country (when the user is not in that country), as well as to display localized content when content is not available in the user's locale.",
          "type": "string"
        },
        "callbackOptions": {
          "description": "Callback options to be used to call the issuer back for every save/delete of an object for this class by the end-user. All objects of this class are eligible for the callback.",
          "$ref": "CallbackOptions"
        },
        "classTemplateInfo": {
          "$ref": "ClassTemplateInfo",
          "description": "Template information about how the class should be displayed. If unset, Google will fallback to a default set of fields to display."
        },
        "merchantLocations": {
          "type": "array",
          "description": "Merchant locations. There is a maximum of ten on the class. Any additional MerchantLocations added beyond the 10 will be rejected by the validator. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints.",
          "items": {
            "$ref": "MerchantLocation"
          }
        },
        "localizedIssuerName": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the issuer_name. Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens."
        },
        "imageModulesData": {
          "type": "array",
          "description": "Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level.",
          "items": {
            "$ref": "ImageModuleData"
          }
        },
        "viewUnlockRequirement": {
          "description": "View Unlock Requirement options for the boarding pass.",
          "enumDescriptions": [
            "Default value, same as UNLOCK_NOT_REQUIRED.",
            "Default behavior for all the existing Passes if ViewUnlockRequirement is not set.",
            "Requires the user to unlock their device each time the pass is viewed. If the user removes their device lock after saving the pass, then they will be prompted to create a device lock before the pass can be viewed."
          ],
          "enum": [
            "VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED",
            "UNLOCK_NOT_REQUIRED",
            "UNLOCK_REQUIRED_TO_VIEW"
          ],
          "type": "string"
        },
        "reviewStatus": {
          "description": "Required. The status of the class. This field can be set to `draft` or `underReview` using the insert, patch, or update API calls. Once the review state is changed from `draft` it may not be changed back to `draft`. You should keep this field to `draft` when the class is under development. A `draft` class cannot be used to create any object. You should set this field to `underReview` when you believe the class is ready for use. The platform will automatically set this field to `approved` and it can be immediately used to create or migrate objects. When updating an already `approved` class you should keep setting this field to `underReview`.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "REVIEW_STATUS_UNSPECIFIED",
            "UNDER_REVIEW",
            "underReview",
            "APPROVED",
            "approved",
            "REJECTED",
            "rejected",
            "DRAFT",
            "draft"
          ],
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `UNDER_REVIEW`. Deprecated.",
            "",
            "Legacy alias for `APPROVED`. Deprecated.",
            "",
            "Legacy alias for `REJECTED`. Deprecated.",
            "",
            "Legacy alias for `DRAFT`. Deprecated."
          ]
        },
        "allowMultipleUsersPerObject": {
          "description": "Deprecated. Use `multipleDevicesAndHoldersAllowedStatus` instead.",
          "deprecated": true,
          "type": "boolean"
        },
        "issuerName": {
          "description": "Required. The issuer name. Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens.",
          "type": "string"
        },
        "localScheduledArrivalDateTime": {
          "type": "string",
          "description": "The scheduled time the aircraft plans to reach the destination gate (not the runway). Note: This field should not change too close to the flight time. For updates to departure times (delays, etc), please set `localEstimatedOrActualArrivalDateTime`. This is an ISO 8601 extended format date/time without an offset. Time may be specified up to millisecond precision. eg: `2027-03-05T06:30:00` This should be the local date/time at the airport (not a UTC time). Google will reject the request if UTC offset is provided. Time zones will be calculated by Google based on arrival airport."
        },
        "appLinkData": {
          "$ref": "AppLinkData",
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding object that will be used instead."
        },
        "boardingAndSeatingPolicy": {
          "$ref": "BoardingAndSeatingPolicy",
          "description": "Policies for boarding and seating. These will inform which labels will be shown to users."
        },
        "id": {
          "description": "Required. The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
          "type": "string"
        },
        "messages": {
          "items": {
            "$ref": "Message"
          },
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.",
          "type": "array"
        },
        "infoModuleData": {
          "description": "Deprecated. Use textModulesData instead.",
          "deprecated": true,
          "$ref": "InfoModuleData"
        },
        "wordMark": {
          "$ref": "Image",
          "deprecated": true,
          "description": "Deprecated."
        },
        "localBoardingDateTime": {
          "type": "string",
          "description": "The boarding time as it would be printed on the boarding pass. This is an ISO 8601 extended format date/time without an offset. Time may be specified up to millisecond precision. eg: `2027-03-05T06:30:00` This should be the local date/time at the airport (not a UTC time). Google will reject the request if UTC offset is provided. Time zones will be calculated by Google based on departure airport."
        },
        "redemptionIssuers": {
          "items": {
            "type": "string",
            "format": "int64"
          },
          "description": "Identifies which redemption issuers can redeem the pass over Smart Tap. Redemption issuers are identified by their issuer ID. Redemption issuers must have at least one Smart Tap key configured. The `enableSmartTap` and object level `smartTapRedemptionLevel` fields must also be set up correctly in order for a pass to support Smart Tap.",
          "type": "array"
        }
      },
      "id": "FlightClass",
      "type": "object"
    },
    "DiffUploadResponse": {
      "id": "DiffUploadResponse",
      "type": "object",
      "description": "Backend response for a Diff upload request. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol.",
      "properties": {
        "objectVersion": {
          "type": "string",
          "description": "The object version of the object at the server. Must be included in the end notification response. The version in the end notification response must correspond to the new version of the object that is now stored at the server, after the upload."
        },
        "originalObject": {
          "$ref": "CompositeMedia",
          "description": "The location of the original file for a diff upload request. Must be filled in if responding to an upload start notification."
        }
      }
    },
    "TicketRestrictions": {
      "id": "TicketRestrictions",
      "type": "object",
      "properties": {
        "routeRestrictionsDetails": {
          "$ref": "LocalizedString",
          "description": "More details about the above `routeRestrictions`."
        },
        "otherRestrictions": {
          "description": "Extra restrictions that don't fall under the \"route\" or \"time\" categories.",
          "$ref": "LocalizedString"
        },
        "routeRestrictions": {
          "description": "Restrictions about routes that may be taken. For example, this may be the string \"Reserved CrossCountry trains only\".",
          "$ref": "LocalizedString"
        },
        "timeRestrictions": {
          "$ref": "LocalizedString",
          "description": "Restrictions about times this ticket may be used."
        }
      }
    },
    "CompositeMedia": {
      "description": "A sequence of media data references representing composite data. Introduced to support Bigstore composite objects. For details, visit http://go/bigstore-composites.",
      "properties": {
        "blobRef": {
          "format": "byte",
          "deprecated": true,
          "type": "string",
          "description": "Blobstore v1 reference, set if reference_type is BLOBSTORE_REF This should be the byte representation of a blobstore.BlobRef. Since Blobstore is deprecating v1, use blobstore2_info instead. For now, any v2 blob will also be represented in this field as v1 BlobRef."
        },
        "cosmoBinaryReference": {
          "format": "byte",
          "description": "A binary data reference for a media download. Serves as a technology-agnostic binary reference in some Google infrastructure. This value is a serialized storage_cosmo.BinaryReference proto. Storing it as bytes is a hack to get around the fact that the cosmo proto (as well as others it includes) doesn't support JavaScript. This prevents us from including the actual type of this field.",
          "type": "string"
        },
        "length": {
          "type": "string",
          "description": "Size of the data, in bytes",
          "format": "int64"
        },
        "path": {
          "description": "Path to the data, set if reference_type is PATH",
          "type": "string"
        },
        "objectId": {
          "description": "Reference to a TI Blob, set if reference_type is BIGSTORE_REF.",
          "$ref": "ObjectId"
        },
        "sha1Hash": {
          "format": "byte",
          "description": "SHA-1 hash for the payload.",
          "type": "string"
        },
        "md5Hash": {
          "format": "byte",
          "type": "string",
          "description": "MD5 hash for the payload."
        },
        "referenceType": {
          "description": "Describes what the field reference contains.",
          "enumDescriptions": [
            "Reference contains a GFS path or a local path.",
            "Reference points to a blobstore object. This could be either a v1 blob_ref or a v2 blobstore2_info. Clients should check blobstore2_info first, since v1 is being deprecated.",
            "Data is included into this proto buffer",
            "Reference points to a bigstore object",
            "Indicates the data is stored in cosmo_binary_reference."
          ],
          "enum": [
            "PATH",
            "BLOB_REF",
            "INLINE",
            "BIGSTORE_REF",
            "COSMO_BINARY_REFERENCE"
          ],
          "type": "string"
        },
        "inline": {
          "format": "byte",
          "type": "string",
          "description": "Media data, set if reference_type is INLINE"
        },
        "crc32cHash": {
          "description": "crc32.c hash for the payload.",
          "type": "integer",
          "format": "uint32"
        },
        "blobstore2Info": {
          "$ref": "Blobstore2Info",
          "description": "Blobstore v2 info, set if reference_type is BLOBSTORE_REF and it refers to a v2 blob."
        }
      },
      "id": "CompositeMedia",
      "type": "object"
    },
    "RotatingBarcodeTotpDetails": {
      "description": "Configuration for the time-based OTP substitutions. See https://tools.ietf.org/html/rfc6238",
      "properties": {
        "parameters": {
          "type": "array",
          "description": "The TOTP parameters for each of the {totp_value_*} substitutions. The TotpParameters at index n is used for the {totp_value_n} substitution.",
          "items": {
            "$ref": "RotatingBarcodeTotpDetailsTotpParameters"
          }
        },
        "periodMillis": {
          "format": "int64",
          "type": "string",
          "description": "The time interval used for the TOTP value generation, in milliseconds."
        },
        "algorithm": {
          "description": "The TOTP algorithm used to generate the OTP.",
          "enumDescriptions": [
            "",
            "TOTP algorithm from RFC 6238 with the SHA1 hash function"
          ],
          "enum": [
            "TOTP_ALGORITHM_UNSPECIFIED",
            "TOTP_SHA1"
          ],
          "type": "string"
        }
      },
      "id": "RotatingBarcodeTotpDetails",
      "type": "object"
    },
    "DiffUploadRequest": {
      "description": "A Diff upload request. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol.",
      "properties": {
        "objectVersion": {
          "type": "string",
          "description": "The object version of the object that is the base version the incoming diff script will be applied to. This field will always be filled in."
        },
        "objectInfo": {
          "description": "The location of the new object. Agents must clone the object located here, as the upload server will delete the contents once a response is received.",
          "$ref": "CompositeMedia"
        },
        "checksumsInfo": {
          "description": "The location of the checksums for the new object. Agents must clone the object located here, as the upload server will delete the contents once a response is received. For details on the format of the checksums, see http://go/scotty-diff-protocol.",
          "$ref": "CompositeMedia"
        }
      },
      "id": "DiffUploadRequest",
      "type": "object"
    },
    "EventDateTime": {
      "properties": {
        "end": {
          "type": "string",
          "description": "The date/time when the event ends. If the event spans multiple days, it should be the end date/time on the last day. This is an ISO 8601 extended format date/time, with or without an offset. Time may be specified up to nanosecond precision. Offsets may be specified with seconds precision (even though offset seconds is not part of ISO 8601). For example: `1985-04-12T23:20:50.52Z` would be 20 minutes and 50.52 seconds after the 23rd hour of April 12th, 1985 in UTC. `1985-04-12T19:20:50.52-04:00` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985, 4 hours before UTC (same instant in time as the above example). If the event were in New York, this would be the equivalent of Eastern Daylight Time (EDT). Remember that offset varies in regions that observe Daylight Saving Time (or Summer Time), depending on the time of the year. `1985-04-12T19:20:50.52` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985 with no offset information. The portion of the date/time without the offset is considered the \"local date/time\". This should be the local date/time at the venue. For example, if the event occurs at the 20th hour of June 5th, 2018 at the venue, the local date/time portion should be `2018-06-05T20:00:00`. If the local date/time at the venue is 4 hours before UTC, an offset of `-04:00` may be appended. Without offset information, some rich features may not be available."
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#eventDateTime\"`."
        },
        "customDoorsOpenLabel": {
          "description": "A custom label to use for the doors open value (`doorsOpen`) on the card detail view. This should only be used if the default \"Doors Open\" label or one of the `doorsOpenLabel` options is not sufficient. Both `doorsOpenLabel` and `customDoorsOpenLabel` may not be set. If neither is set, the label will default to \"Doors Open\", localized. If the doors open field is unset, this label will not be used.",
          "$ref": "LocalizedString"
        },
        "start": {
          "description": "The date/time when the event starts. If the event spans multiple days, it should be the start date/time on the first day. This is an ISO 8601 extended format date/time, with or without an offset. Time may be specified up to nanosecond precision. Offsets may be specified with seconds precision (even though offset seconds is not part of ISO 8601). For example: `1985-04-12T23:20:50.52Z` would be 20 minutes and 50.52 seconds after the 23rd hour of April 12th, 1985 in UTC. `1985-04-12T19:20:50.52-04:00` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985, 4 hours before UTC (same instant in time as the above example). If the event were in New York, this would be the equivalent of Eastern Daylight Time (EDT). Remember that offset varies in regions that observe Daylight Saving Time (or Summer Time), depending on the time of the year. `1985-04-12T19:20:50.52` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985 with no offset information. The portion of the date/time without the offset is considered the \"local date/time\". This should be the local date/time at the venue. For example, if the event occurs at the 20th hour of June 5th, 2018 at the venue, the local date/time portion should be `2018-06-05T20:00:00`. If the local date/time at the venue is 4 hours before UTC, an offset of `-04:00` may be appended. Without offset information, some rich features may not be available.",
          "type": "string"
        },
        "doorsOpenLabel": {
          "description": "The label to use for the doors open value (`doorsOpen`) on the card detail view. Each available option maps to a set of localized strings, so that translations are shown to the user based on their locale. Both `doorsOpenLabel` and `customDoorsOpenLabel` may not be set. If neither is set, the label will default to \"Doors Open\", localized. If the doors open field is unset, this label will not be used.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "DOORS_OPEN_LABEL_UNSPECIFIED",
            "DOORS_OPEN",
            "doorsOpen",
            "GATES_OPEN",
            "gatesOpen"
          ],
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `DOORS_OPEN`. Deprecated.",
            "",
            "Legacy alias for `GATES_OPEN`. Deprecated."
          ]
        },
        "doorsOpen": {
          "description": "The date/time when the doors open at the venue. This is an ISO 8601 extended format date/time, with or without an offset. Time may be specified up to nanosecond precision. Offsets may be specified with seconds precision (even though offset seconds is not part of ISO 8601). For example: `1985-04-12T23:20:50.52Z` would be 20 minutes and 50.52 seconds after the 23rd hour of April 12th, 1985 in UTC. `1985-04-12T19:20:50.52-04:00` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985, 4 hours before UTC (same instant in time as the above example). If the event were in New York, this would be the equivalent of Eastern Daylight Time (EDT). Remember that offset varies in regions that observe Daylight Saving Time (or Summer Time), depending on the time of the year. `1985-04-12T19:20:50.52` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985 with no offset information. The portion of the date/time without the offset is considered the \"local date/time\". This should be the local date/time at the venue. For example, if the event occurs at the 20th hour of June 5th, 2018 at the venue, the local date/time portion should be `2018-06-05T20:00:00`. If the local date/time at the venue is 4 hours before UTC, an offset of `-04:00` may be appended. Without offset information, some rich features may not be available.",
          "type": "string"
        }
      },
      "id": "EventDateTime",
      "type": "object"
    },
    "FieldSelector": {
      "id": "FieldSelector",
      "type": "object",
      "description": "Custom field selector to use with field overrides.",
      "properties": {
        "fields": {
          "type": "array",
          "description": "If more than one reference is supplied, then the first one that references a non-empty field will be displayed.",
          "items": {
            "$ref": "FieldReference"
          }
        }
      }
    },
    "CardRowTemplateInfo": {
      "id": "CardRowTemplateInfo",
      "type": "object",
      "properties": {
        "oneItem": {
          "$ref": "CardRowOneItem",
          "description": "Template for a row containing one item. Exactly one of \"one_item\", \"two_items\", \"three_items\" must be set."
        },
        "twoItems": {
          "description": "Template for a row containing two items. Exactly one of \"one_item\", \"two_items\", \"three_items\" must be set.",
          "$ref": "CardRowTwoItems"
        },
        "threeItems": {
          "$ref": "CardRowThreeItems",
          "description": "Template for a row containing three items. Exactly one of \"one_item\", \"two_items\", \"three_items\" must be set."
        }
      }
    },
    "CallbackOptions": {
      "properties": {
        "updateRequestUrl": {
          "deprecated": true,
          "type": "string",
          "description": "URL for the merchant endpoint that would be called to request updates. The URL should be hosted on HTTPS and robots.txt should allow the URL path to be accessible by UserAgent:Googlebot. Deprecated."
        },
        "url": {
          "description": "The HTTPS url configured by the merchant. The URL should be hosted on HTTPS and robots.txt should allow the URL path to be accessible by UserAgent:Googlebot.",
          "type": "string"
        }
      },
      "id": "CallbackOptions",
      "type": "object"
    },
    "Media": {
      "description": "A reference to data stored on the filesystem, on GFS or in blobstore.",
      "properties": {
        "cosmoBinaryReference": {
          "description": "A binary data reference for a media download. Serves as a technology-agnostic binary reference in some Google infrastructure. This value is a serialized storage_cosmo.BinaryReference proto. Storing it as bytes is a hack to get around the fact that the cosmo proto (as well as others it includes) doesn't support JavaScript. This prevents us from including the actual type of this field.",
          "type": "string",
          "format": "byte"
        },
        "mediaId": {
          "format": "byte",
          "description": "Media id to forward to the operation GetMedia. Can be set if reference_type is GET_MEDIA.",
          "type": "string"
        },
        "diffDownloadResponse": {
          "$ref": "DiffDownloadResponse",
          "description": "Set if reference_type is DIFF_DOWNLOAD_RESPONSE."
        },
        "md5Hash": {
          "format": "byte",
          "type": "string",
          "description": "Scotty-provided MD5 hash for an upload."
        },
        "hashVerified": {
          "description": "For Scotty uploads only. If a user sends a hash code and the backend has requested that Scotty verify the upload against the client hash, Scotty will perform the check on behalf of the backend and will reject it if the hashes don't match. This is set to true if Scotty performed this verification.",
          "type": "boolean"
        },
        "contentTypeInfo": {
          "description": "Extended content type information provided for Scotty uploads.",
          "$ref": "ContentTypeInfo"
        },
        "sha1Hash": {
          "description": "Scotty-provided SHA1 hash for an upload.",
          "type": "string",
          "format": "byte"
        },
        "diffChecksumsResponse": {
          "description": "Set if reference_type is DIFF_CHECKSUMS_RESPONSE.",
          "$ref": "DiffChecksumsResponse"
        },
        "downloadParameters": {
          "description": "Parameters for a media download.",
          "$ref": "DownloadParameters"
        },
        "token": {
          "description": "A unique fingerprint/version id for the media data",
          "type": "string"
        },
        "sha512Hash": {
          "format": "byte",
          "type": "string",
          "description": "Scotty-provided SHA512 hash for an upload."
        },
        "blobstore2Info": {
          "description": "Blobstore v2 info, set if reference_type is BLOBSTORE_REF and it refers to a v2 blob.",
          "$ref": "Blobstore2Info"
        },
        "blobRef": {
          "format": "byte",
          "deprecated": true,
          "type": "string",
          "description": "Blobstore v1 reference, set if reference_type is BLOBSTORE_REF This should be the byte representation of a blobstore.BlobRef. Since Blobstore is deprecating v1, use blobstore2_info instead. For now, any v2 blob will also be represented in this field as v1 BlobRef."
        },
        "algorithm": {
          "description": "Deprecated, use one of explicit hash type fields instead. Algorithm used for calculating the hash. As of 2011/01/21, \"MD5\" is the only possible value for this field. New values may be added at any time.",
          "deprecated": true,
          "type": "string"
        },
        "filename": {
          "description": "Original file name",
          "type": "string"
        },
        "diffVersionResponse": {
          "$ref": "DiffVersionResponse",
          "description": "Set if reference_type is DIFF_VERSION_RESPONSE."
        },
        "objectId": {
          "description": "Reference to a TI Blob, set if reference_type is BIGSTORE_REF.",
          "$ref": "ObjectId"
        },
        "length": {
          "description": "Size of the data, in bytes",
          "type": "string",
          "format": "int64"
        },
        "path": {
          "type": "string",
          "description": "Path to the data, set if reference_type is PATH"
        },
        "referenceType": {
          "type": "string",
          "description": "Describes what the field reference contains.",
          "enumDescriptions": [
            "Reference contains a GFS path or a local path.",
            "Reference points to a blobstore object. This could be either a v1 blob_ref or a v2 blobstore2_info. Clients should check blobstore2_info first, since v1 is being deprecated.",
            "Data is included into this proto buffer",
            "Data should be accessed from the current service using the operation GetMedia.",
            "The content for this media object is stored across multiple partial media objects under the composite_media field.",
            "Reference points to a bigstore object",
            "Indicates the data is stored in diff_version_response.",
            "Indicates the data is stored in diff_checksums_response.",
            "Indicates the data is stored in diff_download_response.",
            "Indicates the data is stored in diff_upload_request.",
            "Indicates the data is stored in diff_upload_response.",
            "Indicates the data is stored in cosmo_binary_reference.",
            "Informs Scotty to generate a response payload with the size specified in the length field. The contents of the payload are generated by Scotty and are undefined. This is useful for testing download speeds between the user and Scotty without involving a real payload source. Note: range is not supported when using arbitrary_bytes."
          ],
          "enum": [
            "PATH",
            "BLOB_REF",
            "INLINE",
            "GET_MEDIA",
            "COMPOSITE_MEDIA",
            "BIGSTORE_REF",
            "DIFF_VERSION_RESPONSE",
            "DIFF_CHECKSUMS_RESPONSE",
            "DIFF_DOWNLOAD_RESPONSE",
            "DIFF_UPLOAD_REQUEST",
            "DIFF_UPLOAD_RESPONSE",
            "COSMO_BINARY_REFERENCE",
            "ARBITRARY_BYTES"
          ]
        },
        "contentType": {
          "type": "string",
          "description": "MIME type of the data"
        },
        "sha256Hash": {
          "format": "byte",
          "type": "string",
          "description": "Scotty-provided SHA256 hash for an upload."
        },
        "isPotentialRetry": {
          "description": "|is_potential_retry| is set false only when Scotty is certain that it has not sent the request before. When a client resumes an upload, this field must be set true in agent calls, because Scotty cannot be certain that it has never sent the request before due to potential failure in the session state persistence.",
          "type": "boolean"
        },
        "timestamp": {
          "format": "uint64",
          "type": "string",
          "description": "Time at which the media data was last updated, in milliseconds since UNIX epoch"
        },
        "hash": {
          "description": "Deprecated, use one of explicit hash type fields instead. These two hash related fields will only be populated on Scotty based media uploads and will contain the content of the hash group in the NotificationRequest: http://cs/#google3/blobstore2/api/scotty/service/proto/upload_listener.proto&q=class:Hash Hex encoded hash value of the uploaded media.",
          "deprecated": true,
          "type": "string"
        },
        "diffUploadResponse": {
          "description": "Set if reference_type is DIFF_UPLOAD_RESPONSE.",
          "$ref": "DiffUploadResponse"
        },
        "inline": {
          "format": "byte",
          "type": "string",
          "description": "Media data, set if reference_type is INLINE"
        },
        "compositeMedia": {
          "items": {
            "$ref": "CompositeMedia"
          },
          "type": "array",
          "description": "A composite media composed of one or more media objects, set if reference_type is COMPOSITE_MEDIA. The media length field must be set to the sum of the lengths of all composite media objects. Note: All composite media must have length specified."
        },
        "crc32cHash": {
          "format": "uint32",
          "type": "integer",
          "description": "For Scotty Uploads: Scotty-provided hashes for uploads For Scotty Downloads: (WARNING: DO NOT USE WITHOUT PERMISSION FROM THE SCOTTY TEAM.) A Hash provided by the agent to be used to verify the data being downloaded. Currently only supported for inline payloads. Further, only crc32c_hash is currently supported."
        },
        "diffUploadRequest": {
          "$ref": "DiffUploadRequest",
          "description": "Set if reference_type is DIFF_UPLOAD_REQUEST."
        },
        "bigstoreObjectRef": {
          "description": "Use object_id instead.",
          "deprecated": true,
          "type": "string",
          "format": "byte"
        }
      },
      "id": "Media",
      "type": "object"
    },
    "CardBarcodeSectionDetails": {
      "id": "CardBarcodeSectionDetails",
      "type": "object",
      "properties": {
        "firstBottomDetail": {
          "description": "Optional information to display below the barcode.",
          "$ref": "BarcodeSectionDetail"
        },
        "firstTopDetail": {
          "description": "Optional information to display above the barcode. If `secondTopDetail` is defined, this will be displayed to the start side of this detail section.",
          "$ref": "BarcodeSectionDetail"
        },
        "secondTopDetail": {
          "$ref": "BarcodeSectionDetail",
          "description": "Optional second piece of information to display above the barcode. If `firstTopDetail` is defined, this will be displayed to the end side of this detail section."
        }
      }
    },
    "LoyaltyPointsBalance": {
      "properties": {
        "int": {
          "format": "int32",
          "type": "integer",
          "description": "The integer form of a balance. Only one of these subtypes (string, int, double, money) should be populated."
        },
        "string": {
          "type": "string",
          "description": "The string form of a balance. Only one of these subtypes (string, int, double, money) should be populated."
        },
        "double": {
          "type": "number",
          "description": "The double form of a balance. Only one of these subtypes (string, int, double, money) should be populated.",
          "format": "double"
        },
        "money": {
          "$ref": "Money",
          "description": "The money form of a balance. Only one of these subtypes (string, int, double, money) should be populated."
        }
      },
      "id": "LoyaltyPointsBalance",
      "type": "object"
    },
    "AddMessageRequest": {
      "description": "Resource used when the AddMessage endpoints are called.",
      "properties": {
        "message": {
          "$ref": "Message"
        }
      },
      "id": "AddMessageRequest",
      "type": "object"
    },
    "LocalizedString": {
      "id": "LocalizedString",
      "type": "object",
      "properties": {
        "translatedValues": {
          "items": {
            "$ref": "TranslatedString"
          },
          "description": "Contains the translations for the string.",
          "type": "array"
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#localizedString\"`.",
          "deprecated": true,
          "type": "string"
        },
        "defaultValue": {
          "$ref": "TranslatedString",
          "description": "Contains the string to be displayed if no appropriate translation is available."
        }
      }
    },
    "GenericObject": {
      "description": "Generic Object",
      "properties": {
        "appLinkData": {
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding class only object AppLinkData will be displayed.",
          "$ref": "AppLinkData"
        },
        "id": {
          "description": "Required. The unique identifier for an object. This ID must be unique across all objects from an issuer. This value needs to follow the format `issuerID.identifier` where `issuerID` is issued by Google and `identifier` is chosen by you. The unique identifier can only include alphanumeric characters, `.`, `_`, or `-`.",
          "type": "string"
        },
        "messages": {
          "items": {
            "$ref": "Message"
          },
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.",
          "type": "array"
        },
        "linkedObjectIds": {
          "type": "array",
          "description": "linked_object_ids are a list of other objects such as event ticket, loyalty, offer, generic, giftcard, transit and boarding pass that should be automatically attached to this generic object. If a user had saved this generic card, then these linked_object_ids would be automatically pushed to the user's wallet (unless they turned off the setting to receive such linked passes). Make sure that objects present in linked_object_ids are already inserted - if not, calls would fail. Once linked, the linked objects cannot be unlinked. You cannot link objects belonging to another issuer. There is a limit to the number of objects that can be linked to a single object. After the limit is reached, new linked objects in the call will be ignored silently. Object IDs should follow the format issuer ID. identifier where the former is issued by Google and the latter is chosen by you.",
          "items": {
            "type": "string"
          }
        },
        "passConstraints": {
          "description": "Pass constraints for the object. Includes limiting NFC and screenshot behaviors.",
          "$ref": "PassConstraints"
        },
        "barcode": {
          "$ref": "Barcode",
          "description": "The barcode type and value. If pass does not have a barcode, we can allow the issuer to set Barcode.alternate_text and display just that."
        },
        "groupingInfo": {
          "description": "Information that controls how passes are grouped together.",
          "$ref": "GroupingInfo"
        },
        "imageModulesData": {
          "description": "Image module data. Only one of the image from class and one from object level will be rendered when both set.",
          "type": "array",
          "items": {
            "$ref": "ImageModuleData"
          }
        },
        "smartTapRedemptionValue": {
          "type": "string",
          "description": "The value that will be transmitted to a Smart Tap certified terminal over NFC for this object. The class level fields `enableSmartTap` and `redemptionIssuers` must also be set up correctly in order for the pass to support Smart Tap. Only ASCII characters are supported."
        },
        "wideLogo": {
          "$ref": "Image",
          "description": "The wide logo of the pass. When provided, this will be used in place of the logo in the top left of the card view."
        },
        "merchantLocations": {
          "description": "Merchant locations. There is a maximum of ten on the object. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints.",
          "type": "array",
          "items": {
            "$ref": "MerchantLocation"
          }
        },
        "linksModuleData": {
          "description": "Links module data. If `linksModuleData` is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from class and 10 from object.",
          "$ref": "LinksModuleData"
        },
        "state": {
          "enumDescriptions": [
            "Default value.",
            "Object is active and displayed to with other active objects.",
            "Legacy alias for `ACTIVE`. Deprecated.",
            "Object has completed it's lifecycle.",
            "Legacy alias for `COMPLETED`. Deprecated.",
            "Object is no longer valid (`validTimeInterval` passed).",
            "Legacy alias for `EXPIRED`. Deprecated.",
            "Object is no longer valid",
            "Legacy alias for `INACTIVE`. Deprecated."
          ],
          "type": "string",
          "description": "The state of the object. This field is used to determine how an object is displayed in the app. For example, an `inactive` object is moved to the \"Expired passes\" section. If this is not provided, the object would be considered `ACTIVE`.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "ACTIVE",
            "active",
            "COMPLETED",
            "completed",
            "EXPIRED",
            "expired",
            "INACTIVE",
            "inactive"
          ]
        },
        "hasUsers": {
          "description": "Indicates if the object has users. This field is set by the platform.",
          "type": "boolean"
        },
        "saveRestrictions": {
          "description": "Restrictions on the object that needs to be verified before the user tries to save the pass. Note that this restrictions will only be applied during save time. If the restrictions changed after a user saves the pass, the new restrictions will not be applied to an already saved pass.",
          "$ref": "SaveRestrictions"
        },
        "heroImage": {
          "description": "Banner image displayed on the front of the card if present. The image will be displayed at 100% width.",
          "$ref": "Image"
        },
        "valueAddedModuleData": {
          "type": "array",
          "description": "Optional value added module data. Maximum of fifteen on the object. For a pass only fifteen will be displayed.",
          "items": {
            "$ref": "ValueAddedModuleData"
          }
        },
        "genericType": {
          "description": "Specify which `GenericType` the card belongs to.",
          "enumDescriptions": [
            "Unspecified generic type.",
            "Represents a season pass.",
            "Represents a utility bill.",
            "Represents a parking pass.",
            "Represents a voucher.",
            "Represents a gym membership card.",
            "Represents a library card.",
            "Represents a reservation.",
            "Represents an auto-insurance card.",
            "Represents a home-insurance card.",
            "Represents an entry ticket.",
            "Represents a receipt.",
            "Represents a loyalty card. Please note that it is advisable to use a dedicated Loyalty card pass type instead of this generic type. A dedicated loyalty card pass type offers more features and functionality than a generic pass type.",
            "Represents a business card.",
            "Represents a barcode pass.",
            "Represents a membership card.",
            "Represents a student card.",
            "Represents a transit pass.",
            "Represents a vehicle registration.",
            "Represents another type of generic pass."
          ],
          "enum": [
            "GENERIC_TYPE_UNSPECIFIED",
            "GENERIC_SEASON_PASS",
            "GENERIC_UTILITY_BILLS",
            "GENERIC_PARKING_PASS",
            "GENERIC_VOUCHER",
            "GENERIC_GYM_MEMBERSHIP",
            "GENERIC_LIBRARY_MEMBERSHIP",
            "GENERIC_RESERVATIONS",
            "GENERIC_AUTO_INSURANCE",
            "GENERIC_HOME_INSURANCE",
            "GENERIC_ENTRY_TICKET",
            "GENERIC_RECEIPT",
            "GENERIC_LOYALTY_CARD",
            "GENERIC_BUSINESS_CARD",
            "GENERIC_BARCODE_PASS",
            "GENERIC_MEMBERSHIP_CARD",
            "GENERIC_STUDENT_CARD",
            "GENERIC_TRANSIT_PASS",
            "GENERIC_VEHICLE_REGISTRATION",
            "GENERIC_OTHER"
          ],
          "type": "string"
        },
        "cardTitle": {
          "description": "Required. The header of the pass. This is usually the Business name such as \"XXX Gym\", \"AAA Insurance\". This field is required and appears in the header row at the very top of the pass.",
          "$ref": "LocalizedString"
        },
        "notifications": {
          "description": "The notification settings that are enabled for this object.",
          "$ref": "Notifications"
        },
        "header": {
          "$ref": "LocalizedString",
          "description": "Required. The title of the pass, such as \"50% off coupon\" or \"Library card\" or \"Voucher\". This field is required and appears in the title row of the pass detail view."
        },
        "hexBackgroundColor": {
          "type": "string",
          "description": "The background color for the card. If not set, the dominant color of the hero image is used, and if no hero image is set, the dominant color of the logo is used and if logo is not set, a color would be chosen by Google."
        },
        "subheader": {
          "$ref": "LocalizedString",
          "description": "The title label of the pass, such as location where this pass can be used. Appears right above the title in the title row in the pass detail view."
        },
        "rotatingBarcode": {
          "$ref": "RotatingBarcode",
          "description": "The rotating barcode settings/details."
        },
        "logo": {
          "$ref": "Image",
          "description": "The logo image of the pass. This image is displayed in the card detail view in upper left, and also on the list/thumbnail view. If the logo is not present, the first letter of `cardTitle` would be shown as logo."
        },
        "classId": {
          "type": "string",
          "description": "Required. The class associated with this object. The class must be of the same type as this object, must already exist, and must be approved. Class IDs should follow the format `issuerID.identifier` where `issuerID` is issued by Google and `identifier` is chosen by you."
        },
        "textModulesData": {
          "type": "array",
          "description": "Text module data. If `textModulesData` is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from class and 10 from object.",
          "items": {
            "$ref": "TextModuleData"
          }
        },
        "validTimeInterval": {
          "$ref": "TimeInterval",
          "description": "The time period this object will be considered valid or usable. When the time period is passed, the object will be considered expired, which will affect the rendering on user's devices."
        }
      },
      "id": "GenericObject",
      "type": "object"
    },
    "FrequentFlyerInfo": {
      "id": "FrequentFlyerInfo",
      "type": "object",
      "properties": {
        "frequentFlyerProgramName": {
          "description": "Frequent flyer program name. eg: \"Lufthansa Miles & More\"",
          "$ref": "LocalizedString"
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#frequentFlyerInfo\"`.",
          "deprecated": true,
          "type": "string"
        },
        "frequentFlyerNumber": {
          "type": "string",
          "description": "Frequent flyer number. Required for each nested object of kind `walletobjects#frequentFlyerInfo`."
        }
      }
    },
    "TransitObjectListResponse": {
      "id": "TransitObjectListResponse",
      "type": "object",
      "properties": {
        "resources": {
          "description": "Resources corresponding to the list request.",
          "type": "array",
          "items": {
            "$ref": "TransitObject"
          }
        },
        "pagination": {
          "description": "Pagination of the response.",
          "$ref": "Pagination"
        }
      }
    },
    "FlightHeader": {
      "id": "FlightHeader",
      "type": "object",
      "properties": {
        "flightNumber": {
          "type": "string",
          "description": "The flight number without IATA carrier code. This field should contain only digits. This is a required property of `flightHeader`. eg: \"123\""
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#flightHeader\"`.",
          "deprecated": true,
          "type": "string"
        },
        "carrier": {
          "description": "Information about airline carrier. This is a required property of `flightHeader`.",
          "$ref": "FlightCarrier"
        },
        "flightNumberDisplayOverride": {
          "description": "Override value to use for flight number. The default value used for display purposes is carrier + flight_number. If a different value needs to be shown to passengers, use this field to override the default behavior. eg: \"XX1234 / YY576\"",
          "type": "string"
        },
        "operatingCarrier": {
          "$ref": "FlightCarrier",
          "description": "Information about operating airline carrier."
        },
        "operatingFlightNumber": {
          "type": "string",
          "description": "The flight number used by the operating carrier without IATA carrier code. This field should contain only digits. eg: \"234\""
        }
      }
    },
    "OfferObjectAddMessageResponse": {
      "id": "OfferObjectAddMessageResponse",
      "type": "object",
      "properties": {
        "resource": {
          "description": "The updated OfferObject resource.",
          "$ref": "OfferObject"
        }
      }
    },
    "UploadPrivateImageResponse": {
      "id": "UploadPrivateImageResponse",
      "type": "object",
      "description": "Response for uploading the private image.",
      "properties": {
        "privateImageId": {
          "description": "Unique ID of the uploaded image to be referenced later in Image.private_image_id.",
          "type": "string"
        }
      }
    },
    "BoardingAndSeatingInfo": {
      "id": "BoardingAndSeatingInfo",
      "type": "object",
      "properties": {
        "boardingPrivilegeImage": {
          "$ref": "Image",
          "description": "A small image shown above the boarding barcode. Airlines can use it to communicate any special boarding privileges. In the event the security program logo is also set, this image might be rendered alongside the logo for that security program."
        },
        "seatAssignment": {
          "$ref": "LocalizedString",
          "description": "The passenger's seat assignment. To be used when there is no specific identifier to use in `seatNumber`. eg: \"assigned at gate\""
        },
        "seatNumber": {
          "type": "string",
          "description": "The value of passenger seat. If there is no specific identifier, use `seatAssignment` instead. eg: \"25A\""
        },
        "boardingPosition": {
          "type": "string",
          "description": "The value of boarding position. eg: \"76\""
        },
        "boardingGroup": {
          "type": "string",
          "description": "The value of boarding group (or zone) this passenger shall board with. eg: \"B\" The label for this value will be determined by the `boardingPolicy` field in the `flightClass` referenced by this object."
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#boardingAndSeatingInfo\"`.",
          "deprecated": true,
          "type": "string"
        },
        "seatClass": {
          "description": "The value of the seat class. eg: \"Economy\" or \"Economy Plus\"",
          "type": "string"
        },
        "boardingDoor": {
          "type": "string",
          "description": "Set this field only if this flight boards through more than one door or bridge and you want to explicitly print the door location on the boarding pass. Most airlines route their passengers to the right door or bridge by refering to doors/bridges by the `seatClass`. In those cases `boardingDoor` should not be set.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "BOARDING_DOOR_UNSPECIFIED",
            "FRONT",
            "front",
            "BACK",
            "back"
          ],
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `FRONT`. Deprecated.",
            "",
            "Legacy alias for `BACK`. Deprecated."
          ]
        },
        "sequenceNumber": {
          "description": "The sequence number on the boarding pass. This usually matches the sequence in which the passengers checked in. Airline might use the number for manual boarding and bag tags. eg: \"49\"",
          "type": "string"
        }
      }
    },
    "GenericObjectListResponse": {
      "description": "List response which contains the list of all generic objects for a given issuer ID.",
      "properties": {
        "resources": {
          "description": "Resources corresponding to the list request.",
          "type": "array",
          "items": {
            "$ref": "GenericObject"
          }
        },
        "pagination": {
          "description": "Pagination of the response.",
          "$ref": "Pagination"
        }
      },
      "id": "GenericObjectListResponse",
      "type": "object"
    },
    "FirstRowOption": {
      "id": "FirstRowOption",
      "type": "object",
      "properties": {
        "transitOption": {
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `ORIGIN_AND_DESTINATION_NAMES`. Deprecated.",
            "",
            "Legacy alias for `ORIGIN_AND_DESTINATION_CODES`. Deprecated.",
            "",
            "Legacy alias for `ORIGIN_NAME`. Deprecated."
          ],
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "TRANSIT_OPTION_UNSPECIFIED",
            "ORIGIN_AND_DESTINATION_NAMES",
            "originAndDestinationNames",
            "ORIGIN_AND_DESTINATION_CODES",
            "originAndDestinationCodes",
            "ORIGIN_NAME",
            "originName"
          ],
          "type": "string"
        },
        "fieldOption": {
          "description": "A reference to the field to be displayed in the first row.",
          "$ref": "FieldSelector"
        }
      }
    },
    "AuthenticationKey": {
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer",
          "description": "Available only to Smart Tap enabled partners. Contact support for additional guidance."
        },
        "publicKeyPem": {
          "type": "string",
          "description": "Available only to Smart Tap enabled partners. Contact support for additional guidance."
        }
      },
      "id": "AuthenticationKey",
      "type": "object"
    },
    "AppLinkData": {
      "id": "AppLinkData",
      "type": "object",
      "properties": {
        "androidAppLinkInfo": {
          "$ref": "AppLinkDataAppLinkInfo",
          "description": "Optional information about the partner app link."
        },
        "webAppLinkInfo": {
          "description": "Optional information about the partner web link.",
          "$ref": "AppLinkDataAppLinkInfo"
        },
        "iosAppLinkInfo": {
          "$ref": "AppLinkDataAppLinkInfo",
          "description": "Deprecated. Links to open iOS apps are not supported.",
          "deprecated": true
        },
        "displayText": {
          "description": "Optional display text for the app link button. Character limit is 30.",
          "$ref": "LocalizedString"
        }
      }
    },
    "AirportInfo": {
      "id": "AirportInfo",
      "type": "object",
      "properties": {
        "airportNameOverride": {
          "$ref": "LocalizedString",
          "description": "Optional field that overrides the airport city name defined by IATA. By default, Google takes the `airportIataCode` provided and maps it to the official airport city name defined by IATA. Official IATA airport city names can be found at IATA airport city names website. For example, for the airport IATA code \"LTN\", IATA website tells us that the corresponding airport city is \"London\". If this field is not populated, Google would display \"London\". However, populating this field with a custom name (eg: \"London Luton\") would override it."
        },
        "airportIataCode": {
          "type": "string",
          "description": "Three character IATA airport code. This is a required field for `origin` and `destination`. Eg: \"SFO\""
        },
        "gate": {
          "description": "A name of the gate. Eg: \"B59\" or \"59\"",
          "type": "string"
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#airportInfo\"`.",
          "deprecated": true,
          "type": "string"
        },
        "terminal": {
          "description": "Terminal name. Eg: \"INTL\" or \"I\"",
          "type": "string"
        }
      }
    },
    "SetPassUpdateNoticeResponse": {
      "id": "SetPassUpdateNoticeResponse",
      "type": "object",
      "description": "A response to a request to notify Google of an awaiting update to a private pass.",
      "properties": {}
    },
    "DetailsTemplateOverride": {
      "id": "DetailsTemplateOverride",
      "type": "object",
      "properties": {
        "detailsItemInfos": {
          "type": "array",
          "description": "Information for the \"nth\" item displayed in the details list.",
          "items": {
            "$ref": "DetailsItemInfo"
          }
        }
      }
    },
    "ListTemplateOverride": {
      "id": "ListTemplateOverride",
      "type": "object",
      "properties": {
        "firstRowOption": {
          "description": "Specifies from a predefined set of options or from a reference to the field what will be displayed in the first row. To set this override, set the FirstRowOption.fieldOption to the FieldSelector of your choice.",
          "$ref": "FirstRowOption"
        },
        "secondRowOption": {
          "$ref": "FieldSelector",
          "description": "A reference to the field to be displayed in the second row. This option is only displayed if there are not multiple user objects in a group. If there is a group, the second row will always display a field shared by all objects. To set this override, please set secondRowOption to the FieldSelector of you choice."
        },
        "thirdRowOption": {
          "$ref": "FieldSelector",
          "deprecated": true,
          "description": "An unused/deprecated field. Setting it will have no effect on what the user sees."
        }
      }
    },
    "LoyaltyClassAddMessageResponse": {
      "properties": {
        "resource": {
          "description": "The updated LoyaltyClass resource.",
          "$ref": "LoyaltyClass"
        }
      },
      "id": "LoyaltyClassAddMessageResponse",
      "type": "object"
    },
    "Uri": {
      "id": "Uri",
      "type": "object",
      "properties": {
        "id": {
          "description": "The ID associated with a uri. This field is here to enable ease of management of uris.",
          "type": "string"
        },
        "description": {
          "type": "string",
          "description": "The URI's title appearing in the app as text. Recommended maximum is 20 characters to ensure full string is displayed on smaller screens. Note that in some contexts this text is not used, such as when `description` is part of an image."
        },
        "localizedDescription": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the description. Recommended maximum is 20 characters to ensure full string is displayed on smaller screens."
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#uri\"`."
        },
        "uri": {
          "type": "string",
          "description": "The location of a web page, image, or other resource. URIs in the `LinksModuleData` module can have different prefixes indicating the type of URI (a link to a web page, a link to a map, a telephone number, or an email address). URIs must have a scheme."
        }
      }
    },
    "ClassTemplateInfo": {
      "id": "ClassTemplateInfo",
      "type": "object",
      "properties": {
        "cardBarcodeSectionDetails": {
          "$ref": "CardBarcodeSectionDetails",
          "description": "Specifies extra information to be displayed above and below the barcode."
        },
        "detailsTemplateOverride": {
          "$ref": "DetailsTemplateOverride",
          "description": "Override for the details view (beneath the card view)."
        },
        "listTemplateOverride": {
          "description": "Override for the passes list view.",
          "$ref": "ListTemplateOverride"
        },
        "cardTemplateOverride": {
          "description": "Override for the card view.",
          "$ref": "CardTemplateOverride"
        }
      }
    },
    "JwtResource": {
      "description": "A JWT representation of a pass.",
      "properties": {
        "jwt": {
          "description": "Required. A string representing a JWT of the format described at https://developers.google.com/wallet/reference/rest/v1/Jwt",
          "type": "string"
        }
      },
      "id": "JwtResource",
      "type": "object"
    },
    "DiffChecksumsResponse": {
      "description": "Backend response for a Diff get checksums response. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol.",
      "properties": {
        "checksumsLocation": {
          "description": "Exactly one of these fields must be populated. If checksums_location is filled, the server will return the corresponding contents to the user. If object_location is filled, the server will calculate the checksums based on the content there and return that to the user. For details on the format of the checksums, see http://go/scotty-diff-protocol.",
          "$ref": "CompositeMedia"
        },
        "objectSizeBytes": {
          "type": "string",
          "description": "The total size of the server object.",
          "format": "int64"
        },
        "objectVersion": {
          "type": "string",
          "description": "The object version of the object the checksums are being returned for."
        },
        "chunkSizeBytes": {
          "format": "int64",
          "description": "The chunk size of checksums. Must be a multiple of 256KB.",
          "type": "string"
        },
        "objectLocation": {
          "$ref": "CompositeMedia",
          "description": "If set, calculate the checksums based on the contents and return them to the caller."
        }
      },
      "id": "DiffChecksumsResponse",
      "type": "object"
    },
    "Review": {
      "id": "Review",
      "type": "object",
      "properties": {
        "comments": {
          "type": "string"
        }
      }
    },
    "FlightObject": {
      "id": "FlightObject",
      "type": "object",
      "properties": {
        "passConstraints": {
          "description": "Pass constraints for the object. Includes limiting NFC and screenshot behaviors.",
          "$ref": "PassConstraints"
        },
        "appLinkData": {
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding class only object AppLinkData will be displayed.",
          "$ref": "AppLinkData"
        },
        "id": {
          "type": "string",
          "description": "Required. The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'."
        },
        "messages": {
          "type": "array",
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.",
          "items": {
            "$ref": "Message"
          }
        },
        "infoModuleData": {
          "$ref": "InfoModuleData",
          "description": "Deprecated. Use textModulesData instead."
        },
        "linkedObjectIds": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "linked_object_ids are a list of other objects such as event ticket, loyalty, offer, generic, giftcard, transit and boarding pass that should be automatically attached to this flight object. If a user had saved this boarding pass, then these linked_object_ids would be automatically pushed to the user's wallet (unless they turned off the setting to receive such linked passes). Make sure that objects present in linked_object_ids are already inserted - if not, calls would fail. Once linked, the linked objects cannot be unlinked. You cannot link objects belonging to another issuer. There is a limit to the number of objects that can be linked to a single object. After the limit is reached, new linked objects in the call will be ignored silently. Object IDs should follow the format issuer ID. identifier where the former is issued by Google and the latter is chosen by you."
        },
        "smartTapRedemptionValue": {
          "type": "string",
          "description": "The value that will be transmitted to a Smart Tap certified terminal over NFC for this object. The class level fields `enableSmartTap` and `redemptionIssuers` must also be set up correctly in order for the pass to support Smart Tap. Only ASCII characters are supported."
        },
        "hasLinkedDevice": {
          "type": "boolean",
          "description": "Whether this object is currently linked to a single device. This field is set by the platform when a user saves the object, linking it to their device. Intended for use by select partners. Contact support for additional information."
        },
        "merchantLocations": {
          "type": "array",
          "description": "Merchant locations. There is a maximum of ten on the object. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints.",
          "items": {
            "$ref": "MerchantLocation"
          }
        },
        "securityProgramLogo": {
          "$ref": "Image",
          "description": "An image for the security program that applies to the passenger."
        },
        "barcode": {
          "description": "The barcode type and value.",
          "$ref": "Barcode"
        },
        "groupingInfo": {
          "description": "Information that controls how passes are grouped together.",
          "$ref": "GroupingInfo"
        },
        "imageModulesData": {
          "description": "Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level.",
          "type": "array",
          "items": {
            "$ref": "ImageModuleData"
          }
        },
        "valueAddedModuleData": {
          "items": {
            "$ref": "ValueAddedModuleData"
          },
          "description": "Optional value added module data. Maximum of fifteen on the object. For a pass only fifteen will be displayed.",
          "type": "array"
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#flightObject\"`.",
          "deprecated": true,
          "type": "string"
        },
        "reservationInfo": {
          "description": "Required. Information about flight reservation.",
          "$ref": "ReservationInfo"
        },
        "passengerName": {
          "description": "Required. Passenger name as it would appear on the boarding pass. eg: \"Dave M Gahan\" or \"Gahan/Dave\" or \"GAHAN/DAVEM\"",
          "type": "string"
        },
        "locations": {
          "items": {
            "$ref": "LatLongPoint"
          },
          "deprecated": true,
          "type": "array",
          "description": "Note: This field is currently not supported to trigger geo notifications."
        },
        "hasUsers": {
          "type": "boolean",
          "description": "Indicates if the object has users. This field is set by the platform."
        },
        "state": {
          "enumDescriptions": [
            "Default value.",
            "Object is active and displayed to with other active objects.",
            "Legacy alias for `ACTIVE`. Deprecated.",
            "Object has completed it's lifecycle.",
            "Legacy alias for `COMPLETED`. Deprecated.",
            "Object is no longer valid (`validTimeInterval` passed).",
            "Legacy alias for `EXPIRED`. Deprecated.",
            "Object is no longer valid",
            "Legacy alias for `INACTIVE`. Deprecated."
          ],
          "description": "Required. The state of the object. This field is used to determine how an object is displayed in the app. For example, an `inactive` object is moved to the \"Expired passes\" section.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "ACTIVE",
            "active",
            "COMPLETED",
            "completed",
            "EXPIRED",
            "expired",
            "INACTIVE",
            "inactive"
          ],
          "type": "string"
        },
        "linksModuleData": {
          "description": "Links module data. If links module data is also defined on the class, both will be displayed.",
          "$ref": "LinksModuleData"
        },
        "classReference": {
          "$ref": "FlightClass",
          "description": "A copy of the inherited fields of the parent class. These fields are retrieved during a GET."
        },
        "saveRestrictions": {
          "$ref": "SaveRestrictions",
          "description": "Restrictions on the object that needs to be verified before the user tries to save the pass. Note that this restrictions will only be applied during save time. If the restrictions changed after a user saves the pass, the new restrictions will not be applied to an already saved pass."
        },
        "disableExpirationNotification": {
          "type": "boolean",
          "description": "Indicates if notifications should explicitly be suppressed. If this field is set to true, regardless of the `messages` field, expiration notifications to the user will be suppressed. By default, this field is set to false. Currently, this can only be set for Flights."
        },
        "heroImage": {
          "description": "Optional banner image displayed on the front of the card. If none is present, hero image of the class, if present, will be displayed. If hero image of the class is also not present, nothing will be displayed.",
          "$ref": "Image"
        },
        "classId": {
          "description": "Required. The class associated with this object. The class must be of the same type as this object, must already exist, and must be approved. Class IDs should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you.",
          "type": "string"
        },
        "textModulesData": {
          "items": {
            "$ref": "TextModuleData"
          },
          "type": "array",
          "description": "Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class."
        },
        "version": {
          "description": "Deprecated",
          "deprecated": true,
          "type": "string",
          "format": "int64"
        },
        "validTimeInterval": {
          "$ref": "TimeInterval",
          "description": "The time period this object will be `active` and object can be used. An object's state will be changed to `expired` when this time period has passed."
        },
        "notifyPreference": {
          "description": "Whether or not field updates to this object should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If set to DO_NOT_NOTIFY or NOTIFICATION_SETTINGS_UNSPECIFIED, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.",
          "enumDescriptions": [
            "Default behavior is no notifications sent.",
            "This value will result in a notification being sent, if the updated fields are part of an allowlist."
          ],
          "enum": [
            "NOTIFICATION_SETTINGS_FOR_UPDATES_UNSPECIFIED",
            "NOTIFY_ON_UPDATE"
          ],
          "type": "string"
        },
        "hexBackgroundColor": {
          "description": "The background color for the card. If not set the dominant color of the hero image is used, and if no hero image is set, the dominant color of the logo is used. The format is #rrggbb where rrggbb is a hex RGB triplet, such as `#ffcc00`. You can also use the shorthand version of the RGB triplet which is #rgb, such as `#fc0`.",
          "type": "string"
        },
        "boardingAndSeatingInfo": {
          "description": "Passenger specific information about boarding and seating.",
          "$ref": "BoardingAndSeatingInfo"
        },
        "rotatingBarcode": {
          "$ref": "RotatingBarcode",
          "description": "The rotating barcode type and value."
        }
      }
    },
    "OfferObjectListResponse": {
      "properties": {
        "resources": {
          "items": {
            "$ref": "OfferObject"
          },
          "type": "array",
          "description": "Resources corresponding to the list request."
        },
        "pagination": {
          "$ref": "Pagination",
          "description": "Pagination of the response."
        }
      },
      "id": "OfferObjectListResponse",
      "type": "object"
    },
    "ReservationInfo": {
      "id": "ReservationInfo",
      "type": "object",
      "properties": {
        "confirmationCode": {
          "type": "string",
          "description": "Confirmation code needed to check into this flight. This is the number that the passenger would enter into a kiosk at the airport to look up the flight and print a boarding pass."
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#reservationInfo\"`.",
          "deprecated": true,
          "type": "string"
        },
        "eticketNumber": {
          "type": "string",
          "description": "E-ticket number."
        },
        "frequentFlyerInfo": {
          "$ref": "FrequentFlyerInfo",
          "description": "Frequent flyer membership information."
        }
      }
    },
    "FieldReference": {
      "id": "FieldReference",
      "type": "object",
      "description": "Reference definition to use with field overrides.",
      "properties": {
        "fieldPath": {
          "description": "Path to the field being referenced, prefixed with \"object\" or \"class\" and separated with dots. For example, it may be the string \"object.purchaseDetails.purchasePrice\".",
          "type": "string"
        },
        "dateFormat": {
          "enumDescriptions": [
            "Default option when no format is specified, when selected, no formatting will be applied.",
            "Renders `2018-12-14T13:00:00` as `Dec 14, 1:00 PM` in `en_US`.",
            "Legacy alias for `DATE_TIME`. Deprecated.",
            "Renders `2018-12-14T13:00:00` as `Dec 14` in `en_US`.",
            "Legacy alias for `DATE_ONLY`. Deprecated.",
            "Renders `2018-12-14T13:00:00` as `1:00 PM` in `en_US`.",
            "Legacy alias for `TIME_ONLY`. Deprecated.",
            "Renders `2018-12-14T13:00:00` as `Dec 14, 2018, 1:00 PM` in `en_US`.",
            "Legacy alias for `DATE_TIME_YEAR`. Deprecated.",
            "Renders `2018-12-14T13:00:00` as `Dec 14, 2018` in `en_US`.",
            "Legacy alias for `DATE_YEAR`. Deprecated.",
            "Renders `2018-12-14T13:00:00` as `2018-12`.",
            "Renders `2018-12-14T13:00:00` as `2018-12-14`."
          ],
          "description": "Only valid if the `fieldPath` references a date field. Chooses how the date field will be formatted and displayed in the UI.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            false
          ],
          "enum": [
            "DATE_FORMAT_UNSPECIFIED",
            "DATE_TIME",
            "dateTime",
            "DATE_ONLY",
            "dateOnly",
            "TIME_ONLY",
            "timeOnly",
            "DATE_TIME_YEAR",
            "dateTimeYear",
            "DATE_YEAR",
            "dateYear",
            "YEAR_MONTH",
            "YEAR_MONTH_DAY"
          ],
          "type": "string"
        }
      }
    },
    "TransitClassAddMessageResponse": {
      "id": "TransitClassAddMessageResponse",
      "type": "object",
      "properties": {
        "resource": {
          "description": "The updated TransitClass resource.",
          "$ref": "TransitClass"
        }
      }
    },
    "UploadPrivateImageRequest": {
      "id": "UploadPrivateImageRequest",
      "type": "object",
      "description": "Request to upload a private image to use in a pass.",
      "properties": {}
    },
    "GiftCardClass": {
      "properties": {
        "cardNumberLabel": {
          "type": "string",
          "description": "The label to display for the card number, such as \"Card Number\"."
        },
        "locations": {
          "items": {
            "$ref": "LatLongPoint"
          },
          "description": "Note: This field is currently not supported to trigger geo notifications.",
          "deprecated": true,
          "type": "array"
        },
        "homepageUri": {
          "$ref": "Uri",
          "description": "The URI of your application's home page. Populating the URI in this field results in the exact same behavior as populating an URI in linksModuleData (when an object is rendered, a link to the homepage is shown in what would usually be thought of as the linksModuleData section of the object)."
        },
        "valueAddedModuleData": {
          "type": "array",
          "description": "Optional value added module data. Maximum of fifteen on the class. For a pass only fifteen will be displayed, prioritizing those from the object.",
          "items": {
            "$ref": "ValueAddedModuleData"
          }
        },
        "eventNumberLabel": {
          "description": "The label to display for event number, such as \"Target Event #\".",
          "type": "string"
        },
        "localizedCardNumberLabel": {
          "description": "Translated strings for the card_number_label.",
          "$ref": "LocalizedString"
        },
        "enableSmartTap": {
          "type": "boolean",
          "description": "Identifies whether this class supports Smart Tap. The `redemptionIssuers` and object level `smartTapRedemptionLevel` fields must also be set up correctly in order for a pass to support Smart Tap."
        },
        "securityAnimation": {
          "$ref": "SecurityAnimation",
          "description": "Optional information about the security animation. If this is set a security animation will be rendered on pass details."
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#giftCardClass\"`."
        },
        "heroImage": {
          "description": "Optional banner image displayed on the front of the card. If none is present, nothing will be displayed. The image will display at 100% width.",
          "$ref": "Image"
        },
        "review": {
          "$ref": "Review",
          "description": "The review comments set by the platform when a class is marked `approved` or `rejected`."
        },
        "linksModuleData": {
          "$ref": "LinksModuleData",
          "description": "Links module data. If links module data is also defined on the object, both will be displayed."
        },
        "multipleDevicesAndHoldersAllowedStatus": {
          "description": "Identifies whether multiple users and devices will save the same object referencing this class.",
          "enumDeprecated": [
            false,
            false,
            false,
            false,
            true,
            true,
            true
          ],
          "enum": [
            "STATUS_UNSPECIFIED",
            "MULTIPLE_HOLDERS",
            "ONE_USER_ALL_DEVICES",
            "ONE_USER_ONE_DEVICE",
            "multipleHolders",
            "oneUserAllDevices",
            "oneUserOneDevice"
          ],
          "type": "string",
          "enumDescriptions": [
            "Unspecified preference.",
            "The Pass object is shareable by a user and can be saved by any number of different users, and on any number of devices. Partners typically use this setup for passes that do not need to be restricted to a single user or pinned to a single device.",
            "An object can only be saved by one user, but this user can view and use it on multiple of their devices. Once the first user saves the object, no other user will be allowed to view or save it.",
            "An object can only be saved by one user on a single device. Intended for use by select partners in limited circumstances. An example use case is a transit ticket that should be \"device pinned\", meaning it can be saved, viewed and used only by a single user on a single device. Contact support for additional information.",
            "Legacy alias for `MULTIPLE_HOLDERS`. Deprecated.",
            "Legacy alias for `ONE_USER_ALL_DEVICES`. Deprecated.",
            "Legacy alias for `ONE_USER_ONE_DEVICE`. Deprecated."
          ]
        },
        "localizedMerchantName": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the merchant_name. The app may display an ellipsis after the first 20 characters to ensure full string is displayed on smaller screens."
        },
        "version": {
          "format": "int64",
          "description": "Deprecated",
          "deprecated": true,
          "type": "string"
        },
        "notifyPreference": {
          "type": "string",
          "description": "Whether or not field updates to this class should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If not specified, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.",
          "enumDescriptions": [
            "Default behavior is no notifications sent.",
            "This value will result in a notification being sent, if the updated fields are part of an allowlist."
          ],
          "enum": [
            "NOTIFICATION_SETTINGS_FOR_UPDATES_UNSPECIFIED",
            "NOTIFY_ON_UPDATE"
          ]
        },
        "textModulesData": {
          "items": {
            "$ref": "TextModuleData"
          },
          "type": "array",
          "description": "Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class."
        },
        "localizedEventNumberLabel": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the event_number_label."
        },
        "wideProgramLogo": {
          "$ref": "Image",
          "description": "The wide logo of the gift card program or company. When provided, this will be used in place of the program logo in the top left of the card view."
        },
        "hexBackgroundColor": {
          "description": "The background color for the card. If not set the dominant color of the hero image is used, and if no hero image is set, the dominant color of the logo is used. The format is #rrggbb where rrggbb is a hex RGB triplet, such as `#ffcc00`. You can also use the shorthand version of the RGB triplet which is #rgb, such as `#fc0`.",
          "type": "string"
        },
        "merchantName": {
          "description": "Merchant name, such as \"Adam's Apparel\". The app may display an ellipsis after the first 20 characters to ensure full string is displayed on smaller screens.",
          "type": "string"
        },
        "issuerName": {
          "type": "string",
          "description": "Required. The issuer name. Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens."
        },
        "programLogo": {
          "description": "The logo of the gift card program or company. This logo is displayed in both the details and list views of the app.",
          "$ref": "Image"
        },
        "pinLabel": {
          "description": "The label to display for the PIN, such as \"4-digit PIN\".",
          "type": "string"
        },
        "id": {
          "description": "Required. The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
          "type": "string"
        },
        "messages": {
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.",
          "type": "array",
          "items": {
            "$ref": "Message"
          }
        },
        "infoModuleData": {
          "description": "Deprecated. Use textModulesData instead.",
          "deprecated": true,
          "$ref": "InfoModuleData"
        },
        "wordMark": {
          "$ref": "Image",
          "description": "Deprecated.",
          "deprecated": true
        },
        "localizedPinLabel": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the pin_label."
        },
        "redemptionIssuers": {
          "type": "array",
          "description": "Identifies which redemption issuers can redeem the pass over Smart Tap. Redemption issuers are identified by their issuer ID. Redemption issuers must have at least one Smart Tap key configured. The `enableSmartTap` and object level `smartTapRedemptionLevel` fields must also be set up correctly in order for a pass to support Smart Tap.",
          "items": {
            "format": "int64",
            "type": "string"
          }
        },
        "appLinkData": {
          "$ref": "AppLinkData",
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding object that will be used instead."
        },
        "classTemplateInfo": {
          "description": "Template information about how the class should be displayed. If unset, Google will fallback to a default set of fields to display.",
          "$ref": "ClassTemplateInfo"
        },
        "merchantLocations": {
          "type": "array",
          "description": "Merchant locations. There is a maximum of ten on the class. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints.",
          "items": {
            "$ref": "MerchantLocation"
          }
        },
        "localizedIssuerName": {
          "description": "Translated strings for the issuer_name. Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens.",
          "$ref": "LocalizedString"
        },
        "countryCode": {
          "description": "Country code used to display the card's country (when the user is not in that country), as well as to display localized content when content is not available in the user's locale.",
          "type": "string"
        },
        "callbackOptions": {
          "description": "Callback options to be used to call the issuer back for every save/delete of an object for this class by the end-user. All objects of this class are eligible for the callback.",
          "$ref": "CallbackOptions"
        },
        "imageModulesData": {
          "type": "array",
          "description": "Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level.",
          "items": {
            "$ref": "ImageModuleData"
          }
        },
        "viewUnlockRequirement": {
          "description": "View Unlock Requirement options for the gift card.",
          "enumDescriptions": [
            "Default value, same as UNLOCK_NOT_REQUIRED.",
            "Default behavior for all the existing Passes if ViewUnlockRequirement is not set.",
            "Requires the user to unlock their device each time the pass is viewed. If the user removes their device lock after saving the pass, then they will be prompted to create a device lock before the pass can be viewed."
          ],
          "enum": [
            "VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED",
            "UNLOCK_NOT_REQUIRED",
            "UNLOCK_REQUIRED_TO_VIEW"
          ],
          "type": "string"
        },
        "reviewStatus": {
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `UNDER_REVIEW`. Deprecated.",
            "",
            "Legacy alias for `APPROVED`. Deprecated.",
            "",
            "Legacy alias for `REJECTED`. Deprecated.",
            "",
            "Legacy alias for `DRAFT`. Deprecated."
          ],
          "description": "Required. The status of the class. This field can be set to `draft` or `underReview` using the insert, patch, or update API calls. Once the review state is changed from `draft` it may not be changed back to `draft`. You should keep this field to `draft` when the class is under development. A `draft` class cannot be used to create any object. You should set this field to `underReview` when you believe the class is ready for use. The platform will automatically set this field to `approved` and it can be immediately used to create or migrate objects. When updating an already `approved` class you should keep setting this field to `underReview`.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "REVIEW_STATUS_UNSPECIFIED",
            "UNDER_REVIEW",
            "underReview",
            "APPROVED",
            "approved",
            "REJECTED",
            "rejected",
            "DRAFT",
            "draft"
          ],
          "type": "string"
        },
        "allowMultipleUsersPerObject": {
          "deprecated": true,
          "type": "boolean",
          "description": "Deprecated. Use `multipleDevicesAndHoldersAllowedStatus` instead."
        },
        "allowBarcodeRedemption": {
          "description": "Determines whether the merchant supports gift card redemption using barcode. If true, app displays a barcode for the gift card on the Gift card details screen. If false, a barcode is not displayed.",
          "type": "boolean"
        }
      },
      "id": "GiftCardClass",
      "type": "object"
    },
    "DiffDownloadResponse": {
      "description": "Backend response for a Diff download response. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol.",
      "properties": {
        "objectLocation": {
          "description": "The original object location.",
          "$ref": "CompositeMedia"
        }
      },
      "id": "DiffDownloadResponse",
      "type": "object"
    },
    "FlightCarrier": {
      "id": "FlightCarrier",
      "type": "object",
      "properties": {
        "wideAirlineLogo": {
          "description": "The wide logo of the airline. When provided, this will be used in place of the airline logo in the top left of the card view.",
          "$ref": "Image"
        },
        "airlineLogo": {
          "description": "A logo for the airline described by carrierIataCode and localizedAirlineName. This logo will be rendered at the top of the detailed card view.",
          "$ref": "Image"
        },
        "airlineAllianceLogo": {
          "$ref": "Image",
          "description": "A logo for the airline alliance, displayed below the QR code that the passenger scans to board."
        },
        "carrierIcaoCode": {
          "description": "Three character ICAO airline code of the marketing carrier (as opposed to operating carrier). Exactly one of this or `carrierIataCode` needs to be provided for `carrier` and `operatingCarrier`. eg: \"EZY\" for Easy Jet",
          "type": "string"
        },
        "carrierIataCode": {
          "type": "string",
          "description": "Two character IATA airline code of the marketing carrier (as opposed to operating carrier). Exactly one of this or `carrierIcaoCode` needs to be provided for `carrier` and `operatingCarrier`. eg: \"LX\" for Swiss Air"
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#flightCarrier\"`."
        },
        "airlineName": {
          "$ref": "LocalizedString",
          "description": "A localized name of the airline specified by carrierIataCode. If unset, `issuer_name` or `localized_issuer_name` from `FlightClass` will be used for display purposes. eg: \"Swiss Air\" for \"LX\""
        }
      }
    },
    "IssuerListResponse": {
      "id": "IssuerListResponse",
      "type": "object",
      "properties": {
        "resources": {
          "description": "Resources corresponding to the list request.",
          "type": "array",
          "items": {
            "$ref": "Issuer"
          }
        }
      }
    },
    "GenericObjectAddMessageResponse": {
      "description": "Response to adding a new issuer message to the object. This contains the entire updated GenericObject.",
      "properties": {
        "resource": {
          "$ref": "GenericObject",
          "description": "The updated GenericObject resource."
        }
      },
      "id": "GenericObjectAddMessageResponse",
      "type": "object"
    },
    "EventTicketClass": {
      "id": "EventTicketClass",
      "type": "object",
      "properties": {
        "review": {
          "$ref": "Review",
          "description": "The review comments set by the platform when a class is marked `approved` or `rejected`."
        },
        "linksModuleData": {
          "$ref": "LinksModuleData",
          "description": "Links module data. If links module data is also defined on the object, both will be displayed."
        },
        "multipleDevicesAndHoldersAllowedStatus": {
          "description": "Identifies whether multiple users and devices will save the same object referencing this class.",
          "enumDeprecated": [
            false,
            false,
            false,
            false,
            true,
            true,
            true
          ],
          "enum": [
            "STATUS_UNSPECIFIED",
            "MULTIPLE_HOLDERS",
            "ONE_USER_ALL_DEVICES",
            "ONE_USER_ONE_DEVICE",
            "multipleHolders",
            "oneUserAllDevices",
            "oneUserOneDevice"
          ],
          "type": "string",
          "enumDescriptions": [
            "Unspecified preference.",
            "The Pass object is shareable by a user and can be saved by any number of different users, and on any number of devices. Partners typically use this setup for passes that do not need to be restricted to a single user or pinned to a single device.",
            "An object can only be saved by one user, but this user can view and use it on multiple of their devices. Once the first user saves the object, no other user will be allowed to view or save it.",
            "An object can only be saved by one user on a single device. Intended for use by select partners in limited circumstances. An example use case is a transit ticket that should be \"device pinned\", meaning it can be saved, viewed and used only by a single user on a single device. Contact support for additional information.",
            "Legacy alias for `MULTIPLE_HOLDERS`. Deprecated.",
            "Legacy alias for `ONE_USER_ALL_DEVICES`. Deprecated.",
            "Legacy alias for `ONE_USER_ONE_DEVICE`. Deprecated."
          ]
        },
        "heroImage": {
          "description": "Optional banner image displayed on the front of the card. If none is present, nothing will be displayed. The image will display at 100% width.",
          "$ref": "Image"
        },
        "customSeatLabel": {
          "description": "A custom label to use for the seat value (`eventTicketObject.seatInfo.seat`) on the card detail view. This should only be used if the default \"Seat\" label or one of the `seatLabel` options is not sufficient. Both `seatLabel` and `customSeatLabel` may not be set. If neither is set, the label will default to \"Seat\", localized. If the seat field is unset, this label will not be used.",
          "$ref": "LocalizedString"
        },
        "valueAddedModuleData": {
          "items": {
            "$ref": "ValueAddedModuleData"
          },
          "type": "array",
          "description": "Optional value added module data. Maximum of fifteen on the class. For a pass only fifteen will be displayed, prioritizing those from the object."
        },
        "enableSmartTap": {
          "description": "Identifies whether this class supports Smart Tap. The `redemptionIssuers` and object level `smartTapRedemptionLevel` fields must also be set up correctly in order for a pass to support Smart Tap.",
          "type": "boolean"
        },
        "securityAnimation": {
          "$ref": "SecurityAnimation",
          "description": "Optional information about the security animation. If this is set a security animation will be rendered on pass details."
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#eventTicketClass\"`."
        },
        "gateLabel": {
          "description": "The label to use for the gate value (`eventTicketObject.seatInfo.gate`) on the card detail view. Each available option maps to a set of localized strings, so that translations are shown to the user based on their locale. Both `gateLabel` and `customGateLabel` may not be set. If neither is set, the label will default to \"Gate\", localized. If the gate field is unset, this label will not be used.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "GATE_LABEL_UNSPECIFIED",
            "GATE",
            "gate",
            "DOOR",
            "door",
            "ENTRANCE",
            "entrance"
          ],
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `GATE`. Deprecated.",
            "",
            "Legacy alias for `DOOR`. Deprecated.",
            "",
            "Legacy alias for `ENTRANCE`. Deprecated."
          ]
        },
        "locations": {
          "items": {
            "$ref": "LatLongPoint"
          },
          "deprecated": true,
          "type": "array",
          "description": "Note: This field is currently not supported to trigger geo notifications."
        },
        "homepageUri": {
          "description": "The URI of your application's home page. Populating the URI in this field results in the exact same behavior as populating an URI in linksModuleData (when an object is rendered, a link to the homepage is shown in what would usually be thought of as the linksModuleData section of the object).",
          "$ref": "Uri"
        },
        "venue": {
          "$ref": "EventVenue",
          "description": "Event venue details."
        },
        "customGateLabel": {
          "description": "A custom label to use for the gate value (`eventTicketObject.seatInfo.gate`) on the card detail view. This should only be used if the default \"Gate\" label or one of the `gateLabel` options is not sufficient. Both `gateLabel` and `customGateLabel` may not be set. If neither is set, the label will default to \"Gate\", localized. If the gate field is unset, this label will not be used.",
          "$ref": "LocalizedString"
        },
        "hexBackgroundColor": {
          "description": "The background color for the card. If not set the dominant color of the hero image is used, and if no hero image is set, the dominant color of the logo is used. The format is #rrggbb where rrggbb is a hex RGB triplet, such as `#ffcc00`. You can also use the shorthand version of the RGB triplet which is #rgb, such as `#fc0`.",
          "type": "string"
        },
        "customSectionLabel": {
          "$ref": "LocalizedString",
          "description": "A custom label to use for the section value (`eventTicketObject.seatInfo.section`) on the card detail view. This should only be used if the default \"Section\" label or one of the `sectionLabel` options is not sufficient. Both `sectionLabel` and `customSectionLabel` may not be set. If neither is set, the label will default to \"Section\", localized. If the section field is unset, this label will not be used."
        },
        "logo": {
          "$ref": "Image",
          "description": "The logo image of the ticket. This image is displayed in the card detail view of the app."
        },
        "textModulesData": {
          "items": {
            "$ref": "TextModuleData"
          },
          "description": "Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class.",
          "type": "array"
        },
        "version": {
          "description": "Deprecated",
          "deprecated": true,
          "type": "string",
          "format": "int64"
        },
        "rowLabel": {
          "description": "The label to use for the row value (`eventTicketObject.seatInfo.row`) on the card detail view. Each available option maps to a set of localized strings, so that translations are shown to the user based on their locale. Both `rowLabel` and `customRowLabel` may not be set. If neither is set, the label will default to \"Row\", localized. If the row field is unset, this label will not be used.",
          "enumDeprecated": [
            false,
            false,
            true
          ],
          "enum": [
            "ROW_LABEL_UNSPECIFIED",
            "ROW",
            "row"
          ],
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `ROW`. Deprecated."
          ]
        },
        "notifyPreference": {
          "type": "string",
          "description": "Whether or not field updates to this class should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If not specified, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.",
          "enumDescriptions": [
            "Default behavior is no notifications sent.",
            "This value will result in a notification being sent, if the updated fields are part of an allowlist."
          ],
          "enum": [
            "NOTIFICATION_SETTINGS_FOR_UPDATES_UNSPECIFIED",
            "NOTIFY_ON_UPDATE"
          ]
        },
        "customRowLabel": {
          "$ref": "LocalizedString",
          "description": "A custom label to use for the row value (`eventTicketObject.seatInfo.row`) on the card detail view. This should only be used if the default \"Row\" label or one of the `rowLabel` options is not sufficient. Both `rowLabel` and `customRowLabel` may not be set. If neither is set, the label will default to \"Row\", localized. If the row field is unset, this label will not be used."
        },
        "appLinkData": {
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding object that will be used instead.",
          "$ref": "AppLinkData"
        },
        "id": {
          "description": "Required. The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
          "type": "string"
        },
        "messages": {
          "items": {
            "$ref": "Message"
          },
          "type": "array",
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10."
        },
        "infoModuleData": {
          "$ref": "InfoModuleData",
          "description": "Deprecated. Use textModulesData instead.",
          "deprecated": true
        },
        "wordMark": {
          "description": "Deprecated.",
          "deprecated": true,
          "$ref": "Image"
        },
        "redemptionIssuers": {
          "description": "Identifies which redemption issuers can redeem the pass over Smart Tap. Redemption issuers are identified by their issuer ID. Redemption issuers must have at least one Smart Tap key configured. The `enableSmartTap` and object level `smartTapRedemptionLevel` fields must also be set up correctly in order for a pass to support Smart Tap.",
          "type": "array",
          "items": {
            "type": "string",
            "format": "int64"
          }
        },
        "seatLabel": {
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `SEAT`. Deprecated."
          ],
          "description": "The label to use for the seat value (`eventTicketObject.seatInfo.seat`) on the card detail view. Each available option maps to a set of localized strings, so that translations are shown to the user based on their locale. Both `seatLabel` and `customSeatLabel` may not be set. If neither is set, the label will default to \"Seat\", localized. If the seat field is unset, this label will not be used.",
          "enumDeprecated": [
            false,
            false,
            true
          ],
          "enum": [
            "SEAT_LABEL_UNSPECIFIED",
            "SEAT",
            "seat"
          ],
          "type": "string"
        },
        "eventId": {
          "type": "string",
          "description": "The ID of the event. This ID should be unique for every event in an account. It is used to group tickets together if the user has saved multiple tickets for the same event. It can be at most 64 characters. If provided, the grouping will be stable. Be wary of unintentional collision to avoid grouping tickets that should not be grouped. If you use only one class per event, you can simply set this to the `classId` (with or without the issuer ID portion). If not provided, the platform will attempt to use other data to group tickets (potentially unstable)."
        },
        "eventName": {
          "description": "Required. The name of the event, such as \"LA Dodgers at SF Giants\".",
          "$ref": "LocalizedString"
        },
        "issuerName": {
          "description": "Required. The issuer name. Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens.",
          "type": "string"
        },
        "dateTime": {
          "$ref": "EventDateTime",
          "description": "The date & time information of the event."
        },
        "confirmationCodeLabel": {
          "description": "The label to use for the confirmation code value (`eventTicketObject.reservationInfo.confirmationCode`) on the card detail view. Each available option maps to a set of localized strings, so that translations are shown to the user based on their locale. Both `confirmationCodeLabel` and `customConfirmationCodeLabel` may not be set. If neither is set, the label will default to \"Confirmation Code\", localized. If the confirmation code field is unset, this label will not be used.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "CONFIRMATION_CODE_LABEL_UNSPECIFIED",
            "CONFIRMATION_CODE",
            "confirmationCode",
            "CONFIRMATION_NUMBER",
            "confirmationNumber",
            "ORDER_NUMBER",
            "orderNumber",
            "RESERVATION_NUMBER",
            "reservationNumber"
          ],
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `CONFIRMATION_CODE`. Deprecated.",
            "",
            "Legacy alias for `CONFIRMATION_NUMBER`. Deprecated.",
            "",
            "Legacy alias for `ORDER_NUMBER`. Deprecated.",
            "",
            "Legacy alias for `RESERVATION_NUMBER`. Deprecated."
          ]
        },
        "imageModulesData": {
          "items": {
            "$ref": "ImageModuleData"
          },
          "type": "array",
          "description": "Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level."
        },
        "viewUnlockRequirement": {
          "description": "View Unlock Requirement options for the event ticket.",
          "enumDescriptions": [
            "Default value, same as UNLOCK_NOT_REQUIRED.",
            "Default behavior for all the existing Passes if ViewUnlockRequirement is not set.",
            "Requires the user to unlock their device each time the pass is viewed. If the user removes their device lock after saving the pass, then they will be prompted to create a device lock before the pass can be viewed."
          ],
          "enum": [
            "VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED",
            "UNLOCK_NOT_REQUIRED",
            "UNLOCK_REQUIRED_TO_VIEW"
          ],
          "type": "string"
        },
        "reviewStatus": {
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `UNDER_REVIEW`. Deprecated.",
            "",
            "Legacy alias for `APPROVED`. Deprecated.",
            "",
            "Legacy alias for `REJECTED`. Deprecated.",
            "",
            "Legacy alias for `DRAFT`. Deprecated."
          ],
          "type": "string",
          "description": "Required. The status of the class. This field can be set to `draft` or `underReview` using the insert, patch, or update API calls. Once the review state is changed from `draft` it may not be changed back to `draft`. You should keep this field to `draft` when the class is under development. A `draft` class cannot be used to create any object. You should set this field to `underReview` when you believe the class is ready for use. The platform will automatically set this field to `approved` and it can be immediately used to create or migrate objects. When updating an already `approved` class you should keep setting this field to `underReview`.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "REVIEW_STATUS_UNSPECIFIED",
            "UNDER_REVIEW",
            "underReview",
            "APPROVED",
            "approved",
            "REJECTED",
            "rejected",
            "DRAFT",
            "draft"
          ]
        },
        "customConfirmationCodeLabel": {
          "$ref": "LocalizedString",
          "description": "A custom label to use for the confirmation code value (`eventTicketObject.reservationInfo.confirmationCode`) on the card detail view. This should only be used if the default \"Confirmation Code\" label or one of the `confirmationCodeLabel` options is not sufficient. Both `confirmationCodeLabel` and `customConfirmationCodeLabel` may not be set. If neither is set, the label will default to \"Confirmation Code\", localized. If the confirmation code field is unset, this label will not be used."
        },
        "allowMultipleUsersPerObject": {
          "deprecated": true,
          "type": "boolean",
          "description": "Deprecated. Use `multipleDevicesAndHoldersAllowedStatus` instead."
        },
        "countryCode": {
          "description": "Country code used to display the card's country (when the user is not in that country), as well as to display localized content when content is not available in the user's locale.",
          "type": "string"
        },
        "callbackOptions": {
          "$ref": "CallbackOptions",
          "description": "Callback options to be used to call the issuer back for every save/delete of an object for this class by the end-user. All objects of this class are eligible for the callback."
        },
        "wideLogo": {
          "description": "The wide logo of the ticket. When provided, this will be used in place of the logo in the top left of the card view.",
          "$ref": "Image"
        },
        "sectionLabel": {
          "description": "The label to use for the section value (`eventTicketObject.seatInfo.section`) on the card detail view. Each available option maps to a set of localized strings, so that translations are shown to the user based on their locale. Both `sectionLabel` and `customSectionLabel` may not be set. If neither is set, the label will default to \"Section\", localized. If the section field is unset, this label will not be used.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "SECTION_LABEL_UNSPECIFIED",
            "SECTION",
            "section",
            "THEATER",
            "theater"
          ],
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `SECTION`. Deprecated.",
            "",
            "Legacy alias for `THEATER`. Deprecated."
          ]
        },
        "classTemplateInfo": {
          "$ref": "ClassTemplateInfo",
          "description": "Template information about how the class should be displayed. If unset, Google will fallback to a default set of fields to display."
        },
        "merchantLocations": {
          "items": {
            "$ref": "MerchantLocation"
          },
          "type": "array",
          "description": "Merchant locations. There is a maximum of ten on the class. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints."
        },
        "finePrint": {
          "description": "The fine print, terms, or conditions of the ticket.",
          "$ref": "LocalizedString"
        },
        "localizedIssuerName": {
          "description": "Translated strings for the issuer_name. Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens.",
          "$ref": "LocalizedString"
        }
      }
    },
    "ImageUri": {
      "properties": {
        "localizedDescription": {
          "$ref": "LocalizedString",
          "deprecated": true,
          "description": "Translated strings for the description, which are unused and retained only for backward compatibility."
        },
        "description": {
          "deprecated": true,
          "type": "string",
          "description": "Additional information about the image, which is unused and retained only for backward compatibility."
        },
        "uri": {
          "type": "string",
          "description": "The location of the image. URIs must have a scheme."
        }
      },
      "id": "ImageUri",
      "type": "object"
    },
    "MediaRequestInfo": {
      "description": "Extra information added to operations that support Scotty media requests.",
      "properties": {
        "physicalHeaders": {
          "format": "byte",
          "description": "The physical headers provided by RequestReceivedParameters in Scotty request. type is uploader_service.KeyValuePairs.",
          "type": "string"
        },
        "requestReceivedParamsServingInfo": {
          "format": "byte",
          "description": "The partition of the Scotty server handling this request. type is uploader_service.RequestReceivedParamsServingInfo LINT.IfChange(request_received_params_serving_info_annotations) LINT.ThenChange()",
          "type": "string"
        },
        "diffObjectVersion": {
          "type": "string",
          "description": "Set if the http request info is diff encoded. The value of this field is the version number of the base revision. This is corresponding to Apiary's mediaDiffObjectVersion (//depot/google3/java/com/google/api/server/media/variable/DiffObjectVersionVariable.java). See go/esf-scotty-diff-upload for more information."
        },
        "finalStatus": {
          "type": "integer",
          "description": "The existence of the final_status field indicates that this is the last call to the agent for this request_id. http://google3/uploader/agent/scotty_agent.proto?l=737&rcl=347601929",
          "format": "int32"
        },
        "customData": {
          "type": "string",
          "description": "Data to be copied to backend requests. Custom data is returned to Scotty in the agent_state field, which Scotty will then provide in subsequent upload notifications."
        },
        "requestId": {
          "type": "string",
          "description": "The Scotty request ID."
        },
        "totalBytes": {
          "format": "int64",
          "description": "The total size of the file.",
          "type": "string"
        },
        "totalBytesIsEstimated": {
          "type": "boolean",
          "description": "Whether the total bytes field contains an estimated data."
        },
        "notificationType": {
          "description": "The type of notification received from Scotty.",
          "enumDescriptions": [
            "Such requests signals the start of a request containing media upload. Only the media field(s) in the inserted/updated resource are set. The response should either return an error or succeed. On success, responses don't need to contain anything.",
            "Such requests signals that the upload has progressed and that the backend might want to access the media file specified in relevant fields in the resource. Only the media field(s) in the inserted/updated resource are set. The response should either return an error or succeed. On success, responses don't need to contain anything.",
            "Such requests signals the end of a request containing media upload. END should be handled just like normal Insert/Upload requests, that is, they should process the request and return a complete resource in the response. Pointers to media data (a GFS path usually) appear in the relevant fields in the inserted/updated resource. See gdata.Media in data.proto.",
            "Such requests occur after an END and signal that the response has been sent back to the client. RESPONSE_SENT is only sent to the backend if it is configured to receive them. The response does not need to contain anything.",
            "Such requests indicate that an error occurred while processing the request. ERROR is only sent to the backend if it is configured to receive them. It is not guaranteed that all errors will result in this notification to the backend, even if the backend requests them. Since these requests are just for informational purposes, the response does not need to contain anything."
          ],
          "enum": [
            "START",
            "PROGRESS",
            "END",
            "RESPONSE_SENT",
            "ERROR"
          ],
          "type": "string"
        },
        "currentBytes": {
          "format": "int64",
          "type": "string",
          "description": "The number of current bytes uploaded or downloaded."
        }
      },
      "id": "MediaRequestInfo",
      "type": "object"
    },
    "Image": {
      "id": "Image",
      "type": "object",
      "description": "Wrapping type for Google hosted images.",
      "properties": {
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#image\"`.",
          "deprecated": true,
          "type": "string"
        },
        "privateImageId": {
          "type": "string",
          "description": "An ID for an already uploaded private image. Either this or source_uri should be set. Requests setting both or neither will be rejected. Please contact support to use private images."
        },
        "sourceUri": {
          "$ref": "ImageUri",
          "description": "A URI for the image. Either this or private_image_id should be set. Requests setting both or neither will be rejected."
        },
        "contentDescription": {
          "description": "Description of the image used for accessibility.",
          "$ref": "LocalizedString"
        }
      }
    },
    "ModuleViewConstraints": {
      "description": "Constraints that all must be met for the module to be shown.",
      "properties": {
        "displayInterval": {
          "description": "The period of time that the module will be displayed to users. Can define both a `startTime` and `endTime`. The module is displayed immediately after insertion unless a `startTime` is set. The module is displayed indefinitely if `endTime` is not set.",
          "$ref": "TimeInterval"
        }
      },
      "id": "ModuleViewConstraints",
      "type": "object"
    },
    "DiscoverableProgram": {
      "description": "Information about how a class may be discovered and instantiated from within the Google Wallet app. This is done by searching for a loyalty or gift card program and scanning or manually entering.",
      "properties": {
        "merchantSignupInfo": {
          "$ref": "DiscoverableProgramMerchantSignupInfo",
          "description": "Information about the ability to signup and add a valuable for this program through a merchant site. Used when MERCHANT_HOSTED_SIGNUP is enabled."
        },
        "merchantSigninInfo": {
          "$ref": "DiscoverableProgramMerchantSigninInfo",
          "description": "Information about the ability to signin and add a valuable for this program through a merchant site. Used when MERCHANT_HOSTED_SIGNIN is enabled."
        },
        "state": {
          "type": "string",
          "description": "Visibility state of the discoverable program.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "TRUSTED_TESTERS",
            "trustedTesters",
            "LIVE",
            "live",
            "DISABLED",
            "disabled"
          ],
          "enumDescriptions": [
            "",
            "Visible only to testers that have access to issuer account.",
            "Legacy alias for `TRUSTED_TESTERS`. Deprecated.",
            "Visible to all.",
            "Legacy alias for `LIVE`. Deprecated.",
            "Not visible.",
            "Legacy alias for `DISABLED`. Deprecated."
          ]
        }
      },
      "id": "DiscoverableProgram",
      "type": "object"
    },
    "CardRowOneItem": {
      "id": "CardRowOneItem",
      "type": "object",
      "properties": {
        "item": {
          "description": "The item to be displayed in the row. This item will be automatically centered.",
          "$ref": "TemplateItem"
        }
      }
    },
    "TextModuleData": {
      "description": "Data for Text module. All fields are optional. Header will be displayed if available, different types of bodies will be concatenated if they are defined.",
      "properties": {
        "localizedHeader": {
          "description": "Translated strings for the header. Recommended maximum length is 35 characters to ensure full string is displayed on smaller screens.",
          "$ref": "LocalizedString"
        },
        "localizedBody": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the body. Recommended maximum length is 500 characters to ensure full string is displayed on smaller screens."
        },
        "body": {
          "description": "The body of the Text Module, which is defined as an uninterrupted string. Recommended maximum length is 500 characters to ensure full string is displayed on smaller screens.",
          "type": "string"
        },
        "header": {
          "description": "The header of the Text Module. Recommended maximum length is 35 characters to ensure full string is displayed on smaller screens.",
          "type": "string"
        },
        "id": {
          "description": "The ID associated with a text module. This field is here to enable ease of management of text modules and referencing them in template overrides. The ID should only include alphanumeric characters, '_', or '-'. It can not include dots, as dots are used to separate fields within FieldReference.fieldPaths in template overrides.",
          "type": "string"
        }
      },
      "id": "TextModuleData",
      "type": "object"
    },
    "ValueAddedModuleData": {
      "id": "ValueAddedModuleData",
      "type": "object",
      "description": "Data for Value Added module. Required fields are header and uri.",
      "properties": {
        "header": {
          "description": "Header to be displayed on the module. Character limit is 60 and longer strings will be truncated.",
          "$ref": "LocalizedString"
        },
        "image": {
          "description": "Image to be displayed on the module. Recommended image ratio is 1:1. Images will be resized to fit this ratio.",
          "$ref": "Image"
        },
        "viewConstraints": {
          "description": "Constraints that all must be met for the module to be shown.",
          "$ref": "ModuleViewConstraints"
        },
        "body": {
          "$ref": "LocalizedString",
          "description": "Body to be displayed on the module. Character limit is 50 and longer strings will be truncated."
        },
        "sortIndex": {
          "format": "int32",
          "type": "integer",
          "description": "The index for sorting the modules. Modules with a lower sort index are shown before modules with a higher sort index. If unspecified, the sort index is assumed to be INT_MAX. For two modules with the same index, the sorting behavior is undefined."
        },
        "uri": {
          "description": "URI that the module leads to on click. This can be a web link or a deep link as mentioned in https://developer.android.com/training/app-links/deep-linking.",
          "type": "string"
        }
      }
    },
    "Money": {
      "properties": {
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#money\"`."
        },
        "currencyCode": {
          "type": "string",
          "description": "The currency code, such as \"USD\" or \"EUR.\""
        },
        "micros": {
          "description": "The unit of money amount in micros. For example, $1 USD would be represented as 1000000 micros.",
          "type": "string",
          "format": "int64"
        }
      },
      "id": "Money",
      "type": "object"
    },
    "EventTicketObject": {
      "properties": {
        "merchantLocations": {
          "type": "array",
          "description": "Merchant locations. There is a maximum of ten on the object. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints.",
          "items": {
            "$ref": "MerchantLocation"
          }
        },
        "hasLinkedDevice": {
          "description": "Whether this object is currently linked to a single device. This field is set by the platform when a user saves the object, linking it to their device. Intended for use by select partners. Contact support for additional information.",
          "type": "boolean"
        },
        "smartTapRedemptionValue": {
          "description": "The value that will be transmitted to a Smart Tap certified terminal over NFC for this object. The class level fields `enableSmartTap` and `redemptionIssuers` must also be set up correctly in order for the pass to support Smart Tap. Only ASCII characters are supported.",
          "type": "string"
        },
        "seatInfo": {
          "description": "Seating details for this ticket.",
          "$ref": "EventSeat"
        },
        "imageModulesData": {
          "type": "array",
          "description": "Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level.",
          "items": {
            "$ref": "ImageModuleData"
          }
        },
        "groupingInfo": {
          "description": "Information that controls how passes are grouped together.",
          "$ref": "GroupingInfo"
        },
        "barcode": {
          "$ref": "Barcode",
          "description": "The barcode type and value."
        },
        "passConstraints": {
          "$ref": "PassConstraints",
          "description": "Pass constraints for the object. Includes limiting NFC and screenshot behaviors."
        },
        "ticketHolderName": {
          "type": "string",
          "description": "Name of the ticket holder, if the ticket is assigned to a person. E.g. \"John Doe\" or \"Jane Doe\"."
        },
        "id": {
          "description": "Required. The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
          "type": "string"
        },
        "messages": {
          "items": {
            "$ref": "Message"
          },
          "type": "array",
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10."
        },
        "infoModuleData": {
          "$ref": "InfoModuleData",
          "description": "Deprecated. Use textModulesData instead."
        },
        "linkedObjectIds": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "linked_object_ids are a list of other objects such as event ticket, loyalty, offer, generic, giftcard, transit and boarding pass that should be automatically attached to this event ticket object. If a user had saved this event ticket, then these linked_object_ids would be automatically pushed to the user's wallet (unless they turned off the setting to receive such linked passes). Make sure that objects present in linked_object_ids are already inserted - if not, calls would fail. Once linked, the linked objects cannot be unlinked. You cannot link objects belonging to another issuer. There is a limit to the number of objects that can be linked to a single object. After the limit is reached, new linked objects in the call will be ignored silently. Object IDs should follow the format issuer ID. identifier where the former is issued by Google and the latter is chosen by you."
        },
        "appLinkData": {
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding class only object AppLinkData will be displayed.",
          "$ref": "AppLinkData"
        },
        "validTimeInterval": {
          "description": "The time period this object will be `active` and object can be used. An object's state will be changed to `expired` when this time period has passed.",
          "$ref": "TimeInterval"
        },
        "notifyPreference": {
          "description": "Whether or not field updates to this object should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If set to DO_NOT_NOTIFY or NOTIFICATION_SETTINGS_UNSPECIFIED, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.",
          "enumDescriptions": [
            "Default behavior is no notifications sent.",
            "This value will result in a notification being sent, if the updated fields are part of an allowlist."
          ],
          "enum": [
            "NOTIFICATION_SETTINGS_FOR_UPDATES_UNSPECIFIED",
            "NOTIFY_ON_UPDATE"
          ],
          "type": "string"
        },
        "ticketType": {
          "$ref": "LocalizedString",
          "description": "The type of the ticket, such as \"Adult\" or \"Child\", or \"VIP\" or \"Standard\"."
        },
        "version": {
          "format": "int64",
          "deprecated": true,
          "type": "string",
          "description": "Deprecated"
        },
        "classId": {
          "type": "string",
          "description": "Required. The class associated with this object. The class must be of the same type as this object, must already exist, and must be approved. Class IDs should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you."
        },
        "textModulesData": {
          "items": {
            "$ref": "TextModuleData"
          },
          "description": "Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class.",
          "type": "array"
        },
        "faceValue": {
          "$ref": "Money",
          "description": "The face value of the ticket, matching what would be printed on a physical version of the ticket."
        },
        "ticketNumber": {
          "description": "The number of the ticket. This can be a unique identifier across all tickets in an issuer's system, all tickets for the event (e.g. XYZ1234512345), or all tickets in the order (1, 2, 3, etc.).",
          "type": "string"
        },
        "rotatingBarcode": {
          "$ref": "RotatingBarcode",
          "description": "The rotating barcode type and value."
        },
        "hexBackgroundColor": {
          "type": "string",
          "description": "The background color for the card. If not set the dominant color of the hero image is used, and if no hero image is set, the dominant color of the logo is used. The format is #rrggbb where rrggbb is a hex RGB triplet, such as `#ffcc00`. You can also use the shorthand version of the RGB triplet which is #rgb, such as `#fc0`."
        },
        "locations": {
          "items": {
            "$ref": "LatLongPoint"
          },
          "description": "Note: This field is currently not supported to trigger geo notifications.",
          "deprecated": true,
          "type": "array"
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#eventTicketObject\"`.",
          "deprecated": true,
          "type": "string"
        },
        "reservationInfo": {
          "$ref": "EventReservationInfo",
          "description": "Reservation details for this ticket. This is expected to be shared amongst all tickets that were purchased in the same order."
        },
        "linkedOfferIds": {
          "items": {
            "type": "string"
          },
          "description": "A list of offer objects linked to this event ticket. The offer objects must already exist. Offer object IDs should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you.",
          "type": "array"
        },
        "valueAddedModuleData": {
          "type": "array",
          "description": "Optional value added module data. Maximum of fifteen on the object. For a pass only fifteen will be displayed.",
          "items": {
            "$ref": "ValueAddedModuleData"
          }
        },
        "disableExpirationNotification": {
          "type": "boolean",
          "description": "Indicates if notifications should explicitly be suppressed. If this field is set to true, regardless of the `messages` field, expiration notifications to the user will be suppressed. By default, this field is set to false. Currently, this can only be set for offers."
        },
        "heroImage": {
          "$ref": "Image",
          "description": "Optional banner image displayed on the front of the card. If none is present, hero image of the class, if present, will be displayed. If hero image of the class is also not present, nothing will be displayed."
        },
        "classReference": {
          "$ref": "EventTicketClass",
          "description": "A copy of the inherited fields of the parent class. These fields are retrieved during a GET."
        },
        "saveRestrictions": {
          "$ref": "SaveRestrictions",
          "description": "Restrictions on the object that needs to be verified before the user tries to save the pass. Note that this restrictions will only be applied during save time. If the restrictions changed after a user saves the pass, the new restrictions will not be applied to an already saved pass."
        },
        "hasUsers": {
          "description": "Indicates if the object has users. This field is set by the platform.",
          "type": "boolean"
        },
        "state": {
          "type": "string",
          "description": "Required. The state of the object. This field is used to determine how an object is displayed in the app. For example, an `inactive` object is moved to the \"Expired passes\" section.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "ACTIVE",
            "active",
            "COMPLETED",
            "completed",
            "EXPIRED",
            "expired",
            "INACTIVE",
            "inactive"
          ],
          "enumDescriptions": [
            "Default value.",
            "Object is active and displayed to with other active objects.",
            "Legacy alias for `ACTIVE`. Deprecated.",
            "Object has completed it's lifecycle.",
            "Legacy alias for `COMPLETED`. Deprecated.",
            "Object is no longer valid (`validTimeInterval` passed).",
            "Legacy alias for `EXPIRED`. Deprecated.",
            "Object is no longer valid",
            "Legacy alias for `INACTIVE`. Deprecated."
          ]
        },
        "linksModuleData": {
          "$ref": "LinksModuleData",
          "description": "Links module data. If links module data is also defined on the class, both will be displayed."
        }
      },
      "id": "EventTicketObject",
      "type": "object"
    },
    "DownloadParameters": {
      "id": "DownloadParameters",
      "type": "object",
      "description": "Parameters specific to media downloads.",
      "properties": {
        "allowGzipCompression": {
          "description": "A boolean to be returned in the response to Scotty. Allows/disallows gzip encoding of the payload content when the server thinks it's advantageous (hence, does not guarantee compression) which allows Scotty to GZip the response to the client.",
          "type": "boolean"
        },
        "ignoreRange": {
          "type": "boolean",
          "description": "Determining whether or not Apiary should skip the inclusion of any Content-Range header on its response to Scotty."
        }
      }
    },
    "DetailsItemInfo": {
      "id": "DetailsItemInfo",
      "type": "object",
      "properties": {
        "item": {
          "$ref": "TemplateItem",
          "description": "The item to be displayed in the details list."
        }
      }
    },
    "IssuerToUserInfo": {
      "id": "IssuerToUserInfo",
      "type": "object",
      "properties": {
        "value": {
          "type": "string",
          "description": "JSON web token for action S2AP."
        },
        "action": {
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `S2AP`. Deprecated.",
            "",
            "Legacy alias for `SIGN_UP`. Deprecated."
          ],
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "ACTION_UNSPECIFIED",
            "S2AP",
            "s2ap",
            "SIGN_UP",
            "signUp"
          ]
        },
        "signUpInfo": {
          "$ref": "SignUpInfo"
        },
        "url": {
          "description": "Currently not used, consider deprecating.",
          "type": "string"
        }
      }
    },
    "DateTime": {
      "properties": {
        "date": {
          "type": "string",
          "description": "An ISO 8601 extended format date/time. Offset may or may not be required (refer to the parent field's documentation). Time may be specified up to nanosecond precision. Offsets may be specified with seconds precision (even though offset seconds is not part of ISO 8601). For example: `1985-04-12T23:20:50.52Z` would be 20 minutes and 50.52 seconds after the 23rd hour of April 12th, 1985 in UTC. `1985-04-12T19:20:50.52-04:00` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985, 4 hours before UTC (same instant in time as the above example). If the date/time is intended for a physical location in New York, this would be the equivalent of Eastern Daylight Time (EDT). Remember that offset varies in regions that observe Daylight Saving Time (or Summer Time), depending on the time of the year. `1985-04-12T19:20:50.52` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985 with no offset information. Providing an offset makes this an absolute instant in time around the world. The date/time will be adjusted based on the user's time zone. For example, a time of `2018-06-19T18:30:00-04:00` will be 18:30:00 for a user in New York and 15:30:00 for a user in Los Angeles. Omitting the offset makes this a local date/time, representing several instants in time around the world. The date/time will always be in the user's current time zone. For example, a time of `2018-06-19T18:30:00` will be 18:30:00 for a user in New York and also 18:30:00 for a user in Los Angeles. This is useful when the same local date/time should apply to many physical locations across several time zones."
        }
      },
      "id": "DateTime",
      "type": "object"
    },
    "LatLongPoint": {
      "properties": {
        "latitude": {
          "description": "The latitude specified as any value in the range of -90.0 through +90.0, both inclusive. Values outside these bounds will be rejected.",
          "type": "number",
          "format": "double"
        },
        "longitude": {
          "format": "double",
          "description": "The longitude specified in the range -180.0 through +180.0, both inclusive. Values outside these bounds will be rejected.",
          "type": "number"
        },
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#latLongPoint\"`.",
          "deprecated": true,
          "type": "string"
        }
      },
      "id": "LatLongPoint",
      "type": "object"
    },
    "EventTicketObjectListResponse": {
      "properties": {
        "resources": {
          "items": {
            "$ref": "EventTicketObject"
          },
          "type": "array",
          "description": "Resources corresponding to the list request."
        },
        "pagination": {
          "$ref": "Pagination",
          "description": "Pagination of the response."
        }
      },
      "id": "EventTicketObjectListResponse",
      "type": "object"
    },
    "EventTicketClassListResponse": {
      "id": "EventTicketClassListResponse",
      "type": "object",
      "properties": {
        "resources": {
          "items": {
            "$ref": "EventTicketClass"
          },
          "description": "Resources corresponding to the list request.",
          "type": "array"
        },
        "pagination": {
          "description": "Pagination of the response.",
          "$ref": "Pagination"
        }
      }
    },
    "DeviceContext": {
      "description": "Device context associated with the object.",
      "properties": {
        "deviceToken": {
          "type": "string",
          "description": "If set, redemption information will only be returned to the given device upon activation of the object. This should not be used as a stable identifier to trace a user's device. It can change across different passes for the same device or even across different activations for the same device. When setting this, callers must also set has_linked_device on the object being activated."
        }
      },
      "id": "DeviceContext",
      "type": "object"
    },
    "TicketCost": {
      "id": "TicketCost",
      "type": "object",
      "properties": {
        "faceValue": {
          "$ref": "Money",
          "description": "The face value of the ticket."
        },
        "purchasePrice": {
          "$ref": "Money",
          "description": "The actual purchase price of the ticket, after tax and/or discounts."
        },
        "discountMessage": {
          "description": "A message describing any kind of discount that was applied.",
          "$ref": "LocalizedString"
        }
      }
    },
    "ModifyLinkedOfferObjects": {
      "id": "ModifyLinkedOfferObjects",
      "type": "object",
      "properties": {
        "removeLinkedOfferObjectIds": {
          "type": "array",
          "description": "The linked offer object ids to remove from the object.",
          "items": {
            "type": "string"
          }
        },
        "addLinkedOfferObjectIds": {
          "type": "array",
          "description": "The linked offer object ids to add to the object.",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "LoyaltyPoints": {
      "id": "LoyaltyPoints",
      "type": "object",
      "properties": {
        "localizedLabel": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the label. Recommended maximum length is 9 characters."
        },
        "label": {
          "type": "string",
          "description": "The loyalty points label, such as \"Points\". Recommended maximum length is 9 characters."
        },
        "balance": {
          "$ref": "LoyaltyPointsBalance",
          "description": "The account holder's loyalty point balance, such as \"500\" or \"$10.00\". Recommended maximum length is 7 characters. This is a required field of `loyaltyPoints` and `secondaryLoyaltyPoints`."
        }
      }
    },
    "CardRowThreeItems": {
      "id": "CardRowThreeItems",
      "type": "object",
      "properties": {
        "endItem": {
          "description": "The item to be displayed at the end of the row. This item will be aligned to the right.",
          "$ref": "TemplateItem"
        },
        "middleItem": {
          "$ref": "TemplateItem",
          "description": "The item to be displayed in the middle of the row. This item will be centered between the start and end items."
        },
        "startItem": {
          "$ref": "TemplateItem",
          "description": "The item to be displayed at the start of the row. This item will be aligned to the left."
        }
      }
    },
    "ExpiryNotification": {
      "description": "Indicates that the issuer would like Google Wallet to send expiry notifications 2 days prior to the card expiration.",
      "properties": {
        "enableNotification": {
          "type": "boolean",
          "description": "Indicates if the object needs to have expiry notification enabled."
        }
      },
      "id": "ExpiryNotification",
      "type": "object"
    },
    "SmartTap": {
      "id": "SmartTap",
      "type": "object",
      "properties": {
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#smartTap\"`."
        },
        "infos": {
          "items": {
            "$ref": "IssuerToUserInfo"
          },
          "type": "array",
          "description": "Communication from merchant to user."
        },
        "merchantId": {
          "format": "int64",
          "description": "Smart Tap merchant ID of who engaged in the Smart Tap interaction.",
          "type": "string"
        },
        "id": {
          "description": "The unique identifier for a smart tap. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is the Smart Tap id. The Smart Tap id is a Base64 encoded string which represents the id which was generated by the Google Pay app.",
          "type": "string"
        }
      }
    },
    "Pagination": {
      "id": "Pagination",
      "type": "object",
      "properties": {
        "nextPageToken": {
          "description": "Page token to send to fetch the next page.",
          "type": "string"
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#pagination\"`."
        },
        "resultsPerPage": {
          "description": "Number of results returned in this page.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "OfferObject": {
      "id": "OfferObject",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Required. The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'."
        },
        "messages": {
          "items": {
            "$ref": "Message"
          },
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.",
          "type": "array"
        },
        "infoModuleData": {
          "$ref": "InfoModuleData",
          "description": "Deprecated. Use textModulesData instead."
        },
        "linkedObjectIds": {
          "description": "linked_object_ids are a list of other objects such as event ticket, loyalty, offer, generic, giftcard, transit and boarding pass that should be automatically attached to this offer object. If a user had saved this offer, then these linked_object_ids would be automatically pushed to the user's wallet (unless they turned off the setting to receive such linked passes). Make sure that objects present in linked_object_ids are already inserted - if not, calls would fail. Once linked, the linked objects cannot be unlinked. You cannot link objects belonging to another issuer. There is a limit to the number of objects that can be linked to a single object. After the limit is reached, new linked objects in the call will be ignored silently. Object IDs should follow the format issuer ID.identifier where the former is issued by Google and the latter is chosen by you.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "appLinkData": {
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding class only object AppLinkData will be displayed.",
          "$ref": "AppLinkData"
        },
        "passConstraints": {
          "description": "Pass constraints for the object. Includes limiting NFC and screenshot behaviors.",
          "$ref": "PassConstraints"
        },
        "imageModulesData": {
          "items": {
            "$ref": "ImageModuleData"
          },
          "description": "Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level.",
          "type": "array"
        },
        "barcode": {
          "description": "The barcode type and value.",
          "$ref": "Barcode"
        },
        "groupingInfo": {
          "$ref": "GroupingInfo",
          "description": "Information that controls how passes are grouped together."
        },
        "merchantLocations": {
          "items": {
            "$ref": "MerchantLocation"
          },
          "type": "array",
          "description": "Merchant locations. There is a maximum of ten on the object. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints."
        },
        "hasLinkedDevice": {
          "type": "boolean",
          "description": "Whether this object is currently linked to a single device. This field is set by the platform when a user saves the object, linking it to their device. Intended for use by select partners. Contact support for additional information."
        },
        "smartTapRedemptionValue": {
          "type": "string",
          "description": "The value that will be transmitted to a Smart Tap certified terminal over NFC for this object. The class level fields `enableSmartTap` and `redemptionIssuers` must also be set up correctly in order for the pass to support Smart Tap. Only ASCII characters are supported."
        },
        "disableExpirationNotification": {
          "description": "Indicates if notifications should explicitly be suppressed. If this field is set to true, regardless of the `messages` field, expiration notifications to the user will be suppressed. By default, this field is set to false. Currently, this can only be set for offers.",
          "type": "boolean"
        },
        "heroImage": {
          "description": "Optional banner image displayed on the front of the card. If none is present, hero image of the class, if present, will be displayed. If hero image of the class is also not present, nothing will be displayed.",
          "$ref": "Image"
        },
        "classReference": {
          "description": "A copy of the inherited fields of the parent class. These fields are retrieved during a GET.",
          "$ref": "OfferClass"
        },
        "saveRestrictions": {
          "$ref": "SaveRestrictions",
          "description": "Restrictions on the object that needs to be verified before the user tries to save the pass. Note that this restrictions will only be applied during save time. If the restrictions changed after a user saves the pass, the new restrictions will not be applied to an already saved pass."
        },
        "hasUsers": {
          "description": "Indicates if the object has users. This field is set by the platform.",
          "type": "boolean"
        },
        "state": {
          "type": "string",
          "description": "Required. The state of the object. This field is used to determine how an object is displayed in the app. For example, an `inactive` object is moved to the \"Expired passes\" section.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "ACTIVE",
            "active",
            "COMPLETED",
            "completed",
            "EXPIRED",
            "expired",
            "INACTIVE",
            "inactive"
          ],
          "enumDescriptions": [
            "Default value.",
            "Object is active and displayed to with other active objects.",
            "Legacy alias for `ACTIVE`. Deprecated.",
            "Object has completed it's lifecycle.",
            "Legacy alias for `COMPLETED`. Deprecated.",
            "Object is no longer valid (`validTimeInterval` passed).",
            "Legacy alias for `EXPIRED`. Deprecated.",
            "Object is no longer valid",
            "Legacy alias for `INACTIVE`. Deprecated."
          ]
        },
        "linksModuleData": {
          "description": "Links module data. If links module data is also defined on the class, both will be displayed.",
          "$ref": "LinksModuleData"
        },
        "locations": {
          "description": "Note: This field is currently not supported to trigger geo notifications.",
          "type": "array",
          "items": {
            "$ref": "LatLongPoint"
          }
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#offerObject\"`."
        },
        "valueAddedModuleData": {
          "items": {
            "$ref": "ValueAddedModuleData"
          },
          "description": "Optional value added module data. Maximum of fifteen on the object. For a pass only fifteen will be displayed.",
          "type": "array"
        },
        "rotatingBarcode": {
          "description": "The rotating barcode type and value.",
          "$ref": "RotatingBarcode"
        },
        "validTimeInterval": {
          "description": "The time period this object will be `active` and object can be used. An object's state will be changed to `expired` when this time period has passed.",
          "$ref": "TimeInterval"
        },
        "notifyPreference": {
          "description": "Whether or not field updates to this object should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If set to DO_NOT_NOTIFY or NOTIFICATION_SETTINGS_UNSPECIFIED, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.",
          "enumDescriptions": [
            "Default behavior is no notifications sent.",
            "This value will result in a notification being sent, if the updated fields are part of an allowlist."
          ],
          "enum": [
            "NOTIFICATION_SETTINGS_FOR_UPDATES_UNSPECIFIED",
            "NOTIFY_ON_UPDATE"
          ],
          "type": "string"
        },
        "version": {
          "description": "Deprecated",
          "deprecated": true,
          "type": "string",
          "format": "int64"
        },
        "classId": {
          "type": "string",
          "description": "Required. The class associated with this object. The class must be of the same type as this object, must already exist, and must be approved. Class IDs should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you."
        },
        "textModulesData": {
          "items": {
            "$ref": "TextModuleData"
          },
          "description": "Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class.",
          "type": "array"
        }
      }
    },
    "Permission": {
      "id": "Permission",
      "type": "object",
      "properties": {
        "emailAddress": {
          "type": "string",
          "description": "The email address of the user, group, or service account to which this permission refers to."
        },
        "role": {
          "type": "string",
          "description": "The role granted by this permission.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "ROLE_UNSPECIFIED",
            "OWNER",
            "owner",
            "READER",
            "reader",
            "WRITER",
            "writer"
          ],
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `OWNER`. Deprecated.",
            "",
            "Legacy alias for `READER`. Deprecated.",
            "",
            "Legacy alias for `WRITER`. Deprecated."
          ]
        }
      }
    },
    "RotatingBarcodeValues": {
      "description": "A payload containing many barcode values and start date/time.",
      "properties": {
        "startDateTime": {
          "description": "Required. The date/time the first barcode is valid from. Barcodes will be rotated through using period_millis defined on the object's RotatingBarcodeValueInfo. This is an ISO 8601 extended format date/time, with an offset. Time may be specified up to nanosecond precision. Offsets may be specified with seconds precision (even though offset seconds is not part of ISO 8601). For example: `1985-04-12T23:20:50.52Z` would be 20 minutes and 50.52 seconds after the 23rd hour of April 12th, 1985 in UTC. `1985-04-12T19:20:50.52-04:00` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985, 4 hours before UTC (same instant in time as the above example). If the event were in New York, this would be the equivalent of Eastern Daylight Time (EDT). Remember that offset varies in regions that observe Daylight Saving Time (or Summer Time), depending on the time of the year.",
          "type": "string"
        },
        "periodMillis": {
          "type": "string",
          "description": "Required. The amount of time each barcode is valid for.",
          "format": "int64"
        },
        "values": {
          "description": "Required. The values to encode in the barcode. At least one value is required.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "id": "RotatingBarcodeValues",
      "type": "object"
    },
    "SaveRestrictions": {
      "description": "Defines restrictions on the object that will be verified during save. Note: this is an advanced feature, please contact Google for implementation support.",
      "properties": {
        "restrictToEmailSha256": {
          "type": "string",
          "description": "Restrict the save of the referencing object to the given email address only. This is the hex output of SHA256 sum of the email address, all lowercase and without any notations like \".\" or \"+\", except \"@\". For example, for example@example.com, this value will be 31c5543c1734d25c7206f5fd591525d0295bec6fe84ff82f946a34fe970a1e66 and for Example@example.com, this value will be bc34f262c93ad7122763684ccea6f07fb7f5d8a2d11e60ce15a6f43fe70ce632 If email address of the logged-in user who tries to save this pass does not match with the defined value here, users won't be allowed to save this pass. They will instead be prompted with an error to contact the issuer. This information should be gathered from the user with an explicit consent via Sign in with Google integration https://developers.google.com/identity/authentication. Please contact with support before using Save Restrictions."
        }
      },
      "id": "SaveRestrictions",
      "type": "object"
    },
    "PurchaseDetails": {
      "id": "PurchaseDetails",
      "type": "object",
      "properties": {
        "ticketCost": {
          "description": "The cost of the ticket.",
          "$ref": "TicketCost"
        },
        "purchaseDateTime": {
          "type": "string",
          "description": "The purchase date/time of the ticket. This is an ISO 8601 extended format date/time, with or without an offset. Time may be specified up to nanosecond precision. Offsets may be specified with seconds precision (even though offset seconds is not part of ISO 8601). For example: `1985-04-12T23:20:50.52Z` would be 20 minutes and 50.52 seconds after the 23rd hour of April 12th, 1985 in UTC. `1985-04-12T19:20:50.52-04:00` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985, 4 hours before UTC (same instant in time as the above example). If the event were in New York, this would be the equivalent of Eastern Daylight Time (EDT). Remember that offset varies in regions that observe Daylight Saving Time (or Summer Time), depending on the time of the year. `1985-04-12T19:20:50.52` would be 20 minutes and 50.52 seconds after the 19th hour of April 12th, 1985 with no offset information. Without offset information, some rich features may not be available."
        },
        "accountId": {
          "description": "ID of the account used to purchase the ticket.",
          "type": "string"
        },
        "purchaseReceiptNumber": {
          "type": "string",
          "description": "Receipt number/identifier for tracking the ticket purchase via the body that sold the ticket."
        },
        "confirmationCode": {
          "type": "string",
          "description": "The confirmation code for the purchase. This may be the same for multiple different tickets and is used to group tickets together."
        }
      }
    },
    "DiscoverableProgramMerchantSigninInfo": {
      "description": "Information about the merchant hosted signin flow for a program.",
      "properties": {
        "signinWebsite": {
          "$ref": "Uri",
          "description": "The URL to direct the user to for the merchant's signin site."
        }
      },
      "id": "DiscoverableProgramMerchantSigninInfo",
      "type": "object"
    },
    "TransitClass": {
      "properties": {
        "locations": {
          "description": "Note: This field is currently not supported to trigger geo notifications.",
          "deprecated": true,
          "type": "array",
          "items": {
            "$ref": "LatLongPoint"
          }
        },
        "customPlatformLabel": {
          "$ref": "LocalizedString",
          "description": "A custom label to use for the boarding platform value (`transitObject.ticketLeg.platform`)."
        },
        "customSeatLabel": {
          "description": "A custom label to use for the seat location value (`transitObject.ticketLeg.ticketSeat.seat`).",
          "$ref": "LocalizedString"
        },
        "customDiscountMessageLabel": {
          "description": "A custom label to use for the transit discount message value (`transitObject.purchaseDetails.ticketCost.discountMessage`).",
          "$ref": "LocalizedString"
        },
        "review": {
          "$ref": "Review",
          "description": "The review comments set by the platform when a class is marked `approved` or `rejected`."
        },
        "multipleDevicesAndHoldersAllowedStatus": {
          "description": "Identifies whether multiple users and devices will save the same object referencing this class.",
          "enumDeprecated": [
            false,
            false,
            false,
            false,
            true,
            true,
            true
          ],
          "enum": [
            "STATUS_UNSPECIFIED",
            "MULTIPLE_HOLDERS",
            "ONE_USER_ALL_DEVICES",
            "ONE_USER_ONE_DEVICE",
            "multipleHolders",
            "oneUserAllDevices",
            "oneUserOneDevice"
          ],
          "type": "string",
          "enumDescriptions": [
            "Unspecified preference.",
            "The Pass object is shareable by a user and can be saved by any number of different users, and on any number of devices. Partners typically use this setup for passes that do not need to be restricted to a single user or pinned to a single device.",
            "An object can only be saved by one user, but this user can view and use it on multiple of their devices. Once the first user saves the object, no other user will be allowed to view or save it.",
            "An object can only be saved by one user on a single device. Intended for use by select partners in limited circumstances. An example use case is a transit ticket that should be \"device pinned\", meaning it can be saved, viewed and used only by a single user on a single device. Contact support for additional information.",
            "Legacy alias for `MULTIPLE_HOLDERS`. Deprecated.",
            "Legacy alias for `ONE_USER_ALL_DEVICES`. Deprecated.",
            "Legacy alias for `ONE_USER_ONE_DEVICE`. Deprecated."
          ]
        },
        "notifyPreference": {
          "description": "Whether or not field updates to this class should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If set to DO_NOT_NOTIFY or NOTIFICATION_SETTINGS_UNSPECIFIED, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.",
          "enumDescriptions": [
            "Default behavior is no notifications sent.",
            "This value will result in a notification being sent, if the updated fields are part of an allowlist."
          ],
          "enum": [
            "NOTIFICATION_SETTINGS_FOR_UPDATES_UNSPECIFIED",
            "NOTIFY_ON_UPDATE"
          ],
          "type": "string"
        },
        "logo": {
          "description": "Required. The logo image of the ticket. This image is displayed in the card detail view of the app.",
          "$ref": "Image"
        },
        "textModulesData": {
          "description": "Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class.",
          "type": "array",
          "items": {
            "$ref": "TextModuleData"
          }
        },
        "languageOverride": {
          "type": "string",
          "description": "If this field is present, transit tickets served to a user's device will always be in this language. Represents the BCP 47 language tag. Example values are \"en-US\", \"en-GB\", \"de\", or \"de-AT\"."
        },
        "transitType": {
          "type": "string",
          "description": "Required. The type of transit this class represents, such as \"bus\".",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "TRANSIT_TYPE_UNSPECIFIED",
            "BUS",
            "bus",
            "RAIL",
            "rail",
            "TRAM",
            "tram",
            "FERRY",
            "ferry",
            "OTHER",
            "other"
          ],
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `BUS`. Deprecated.",
            "",
            "Legacy alias for `RAIL`. Deprecated.",
            "",
            "Legacy alias for `TRAM`. Deprecated.",
            "",
            "Legacy alias for `FERRY`. Deprecated.",
            "",
            "Legacy alias for `OTHER`. Deprecated."
          ]
        },
        "customTimeRestrictionsLabel": {
          "$ref": "LocalizedString",
          "description": "A custom label to use for the time restrictions details value (`transitObject.ticketRestrictions.timeRestrictions`)."
        },
        "customConcessionCategoryLabel": {
          "description": "A custom label to use for the transit concession category value (`transitObject.concessionCategory`).",
          "$ref": "LocalizedString"
        },
        "customFareNameLabel": {
          "$ref": "LocalizedString",
          "description": "A custom label to use for the transit fare name value (`transitObject.ticketLeg.fareName`)."
        },
        "infoModuleData": {
          "deprecated": true,
          "description": "Deprecated. Use textModulesData instead.",
          "$ref": "InfoModuleData"
        },
        "wordMark": {
          "deprecated": true,
          "description": "Deprecated.",
          "$ref": "Image"
        },
        "classTemplateInfo": {
          "$ref": "ClassTemplateInfo",
          "description": "Template information about how the class should be displayed. If unset, Google will fallback to a default set of fields to display."
        },
        "customTransitTerminusNameLabel": {
          "description": "A custom label to use for the transit terminus name value (`transitObject.ticketLeg.transitTerminusName`).",
          "$ref": "LocalizedString"
        },
        "merchantLocations": {
          "items": {
            "$ref": "MerchantLocation"
          },
          "description": "Merchant locations. There is a maximum of ten on the class. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints.",
          "type": "array"
        },
        "countryCode": {
          "description": "Country code used to display the card's country (when the user is not in that country), as well as to display localized content when content is not available in the user's locale.",
          "type": "string"
        },
        "callbackOptions": {
          "description": "Callback options to be used to call the issuer back for every save/delete of an object for this class by the end-user. All objects of this class are eligible for the callback.",
          "$ref": "CallbackOptions"
        },
        "reviewStatus": {
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `UNDER_REVIEW`. Deprecated.",
            "",
            "Legacy alias for `APPROVED`. Deprecated.",
            "",
            "Legacy alias for `REJECTED`. Deprecated.",
            "",
            "Legacy alias for `DRAFT`. Deprecated."
          ],
          "description": "Required. The status of the class. This field can be set to `draft` or `underReview` using the insert, patch, or update API calls. Once the review state is changed from `draft` it may not be changed back to `draft`. You should keep this field to `draft` when the class is under development. A `draft` class cannot be used to create any object. You should set this field to `underReview` when you believe the class is ready for use. The platform will automatically set this field to `approved` and it can be immediately used to create or migrate objects. When updating an already `approved` class you should keep setting this field to `underReview`.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "REVIEW_STATUS_UNSPECIFIED",
            "UNDER_REVIEW",
            "underReview",
            "APPROVED",
            "approved",
            "REJECTED",
            "rejected",
            "DRAFT",
            "draft"
          ],
          "type": "string"
        },
        "customConfirmationCodeLabel": {
          "$ref": "LocalizedString",
          "description": "A custom label to use for the confirmation code value (`transitObject.purchaseDetails.confirmationCode`)."
        },
        "customPurchaseFaceValueLabel": {
          "description": "A custom label to use for the purchase face value (`transitObject.purchaseDetails.ticketCost.faceValue`).",
          "$ref": "LocalizedString"
        },
        "allowMultipleUsersPerObject": {
          "deprecated": true,
          "type": "boolean",
          "description": "Deprecated. Use `multipleDevicesAndHoldersAllowedStatus` instead."
        },
        "homepageUri": {
          "$ref": "Uri",
          "description": "The URI of your application's home page. Populating the URI in this field results in the exact same behavior as populating an URI in linksModuleData (when an object is rendered, a link to the homepage is shown in what would usually be thought of as the linksModuleData section of the object)."
        },
        "valueAddedModuleData": {
          "description": "Optional value added module data. Maximum of fifteen on the class. For a pass only fifteen will be displayed, prioritizing those from the object.",
          "type": "array",
          "items": {
            "$ref": "ValueAddedModuleData"
          }
        },
        "customRouteRestrictionsDetailsLabel": {
          "description": "A custom label to use for the route restrictions details value (`transitObject.ticketRestrictions.routeRestrictionsDetails`).",
          "$ref": "LocalizedString"
        },
        "enableSmartTap": {
          "type": "boolean",
          "description": "Identifies whether this class supports Smart Tap. The `redemptionIssuers` and object level `smartTapRedemptionLevel` fields must also be set up correctly in order for a pass to support Smart Tap."
        },
        "securityAnimation": {
          "$ref": "SecurityAnimation",
          "description": "Optional information about the security animation. If this is set a security animation will be rendered on pass details."
        },
        "heroImage": {
          "$ref": "Image",
          "description": "Optional banner image displayed on the front of the card. If none is present, nothing will be displayed. The image will display at 100% width."
        },
        "transitOperatorName": {
          "$ref": "LocalizedString",
          "description": "The name of the transit operator."
        },
        "linksModuleData": {
          "$ref": "LinksModuleData",
          "description": "Links module data. If links module data is also defined on the object, both will be displayed."
        },
        "customTicketNumberLabel": {
          "description": "A custom label to use for the ticket number value (`transitObject.ticketNumber`).",
          "$ref": "LocalizedString"
        },
        "customPurchaseReceiptNumberLabel": {
          "description": "A custom label to use for the purchase receipt number value (`transitObject.purchaseDetails.purchaseReceiptNumber`).",
          "$ref": "LocalizedString"
        },
        "activationOptions": {
          "$ref": "ActivationOptions",
          "description": "Activation options for an activatable ticket."
        },
        "customCoachLabel": {
          "$ref": "LocalizedString",
          "description": "A custom label to use for the coach value (`transitObject.ticketLeg.ticketSeat.coach`)."
        },
        "version": {
          "description": "Deprecated",
          "deprecated": true,
          "type": "string",
          "format": "int64"
        },
        "hexBackgroundColor": {
          "type": "string",
          "description": "The background color for the card. If not set the dominant color of the hero image is used, and if no hero image is set, the dominant color of the logo is used. The format is #rrggbb where rrggbb is a hex RGB triplet, such as `#ffcc00`. You can also use the shorthand version of the RGB triplet which is #rgb, such as `#fc0`."
        },
        "watermark": {
          "description": "Watermark image to display on the user's device.",
          "$ref": "Image"
        },
        "enableSingleLegItinerary": {
          "type": "boolean",
          "description": "Controls the display of the single-leg itinerary for this class. By default, an itinerary will only display for multi-leg trips."
        },
        "customZoneLabel": {
          "description": "A custom label to use for the boarding zone value (`transitObject.ticketLeg.zone`).",
          "$ref": "LocalizedString"
        },
        "customOtherRestrictionsLabel": {
          "description": "A custom label to use for the other restrictions value (`transitObject.ticketRestrictions.otherRestrictions`).",
          "$ref": "LocalizedString"
        },
        "issuerName": {
          "type": "string",
          "description": "Required. The issuer name. Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens."
        },
        "customPurchasePriceLabel": {
          "$ref": "LocalizedString",
          "description": "A custom label to use for the purchase price value (`transitObject.purchaseDetails.ticketCost.purchasePrice`)."
        },
        "id": {
          "description": "Required. The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
          "type": "string"
        },
        "messages": {
          "type": "array",
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.",
          "items": {
            "$ref": "Message"
          }
        },
        "redemptionIssuers": {
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array",
          "description": "Identifies which redemption issuers can redeem the pass over Smart Tap. Redemption issuers are identified by their issuer ID. Redemption issuers must have at least one Smart Tap key configured. The `enableSmartTap` and object level `smartTapRedemptionLevel` fields must also be set up correctly in order for a pass to support Smart Tap."
        },
        "appLinkData": {
          "$ref": "AppLinkData",
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding object that will be used instead."
        },
        "customRouteRestrictionsLabel": {
          "description": "A custom label to use for the route restrictions value (`transitObject.ticketRestrictions.routeRestrictions`).",
          "$ref": "LocalizedString"
        },
        "customFareClassLabel": {
          "description": "A custom label to use for the fare class value (`transitObject.ticketLeg.ticketSeat.fareClass`).",
          "$ref": "LocalizedString"
        },
        "localizedIssuerName": {
          "$ref": "LocalizedString",
          "description": "Translated strings for the issuer_name. Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens."
        },
        "customCarriageLabel": {
          "$ref": "LocalizedString",
          "description": "A custom label to use for the carriage value (`transitObject.ticketLeg.carriage`)."
        },
        "wideLogo": {
          "$ref": "Image",
          "description": "The wide logo of the ticket. When provided, this will be used in place of the logo in the top left of the card view."
        },
        "imageModulesData": {
          "items": {
            "$ref": "ImageModuleData"
          },
          "type": "array",
          "description": "Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level."
        },
        "viewUnlockRequirement": {
          "type": "string",
          "description": "View Unlock Requirement options for the transit ticket.",
          "enumDescriptions": [
            "Default value, same as UNLOCK_NOT_REQUIRED.",
            "Default behavior for all the existing Passes if ViewUnlockRequirement is not set.",
            "Requires the user to unlock their device each time the pass is viewed. If the user removes their device lock after saving the pass, then they will be prompted to create a device lock before the pass can be viewed."
          ],
          "enum": [
            "VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED",
            "UNLOCK_NOT_REQUIRED",
            "UNLOCK_REQUIRED_TO_VIEW"
          ]
        }
      },
      "id": "TransitClass",
      "type": "object"
    },
    "TransitObjectUploadRotatingBarcodeValuesRequest": {
      "id": "TransitObjectUploadRotatingBarcodeValuesRequest",
      "type": "object",
      "description": "Request to upload rotating barcode values.",
      "properties": {
        "blob": {
          "$ref": "Media",
          "description": "A reference to the rotating barcode values payload that was uploaded."
        },
        "mediaRequestInfo": {
          "$ref": "MediaRequestInfo",
          "description": "Extra information about the uploaded media."
        }
      }
    },
    "BarcodeSectionDetail": {
      "properties": {
        "fieldSelector": {
          "$ref": "FieldSelector",
          "description": "A reference to an existing text-based or image field to display."
        }
      },
      "id": "BarcodeSectionDetail",
      "type": "object"
    },
    "LinksModuleData": {
      "id": "LinksModuleData",
      "type": "object",
      "properties": {
        "uris": {
          "items": {
            "$ref": "Uri"
          },
          "type": "array",
          "description": "The list of URIs."
        }
      }
    },
    "TransitObject": {
      "id": "TransitObject",
      "type": "object",
      "properties": {
        "barcode": {
          "$ref": "Barcode",
          "description": "The barcode type and value."
        },
        "groupingInfo": {
          "$ref": "GroupingInfo",
          "description": "Information that controls how passes are grouped together."
        },
        "imageModulesData": {
          "description": "Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level.",
          "type": "array",
          "items": {
            "$ref": "ImageModuleData"
          }
        },
        "smartTapRedemptionValue": {
          "description": "The value that will be transmitted to a Smart Tap certified terminal over NFC for this object. The class level fields `enableSmartTap` and `redemptionIssuers` must also be set up correctly in order for the pass to support Smart Tap. Only ASCII characters are supported.",
          "type": "string"
        },
        "hasLinkedDevice": {
          "description": "Whether this object is currently linked to a single device. This field is set by the platform when a user saves the object, linking it to their device. Intended for use by select partners. Contact support for additional information.",
          "type": "boolean"
        },
        "deviceContext": {
          "$ref": "DeviceContext",
          "description": "Device context associated with the object."
        },
        "merchantLocations": {
          "items": {
            "$ref": "MerchantLocation"
          },
          "type": "array",
          "description": "Merchant locations. There is a maximum of ten on the object. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints."
        },
        "customConcessionCategory": {
          "description": "A custom concession category to use when `concessionCategory` does not provide the right option. Both `concessionCategory` and `customConcessionCategory` may not be set.",
          "$ref": "LocalizedString"
        },
        "ticketLeg": {
          "$ref": "TicketLeg",
          "description": "A single ticket leg contains departure and arrival information along with boarding and seating information. If more than one leg is to be specified then use the `ticketLegs` field instead. Both `ticketLeg` and `ticketLegs` may not be set."
        },
        "appLinkData": {
          "$ref": "AppLinkData",
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding class only object AppLinkData will be displayed."
        },
        "customTicketStatus": {
          "description": "A custom status to use for the ticket status value when `ticketStatus` does not provide the right option. Both `ticketStatus` and `customTicketStatus` may not be set.",
          "$ref": "LocalizedString"
        },
        "id": {
          "description": "Required. The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
          "type": "string"
        },
        "messages": {
          "type": "array",
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.",
          "items": {
            "$ref": "Message"
          }
        },
        "infoModuleData": {
          "$ref": "InfoModuleData",
          "description": "Deprecated. Use textModulesData instead."
        },
        "linkedObjectIds": {
          "items": {
            "type": "string"
          },
          "description": "linked_object_ids are a list of other objects such as event ticket, loyalty, offer, generic, giftcard, transit and boarding pass that should be automatically attached to this transit object. If a user had saved this transit card, then these linked_object_ids would be automatically pushed to the user's wallet (unless they turned off the setting to receive such linked passes). Make sure that objects present in linked_object_ids are already inserted - if not, calls would fail. Once linked, the linked objects cannot be unlinked. You cannot link objects belonging to another issuer. There is a limit to the number of objects that can be linked to a single object. After the limit is reached, new linked objects in the call will be ignored silently. Object IDs should follow the format issuer ID. identifier where the former is issued by Google and the latter is chosen by you.",
          "type": "array"
        },
        "ticketRestrictions": {
          "description": "Information about what kind of restrictions there are on using this ticket. For example, which days of the week it must be used, or which routes are allowed to be taken.",
          "$ref": "TicketRestrictions"
        },
        "passConstraints": {
          "$ref": "PassConstraints",
          "description": "Pass constraints for the object. Includes limiting NFC and screenshot behaviors."
        },
        "purchaseDetails": {
          "description": "Purchase details for this ticket.",
          "$ref": "PurchaseDetails"
        },
        "ticketStatus": {
          "type": "string",
          "description": "The status of the ticket. For states which affect display, use the `state` field instead.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "TICKET_STATUS_UNSPECIFIED",
            "USED",
            "used",
            "REFUNDED",
            "refunded",
            "EXCHANGED",
            "exchanged"
          ],
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `USED`. Deprecated.",
            "",
            "Legacy alias for `REFUNDED`. Deprecated.",
            "",
            "Legacy alias for `EXCHANGED`. Deprecated."
          ]
        },
        "tripType": {
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `ROUND_TRIP`. Deprecated.",
            "",
            "Legacy alias for `ONE_WAY`. Deprecated."
          ],
          "description": "Required. The type of trip this transit object represents. Used to determine the pass title and/or which symbol to use between the origin and destination.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "TRIP_TYPE_UNSPECIFIED",
            "ROUND_TRIP",
            "roundTrip",
            "ONE_WAY",
            "oneWay"
          ],
          "type": "string"
        },
        "tripId": {
          "type": "string",
          "description": "This id is used to group tickets together if the user has saved multiple tickets for the same trip."
        },
        "hexBackgroundColor": {
          "description": "The background color for the card. If not set the dominant color of the hero image is used, and if no hero image is set, the dominant color of the logo is used. The format is #rrggbb where rrggbb is a hex RGB triplet, such as `#ffcc00`. You can also use the shorthand version of the RGB triplet which is #rgb, such as `#fc0`.",
          "type": "string"
        },
        "rotatingBarcode": {
          "description": "The rotating barcode type and value.",
          "$ref": "RotatingBarcode"
        },
        "ticketNumber": {
          "description": "The number of the ticket. This is a unique identifier for the ticket in the transit operator's system.",
          "type": "string"
        },
        "passengerType": {
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `SINGLE_PASSENGER`. Deprecated.",
            "",
            "Legacy alias for `MULTIPLE_PASSENGERS`. Deprecated."
          ],
          "description": "The number of passengers.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "PASSENGER_TYPE_UNSPECIFIED",
            "SINGLE_PASSENGER",
            "singlePassenger",
            "MULTIPLE_PASSENGERS",
            "multiplePassengers"
          ],
          "type": "string"
        },
        "concessionCategory": {
          "description": "The concession category for the ticket.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "CONCESSION_CATEGORY_UNSPECIFIED",
            "ADULT",
            "adult",
            "CHILD",
            "child",
            "SENIOR",
            "senior"
          ],
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `ADULT`. Deprecated.",
            "",
            "Legacy alias for `CHILD`. Deprecated.",
            "",
            "Legacy alias for `SENIOR`. Deprecated."
          ]
        },
        "classId": {
          "type": "string",
          "description": "Required. The class associated with this object. The class must be of the same type as this object, must already exist, and must be approved. Class IDs should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you."
        },
        "textModulesData": {
          "items": {
            "$ref": "TextModuleData"
          },
          "type": "array",
          "description": "Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class."
        },
        "version": {
          "deprecated": true,
          "type": "string",
          "description": "Deprecated",
          "format": "int64"
        },
        "validTimeInterval": {
          "$ref": "TimeInterval",
          "description": "The time period this object will be `active` and object can be used. An object's state will be changed to `expired` when this time period has passed."
        },
        "notifyPreference": {
          "type": "string",
          "description": "Whether or not field updates to this object should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If set to DO_NOT_NOTIFY or NOTIFICATION_SETTINGS_UNSPECIFIED, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.",
          "enumDescriptions": [
            "Default behavior is no notifications sent.",
            "This value will result in a notification being sent, if the updated fields are part of an allowlist."
          ],
          "enum": [
            "NOTIFICATION_SETTINGS_FOR_UPDATES_UNSPECIFIED",
            "NOTIFY_ON_UPDATE"
          ]
        },
        "hasUsers": {
          "description": "Indicates if the object has users. This field is set by the platform.",
          "type": "boolean"
        },
        "state": {
          "enumDescriptions": [
            "Default value.",
            "Object is active and displayed to with other active objects.",
            "Legacy alias for `ACTIVE`. Deprecated.",
            "Object has completed it's lifecycle.",
            "Legacy alias for `COMPLETED`. Deprecated.",
            "Object is no longer valid (`validTimeInterval` passed).",
            "Legacy alias for `EXPIRED`. Deprecated.",
            "Object is no longer valid",
            "Legacy alias for `INACTIVE`. Deprecated."
          ],
          "type": "string",
          "description": "Required. The state of the object. This field is used to determine how an object is displayed in the app. For example, an `inactive` object is moved to the \"Expired passes\" section.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "ACTIVE",
            "active",
            "COMPLETED",
            "completed",
            "EXPIRED",
            "expired",
            "INACTIVE",
            "inactive"
          ]
        },
        "linksModuleData": {
          "$ref": "LinksModuleData",
          "description": "Links module data. If links module data is also defined on the class, both will be displayed."
        },
        "activationStatus": {
          "$ref": "ActivationStatus",
          "description": "The activation status for the object. Required if the class has `activationOptions` set."
        },
        "classReference": {
          "$ref": "TransitClass",
          "description": "A copy of the inherited fields of the parent class. These fields are retrieved during a GET."
        },
        "saveRestrictions": {
          "description": "Restrictions on the object that needs to be verified before the user tries to save the pass. Note that this restrictions will only be applied during save time. If the restrictions changed after a user saves the pass, the new restrictions will not be applied to an already saved pass.",
          "$ref": "SaveRestrictions"
        },
        "disableExpirationNotification": {
          "type": "boolean",
          "description": "Indicates if notifications should explicitly be suppressed. If this field is set to true, regardless of the `messages` field, expiration notifications to the user will be suppressed. By default, this field is set to false. Currently, this can only be set for offers."
        },
        "heroImage": {
          "$ref": "Image",
          "description": "Optional banner image displayed on the front of the card. If none is present, hero image of the class, if present, will be displayed. If hero image of the class is also not present, nothing will be displayed."
        },
        "valueAddedModuleData": {
          "description": "Optional value added module data. Maximum of fifteen on the object. For a pass only fifteen will be displayed.",
          "type": "array",
          "items": {
            "$ref": "ValueAddedModuleData"
          }
        },
        "passengerNames": {
          "type": "string",
          "description": "The name(s) of the passengers the ticket is assigned to. The above `passengerType` field is meant to give Google context on this field."
        },
        "ticketLegs": {
          "items": {
            "$ref": "TicketLeg"
          },
          "type": "array",
          "description": "Each ticket may contain one or more legs. Each leg contains departure and arrival information along with boarding and seating information. If only one leg is to be specified then use the `ticketLeg` field instead. Both `ticketLeg` and `ticketLegs` may not be set."
        },
        "locations": {
          "description": "Note: This field is currently not supported to trigger geo notifications.",
          "deprecated": true,
          "type": "array",
          "items": {
            "$ref": "LatLongPoint"
          }
        }
      }
    },
    "LoyaltyObjectAddMessageResponse": {
      "id": "LoyaltyObjectAddMessageResponse",
      "type": "object",
      "properties": {
        "resource": {
          "description": "The updated LoyaltyObject resource.",
          "$ref": "LoyaltyObject"
        }
      }
    },
    "TransitObjectUploadRotatingBarcodeValuesResponse": {
      "id": "TransitObjectUploadRotatingBarcodeValuesResponse",
      "type": "object",
      "description": "Response for uploading rotating barcode values.",
      "properties": {}
    },
    "MerchantLocation": {
      "id": "MerchantLocation",
      "type": "object",
      "description": "Locations of interest for this class or object. Currently, this location is used for geofenced notifications. When a user is within a set radius of this lat/long, and dwells there, Google will trigger a notification. When a user exits this radius, the notification will be hidden.",
      "properties": {
        "latitude": {
          "description": "The latitude specified as any value in the range of -90.0 through +90.0, both inclusive. Values outside these bounds will be rejected.",
          "type": "number",
          "format": "double"
        },
        "longitude": {
          "format": "double",
          "description": "The longitude specified in the range -180.0 through +180.0, both inclusive. Values outside these bounds will be rejected.",
          "type": "number"
        }
      }
    },
    "OfferClassListResponse": {
      "id": "OfferClassListResponse",
      "type": "object",
      "properties": {
        "resources": {
          "description": "Resources corresponding to the list request.",
          "type": "array",
          "items": {
            "$ref": "OfferClass"
          }
        },
        "pagination": {
          "$ref": "Pagination",
          "description": "Pagination of the response."
        }
      }
    },
    "Message": {
      "description": "A message that will be displayed with a Valuable",
      "properties": {
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#walletObjectMessage\"`.",
          "deprecated": true,
          "type": "string"
        },
        "body": {
          "description": "The message body.",
          "type": "string"
        },
        "displayInterval": {
          "description": "The period of time that the message will be displayed to users. You can define both a `startTime` and `endTime` for each message. A message is displayed immediately after a Wallet Object is inserted unless a `startTime` is set. The message will appear in a list of messages indefinitely if `endTime` is not provided.",
          "$ref": "TimeInterval"
        },
        "localizedHeader": {
          "description": "Translated strings for the message header.",
          "$ref": "LocalizedString"
        },
        "localizedBody": {
          "description": "Translated strings for the message body.",
          "$ref": "LocalizedString"
        },
        "id": {
          "type": "string",
          "description": "The ID associated with a message. This field is here to enable ease of management of messages. Notice ID values could possibly duplicate across multiple messages in the same class/instance, and care must be taken to select a reasonable ID for each message."
        },
        "header": {
          "type": "string",
          "description": "The message header."
        },
        "messageType": {
          "enumDescriptions": [
            "",
            "Renders the message as text on the card details screen. This is the default message type.",
            "Legacy alias for `TEXT`. Deprecated.",
            "Note: This enum is currently not supported.",
            "Legacy alias for `EXPIRATION_NOTIFICATION`. Deprecated.",
            "Renders the message as text on the card details screen and as an Android notification."
          ],
          "type": "string",
          "description": "The message type.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false
          ],
          "enum": [
            "MESSAGE_TYPE_UNSPECIFIED",
            "TEXT",
            "text",
            "EXPIRATION_NOTIFICATION",
            "expirationNotification",
            "TEXT_AND_NOTIFY"
          ]
        }
      },
      "id": "Message",
      "type": "object"
    },
    "TicketSeat": {
      "properties": {
        "seat": {
          "type": "string",
          "description": "The identifier of where the ticketed seat is located. Eg. \"42\". If there is no specific identifier, use `seatAssigment` instead."
        },
        "fareClass": {
          "enumDescriptions": [
            "",
            "",
            "Legacy alias for `ECONOMY`. Deprecated.",
            "",
            "Legacy alias for `FIRST`. Deprecated.",
            "",
            "Legacy alias for `BUSINESS`. Deprecated."
          ],
          "description": "The fare class of the ticketed seat.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "FARE_CLASS_UNSPECIFIED",
            "ECONOMY",
            "economy",
            "FIRST",
            "first",
            "BUSINESS",
            "business"
          ],
          "type": "string"
        },
        "seatAssignment": {
          "description": "The passenger's seat assignment. Eg. \"no specific seat\". To be used when there is no specific identifier to use in `seat`.",
          "$ref": "LocalizedString"
        },
        "customFareClass": {
          "$ref": "LocalizedString",
          "description": "A custome fare class to be used if no `fareClass` applies. Both `fareClass` and `customFareClass` may not be set."
        },
        "coach": {
          "description": "The identifier of the train car or coach in which the ticketed seat is located. Eg. \"10\"",
          "type": "string"
        }
      },
      "id": "TicketSeat",
      "type": "object"
    },
    "Notifications": {
      "id": "Notifications",
      "type": "object",
      "description": "Indicates if the object needs to have notification enabled. We support only one of ExpiryNotification/UpcomingNotification. `expiryNotification` takes precedence over `upcomingNotification`. In other words if `expiryNotification` is set, we ignore the `upcomingNotification` field.",
      "properties": {
        "expiryNotification": {
          "$ref": "ExpiryNotification",
          "description": "A notification would be triggered at a specific time before the card expires."
        },
        "upcomingNotification": {
          "description": "A notification would be triggered at a specific time before the card becomes usable.",
          "$ref": "UpcomingNotification"
        }
      }
    },
    "LabelValueRow": {
      "properties": {
        "columns": {
          "type": "array",
          "description": "A list of labels and values. These will be displayed in a singular column, one after the other, not in multiple columns, despite the field name.",
          "items": {
            "$ref": "LabelValue"
          }
        }
      },
      "id": "LabelValueRow",
      "type": "object"
    },
    "EventVenue": {
      "properties": {
        "kind": {
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#eventVenue\"`.",
          "deprecated": true,
          "type": "string"
        },
        "address": {
          "$ref": "LocalizedString",
          "description": "The address of the venue, such as \"24 Willie Mays Plaza\\nSan Francisco, CA 94107\". Address lines are separated by line feed (`\\n`) characters. This is required."
        },
        "name": {
          "$ref": "LocalizedString",
          "description": "The name of the venue, such as \"AT&T Park\". This is required."
        }
      },
      "id": "EventVenue",
      "type": "object"
    },
    "LoyaltyObject": {
      "properties": {
        "locations": {
          "description": "Note: This field is currently not supported to trigger geo notifications.",
          "deprecated": true,
          "type": "array",
          "items": {
            "$ref": "LatLongPoint"
          }
        },
        "kind": {
          "deprecated": true,
          "type": "string",
          "description": "Identifies what kind of resource this is. Value: the fixed string `\"walletobjects#loyaltyObject\"`."
        },
        "linkedOfferIds": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "A list of offer objects linked to this loyalty card. The offer objects must already exist. Offer object IDs should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you."
        },
        "valueAddedModuleData": {
          "items": {
            "$ref": "ValueAddedModuleData"
          },
          "type": "array",
          "description": "Optional value added module data. Maximum of fifteen on the object. For a pass only fifteen will be displayed."
        },
        "disableExpirationNotification": {
          "description": "Indicates if notifications should explicitly be suppressed. If this field is set to true, regardless of the `messages` field, expiration notifications to the user will be suppressed. By default, this field is set to false. Currently, this can only be set for offers.",
          "type": "boolean"
        },
        "heroImage": {
          "$ref": "Image",
          "description": "Optional banner image displayed on the front of the card. If none is present, hero image of the class, if present, will be displayed. If hero image of the class is also not present, nothing will be displayed."
        },
        "classReference": {
          "description": "A copy of the inherited fields of the parent class. These fields are retrieved during a GET.",
          "$ref": "LoyaltyClass"
        },
        "saveRestrictions": {
          "$ref": "SaveRestrictions",
          "description": "Restrictions on the object that needs to be verified before the user tries to save the pass. Note that this restrictions will only be applied during save time. If the restrictions changed after a user saves the pass, the new restrictions will not be applied to an already saved pass."
        },
        "hasUsers": {
          "description": "Indicates if the object has users. This field is set by the platform.",
          "type": "boolean"
        },
        "state": {
          "type": "string",
          "description": "Required. The state of the object. This field is used to determine how an object is displayed in the app. For example, an `inactive` object is moved to the \"Expired passes\" section.",
          "enumDeprecated": [
            false,
            false,
            true,
            false,
            true,
            false,
            true,
            false,
            true
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "ACTIVE",
            "active",
            "COMPLETED",
            "completed",
            "EXPIRED",
            "expired",
            "INACTIVE",
            "inactive"
          ],
          "enumDescriptions": [
            "Default value.",
            "Object is active and displayed to with other active objects.",
            "Legacy alias for `ACTIVE`. Deprecated.",
            "Object has completed it's lifecycle.",
            "Legacy alias for `COMPLETED`. Deprecated.",
            "Object is no longer valid (`validTimeInterval` passed).",
            "Legacy alias for `EXPIRED`. Deprecated.",
            "Object is no longer valid",
            "Legacy alias for `INACTIVE`. Deprecated."
          ]
        },
        "linksModuleData": {
          "$ref": "LinksModuleData",
          "description": "Links module data. If links module data is also defined on the class, both will be displayed."
        },
        "validTimeInterval": {
          "$ref": "TimeInterval",
          "description": "The time period this object will be `active` and object can be used. An object's state will be changed to `expired` when this time period has passed."
        },
        "notifyPreference": {
          "type": "string",
          "description": "Whether or not field updates to this object should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If set to DO_NOT_NOTIFY or NOTIFICATION_SETTINGS_UNSPECIFIED, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.",
          "enumDescriptions": [
            "Default behavior is no notifications sent.",
            "This value will result in a notification being sent, if the updated fields are part of an allowlist."
          ],
          "enum": [
            "NOTIFICATION_SETTINGS_FOR_UPDATES_UNSPECIFIED",
            "NOTIFY_ON_UPDATE"
          ]
        },
        "version": {
          "format": "int64",
          "description": "Deprecated",
          "deprecated": true,
          "type": "string"
        },
        "classId": {
          "description": "Required. The class associated with this object. The class must be of the same type as this object, must already exist, and must be approved. Class IDs should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you.",
          "type": "string"
        },
        "textModulesData": {
          "type": "array",
          "description": "Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class.",
          "items": {
            "$ref": "TextModuleData"
          }
        },
        "rotatingBarcode": {
          "$ref": "RotatingBarcode",
          "description": "The rotating barcode type and value."
        },
        "accountName": {
          "type": "string",
          "description": "The loyalty account holder name, such as \"John Smith.\" Recommended maximum length is 20 characters to ensure full string is displayed on smaller screens."
        },
        "passConstraints": {
          "description": "Pass constraints for the object. Includes limiting NFC and screenshot behaviors.",
          "$ref": "PassConstraints"
        },
        "accountId": {
          "description": "The loyalty account identifier. Recommended maximum length is 20 characters.",
          "type": "string"
        },
        "loyaltyPoints": {
          "$ref": "LoyaltyPoints",
          "description": "The loyalty reward points label, balance, and type."
        },
        "id": {
          "type": "string",
          "description": "Required. The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'."
        },
        "messages": {
          "type": "array",
          "description": "An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.",
          "items": {
            "$ref": "Message"
          }
        },
        "infoModuleData": {
          "$ref": "InfoModuleData",
          "description": "Deprecated. Use textModulesData instead."
        },
        "linkedObjectIds": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "linked_object_ids are a list of other objects such as event ticket, loyalty, offer, generic, giftcard, transit and boarding pass that should be automatically attached to this loyalty object. If a user had saved this loyalty card, then these linked_object_ids would be automatically pushed to the user's wallet (unless they turned off the setting to receive such linked passes). Make sure that objects present in linked_object_ids are already inserted - if not, calls would fail. Once linked, the linked objects cannot be unlinked. You cannot link objects belonging to another issuer. There is a limit to the number of objects that can be linked to a single object. After the limit is reached, new linked objects in the call will be ignored silently. Object IDs should follow the format issuer ID. identifier where the former is issued by Google and the latter is chosen by you."
        },
        "appLinkData": {
          "$ref": "AppLinkData",
          "description": "Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding class only object AppLinkData will be displayed."
        },
        "merchantLocations": {
          "items": {
            "$ref": "MerchantLocation"
          },
          "description": "Merchant locations. There is a maximum of ten on the object. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints.",
          "type": "array"
        },
        "hasLinkedDevice": {
          "type": "boolean",
          "description": "Whether this object is currently linked to a single device. This field is set by the platform when a user saves the object, linking it to their device. Intended for use by select partners. Contact support for additional information."
        },
        "secondaryLoyaltyPoints": {
          "description": "The secondary loyalty reward points label, balance, and type. Shown in addition to the primary loyalty points.",
          "$ref": "LoyaltyPoints"
        },
        "smartTapRedemptionValue": {
          "type": "string",
          "description": "The value that will be transmitted to a Smart Tap certified terminal over NFC for this object. The class level fields `enableSmartTap` and `redemptionIssuers` must also be set up correctly in order for the pass to support Smart Tap. Only ASCII characters are supported. If this value is not set but the class level fields `enableSmartTap` and `redemptionIssuers` are set up correctly, the `barcode.value` or the `accountId` fields are used as fallback if present."
        },
        "imageModulesData": {
          "items": {
            "$ref": "ImageModuleData"
          },
          "description": "Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level.",
          "type": "array"
        },
        "barcode": {
          "description": "The barcode type and value.",
          "$ref": "Barcode"
        },
        "groupingInfo": {
          "description": "Information that controls how passes are grouped together.",
          "$ref": "GroupingInfo"
        }
      },
      "id": "LoyaltyObject",
      "type": "object"
    },
    "SmartTapMerchantData": {
      "properties": {
        "smartTapMerchantId": {
          "format": "int64",
          "type": "string",
          "description": "Available only to Smart Tap enabled partners. Contact support for additional guidance."
        },
        "authenticationKeys": {
          "items": {
            "$ref": "AuthenticationKey"
          },
          "description": "Available only to Smart Tap enabled partners. Contact support for additional guidance.",
          "type": "array"
        }
      },
      "id": "SmartTapMerchantData",
      "type": "object"
    },
    "Resources": {
      "id": "Resources",
      "type": "object",
      "properties": {
        "transitObjects": {
          "description": "A list of transit objects.",
          "type": "array",
          "items": {
            "$ref": "TransitObject"
          }
        },
        "genericClasses": {
          "description": "A list of generic classes.",
          "type": "array",
          "items": {
            "$ref": "GenericClass"
          }
        },
        "giftCardClasses": {
          "items": {
            "$ref": "GiftCardClass"
          },
          "description": "A list of gift card classes.",
          "type": "array"
        },
        "genericObjects": {
          "type": "array",
          "description": "A list of generic objects.",
          "items": {
            "$ref": "GenericObject"
          }
        },
        "eventTicketObjects": {
          "items": {
            "$ref": "EventTicketObject"
          },
          "type": "array",
          "description": "A list of event ticket objects."
        },
        "eventTicketClasses": {
          "items": {
            "$ref": "EventTicketClass"
          },
          "description": "A list of event ticket classes.",
          "type": "array"
        },
        "loyaltyClasses": {
          "description": "A list of loyalty classes.",
          "type": "array",
          "items": {
            "$ref": "LoyaltyClass"
          }
        },
        "offerObjects": {
          "type": "array",
          "description": "A list of offer objects.",
          "items": {
            "$ref": "OfferObject"
          }
        },
        "flightObjects": {
          "type": "array",
          "description": "A list of flight objects.",
          "items": {
            "$ref": "FlightObject"
          }
        },
        "giftCardObjects": {
          "type": "array",
          "description": "A list of gift card objects.",
          "items": {
            "$ref": "GiftCardObject"
          }
        },
        "loyaltyObjects": {
          "description": "A list of loyalty objects.",
          "type": "array",
          "items": {
            "$ref": "LoyaltyObject"
          }
        },
        "flightClasses": {
          "description": "A list of flight classes.",
          "type": "array",
          "items": {
            "$ref": "FlightClass"
          }
        },
        "transitClasses": {
          "description": "A list of transit classes.",
          "type": "array",
          "items": {
            "$ref": "TransitClass"
          }
        },
        "offerClasses": {
          "description": "A list of offer classes.",
          "type": "array",
          "items": {
            "$ref": "OfferClass"
          }
        }
      }
    },
    "DiscoverableProgramMerchantSignupInfo": {
      "description": "Information about the merchant hosted signup flow for a program.",
      "properties": {
        "signupSharedDatas": {
          "items": {
            "type": "string",
            "enumDescriptions": [
              "",
              "",
              "",
              "single line address field",
              "multi line address fields",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "enum": [
              "SHARED_DATA_TYPE_UNSPECIFIED",
              "FIRST_NAME",
              "LAST_NAME",
              "STREET_ADDRESS",
              "ADDRESS_LINE_1",
              "ADDRESS_LINE_2",
              "ADDRESS_LINE_3",
              "CITY",
              "STATE",
              "ZIPCODE",
              "COUNTRY",
              "EMAIL",
              "PHONE"
            ]
          },
          "description": "User data that is sent in a POST request to the signup website URL. This information is encoded and then shared so that the merchant's website can prefill fields used to enroll the user for the discoverable program.",
          "type": "array"
        },
        "signupWebsite": {
          "$ref": "Uri",
          "description": "The URL to direct the user to for the merchant's signup site."
        }
      },
      "id": "DiscoverableProgramMerchantSignupInfo",
      "type": "object"
    }
  },
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/wallet_object.issuer": {
          "description": "Private Service: https://www.googleapis.com/auth/wallet_object.issuer"
        }
      }
    }
  },
  "baseUrl": "https://walletobjects.googleapis.com/",
  "mtlsRootUrl": "https://walletobjects.mtls.googleapis.com/",
  "title": "Google Wallet API",
  "resources": {
    "genericclass": {
      "methods": {
        "patch": {
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GenericClass"
          },
          "httpMethod": "PATCH",
          "description": "Updates the generic class referenced by the given class ID. This method supports patch semantics.",
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value needs to follow the format `issuerID.identifier` where `issuerID` is issued by Google and `identifier` is chosen by you. The unique identifier can only include alphanumeric characters, `.`, `_`, or `-`.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/genericClass/{resourceId}",
          "id": "walletobjects.genericclass.patch",
          "path": "walletobjects/v1/genericClass/{resourceId}",
          "request": {
            "$ref": "GenericClass"
          }
        },
        "update": {
          "id": "walletobjects.genericclass.update",
          "path": "walletobjects/v1/genericClass/{resourceId}",
          "request": {
            "$ref": "GenericClass"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/genericClass/{resourceId}",
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value needs to follow the format `issuerID.identifier` where `issuerID` is issued by Google and `identifier` is chosen by you. The unique identifier can only include alphanumeric characters, `.`, `_`, or `-`.",
              "location": "path",
              "required": true
            }
          },
          "description": "Updates the Generic class referenced by the given class ID.",
          "httpMethod": "PUT",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GenericClass"
          }
        },
        "addmessage": {
          "response": {
            "$ref": "GenericClassAddMessageResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST",
          "description": "Adds a message to the generic class referenced by the given class ID.",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string"
            }
          },
          "flatPath": "walletobjects/v1/genericClass/{resourceId}/addMessage",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "AddMessageRequest"
          },
          "id": "walletobjects.genericclass.addmessage",
          "path": "walletobjects/v1/genericClass/{resourceId}/addMessage"
        },
        "get": {
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value needs to follow the format `issuerID.identifier` where `issuerID` is issued by Google and `identifier` is chosen by you. The unique identifier can only include alphanumeric characters, `.`, `_`, or `-`.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "id": "walletobjects.genericclass.get",
          "path": "walletobjects/v1/genericClass/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/genericClass/{resourceId}",
          "httpMethod": "GET",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GenericClass"
          },
          "description": "Returns the generic class with the given class ID."
        },
        "insert": {
          "flatPath": "walletobjects/v1/genericClass",
          "parameterOrder": [],
          "request": {
            "$ref": "GenericClass"
          },
          "id": "walletobjects.genericclass.insert",
          "path": "walletobjects/v1/genericClass",
          "parameters": {},
          "description": "Inserts a generic class with the given ID and properties.",
          "response": {
            "$ref": "GenericClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST"
        },
        "list": {
          "description": "Returns a list of all generic classes for a given issuer ID.",
          "response": {
            "$ref": "GenericClassListResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "GET",
          "flatPath": "walletobjects/v1/genericClass",
          "parameterOrder": [],
          "id": "walletobjects.genericclass.list",
          "path": "walletobjects/v1/genericClass",
          "parameters": {
            "token": {
              "location": "query",
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` classes are available in a list. For example, if you have a list of 200 classes and you call list with `maxResults` set to 20, list will return the first 20 classes and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 classes.",
              "type": "string"
            },
            "issuerId": {
              "location": "query",
              "format": "int64",
              "type": "string",
              "description": "The ID of the issuer authorized to list classes."
            },
            "maxResults": {
              "type": "integer",
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined.",
              "location": "query",
              "format": "int32"
            }
          }
        }
      }
    },
    "flightclass": {
      "methods": {
        "insert": {
          "description": "Inserts an flight class with the given ID and properties.",
          "httpMethod": "POST",
          "response": {
            "$ref": "FlightClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "request": {
            "$ref": "FlightClass"
          },
          "id": "walletobjects.flightclass.insert",
          "path": "walletobjects/v1/flightClass",
          "flatPath": "walletobjects/v1/flightClass",
          "parameterOrder": [],
          "parameters": {}
        },
        "list": {
          "flatPath": "walletobjects/v1/flightClass",
          "parameterOrder": [],
          "id": "walletobjects.flightclass.list",
          "path": "walletobjects/v1/flightClass",
          "parameters": {
            "token": {
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` classes are available in a list. For example, if you have a list of 200 classes and you call list with `maxResults` set to 20, list will return the first 20 classes and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 classes.",
              "type": "string",
              "location": "query"
            },
            "issuerId": {
              "type": "string",
              "description": "The ID of the issuer authorized to list classes.",
              "location": "query",
              "format": "int64"
            },
            "maxResults": {
              "location": "query",
              "format": "int32",
              "type": "integer",
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined."
            }
          },
          "description": "Returns a list of all flight classes for a given issuer ID.",
          "response": {
            "$ref": "FlightClassListResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "GET"
        },
        "addmessage": {
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/flightClass/{resourceId}/addMessage",
          "id": "walletobjects.flightclass.addmessage",
          "path": "walletobjects/v1/flightClass/{resourceId}/addMessage",
          "request": {
            "$ref": "AddMessageRequest"
          },
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          },
          "description": "Adds a message to the flight class referenced by the given class ID.",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "FlightClassAddMessageResponse"
          },
          "httpMethod": "POST"
        },
        "get": {
          "description": "Returns the flight class with the given class ID.",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "FlightClass"
          },
          "httpMethod": "GET",
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/flightClass/{resourceId}",
          "id": "walletobjects.flightclass.get",
          "path": "walletobjects/v1/flightClass/{resourceId}",
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          }
        },
        "patch": {
          "id": "walletobjects.flightclass.patch",
          "path": "walletobjects/v1/flightClass/{resourceId}",
          "request": {
            "$ref": "FlightClass"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/flightClass/{resourceId}",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string"
            }
          },
          "description": "Updates the flight class referenced by the given class ID. This method supports patch semantics.",
          "httpMethod": "PATCH",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "FlightClass"
          }
        },
        "update": {
          "description": "Updates the flight class referenced by the given class ID.",
          "httpMethod": "PUT",
          "response": {
            "$ref": "FlightClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "request": {
            "$ref": "FlightClass"
          },
          "id": "walletobjects.flightclass.update",
          "path": "walletobjects/v1/flightClass/{resourceId}",
          "flatPath": "walletobjects/v1/flightClass/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          }
        }
      }
    },
    "giftcardclass": {
      "methods": {
        "insert": {
          "response": {
            "$ref": "GiftCardClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST",
          "description": "Inserts an gift card class with the given ID and properties.",
          "parameters": {},
          "flatPath": "walletobjects/v1/giftCardClass",
          "parameterOrder": [],
          "request": {
            "$ref": "GiftCardClass"
          },
          "id": "walletobjects.giftcardclass.insert",
          "path": "walletobjects/v1/giftCardClass"
        },
        "list": {
          "parameters": {
            "token": {
              "type": "string",
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` classes are available in a list. For example, if you have a list of 200 classes and you call list with `maxResults` set to 20, list will return the first 20 classes and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 classes.",
              "location": "query"
            },
            "issuerId": {
              "location": "query",
              "format": "int64",
              "type": "string",
              "description": "The ID of the issuer authorized to list classes."
            },
            "maxResults": {
              "format": "int32",
              "location": "query",
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined.",
              "type": "integer"
            }
          },
          "id": "walletobjects.giftcardclass.list",
          "path": "walletobjects/v1/giftCardClass",
          "flatPath": "walletobjects/v1/giftCardClass",
          "parameterOrder": [],
          "httpMethod": "GET",
          "response": {
            "$ref": "GiftCardClassListResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "description": "Returns a list of all gift card classes for a given issuer ID."
        },
        "addmessage": {
          "description": "Adds a message to the gift card class referenced by the given class ID.",
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GiftCardClassAddMessageResponse"
          },
          "id": "walletobjects.giftcardclass.addmessage",
          "path": "walletobjects/v1/giftCardClass/{resourceId}/addMessage",
          "request": {
            "$ref": "AddMessageRequest"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/giftCardClass/{resourceId}/addMessage",
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          }
        },
        "get": {
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/giftCardClass/{resourceId}",
          "id": "walletobjects.giftcardclass.get",
          "path": "walletobjects/v1/giftCardClass/{resourceId}",
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "description": "Returns the gift card class with the given class ID.",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GiftCardClass"
          },
          "httpMethod": "GET"
        },
        "patch": {
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/giftCardClass/{resourceId}",
          "id": "walletobjects.giftcardclass.patch",
          "path": "walletobjects/v1/giftCardClass/{resourceId}",
          "request": {
            "$ref": "GiftCardClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GiftCardClass"
          },
          "httpMethod": "PATCH",
          "description": "Updates the gift card class referenced by the given class ID. This method supports patch semantics."
        },
        "update": {
          "request": {
            "$ref": "GiftCardClass"
          },
          "id": "walletobjects.giftcardclass.update",
          "path": "walletobjects/v1/giftCardClass/{resourceId}",
          "flatPath": "walletobjects/v1/giftCardClass/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          },
          "description": "Updates the gift card class referenced by the given class ID.",
          "httpMethod": "PUT",
          "response": {
            "$ref": "GiftCardClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ]
        }
      }
    },
    "giftcardobject": {
      "methods": {
        "patch": {
          "httpMethod": "PATCH",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GiftCardObject"
          },
          "description": "Updates the gift card object referenced by the given object ID. This method supports patch semantics.",
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          },
          "id": "walletobjects.giftcardobject.patch",
          "path": "walletobjects/v1/giftCardObject/{resourceId}",
          "request": {
            "$ref": "GiftCardObject"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/giftCardObject/{resourceId}"
        },
        "update": {
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          },
          "id": "walletobjects.giftcardobject.update",
          "path": "walletobjects/v1/giftCardObject/{resourceId}",
          "request": {
            "$ref": "GiftCardObject"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/giftCardObject/{resourceId}",
          "httpMethod": "PUT",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GiftCardObject"
          },
          "description": "Updates the gift card object referenced by the given object ID."
        },
        "addmessage": {
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          },
          "flatPath": "walletobjects/v1/giftCardObject/{resourceId}/addMessage",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "AddMessageRequest"
          },
          "id": "walletobjects.giftcardobject.addmessage",
          "path": "walletobjects/v1/giftCardObject/{resourceId}/addMessage",
          "response": {
            "$ref": "GiftCardObjectAddMessageResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST",
          "description": "Adds a message to the gift card object referenced by the given object ID."
        },
        "get": {
          "response": {
            "$ref": "GiftCardObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "GET",
          "description": "Returns the gift card object with the given object ID.",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          },
          "flatPath": "walletobjects/v1/giftCardObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "id": "walletobjects.giftcardobject.get",
          "path": "walletobjects/v1/giftCardObject/{resourceId}"
        },
        "insert": {
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/giftCardObject",
          "id": "walletobjects.giftcardobject.insert",
          "path": "walletobjects/v1/giftCardObject",
          "request": {
            "$ref": "GiftCardObject"
          },
          "parameters": {},
          "description": "Inserts an gift card object with the given ID and properties.",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GiftCardObject"
          },
          "httpMethod": "POST"
        },
        "list": {
          "parameters": {
            "maxResults": {
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined.",
              "type": "integer",
              "format": "int32",
              "location": "query"
            },
            "classId": {
              "location": "query",
              "description": "The ID of the class whose objects will be listed.",
              "type": "string"
            },
            "token": {
              "type": "string",
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` objects are available in a list. For example, if you have a list of 200 objects and you call list with `maxResults` set to 20, list will return the first 20 objects and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 objects.",
              "location": "query"
            }
          },
          "id": "walletobjects.giftcardobject.list",
          "path": "walletobjects/v1/giftCardObject",
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/giftCardObject",
          "httpMethod": "GET",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GiftCardObjectListResponse"
          },
          "description": "Returns a list of all gift card objects for a given issuer ID."
        }
      }
    },
    "walletobjects": {
      "resources": {
        "v1": {
          "resources": {
            "privateContent": {
              "methods": {
                "setPassUpdateNotice": {
                  "description": "Provide Google with information about awaiting private pass update. This will allow Google to provide the update notification to the device that currently holds this pass.",
                  "httpMethod": "POST",
                  "scopes": [
                    "https://www.googleapis.com/auth/wallet_object.issuer"
                  ],
                  "response": {
                    "$ref": "SetPassUpdateNoticeResponse"
                  },
                  "id": "walletobjects.walletobjects.v1.privateContent.setPassUpdateNotice",
                  "path": "walletobjects/v1/privateContent/setPassUpdateNotice",
                  "request": {
                    "$ref": "SetPassUpdateNoticeRequest"
                  },
                  "parameterOrder": [],
                  "flatPath": "walletobjects/v1/privateContent/setPassUpdateNotice",
                  "parameters": {}
                }
              }
            }
          }
        }
      }
    },
    "offerobject": {
      "methods": {
        "addmessage": {
          "description": "Adds a message to the offer object referenced by the given object ID.",
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "OfferObjectAddMessageResponse"
          },
          "id": "walletobjects.offerobject.addmessage",
          "path": "walletobjects/v1/offerObject/{resourceId}/addMessage",
          "request": {
            "$ref": "AddMessageRequest"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/offerObject/{resourceId}/addMessage",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string"
            }
          }
        },
        "get": {
          "description": "Returns the offer object with the given object ID.",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "OfferObject"
          },
          "httpMethod": "GET",
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/offerObject/{resourceId}",
          "id": "walletobjects.offerobject.get",
          "path": "walletobjects/v1/offerObject/{resourceId}",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string"
            }
          }
        },
        "patch": {
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "flatPath": "walletobjects/v1/offerObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "OfferObject"
          },
          "id": "walletobjects.offerobject.patch",
          "path": "walletobjects/v1/offerObject/{resourceId}",
          "response": {
            "$ref": "OfferObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "PATCH",
          "description": "Updates the offer object referenced by the given object ID. This method supports patch semantics."
        },
        "update": {
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          },
          "flatPath": "walletobjects/v1/offerObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "OfferObject"
          },
          "id": "walletobjects.offerobject.update",
          "path": "walletobjects/v1/offerObject/{resourceId}",
          "response": {
            "$ref": "OfferObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "PUT",
          "description": "Updates the offer object referenced by the given object ID."
        },
        "insert": {
          "id": "walletobjects.offerobject.insert",
          "path": "walletobjects/v1/offerObject",
          "request": {
            "$ref": "OfferObject"
          },
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/offerObject",
          "parameters": {},
          "description": "Inserts an offer object with the given ID and properties.",
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "OfferObject"
          }
        },
        "list": {
          "description": "Returns a list of all offer objects for a given issuer ID.",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "OfferObjectListResponse"
          },
          "httpMethod": "GET",
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/offerObject",
          "id": "walletobjects.offerobject.list",
          "path": "walletobjects/v1/offerObject",
          "parameters": {
            "maxResults": {
              "type": "integer",
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined.",
              "location": "query",
              "format": "int32"
            },
            "classId": {
              "description": "The ID of the class whose objects will be listed.",
              "type": "string",
              "location": "query"
            },
            "token": {
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` objects are available in a list. For example, if you have a list of 200 objects and you call list with `maxResults` set to 20, list will return the first 20 objects and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 objects.",
              "type": "string",
              "location": "query"
            }
          }
        }
      }
    },
    "loyaltyobject": {
      "methods": {
        "insert": {
          "parameters": {},
          "id": "walletobjects.loyaltyobject.insert",
          "path": "walletobjects/v1/loyaltyObject",
          "request": {
            "$ref": "LoyaltyObject"
          },
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/loyaltyObject",
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "LoyaltyObject"
          },
          "description": "Inserts an loyalty object with the given ID and properties."
        },
        "list": {
          "parameters": {
            "classId": {
              "location": "query",
              "description": "The ID of the class whose objects will be listed.",
              "type": "string"
            },
            "token": {
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` objects are available in a list. For example, if you have a list of 200 objects and you call list with `maxResults` set to 20, list will return the first 20 objects and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 objects.",
              "type": "string",
              "location": "query"
            },
            "maxResults": {
              "type": "integer",
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined.",
              "location": "query",
              "format": "int32"
            }
          },
          "id": "walletobjects.loyaltyobject.list",
          "path": "walletobjects/v1/loyaltyObject",
          "flatPath": "walletobjects/v1/loyaltyObject",
          "parameterOrder": [],
          "httpMethod": "GET",
          "response": {
            "$ref": "LoyaltyObjectListResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "description": "Returns a list of all loyalty objects for a given issuer ID."
        },
        "modifylinkedofferobjects": {
          "description": "Deprecated: Use Auto Linked Passes instead. Modifies linked offer objects for the loyalty object with the given ID.",
          "deprecated": true,
          "response": {
            "$ref": "LoyaltyObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST",
          "flatPath": "walletobjects/v1/loyaltyObject/{resourceId}/modifyLinkedOfferObjects",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "ModifyLinkedOfferObjectsRequest"
          },
          "id": "walletobjects.loyaltyobject.modifylinkedofferobjects",
          "path": "walletobjects/v1/loyaltyObject/{resourceId}/modifyLinkedOfferObjects",
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          }
        },
        "addmessage": {
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string"
            }
          },
          "request": {
            "$ref": "AddMessageRequest"
          },
          "id": "walletobjects.loyaltyobject.addmessage",
          "path": "walletobjects/v1/loyaltyObject/{resourceId}/addMessage",
          "flatPath": "walletobjects/v1/loyaltyObject/{resourceId}/addMessage",
          "parameterOrder": [
            "resourceId"
          ],
          "httpMethod": "POST",
          "response": {
            "$ref": "LoyaltyObjectAddMessageResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "description": "Adds a message to the loyalty object referenced by the given object ID."
        },
        "get": {
          "flatPath": "walletobjects/v1/loyaltyObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "id": "walletobjects.loyaltyobject.get",
          "path": "walletobjects/v1/loyaltyObject/{resourceId}",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string"
            }
          },
          "description": "Returns the loyalty object with the given object ID.",
          "response": {
            "$ref": "LoyaltyObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "GET"
        },
        "patch": {
          "description": "Updates the loyalty object referenced by the given object ID. This method supports patch semantics.",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "LoyaltyObject"
          },
          "httpMethod": "PATCH",
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/loyaltyObject/{resourceId}",
          "id": "walletobjects.loyaltyobject.patch",
          "path": "walletobjects/v1/loyaltyObject/{resourceId}",
          "request": {
            "$ref": "LoyaltyObject"
          },
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string",
              "location": "path",
              "required": true
            }
          }
        },
        "update": {
          "description": "Updates the loyalty object referenced by the given object ID.",
          "response": {
            "$ref": "LoyaltyObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "PUT",
          "flatPath": "walletobjects/v1/loyaltyObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "LoyaltyObject"
          },
          "id": "walletobjects.loyaltyobject.update",
          "path": "walletobjects/v1/loyaltyObject/{resourceId}",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string"
            }
          }
        }
      }
    },
    "smarttap": {
      "methods": {
        "insert": {
          "response": {
            "$ref": "SmartTap"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST",
          "description": "Inserts the smart tap.",
          "parameters": {},
          "flatPath": "walletobjects/v1/smartTap",
          "parameterOrder": [],
          "request": {
            "$ref": "SmartTap"
          },
          "id": "walletobjects.smarttap.insert",
          "path": "walletobjects/v1/smartTap"
        }
      }
    },
    "eventticketobject": {
      "methods": {
        "addmessage": {
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string"
            }
          },
          "id": "walletobjects.eventticketobject.addmessage",
          "path": "walletobjects/v1/eventTicketObject/{resourceId}/addMessage",
          "request": {
            "$ref": "AddMessageRequest"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/eventTicketObject/{resourceId}/addMessage",
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "EventTicketObjectAddMessageResponse"
          },
          "description": "Adds a message to the event ticket object referenced by the given object ID."
        },
        "get": {
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          },
          "flatPath": "walletobjects/v1/eventTicketObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "id": "walletobjects.eventticketobject.get",
          "path": "walletobjects/v1/eventTicketObject/{resourceId}",
          "response": {
            "$ref": "EventTicketObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "GET",
          "description": "Returns the event ticket object with the given object ID."
        },
        "patch": {
          "request": {
            "$ref": "EventTicketObject"
          },
          "id": "walletobjects.eventticketobject.patch",
          "path": "walletobjects/v1/eventTicketObject/{resourceId}",
          "flatPath": "walletobjects/v1/eventTicketObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "description": "Updates the event ticket object referenced by the given object ID. This method supports patch semantics.",
          "httpMethod": "PATCH",
          "response": {
            "$ref": "EventTicketObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ]
        },
        "update": {
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          },
          "id": "walletobjects.eventticketobject.update",
          "path": "walletobjects/v1/eventTicketObject/{resourceId}",
          "request": {
            "$ref": "EventTicketObject"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/eventTicketObject/{resourceId}",
          "httpMethod": "PUT",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "EventTicketObject"
          },
          "description": "Updates the event ticket object referenced by the given object ID."
        },
        "insert": {
          "parameters": {},
          "id": "walletobjects.eventticketobject.insert",
          "path": "walletobjects/v1/eventTicketObject",
          "request": {
            "$ref": "EventTicketObject"
          },
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/eventTicketObject",
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "EventTicketObject"
          },
          "description": "Inserts an event ticket object with the given ID and properties."
        },
        "list": {
          "description": "Returns a list of all event ticket objects for a given issuer ID.",
          "response": {
            "$ref": "EventTicketObjectListResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "GET",
          "flatPath": "walletobjects/v1/eventTicketObject",
          "parameterOrder": [],
          "id": "walletobjects.eventticketobject.list",
          "path": "walletobjects/v1/eventTicketObject",
          "parameters": {
            "maxResults": {
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined.",
              "type": "integer",
              "format": "int32",
              "location": "query"
            },
            "classId": {
              "location": "query",
              "type": "string",
              "description": "The ID of the class whose objects will be listed."
            },
            "token": {
              "type": "string",
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` objects are available in a list. For example, if you have a list of 200 objects and you call list with `maxResults` set to 20, list will return the first 20 objects and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 objects.",
              "location": "query"
            }
          }
        },
        "modifylinkedofferobjects": {
          "deprecated": true,
          "description": "Deprecated: Use Auto Linked Passes instead. Modifies linked offer objects for the event ticket object with the given ID.",
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "EventTicketObject"
          },
          "id": "walletobjects.eventticketobject.modifylinkedofferobjects",
          "path": "walletobjects/v1/eventTicketObject/{resourceId}/modifyLinkedOfferObjects",
          "request": {
            "$ref": "ModifyLinkedOfferObjectsRequest"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/eventTicketObject/{resourceId}/modifyLinkedOfferObjects",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          }
        }
      }
    },
    "genericobject": {
      "methods": {
        "patch": {
          "httpMethod": "PATCH",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GenericObject"
          },
          "description": "Updates the generic object referenced by the given object ID. This method supports patch semantics.",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value needs to follow the format `issuerID.identifier` where `issuerID` is issued by Google and `identifier` is chosen by you. The unique identifier can only include alphanumeric characters, `.`, `_`, or `-`.",
              "type": "string"
            }
          },
          "id": "walletobjects.genericobject.patch",
          "path": "walletobjects/v1/genericObject/{resourceId}",
          "request": {
            "$ref": "GenericObject"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/genericObject/{resourceId}"
        },
        "update": {
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value needs to follow the format `issuerID.identifier` where `issuerID` is issued by Google and `identifier` is chosen by you. The unique identifier can only include alphanumeric characters, `.`, `_`, or `-`.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "flatPath": "walletobjects/v1/genericObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "GenericObject"
          },
          "id": "walletobjects.genericobject.update",
          "path": "walletobjects/v1/genericObject/{resourceId}",
          "response": {
            "$ref": "GenericObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "PUT",
          "description": "Updates the generic object referenced by the given object ID."
        },
        "addmessage": {
          "description": "Adds a message to the generic object referenced by the given object ID.",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GenericObjectAddMessageResponse"
          },
          "httpMethod": "POST",
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/genericObject/{resourceId}/addMessage",
          "id": "walletobjects.genericobject.addmessage",
          "path": "walletobjects/v1/genericObject/{resourceId}/addMessage",
          "request": {
            "$ref": "AddMessageRequest"
          },
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          }
        },
        "get": {
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "GenericObject"
          },
          "httpMethod": "GET",
          "description": "Returns the generic object with the given object ID.",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value needs to follow the format `issuerID.identifier` where `issuerID` is issued by Google and `identifier` is chosen by you. The unique identifier can only include alphanumeric characters, `.`, `_`, or `-`.",
              "type": "string"
            }
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/genericObject/{resourceId}",
          "id": "walletobjects.genericobject.get",
          "path": "walletobjects/v1/genericObject/{resourceId}"
        },
        "insert": {
          "response": {
            "$ref": "GenericObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST",
          "description": "Inserts a generic object with the given ID and properties.",
          "parameters": {},
          "flatPath": "walletobjects/v1/genericObject",
          "parameterOrder": [],
          "request": {
            "$ref": "GenericObject"
          },
          "id": "walletobjects.genericobject.insert",
          "path": "walletobjects/v1/genericObject"
        },
        "list": {
          "httpMethod": "GET",
          "response": {
            "$ref": "GenericObjectListResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "description": "Returns a list of all generic objects for a given issuer ID.",
          "parameters": {
            "maxResults": {
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined.",
              "type": "integer",
              "format": "int32",
              "location": "query"
            },
            "classId": {
              "description": "The ID of the class whose objects will be listed.",
              "type": "string",
              "location": "query"
            },
            "token": {
              "type": "string",
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` objects are available in a list. For example, if you have a list of 200 objects and you call list with `maxResults` set to 20, list will return the first 20 objects and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 objects.",
              "location": "query"
            }
          },
          "id": "walletobjects.genericobject.list",
          "path": "walletobjects/v1/genericObject",
          "flatPath": "walletobjects/v1/genericObject",
          "parameterOrder": []
        }
      }
    },
    "permissions": {
      "methods": {
        "get": {
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/permissions/{resourceId}",
          "id": "walletobjects.permissions.get",
          "path": "walletobjects/v1/permissions/{resourceId}",
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for an issuer. This ID must be unique across all issuers.",
              "type": "string",
              "format": "int64",
              "location": "path",
              "required": true
            }
          },
          "description": "Returns the permissions for the given issuer id.",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "Permissions"
          },
          "httpMethod": "GET"
        },
        "update": {
          "httpMethod": "PUT",
          "response": {
            "$ref": "Permissions"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "description": "Updates the permissions for the given issuer.",
          "parameters": {
            "resourceId": {
              "format": "int64",
              "location": "path",
              "required": true,
              "description": "The unique identifier for an issuer. This ID must be unique across all issuers.",
              "type": "string"
            }
          },
          "request": {
            "$ref": "Permissions"
          },
          "id": "walletobjects.permissions.update",
          "path": "walletobjects/v1/permissions/{resourceId}",
          "flatPath": "walletobjects/v1/permissions/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ]
        }
      }
    },
    "transitclass": {
      "methods": {
        "patch": {
          "httpMethod": "PATCH",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "TransitClass"
          },
          "description": "Updates the transit class referenced by the given class ID. This method supports patch semantics.",
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "id": "walletobjects.transitclass.patch",
          "path": "walletobjects/v1/transitClass/{resourceId}",
          "request": {
            "$ref": "TransitClass"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/transitClass/{resourceId}"
        },
        "update": {
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string"
            }
          },
          "id": "walletobjects.transitclass.update",
          "path": "walletobjects/v1/transitClass/{resourceId}",
          "request": {
            "$ref": "TransitClass"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/transitClass/{resourceId}",
          "httpMethod": "PUT",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "TransitClass"
          },
          "description": "Updates the transit class referenced by the given class ID."
        },
        "addmessage": {
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          },
          "request": {
            "$ref": "AddMessageRequest"
          },
          "id": "walletobjects.transitclass.addmessage",
          "path": "walletobjects/v1/transitClass/{resourceId}/addMessage",
          "flatPath": "walletobjects/v1/transitClass/{resourceId}/addMessage",
          "parameterOrder": [
            "resourceId"
          ],
          "httpMethod": "POST",
          "response": {
            "$ref": "TransitClassAddMessageResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "description": "Adds a message to the transit class referenced by the given class ID."
        },
        "get": {
          "httpMethod": "GET",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "TransitClass"
          },
          "description": "Returns the transit class with the given class ID.",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          },
          "id": "walletobjects.transitclass.get",
          "path": "walletobjects/v1/transitClass/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/transitClass/{resourceId}"
        },
        "insert": {
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "TransitClass"
          },
          "description": "Inserts a transit class with the given ID and properties.",
          "parameters": {},
          "id": "walletobjects.transitclass.insert",
          "path": "walletobjects/v1/transitClass",
          "request": {
            "$ref": "TransitClass"
          },
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/transitClass"
        },
        "list": {
          "httpMethod": "GET",
          "response": {
            "$ref": "TransitClassListResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "description": "Returns a list of all transit classes for a given issuer ID.",
          "parameters": {
            "maxResults": {
              "location": "query",
              "format": "int32",
              "type": "integer",
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined."
            },
            "issuerId": {
              "type": "string",
              "description": "The ID of the issuer authorized to list classes.",
              "location": "query",
              "format": "int64"
            },
            "token": {
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` classes are available in a list. For example, if you have a list of 200 classes and you call list with `maxResults` set to 20, list will return the first 20 classes and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 classes.",
              "type": "string",
              "location": "query"
            }
          },
          "id": "walletobjects.transitclass.list",
          "path": "walletobjects/v1/transitClass",
          "flatPath": "walletobjects/v1/transitClass",
          "parameterOrder": []
        }
      }
    },
    "flightobject": {
      "methods": {
        "addmessage": {
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "FlightObjectAddMessageResponse"
          },
          "httpMethod": "POST",
          "description": "Adds a message to the flight object referenced by the given object ID.",
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/flightObject/{resourceId}/addMessage",
          "id": "walletobjects.flightobject.addmessage",
          "path": "walletobjects/v1/flightObject/{resourceId}/addMessage",
          "request": {
            "$ref": "AddMessageRequest"
          }
        },
        "get": {
          "id": "walletobjects.flightobject.get",
          "path": "walletobjects/v1/flightObject/{resourceId}",
          "flatPath": "walletobjects/v1/flightObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          },
          "description": "Returns the flight object with the given object ID.",
          "httpMethod": "GET",
          "response": {
            "$ref": "FlightObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ]
        },
        "patch": {
          "description": "Updates the flight object referenced by the given object ID. This method supports patch semantics.",
          "response": {
            "$ref": "FlightObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "PATCH",
          "flatPath": "walletobjects/v1/flightObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "FlightObject"
          },
          "id": "walletobjects.flightobject.patch",
          "path": "walletobjects/v1/flightObject/{resourceId}",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          }
        },
        "update": {
          "response": {
            "$ref": "FlightObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "PUT",
          "description": "Updates the flight object referenced by the given object ID.",
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "flatPath": "walletobjects/v1/flightObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "FlightObject"
          },
          "id": "walletobjects.flightobject.update",
          "path": "walletobjects/v1/flightObject/{resourceId}"
        },
        "insert": {
          "description": "Inserts an flight object with the given ID and properties.",
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "FlightObject"
          },
          "id": "walletobjects.flightobject.insert",
          "path": "walletobjects/v1/flightObject",
          "request": {
            "$ref": "FlightObject"
          },
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/flightObject",
          "parameters": {}
        },
        "list": {
          "response": {
            "$ref": "FlightObjectListResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "GET",
          "description": "Returns a list of all flight objects for a given issuer ID.",
          "parameters": {
            "maxResults": {
              "format": "int32",
              "location": "query",
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined.",
              "type": "integer"
            },
            "classId": {
              "type": "string",
              "description": "The ID of the class whose objects will be listed.",
              "location": "query"
            },
            "token": {
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` objects are available in a list. For example, if you have a list of 200 objects and you call list with `maxResults` set to 20, list will return the first 20 objects and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 objects.",
              "type": "string",
              "location": "query"
            }
          },
          "flatPath": "walletobjects/v1/flightObject",
          "parameterOrder": [],
          "id": "walletobjects.flightobject.list",
          "path": "walletobjects/v1/flightObject"
        }
      }
    },
    "eventticketclass": {
      "methods": {
        "insert": {
          "parameters": {},
          "flatPath": "walletobjects/v1/eventTicketClass",
          "parameterOrder": [],
          "request": {
            "$ref": "EventTicketClass"
          },
          "id": "walletobjects.eventticketclass.insert",
          "path": "walletobjects/v1/eventTicketClass",
          "response": {
            "$ref": "EventTicketClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST",
          "description": "Inserts an event ticket class with the given ID and properties."
        },
        "list": {
          "description": "Returns a list of all event ticket classes for a given issuer ID.",
          "response": {
            "$ref": "EventTicketClassListResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "GET",
          "flatPath": "walletobjects/v1/eventTicketClass",
          "parameterOrder": [],
          "id": "walletobjects.eventticketclass.list",
          "path": "walletobjects/v1/eventTicketClass",
          "parameters": {
            "maxResults": {
              "location": "query",
              "format": "int32",
              "type": "integer",
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined."
            },
            "token": {
              "location": "query",
              "type": "string",
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` classes are available in a list. For example, if you have a list of 200 classes and you call list with `maxResults` set to 20, list will return the first 20 classes and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 classes."
            },
            "issuerId": {
              "type": "string",
              "description": "The ID of the issuer authorized to list classes.",
              "location": "query",
              "format": "int64"
            }
          }
        },
        "addmessage": {
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/eventTicketClass/{resourceId}/addMessage",
          "id": "walletobjects.eventticketclass.addmessage",
          "path": "walletobjects/v1/eventTicketClass/{resourceId}/addMessage",
          "request": {
            "$ref": "AddMessageRequest"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "EventTicketClassAddMessageResponse"
          },
          "httpMethod": "POST",
          "description": "Adds a message to the event ticket class referenced by the given class ID."
        },
        "get": {
          "flatPath": "walletobjects/v1/eventTicketClass/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "id": "walletobjects.eventticketclass.get",
          "path": "walletobjects/v1/eventTicketClass/{resourceId}",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          },
          "description": "Returns the event ticket class with the given class ID.",
          "response": {
            "$ref": "EventTicketClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "GET"
        },
        "patch": {
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          },
          "id": "walletobjects.eventticketclass.patch",
          "path": "walletobjects/v1/eventTicketClass/{resourceId}",
          "request": {
            "$ref": "EventTicketClass"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/eventTicketClass/{resourceId}",
          "httpMethod": "PATCH",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "EventTicketClass"
          },
          "description": "Updates the event ticket class referenced by the given class ID. This method supports patch semantics."
        },
        "update": {
          "description": "Updates the event ticket class referenced by the given class ID.",
          "response": {
            "$ref": "EventTicketClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "PUT",
          "flatPath": "walletobjects/v1/eventTicketClass/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "EventTicketClass"
          },
          "id": "walletobjects.eventticketclass.update",
          "path": "walletobjects/v1/eventTicketClass/{resourceId}",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          }
        }
      }
    },
    "jwt": {
      "methods": {
        "insert": {
          "description": "Inserts the resources in the JWT.",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "JwtInsertResponse"
          },
          "httpMethod": "POST",
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/jwt",
          "id": "walletobjects.jwt.insert",
          "path": "walletobjects/v1/jwt",
          "request": {
            "$ref": "JwtResource"
          },
          "parameters": {}
        },
        "validate": {
          "flatPath": "walletobjects/v1/jwt/validate",
          "parameterOrder": [],
          "request": {
            "$ref": "JwtValidateRequest"
          },
          "id": "walletobjects.jwt.validate",
          "path": "walletobjects/v1/jwt/validate",
          "parameters": {},
          "description": "Checks that the JWT or JSON string in the request represents a valid pass to be saved.",
          "response": {
            "$ref": "JwtValidateResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST"
        }
      }
    },
    "media": {
      "methods": {
        "upload": {
          "response": {
            "$ref": "TransitObjectUploadRotatingBarcodeValuesResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST",
          "mediaUpload": {
            "accept": [
              "*/*"
            ],
            "protocols": {
              "simple": {
                "multipart": true,
                "path": "/upload/walletobjects/v1/transitObject/{resourceId}/uploadRotatingBarcodeValues"
              }
            }
          },
          "description": "Uploads rotating barcode values for the transit object referenced by the given object ID. Note the max upload size is specified in google3/production/config/cdd/apps-upload/customers/payments-consumer-passes/config.gcl and enforced by Scotty.",
          "supportsMediaUpload": true,
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "flatPath": "walletobjects/v1/transitObject/{resourceId}/uploadRotatingBarcodeValues",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "TransitObjectUploadRotatingBarcodeValuesRequest"
          },
          "id": "walletobjects.media.upload",
          "path": "walletobjects/v1/transitObject/{resourceId}/uploadRotatingBarcodeValues"
        },
        "download": {
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          },
          "id": "walletobjects.media.download",
          "path": "walletobjects/v1/transitObject/{resourceId}/downloadRotatingBarcodeValues",
          "flatPath": "walletobjects/v1/transitObject/{resourceId}/downloadRotatingBarcodeValues",
          "parameterOrder": [
            "resourceId"
          ],
          "supportsMediaDownload": true,
          "httpMethod": "GET",
          "response": {
            "$ref": "Media"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "description": "Downloads rotating barcode values for the transit object referenced by the given object ID.",
          "useMediaDownloadService": true
        }
      }
    },
    "issuer": {
      "methods": {
        "insert": {
          "parameters": {},
          "flatPath": "walletobjects/v1/issuer",
          "parameterOrder": [],
          "request": {
            "$ref": "Issuer"
          },
          "id": "walletobjects.issuer.insert",
          "path": "walletobjects/v1/issuer",
          "response": {
            "$ref": "Issuer"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST",
          "description": "Inserts an issuer with the given ID and properties."
        },
        "list": {
          "description": "Returns a list of all issuers shared to the caller.",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "IssuerListResponse"
          },
          "httpMethod": "GET",
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/issuer",
          "id": "walletobjects.issuer.list",
          "path": "walletobjects/v1/issuer",
          "parameters": {}
        },
        "get": {
          "description": "Returns the issuer with the given issuer ID.",
          "httpMethod": "GET",
          "response": {
            "$ref": "Issuer"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "id": "walletobjects.issuer.get",
          "path": "walletobjects/v1/issuer/{resourceId}",
          "flatPath": "walletobjects/v1/issuer/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "parameters": {
            "resourceId": {
              "format": "int64",
              "location": "path",
              "required": true,
              "description": "The unique identifier for an issuer.",
              "type": "string"
            }
          }
        },
        "patch": {
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "Issuer"
          },
          "httpMethod": "PATCH",
          "description": "Updates the issuer referenced by the given issuer ID. This method supports patch semantics.",
          "parameters": {
            "resourceId": {
              "format": "int64",
              "location": "path",
              "required": true,
              "description": "The unique identifier for an issuer.",
              "type": "string"
            }
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/issuer/{resourceId}",
          "id": "walletobjects.issuer.patch",
          "path": "walletobjects/v1/issuer/{resourceId}",
          "request": {
            "$ref": "Issuer"
          }
        },
        "update": {
          "description": "Updates the issuer referenced by the given issuer ID.",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "Issuer"
          },
          "httpMethod": "PUT",
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/issuer/{resourceId}",
          "id": "walletobjects.issuer.update",
          "path": "walletobjects/v1/issuer/{resourceId}",
          "request": {
            "$ref": "Issuer"
          },
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for an issuer.",
              "location": "path",
              "required": true,
              "format": "int64"
            }
          }
        }
      }
    },
    "loyaltyclass": {
      "methods": {
        "addmessage": {
          "id": "walletobjects.loyaltyclass.addmessage",
          "path": "walletobjects/v1/loyaltyClass/{resourceId}/addMessage",
          "request": {
            "$ref": "AddMessageRequest"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/loyaltyClass/{resourceId}/addMessage",
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "description": "Adds a message to the loyalty class referenced by the given class ID.",
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "LoyaltyClassAddMessageResponse"
          }
        },
        "get": {
          "response": {
            "$ref": "LoyaltyClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "GET",
          "description": "Returns the loyalty class with the given class ID.",
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          },
          "flatPath": "walletobjects/v1/loyaltyClass/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "id": "walletobjects.loyaltyclass.get",
          "path": "walletobjects/v1/loyaltyClass/{resourceId}"
        },
        "patch": {
          "httpMethod": "PATCH",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "LoyaltyClass"
          },
          "description": "Updates the loyalty class referenced by the given class ID. This method supports patch semantics.",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          },
          "id": "walletobjects.loyaltyclass.patch",
          "path": "walletobjects/v1/loyaltyClass/{resourceId}",
          "request": {
            "$ref": "LoyaltyClass"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/loyaltyClass/{resourceId}"
        },
        "update": {
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "LoyaltyClass"
          },
          "httpMethod": "PUT",
          "description": "Updates the loyalty class referenced by the given class ID.",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/loyaltyClass/{resourceId}",
          "id": "walletobjects.loyaltyclass.update",
          "path": "walletobjects/v1/loyaltyClass/{resourceId}",
          "request": {
            "$ref": "LoyaltyClass"
          }
        },
        "insert": {
          "parameters": {},
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/loyaltyClass",
          "id": "walletobjects.loyaltyclass.insert",
          "path": "walletobjects/v1/loyaltyClass",
          "request": {
            "$ref": "LoyaltyClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "LoyaltyClass"
          },
          "httpMethod": "POST",
          "description": "Inserts an loyalty class with the given ID and properties."
        },
        "list": {
          "description": "Returns a list of all loyalty classes for a given issuer ID.",
          "httpMethod": "GET",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "LoyaltyClassListResponse"
          },
          "id": "walletobjects.loyaltyclass.list",
          "path": "walletobjects/v1/loyaltyClass",
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/loyaltyClass",
          "parameters": {
            "token": {
              "location": "query",
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` classes are available in a list. For example, if you have a list of 200 classes and you call list with `maxResults` set to 20, list will return the first 20 classes and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 classes.",
              "type": "string"
            },
            "issuerId": {
              "format": "int64",
              "location": "query",
              "description": "The ID of the issuer authorized to list classes.",
              "type": "string"
            },
            "maxResults": {
              "type": "integer",
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined.",
              "location": "query",
              "format": "int32"
            }
          }
        }
      }
    },
    "offerclass": {
      "methods": {
        "addmessage": {
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          },
          "request": {
            "$ref": "AddMessageRequest"
          },
          "id": "walletobjects.offerclass.addmessage",
          "path": "walletobjects/v1/offerClass/{resourceId}/addMessage",
          "flatPath": "walletobjects/v1/offerClass/{resourceId}/addMessage",
          "parameterOrder": [
            "resourceId"
          ],
          "httpMethod": "POST",
          "response": {
            "$ref": "OfferClassAddMessageResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "description": "Adds a message to the offer class referenced by the given class ID."
        },
        "get": {
          "id": "walletobjects.offerclass.get",
          "path": "walletobjects/v1/offerClass/{resourceId}",
          "flatPath": "walletobjects/v1/offerClass/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "description": "Returns the offer class with the given class ID.",
          "httpMethod": "GET",
          "response": {
            "$ref": "OfferClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ]
        },
        "patch": {
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "OfferClass"
          },
          "httpMethod": "PATCH",
          "description": "Updates the offer class referenced by the given class ID. This method supports patch semantics.",
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/offerClass/{resourceId}",
          "id": "walletobjects.offerclass.patch",
          "path": "walletobjects/v1/offerClass/{resourceId}",
          "request": {
            "$ref": "OfferClass"
          }
        },
        "update": {
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "OfferClass"
          },
          "httpMethod": "PUT",
          "description": "Updates the offer class referenced by the given class ID.",
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for a class. This ID must be unique across all classes from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/offerClass/{resourceId}",
          "id": "walletobjects.offerclass.update",
          "path": "walletobjects/v1/offerClass/{resourceId}",
          "request": {
            "$ref": "OfferClass"
          }
        },
        "insert": {
          "parameters": {},
          "parameterOrder": [],
          "flatPath": "walletobjects/v1/offerClass",
          "id": "walletobjects.offerclass.insert",
          "path": "walletobjects/v1/offerClass",
          "request": {
            "$ref": "OfferClass"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "OfferClass"
          },
          "httpMethod": "POST",
          "description": "Inserts an offer class with the given ID and properties."
        },
        "list": {
          "parameters": {
            "maxResults": {
              "location": "query",
              "format": "int32",
              "type": "integer",
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined."
            },
            "issuerId": {
              "format": "int64",
              "location": "query",
              "description": "The ID of the issuer authorized to list classes.",
              "type": "string"
            },
            "token": {
              "location": "query",
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` classes are available in a list. For example, if you have a list of 200 classes and you call list with `maxResults` set to 20, list will return the first 20 classes and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 classes.",
              "type": "string"
            }
          },
          "flatPath": "walletobjects/v1/offerClass",
          "parameterOrder": [],
          "id": "walletobjects.offerclass.list",
          "path": "walletobjects/v1/offerClass",
          "response": {
            "$ref": "OfferClassListResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "GET",
          "description": "Returns a list of all offer classes for a given issuer ID."
        }
      }
    },
    "transitobject": {
      "methods": {
        "insert": {
          "response": {
            "$ref": "TransitObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST",
          "description": "Inserts an transit object with the given ID and properties.",
          "parameters": {},
          "flatPath": "walletobjects/v1/transitObject",
          "parameterOrder": [],
          "request": {
            "$ref": "TransitObject"
          },
          "id": "walletobjects.transitobject.insert",
          "path": "walletobjects/v1/transitObject"
        },
        "list": {
          "response": {
            "$ref": "TransitObjectListResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "GET",
          "description": "Returns a list of all transit objects for a given issuer ID.",
          "parameters": {
            "classId": {
              "location": "query",
              "description": "The ID of the class whose objects will be listed.",
              "type": "string"
            },
            "token": {
              "description": "Used to get the next set of results if `maxResults` is specified, but more than `maxResults` objects are available in a list. For example, if you have a list of 200 objects and you call list with `maxResults` set to 20, list will return the first 20 objects and a token. Call list again with `maxResults` set to 20 and the token to get the next 20 objects.",
              "type": "string",
              "location": "query"
            },
            "maxResults": {
              "type": "integer",
              "description": "Identifies the max number of results returned by a list. All results are returned if `maxResults` isn't defined.",
              "location": "query",
              "format": "int32"
            }
          },
          "flatPath": "walletobjects/v1/transitObject",
          "parameterOrder": [],
          "id": "walletobjects.transitobject.list",
          "path": "walletobjects/v1/transitObject"
        },
        "addmessage": {
          "response": {
            "$ref": "TransitObjectAddMessageResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "POST",
          "description": "Adds a message to the transit object referenced by the given object ID.",
          "parameters": {
            "resourceId": {
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "location": "path",
              "required": true
            }
          },
          "flatPath": "walletobjects/v1/transitObject/{resourceId}/addMessage",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "AddMessageRequest"
          },
          "id": "walletobjects.transitobject.addmessage",
          "path": "walletobjects/v1/transitObject/{resourceId}/addMessage"
        },
        "get": {
          "parameters": {
            "resourceId": {
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "id": "walletobjects.transitobject.get",
          "path": "walletobjects/v1/transitObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/transitObject/{resourceId}",
          "httpMethod": "GET",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "TransitObject"
          },
          "description": "Returns the transit object with the given object ID."
        },
        "patch": {
          "description": "Updates the transit object referenced by the given object ID. This method supports patch semantics.",
          "httpMethod": "PATCH",
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "response": {
            "$ref": "TransitObject"
          },
          "id": "walletobjects.transitobject.patch",
          "path": "walletobjects/v1/transitObject/{resourceId}",
          "request": {
            "$ref": "TransitObject"
          },
          "parameterOrder": [
            "resourceId"
          ],
          "flatPath": "walletobjects/v1/transitObject/{resourceId}",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'.",
              "type": "string"
            }
          }
        },
        "update": {
          "flatPath": "walletobjects/v1/transitObject/{resourceId}",
          "parameterOrder": [
            "resourceId"
          ],
          "request": {
            "$ref": "TransitObject"
          },
          "id": "walletobjects.transitobject.update",
          "path": "walletobjects/v1/transitObject/{resourceId}",
          "parameters": {
            "resourceId": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you. Your unique identifier should only include alphanumeric characters, '.', '_', or '-'."
            }
          },
          "description": "Updates the transit object referenced by the given object ID.",
          "response": {
            "$ref": "TransitObject"
          },
          "scopes": [
            "https://www.googleapis.com/auth/wallet_object.issuer"
          ],
          "httpMethod": "PUT"
        }
      }
    }
  },
  "basePath": "",
  "parameters": {
    "quotaUser": {
      "location": "query",
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "type": "string"
    },
    "upload_protocol": {
      "location": "query",
      "type": "string",
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
    },
    "callback": {
      "description": "JSONP",
      "type": "string",
      "location": "query"
    },
    "fields": {
      "location": "query",
      "type": "string",
      "description": "Selector specifying which fields to include in a partial response."
    },
    "oauth_token": {
      "location": "query",
      "type": "string",
      "description": "OAuth 2.0 token for the current user."
    },
    "$.xgafv": {
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "location": "query",
      "type": "string",
      "description": "V1 error format.",
      "enum": [
        "1",
        "2"
      ]
    },
    "access_token": {
      "location": "query",
      "description": "OAuth access token.",
      "type": "string"
    },
    "uploadType": {
      "type": "string",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "location": "query"
    },
    "alt": {
      "type": "string",
      "description": "Data format for response.",
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "default": "json",
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "location": "query"
    },
    "prettyPrint": {
      "default": "true",
      "location": "query",
      "description": "Returns response with indentations and line breaks.",
      "type": "boolean"
    },
    "key": {
      "type": "string",
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "location": "query"
    }
  },
  "batchPath": "batch",
  "servicePath": "",
  "canonicalName": "Walletobjects",
  "documentationLink": "https://developers.google.com/pay/passes",
  "description": "API for issuers to save and manage Google Wallet Objects.",
  "ownerDomain": "google.com",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "rootUrl": "https://walletobjects.googleapis.com/",
  "id": "walletobjects:v1",
  "revision": "20260814",
  "fullyEncodeReservedExpansion": true
}
