{
  "components": {
    "parameters": {
      "Api-Revision": {
        "description": "The particular API revision you want to use. In general, this is `1.2`.",
        "explode": false,
        "in": "header",
        "name": "Api-Revision",
        "required": true,
        "schema": {
          "enum": [
            "1.2"
          ],
          "type": "string"
        },
        "style": "simple",
        "x-inline-component": true
      },
      "Content-Type": {
        "description": "The request `Content-Type` must be `application/json; charset=utf-8`.",
        "in": "header",
        "name": "Content-Type",
        "required": true,
        "schema": {
          "enum": [
            "application/json; charset=utf-8"
          ],
          "type": "string"
        },
        "x-inline-component": true
      }
    },
    "responses": {
      "nfcMerchant": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/nfcMerchantResponse"
            }
          }
        },
        "description": "A response includes your project ID and NFC merchant information. Note the `merchantId` — this is how you reference your merchant information if you need to modify or delete it.\n"
      },
      "projectActivity200": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "details": {
                  "description": "Each object in this array represents pass activity for a single day. Each object represents net activity, including repeated actions by the same user. For example, if the same user installs, removes, and then adds the same pass again, the object shows two passes installed and one pass removed.",
                  "items": {
                    "properties": {
                      "activity": {
                        "$ref": "#/components/schemas/statsActivityObject"
                      },
                      "date": {
                        "$ref": "#/components/schemas/date"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "endDate": {
                  "$ref": "#/components/schemas/endDate"
                },
                "id": {
                  "description": "The ID of the project specified in the path.",
                  "type": "integer"
                },
                "startDate": {
                  "$ref": "#/components/schemas/startDate"
                },
                "summary": {
                  "$ref": "#/components/schemas/statsActivityObject",
                  "description": "The total activity against the project in the period specified by start and end dates."
                }
              },
              "type": "object"
            }
          }
        },
        "description": "Returns a per-day activity for all days in the time range. If your request did not specify a date range, the response includes all activity, organized by day, since the projects's `createdAt` date."
      },
      "projectStats200": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "id": {
                  "description": "The identifier for the project.",
                  "type": "integer"
                },
                "installed": {
                  "description": "The total number of passes from this project that are installed.",
                  "type": "integer"
                },
                "lastUpdated": {
                  "$ref": "#/components/schemas/updatedAt"
                },
                "templates": {
                  "description": "Contains statistics for each template belonging to the project.",
                  "items": {
                    "description": "Each object in the array represents a template.",
                    "properties": {
                      "id": {
                        "description": "The identifier for a specific template.",
                        "type": "integer"
                      },
                      "installed": {
                        "description": "The total number of passes from this template that are installed.",
                        "type": "integer"
                      },
                      "lastUpdated": {
                        "$ref": "#/components/schemas/updatedAt"
                      },
                      "total": {
                        "description": "The total number of passes created from the template.",
                        "type": "integer"
                      },
                      "uninstalled": {
                        "description": "The total number of passes created from this template that are uninstalled.",
                        "type": "integer"
                      },
                      "vendor": {
                        "$ref": "#/components/schemas/vendor"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "total": {
                  "description": "The total number of passes created in the project.",
                  "type": "integer"
                },
                "uninstalled": {
                  "description": "The total number of passes created from this project that are uninstalled.",
                  "type": "integer"
                }
              },
              "type": "object"
            }
          }
        },
        "description": "Returns a summary of pass statistics for every template in the project."
      },
      "tagStats200": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "installed": {
                  "description": "The number of installed passes with the tag.",
                  "type": "integer"
                },
                "lastUpdated": {
                  "description": "The date and time when the statistics were generated.",
                  "format": "date-time",
                  "type": "string"
                },
                "not_been_installed": {
                  "description": "The number of passes created but not installed.",
                  "type": "integer"
                },
                "total": {
                  "description": "A count of the total number of passes created with the tag.",
                  "type": "integer"
                },
                "uninstalled": {
                  "description": "The number of uninstalled passes with the tag.",
                  "type": "integer"
                }
              },
              "type": "object"
            }
          }
        },
        "description": "Returns an object containing usage information about a tag."
      },
      "templateActivity200": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "details": {
                  "description": "Each object in this array represents pass activity for a single day.",
                  "items": {
                    "properties": {
                      "activity": {
                        "$ref": "#/components/schemas/statsActivityObject"
                      },
                      "date": {
                        "$ref": "#/components/schemas/date"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "endDate": {
                  "$ref": "#/components/schemas/endDate"
                },
                "id": {
                  "description": "The ID of the template specified in the path.",
                  "type": "integer"
                },
                "startDate": {
                  "$ref": "#/components/schemas/startDate"
                },
                "summary": {
                  "$ref": "#/components/schemas/statsActivityObject",
                  "description": "The total activity against the template in the period specified by start and end dates."
                },
                "vendor": {
                  "$ref": "#/components/schemas/vendor"
                }
              },
              "type": "object"
            }
          }
        },
        "description": "Returns a per-day activity for all days in the time range. If your request did not specify a date range, the response includes all activity, organized by day, since the template's `createdAt` date."
      },
      "templateStats200": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "id": {
                  "description": "The template specified in the request.",
                  "type": "integer"
                },
                "installed": {
                  "description": "The number of installed passes based on this template.",
                  "type": "integer"
                },
                "lastUpdated": {
                  "description": "The date and time when the template was last updated.",
                  "format": "date-time",
                  "type": "string"
                },
                "total": {
                  "description": "A count of the total number of passes created from the template.",
                  "type": "integer"
                },
                "uninstalled": {
                  "description": "The number of uninstalled passes based on this template.",
                  "type": "integer"
                },
                "vendor": {
                  "$ref": "#/components/schemas/vendor"
                }
              },
              "type": "object"
            }
          }
        },
        "description": "Returns an object containing usage information about a template."
      }
    },
    "schemas": {
      "adaptiveLinkRequest": {
        "allOf": [
          {
            "$ref": "#/components/schemas/adaptiveLinkShared"
          },
          {
            "properties": {
              "androidPassLinkId": {
                "description": "A dynamic link for Android passes.",
                "format": "uuid",
                "type": "string"
              },
              "expirationDate": {
                "description": "When set, indicates the date this adaptive link expires. An expired adaptive link will return a JSON object with an error message instead of a pass.\n",
                "format": "date-time",
                "type": "string"
              },
              "installLimit": {
                "description": "The number of times a user can install the pass. When the pass reaches its limit, attempts to install the pass are met with errors.\n\n\nThis limit only affects the adaptive link itself, not actual Apple pass files. If you want to prevent users from installing shared passes on Apple devices, you should also set `sharingStatus` to prohibit sharing.",
                "type": "integer"
              },
              "installLimitPerPassExternalId": {
                "description": "The number of times a user can install the pass that has an `externalId`. When the pass reaches its limit, attempts to install the pass are met with errors.\n\n\nThis limit only affects the adaptive link itself, not actual Apple pass files. If you want to prevent users from installing shared passes on Apple devices, you should also set `sharingStatus` to prohibit sharing.",
                "type": "integer"
              },
              "iosPassLinkId": {
                "description": "A dynamic link for iOS passes.",
                "format": "uuid",
                "type": "string"
              },
              "locationRadius": {
                "description": "Determines the range, in miles, that a pass holder can be from a location\nto associate their pass with a location. If absent, the default location radius is 10 miles.\n",
                "type": "integer",
                "writeOnly": true
              },
              "locations": {
                "description": "An array of up to 10,000 locations associated with the adaptive link. Each pass supports up to 10 locations. If you exceed this limit, the passes will use the 10 locations nearest to a user (located by IP address) when they install the pass.\n\n\nYou can also include a location radius and the maximum number of locations to be matched upon pass creation. The Wallet API sorts locations to be matched in order from closest to/furthest from the location provided by the device.\n",
                "items": {
                  "$ref": "#/components/schemas/locationObject"
                },
                "type": "array",
                "writeOnly": true
              },
              "maxResultLocations": {
                "description": "The maximum number of locations the pass recipient can match. If the pass holder\nmatches multiple locations, locations are returned in order from closest\nto farthest.\n",
                "type": "integer"
              },
              "payload": {
                "additionalProperties": {
                  "properties": {
                    "value": {
                      "type": "string"
                    }
                  },
                  "title": "Field Name (string)",
                  "type": "object"
                },
                "description": "The field names and values you want to update for those pass fields. Changing a value will result in a change message notifying the user of the changed value.\n\n\nWhile the payload object is required, it can be an empty object.\n",
                "properties": {
                  "sharingStatus": {
                    "$ref": "#/components/schemas/sharingStatus",
                    "description": "This setting only overrides sharing settings for Apple Wallet passes. For Google Wallet, you must set this field at the template level."
                  }
                },
                "type": "object",
                "writeOnly": true
              }
            },
            "required": [
              "payload"
            ],
            "type": "object"
          }
        ],
        "description": "An adaptive link request contains identifiers for the templates you used to generate passes from the link and any fields you want to set when users create passes from the link.\nIf you need to create a boarding pass adaptive link, go to the [boarding pass object](/developer/rest-api/wallet/schemas/flights-and-boarding-passes/).",
        "title": "Adaptive Link request",
        "x-schema-tag": "Adaptive Links"
      },
      "adaptiveLinkResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/adaptiveLinkShared"
          },
          {
            "properties": {
              "adaptiveLinkId": {
                "description": "A unique identifier for the adaptive link. Use this value to reference the adaptive link in future operations.\n",
                "readOnly": true,
                "type": "integer"
              },
              "androidPassLinkId": {
                "description": "A dynamic link for Android passes. This field cannot be provided for `links/adaptive/multiple` requests, nor is it provided in those responses (e.g., boarding passes, event tickets, etc.).",
                "format": "uuid",
                "type": "string"
              },
              "androidUrl": {
                "description": "A pass URL specific to Android users.",
                "format": "url",
                "readOnly": true,
                "type": "string"
              },
              "createdAt": {
                "$ref": "#/components/schemas/createdAt"
              },
              "expirationDate": {
                "description": "The date this adaptive link expires. This property appears in the response only if it has been explicitly set with a previous API request. Cannot be set to a date more than 1,080 days in the future.\n",
                "format": "date",
                "type": "string"
              },
              "iosPassLinkId": {
                "description": "A dynamic link for iOS passes. This field cannot be provided for `links/adaptive/multiple` requests, nor is it provided in those responses (e.g., boarding passes, event tickets, etc.).",
                "format": "uuid",
                "type": "string"
              },
              "iosUrl": {
                "description": "A pass URL specific to iOS users.",
                "format": "url",
                "readOnly": true,
                "type": "string"
              },
              "isExpired": {
                "description": "If true, the adaptive link is expired. An expired adaptive link will return a JSON object with an error message instead of a pass.\n",
                "type": "boolean"
              },
              "projectId": {
                "description": "The ID of the project.",
                "type": "integer"
              },
              "ttlInDays": {
                "description": "The number of days of inactivity before this adaptive link automatically expires.\n",
                "readOnly": true,
                "type": "integer"
              },
              "updatedAt": {
                "$ref": "#/components/schemas/updatedAt"
              },
              "url": {
                "description": "The adaptive link URL itself; using this URL on an Android or iOS device will detect device types and install the correct pass.\n",
                "format": "url",
                "readOnly": true,
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "description": "An adaptive link response includes URLs that users can access to detect and install a pass.\n",
        "title": "Adaptive Link response",
        "x-schema-tag": "Adaptive Links"
      },
      "adaptiveLinkShared": {
        "properties": {
          "androidTemplateExternalId": {
            "description": "The custom identifier of the Google template for passes issued from this\nadaptive link.\n",
            "type": "string"
          },
          "androidTemplateId": {
            "description": "The Google template for passes issued from the adaptive link.",
            "type": "integer"
          },
          "availablePasses": {
            "default": 1000000,
            "description": "The total number of passes that can be created from this link. If absent, the link supports 1,000,000 passes.",
            "type": "integer"
          },
          "iosTemplateExternalId": {
            "description": "The custom identifier of the Apple template for passes issued from the\nadaptive link, if assigned.\n",
            "type": "string"
          },
          "iosTemplateId": {
            "description": "The iOS template for passes issued from the adaptive link.\n",
            "type": "integer"
          },
          "isPersonalized": {
            "description": "If true, each request (when a recipient uses an adaptive link) generates\na new pass. You can update any of the individual passes generated from\nthe adaptive link. If you generate the adaptive link using any request\nparameters, `isPersonalized` is automatically set to `true`.\n\n\nIf false, only the first request generates a pass; subsequent requests\ngenerate a new instance of the same pass. When `isPersonalized` is `false`,\nyou cannot update passes generated from an adaptive link by updating the\nadaptive link itself. Rather, you must use the Bulk Update Passes endpoint\nto push updates to the pass instances generated from the adaptive link.\n",
            "type": "boolean"
          },
          "landingPageUrl": {
            "description": "The address users are redirected to if their device type cannot be detected or they cannot install the pass for another reason.",
            "format": "url",
            "type": "string"
          },
          "parameterEncoding": {
            "description": "When set, allows url-encoded parameters to set or modify values when creating passes from the adaptive link.\n",
            "enum": [
              "base64"
            ],
            "type": "string"
          }
        },
        "type": "object",
        "x-inline-component": true
      },
      "addTagsToPassrequest": {
        "description": "An array of tags that you want to add to a pass.",
        "properties": {
          "tags": {
            "description": "An array of strings, each string representing a tag.",
            "items": {
              "example": [
                "aaa-bbb-ccc"
              ],
              "type": "string"
            },
            "maxItems": 15,
            "type": "array"
          }
        },
        "required": [
          "tags"
        ],
        "title": "Add Tags to PassRequest",
        "type": "object",
        "x-inline-component": true
      },
      "assertionJwt": {
        "allOf": [
          {
            "$ref": "#/components/schemas/assertionJwtHeaders"
          },
          {
            "$ref": "#/components/schemas/assertionJwtClaims"
          }
        ],
        "description": "A JSON Web Token (JWT) used for authorization in [OAuth token requests](/developer/rest-api/wallet/operations/oauth/#requestoauthtoken). The JWT must be signed with the private key corresponding to the `client_id` in the `kid` header using the ES384 algorithm.",
        "title": "Assertion JWT",
        "type": "object",
        "x-schema-tag": "OAuth"
      },
      "assertionJwtClaims": {
        "description": "Assertion JWT claims",
        "properties": {
          "aud": {
            "description": "The valid request endpoint. Example: `https://oauth2.asnapius.com/token`",
            "type": "string"
          },
          "exp": {
            "description": "The `assertion`'s expiration timestamp in seconds since epoch, after which it is not valid. The expiry must not be more than 10 minutes in the future. This is for the `assertion`, not for the token that will be returned. Example: `1681862754`",
            "type": "integer"
          },
          "iat": {
            "description": "The issue timestamp in seconds since epoch. Example: `168186250`",
            "type": "integer"
          },
          "ipaddr": {
            "description": "A space-delimited list of CIDR representations of valid IP addresses to which the issued token is restricted.",
            "type": "string"
          },
          "iss": {
            "description": "The issuer, the `client_id`.",
            "type": "string"
          },
          "nonce": {
            "description": "A unique string that must not have been used recently with this `client_id`. We will store this for a minimum of 2 hours. If you are relying on the nonce to defend against replay attacks, it is recommended to also enforce a narrow *ipaddr* range in order to prevent requests that utilize the returned access token from being replayed by an outside client.",
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "scope": {
            "$ref": "#/components/schemas/oauthScope",
            "description": "A space-delimited list of scopes to which the returned claim should be restricted. If not provided, the full list of scopes the `client_id` is granted will be in the returned claim. "
          },
          "sub": {
            "$ref": "#/components/schemas/subject",
            "description": "A space-delimited set of identifiers for which subjects a token is allowed. An `app` subject is required. Example: `app:<YOUR_APP_KEY>`."
          }
        },
        "required": [
          "iss",
          "aud",
          "exp",
          "iat",
          "sub",
          "nonce"
        ],
        "title": "Claims",
        "type": "object",
        "x-inline-component": true
      },
      "assertionJwtHeaders": {
        "description": "Assertion JWT headers",
        "properties": {
          "alg": {
            "description": "The signing algorithm.",
            "enum": [
              "ES384"
            ],
            "type": "string"
          },
          "kid": {
            "description": "The key used to sign the JWT, the `client_id`.",
            "type": "string"
          }
        },
        "required": [
          "kid",
          "alg"
        ],
        "title": "Headers",
        "type": "object",
        "x-inline-component": true
      },
      "atomicSelector": {
        "description": "Determines the property type you want to target. This can be tag, segment, template, pass or externalId.",
        "properties": {
          "externalId": {
            "description": "The pass external ID. Must also include a template.",
            "example": [
              1234
            ],
            "items": {
              "type": "string"
            },
            "type": "string"
          },
          "passId": {
            "description": "The pass ID.",
            "example": [
              1234
            ],
            "items": {
              "type": "number"
            },
            "type": "number"
          },
          "segment": {
            "description": "The segment ID.",
            "example": [
              "00256e0b-b02f-4f12-a77f-4c3d57078330"
            ],
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "type": "array"
          },
          "tag": {
            "description": "A tag is arbitrary metadata string used to identify and target passes.",
            "example": [
              "cool_tag",
              "cool_cool_tag"
            ],
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "templateId": {
            "description": "The template ID.",
            "example": [
              1234
            ],
            "items": {
              "type": "string"
            },
            "type": "number"
          }
        },
        "title": "Atomic selector",
        "x-schema-tag": "Audience selection"
      },
      "attendees": {
        "description": "An array of attendees for an event. Each object in the array represents a single attendee.",
        "items": {
          "properties": {
            "adaptiveLinkExternalId": {
              "description": "A custom identifier for a particular attendee's adaptive link.",
              "type": "string"
            },
            "fields": {
              "description": "The information about or for the individual attendee's event ticket.",
              "properties": {
                "barcodeAltText": {
                  "$ref": "#/components/schemas/fields",
                  "description": "Like other pass creation operations, when providing barcode information,\n\nyou need only provide the value.\n"
                },
                "barcode_value": {
                  "$ref": "#/components/schemas/fields",
                  "description": "Like other pass creation operations, when providing barcode information,\nyou need only provide the value.\n"
                },
                "confirmationCode": {
                  "description": "The confirmation code for the ticket holder's event reservation.",
                  "properties": {
                    "label": {
                      "$ref": "#/components/schemas/eventLabel"
                    },
                    "value": {
                      "description": "The value for this field.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "faceValue": {
                  "description": "The face value of the ticket, matching what would be printed on a physical version of the ticket.",
                  "properties": {
                    "currencyCode": {
                      "$ref": "#/components/schemas/currencyCode",
                      "description": "The currency code for the amount."
                    },
                    "micros": {
                      "description": "The face value amount in micros.",
                      "format": "int64",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                },
                "gate": {
                  "description": "The gate the ticket holder should use to enter the venue.",
                  "properties": {
                    "label": {
                      "$ref": "#/components/schemas/eventLabel"
                    },
                    "value": {
                      "description": "The value for this field.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "row": {
                  "description": "The row of the ticket holder's seat.",
                  "properties": {
                    "label": {
                      "$ref": "#/components/schemas/eventLabel"
                    },
                    "value": {
                      "description": "The value for this field.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "seat": {
                  "description": "The seat number for the ticket holder.",
                  "properties": {
                    "label": {
                      "$ref": "#/components/schemas/eventLabel"
                    },
                    "value": {
                      "description": "The value for this field.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "section": {
                  "description": "The section that the ticket holder's seat is in.",
                  "properties": {
                    "label": {
                      "$ref": "#/components/schemas/eventLabel"
                    },
                    "value": {
                      "description": "The value for this field.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "sharingStatus": {
                  "$ref": "#/components/schemas/sharingStatus"
                },
                "ticketHolderName": {
                  "description": "The name of the ticket holder, if the ticket is assigned to a person.",
                  "properties": {
                    "label": {
                      "$ref": "#/components/schemas/eventLabel"
                    },
                    "value": {
                      "description": "The value for this field.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "ticketNumber": {
                  "description": "The number of the ticket.",
                  "properties": {
                    "label": {
                      "$ref": "#/components/schemas/eventLabel"
                    },
                    "value": {
                      "description": "The value for this field.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "ticketType": {
                  "description": "The type of ticket, if applicable. Use this field to include information like \"Adult\", \"Child\", \"VIP\", etc.",
                  "properties": {
                    "label": {
                      "$ref": "#/components/schemas/eventLabel"
                    },
                    "value": {
                      "description": "The value for this field.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          },
          "type": "object"
        },
        "title": "Attendees",
        "type": "array",
        "x-schema-tag": "Event tickets"
      },
      "audienceSelector": {
        "description": "Determines the passes you want to target.",
        "oneOf": [
          {
            "$ref": "#/components/schemas/compoundSelector"
          },
          {
            "$ref": "#/components/schemas/atomicSelector"
          },
          {
            "description": "All passes.",
            "enum": [
              "all"
            ],
            "title": "All",
            "type": "string"
          }
        ],
        "title": "Audience selector",
        "x-schema-tag": "Audience selection"
      },
      "barcodeFieldType": {
        "description": "Set to `barcode` for all barcode headers.",
        "enum": [
          "barcode"
        ],
        "type": "string",
        "x-inline-component": true
      },
      "beacon": {
        "description": "Associates a pass with an iBeacon. Apple Wallet supports up to 10 beacons per pass. When the pass holder comes into proximity with an iBeacon bearing the same UUID, the pass becomes relevant (displayed on the lock screen).",
        "example": {
          "major": 2,
          "minor": 346,
          "relevantText": "You are near the Ship",
          "uuid": "55502220-A123-A88A-F321-555A444B333C"
        },
        "properties": {
          "major": {
            "description": "Major identifier of a beacon.",
            "example": 2,
            "format": "int32",
            "type": "integer"
          },
          "minor": {
            "description": "Minor identifier of a beacon.",
            "example": 346,
            "format": "int32",
            "type": "integer"
          },
          "relevantText": {
            "description": "Text displayed on the lock screen.",
            "example": "You are near the Ship",
            "type": "string"
          },
          "uuid": {
            "description": "Unique identifier of a beacon.",
            "example": "55502220-A123-A88A-F321-555A444B333C",
            "type": "string"
          }
        },
        "required": [
          "uuid",
          "relevantText",
          "major",
          "minor"
        ],
        "title": "Beacon object",
        "type": "object",
        "x-schema-tag": "Passes"
      },
      "boardingPassRequest": {
        "allOf": [
          {
            "$ref": "#/components/schemas/adaptiveLinkShared"
          },
          {
            "properties": {
              "payload": {
                "description": "A boarding pass adaptive link object takes both flight and passenger information.\n\n\nYou can provide the `flightId` or `flightExternalId` of an existing flight. Or, you can define a new flight using the `flights` object. If defining a new flight, you can provide a `flightExternalId`.\n",
                "properties": {
                  "flights": {
                    "description": "Each object in the array represents an event. Each event object must specify the `flightId` or `flightExternalId` of an existing event, or contain the `fields` object sufficient to create a new event.\n\n\nYou can also provide the `eventExternalId` in conjunction with the `fields` object to assign an eventExternalId to a new event.\n",
                    "items": {
                      "oneOf": [
                        {
                          "allOf": [
                            {
                              "oneOf": [
                                {
                                  "properties": {
                                    "flightId": {
                                      "$ref": "#/components/schemas/flightId"
                                    }
                                  },
                                  "title": "Flight ID",
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "flightExternalId": {
                                      "$ref": "#/components/schemas/flightExternalId"
                                    }
                                  },
                                  "title": "Flight external ID",
                                  "type": "object"
                                }
                              ]
                            },
                            {
                              "properties": {
                                "passGroups": {
                                  "$ref": "#/components/schemas/passGroupsFlight"
                                },
                                "passengers": {
                                  "$ref": "#/components/schemas/passengers"
                                }
                              },
                              "title": "Passengers",
                              "type": "object"
                            }
                          ],
                          "description": "You can specify the `flightId` or `flightExternalId` of an existing flight, and then you need only populate the passengers for the flight.\n",
                          "title": "Flight by ID"
                        },
                        {
                          "allOf": [
                            {
                              "properties": {
                                "flightExternalId": {
                                  "$ref": "#/components/schemas/flightExternalId"
                                }
                              },
                              "type": "object"
                            },
                            {
                              "$ref": "#/components/schemas/flightRequest"
                            },
                            {
                              "properties": {
                                "passengers": {
                                  "$ref": "#/components/schemas/passengers"
                                }
                              },
                              "type": "object"
                            }
                          ],
                          "description": "You can create a flight as a part of a boarding pass request. You can provide a `flightExternalId` for the flight you are creating, and then provide a complete flight object in addition to the array of `passengers` for the flight.\n",
                          "title": "Create a New Flight"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "isEventTicketUpdatePermitted": {
                    "default": true,
                    "description": "True by default. If false, event information for existing events will not be updated as part of the POST call to the Adaptive Link API; a new event will still be created if it does not yet exist.\n",
                    "type": "boolean"
                  },
                  "isFlightUpdatePermitted": {
                    "default": true,
                    "description": "True by default. If false, flight information for existing flights will not be updated as part of the POST call to the Adaptive Link API; a new flight will still be created if it does not yet exist.",
                    "type": "boolean"
                  }
                },
                "type": "object",
                "writeOnly": true
              }
            },
            "type": "object"
          }
        ],
        "description": "A boarding pass adaptive link requires similar information to other adaptive\nlink types, but the payload includes flight information and an array of passengers for each flight.\n\n\nLike other adaptive links, you must provide the `id` or `externalId` of an\niOS or Android template.\n",
        "title": "Boarding pass Adaptive Link request",
        "x-schema-tag": "Flights and boarding passes"
      },
      "boardingPassResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/adaptiveLinkResponse"
          },
          {
            "properties": {
              "flightExternalId": {
                "$ref": "#/components/schemas/flightExternalId"
              },
              "flightId": {
                "$ref": "#/components/schemas/flightId"
              },
              "status": {
                "description": "The HTTP status code for the adaptive link operation.",
                "example": 200,
                "type": "integer"
              }
            },
            "type": "object"
          }
        ],
        "description": "The boarding pass operations return responses like other adaptive links, with the addition of the identifier of the event and an HTTP status for each individual adaptive link.\n\n\nLike other adaptive links, you must provide the `id` or `externalId` of an\niOS or Android template.\n",
        "title": "Boarding pass Adaptive Link response",
        "x-schema-tag": "Flights and boarding passes"
      },
      "boardingPassSemantics": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/passengerSemantics"
          },
          {
            "$ref": "#/components/schemas/flightSemantics"
          }
        ],
        "description": "For Apple boarding passes only, a JSON object that uses key-value pairs to add rich, machine-readable data that enhances passes. You can nest this object within `fields`.\n",
        "title": "Boarding pass semantics",
        "type": "object",
        "x-schema-tag": "Flights and boarding passes"
      },
      "callbackObject": {
        "properties": {
          "createdAt": {
            "description": "The date-time when the pass was created.",
            "format": "date-time",
            "type": "string"
          },
          "externalId": {
            "description": "The external ID for the pass, if set.",
            "type": "string"
          },
          "passId": {
            "description": "The ID of the pass installed or uninstalled.",
            "type": "integer"
          },
          "platform": {
            "description": "The platform on which the pass is installed.",
            "enum": [
              "android",
              "ios"
            ],
            "type": "string"
          },
          "serialNumber": {
            "description": "The serial number of the pass. This string is generated by the vendor — Apple or Google.",
            "type": "string"
          },
          "templateId": {
            "description": "The ID of the template the pass was created from.",
            "type": "integer"
          },
          "updatedAt": {
            "description": "The date-time when the pass was last updated.",
            "format": "date-time",
            "type": "string"
          }
        },
        "title": "Callback object",
        "type": "object"
      },
      "callbackPersonalizationObject": {
        "allOf": [
          {
            "$ref": "#/components/schemas/callbackObject"
          },
          {
            "properties": {
              "personalizationInfo": {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              }
            },
            "type": "object"
          }
        ],
        "description": "You must [add personalization requirements](/developer/rest-api/wallet/operations/apple-wallet-pass-personalization/) to Apple templates before users can personalize passes created from them.",
        "title": "Callback personalization object",
        "type": "object"
      },
      "callbackSpec": {
        "description": "Used for both requests and responses to `/callback` endpoints.",
        "properties": {
          "baseUrl": {
            "description": "The URL of your webhook/callback server.",
            "type": "string"
          },
          "headers": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Contains headers required by your webhook/callback server, including authorization, content-type, etc.\n\n\nBy default, Airship appends `content-type: application/json` and sends a JSON payload.",
            "type": "object"
          }
        },
        "title": "Callback Specification",
        "type": "object",
        "x-inline-component": true
      },
      "certificateObject": {
        "properties": {
          "baseName": {
            "readOnly": true,
            "type": "string"
          },
          "certificate": {
            "description": "A base64-encoded string of the p12 certificate with the private key.",
            "type": "string"
          },
          "comment": {
            "description": "A description for the certificate.",
            "type": "string"
          },
          "createdAt": {
            "$ref": "#/components/schemas/createdAt"
          },
          "default": {
            "default": false,
            "description": "If true, the certificate is the default for new projects. If you have multiple certificates and set a new default to `true`, the current default is set to `false`.",
            "type": "boolean"
          },
          "enabled": {
            "default": true,
            "description": "Indicates whether or not the certificate is in use.",
            "type": "boolean"
          },
          "expired": {
            "description": "If true, the certificate has expired and cannot be used to generate new passes.",
            "readOnly": true,
            "type": "boolean"
          },
          "name": {
            "description": "A name for the certificate.",
            "type": "string"
          },
          "nfcSupport": {
            "description": "If true, the certificate supports passes that can make use of NFC.",
            "readOnly": true,
            "type": "boolean"
          },
          "password": {
            "description": "The password for the p12 file, if the certificate was exported with a password.",
            "type": "string"
          },
          "teamIdentifier": {
            "readOnly": true,
            "type": "string"
          },
          "updatedAt": {
            "$ref": "#/components/schemas/updatedAt"
          },
          "vendor": {
            "description": "The vendor of the certificate.",
            "enum": [
              "Apple"
            ],
            "type": "string"
          }
        },
        "title": "Certificate object",
        "type": "object"
      },
      "changeMessage": {
        "description": "The message that appears when you update this field.",
        "nullable": true,
        "type": "string",
        "x-inline-component": true
      },
      "compoundSelector": {
        "description": "Compound selectors combine boolean operators (AND, OR, or NOT) with atomic or nested compound selectors. The syntax can be either implicit, using an array of values associated with an atomic selector, or explicit, employing a boolean operator followed by an array of atomic expression objects.",
        "oneOf": [
          {
            "$ref": "#/components/schemas/atomicSelector"
          },
          {
            "description": "AND selector",
            "properties": {
              "AND": {
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/compoundSelector"
                    },
                    {
                      "$ref": "#/components/schemas/atomicSelector"
                    }
                  ]
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          {
            "description": "OR selector",
            "properties": {
              "OR": {
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/compoundSelector"
                    },
                    {
                      "$ref": "#/components/schemas/atomicSelector"
                    }
                  ]
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          {
            "description": "NOT selector",
            "properties": {
              "NOT": {
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/compoundSelector"
                    },
                    {
                      "$ref": "#/components/schemas/atomicSelector"
                    }
                  ]
                },
                "type": "array"
              }
            },
            "type": "object"
          }
        ],
        "title": "Compound selector",
        "x-schema-tag": "Audience selection"
      },
      "createPassAndroidPayRequest": {
        "description": "A pass for Google Wallet. Unlike templates, in which the `fieldsModel` contains fields nested inside `module` objects, fields are collapsed in pass requests and responses. The `fieldType` corresponds to the template field module that the field belongs to.\n\nAside from differences in field composition, and a lack of beacons, Google Wallet passes are very similar to Apple Wallet passes.\n",
        "properties": {
          "fields": {
            "additionalProperties": {
              "$ref": "#/components/schemas/fields"
            },
            "description": "Fields for the pass. The template defines a field's location on the pass and its default value(s). When creating a pass, you only need to populate the fields you want to update, and even then, you only need to provide the `value` you want to change for the field and the `changeMessage` if you want to notify pass holders of the change in the value.\n",
            "type": "object"
          },
          "headers": {
            "additionalProperties": {
              "$ref": "#/components/schemas/googleHeaders"
            },
            "description": "Include objects from the template `headers` object if you want to change the `label`, `value`, or `changeMessage` for fields in the pass header — like barcodes and titles.",
            "properties": {
              "expirationDate": {
                "description": "May contain `value` and `label` fields. `value` indicates the expiration date of the pass.\n`label` can be set to either `valid` or `voided`, where `valid` indicates a non-expired pass and `voided` indicates that the pass is no longer accepted.\n",
                "format": "date-time",
                "type": "string"
              }
            },
            "type": "object"
          },
          "locations": {
            "description": "A list of locations associated with a pass.",
            "items": {
              "$ref": "#/components/schemas/locationObject"
            },
            "type": "array"
          },
          "publicUrl": {
            "$ref": "#/components/schemas/publicUrl"
          },
          "templateId": {
            "$ref": "#/components/schemas/templateId"
          }
        },
        "required": [
          "publicUrl"
        ],
        "title": "Google Wallet pass request",
        "type": "object",
        "x-schema-tag": "Passes"
      },
      "createPassAndroidPayResponse": {
        "description": "A pass response for Google Wallet.  A pass is a populated template. Therefore, the pass includes all headers and fields from the template, along with identifiers for the pass and URLs to access it.\n\nUnlike templates, in which the `fieldsModel` contains fields nested inside `module` objects, fields are collapsed in pass requests and responses. The `fieldType` corresponds to the template field module (an object) that the field belongs to.\n\n\nAside from differences in field composition, and a lack of beacons, Google Wallet passes are very similar to Apple Wallet passes.\n",
        "properties": {
          "createdAt": {
            "$ref": "#/components/schemas/createdAt"
          },
          "externalId": {
            "description": "The external ID for the pass, returned only if you created the pass using an external ID.",
            "readOnly": true,
            "type": "string"
          },
          "fields": {
            "additionalProperties": {
              "$ref": "#/components/schemas/googlePassFieldResponse"
            },
            "description": "Contains all populated fields from the template. The `fieldType` within each object indicates the `module` it belonged to.\n\n\nWhile all fields take a similar shape, the response may contain different keys to represent the `value` or `label` from the originating template field. This has to do with the way that Google Wallet interprets templates and passes.\n",
            "properties": {
              "offerModule": {
                "$ref": "#/components/schemas/offerModule"
              }
            },
            "type": "object"
          },
          "headers": {
            "$ref": "#/components/schemas/googleHeaders"
          },
          "id": {
            "$ref": "#/components/schemas/passId"
          },
          "publicUrl": {
            "$ref": "#/components/schemas/publicUrl"
          },
          "serialNumber": {
            "format": "uuid",
            "readOnly": true,
            "type": "string"
          },
          "status": {
            "description": "Indicates whether a pass has been installed or not.",
            "enum": [
              "installed",
              "not_been_installed"
            ],
            "readOnly": true,
            "type": "string"
          },
          "tags": {
            "description": "Tags associated with the pass.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "uaEntityId": {
            "format": "uuid",
            "readOnly": true,
            "type": "string"
          },
          "updatedAt": {
            "$ref": "#/components/schemas/updatedAt"
          },
          "url": {
            "description": "The URL for the pass.",
            "format": "url",
            "type": "string"
          }
        },
        "title": "Google Wallet pass response",
        "type": "object",
        "x-schema-tag": "Passes"
      },
      "createPassAppleWalletRequest": {
        "description": "A pass for Apple Wallet.",
        "properties": {
          "beacons": {
            "description": "Beacons for an Apple pass.",
            "items": {
              "$ref": "#/components/schemas/beacon"
            },
            "type": "array"
          },
          "fields": {
            "additionalProperties": {
              "$ref": "#/components/schemas/fields",
              "title": "Field Name (string)"
            },
            "description": "Fields for an Apple Wallet pass. Provide only the field objects and values you want to differentiate or personalize from the template.",
            "type": "object"
          },
          "headers": {
            "additionalProperties": {
              "$ref": "#/components/schemas/iosHeaders",
              "title": "Header object with string name."
            },
            "description": "Headers on an Apple Wallet pass. Provide only the header objects and values you want to differentiate or personalize from the template.",
            "properties": {
              "expirationDate": {
                "description": "May contain `value` and `label` fields. `value` indicates the expiration date of the pass.\n`label` can be set to either `valid` or `voided`, where `valid` indicates a non-expired pass and `voided` indicates that the pass is no longer accepted.\n",
                "format": "date-time",
                "type": "string"
              },
              "sharingStatus": {
                "$ref": "#/components/schemas/sharingStatus"
              }
            },
            "type": "object"
          },
          "locations": {
            "description": "A list of locations associated with a pass.",
            "items": {
              "$ref": "#/components/schemas/locationObject"
            },
            "type": "array"
          },
          "nfc": {
            "$ref": "#/components/schemas/nfc"
          },
          "publicUrl": {
            "$ref": "#/components/schemas/publicUrl"
          },
          "semantics": {
            "$ref": "#/components/schemas/boardingPassSemantics",
            "description": "Apple boarding pass only, top-level semantics.",
            "type": "object"
          },
          "tags": {
            "description": "An array of tags associated with the pass.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "templateId": {
            "$ref": "#/components/schemas/templateId"
          }
        },
        "title": "Apple Wallet pass request",
        "type": "object",
        "x-schema-tag": "Passes"
      },
      "createPassAppleWalletResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/createPassAppleWalletRequest"
          },
          {
            "properties": {
              "createdAt": {
                "$ref": "#/components/schemas/createdAt"
              },
              "externalId": {
                "description": "The external ID for the pass, returned only if you created the pass using an external ID.",
                "readOnly": true,
                "type": "string"
              },
              "id": {
                "$ref": "#/components/schemas/passId"
              },
              "publicUrl": {
                "$ref": "#/components/schemas/publicUrl"
              },
              "serialNumber": {
                "format": "uuid",
                "readOnly": true,
                "type": "string"
              },
              "status": {
                "description": "Indicates whether a pass has been installed or not.",
                "enum": [
                  "installed",
                  "not_been_installed"
                ],
                "readOnly": true,
                "type": "string"
              },
              "tags": {
                "description": "Tags associated with the pass.",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "uaEntityId": {
                "format": "uuid",
                "readOnly": true,
                "type": "string"
              },
              "updatedAt": {
                "$ref": "#/components/schemas/updatedAt"
              },
              "url": {
                "description": "The URL for the pass.",
                "format": "url",
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "description": "A pass response includes both identifiers and the content of all fields on a pass.",
        "title": "Apple Wallet pass response",
        "x-schema-tag": "Passes"
      },
      "createdAt": {
        "description": "The date and time when the item was created.",
        "format": "date-time",
        "readOnly": true,
        "type": "string",
        "x-inline-component": true
      },
      "currencyCode": {
        "description": "Determines the type of currency if the `formatType` is set to\n`currency`.",
        "enum": [
          "USD",
          "EUR",
          "CNY",
          "JPY",
          "GPB",
          "RUB",
          "AUD",
          "CHF",
          "CAD",
          "HKD",
          "SEK",
          "NZD",
          "KRW",
          "SGD",
          "NOK",
          "MXN",
          "INR"
        ],
        "type": "string",
        "x-inline-component": true
      },
      "date": {
        "description": "The date for a specific activity instance in wallet statistics.",
        "format": "date",
        "pattern": "([12]\\d{3}/(0[1-9]|1[0-2])/(0[1-9]|[12]\\d|3[01]))",
        "type": "string",
        "x-inline-component": true
      },
      "deleted": {
        "description": "If true, the template is deleted. You can no longer create passes from this\ntemplate.\n",
        "type": "boolean",
        "x-inline-component": true
      },
      "disabled": {
        "description": "If true, the template is disabled; you cannot create new passes for this template\nuntil you update the template and enable it again.\n",
        "type": "boolean",
        "x-inline-component": true
      },
      "endDate": {
        "description": "The end date for a statistics report.",
        "format": "date",
        "pattern": "([12]\\d{3}/(0[1-9]|1[0-2])/(0[1-9]|[12]\\d|3[01]))",
        "type": "string",
        "x-inline-component": true
      },
      "errorResponseObject": {
        "description": "Token request error.",
        "properties": {
          "error": {
            "description": "Error code.",
            "enum": [
              "invalid_scope",
              "invalid_request",
              "invalid_grant",
              "unauthorized_client",
              "unsupported_grant_type",
              "invalid_client"
            ],
            "type": "string"
          },
          "error_description": {
            "description": "A plain-text description of the error.",
            "type": "string"
          }
        },
        "required": [
          "error"
        ],
        "title": "Error response",
        "type": "object",
        "x-inline-component": true
      },
      "eventExternalId": {
        "description": "An external identifier for an event. You can only assign an external identifier when creating an event. If you do assign an external identifier, requests for events or passes referencing the event will return the external ID in addition to the `eventId` created within Airship.",
        "type": "string",
        "x-inline-component": true
      },
      "eventId": {
        "description": "The Airship-created identifier for an event.",
        "readOnly": true,
        "type": "integer",
        "x-inline-component": true
      },
      "eventLabel": {
        "description": "The label for this field, as you want it to appear on the pass. If you do not provide a label, the event will use a default based off the parent object name.",
        "type": "string",
        "x-inline-component": true
      },
      "eventRequest": {
        "description": "Represents an event scheduled at a specific time and venue.",
        "properties": {
          "fields": {
            "description": "Contains the objects representing an event.",
            "properties": {
              "doorsOpen": {
                "description": "The date and time when ticket holders can begin to enter the venue.",
                "properties": {
                  "label": {
                    "description": "The title for this event field as you want it to appear on a pass. Defaults to `Doors Open`.",
                    "example": "Doors Open",
                    "type": "string"
                  },
                  "value": {
                    "format": "date-time",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "endTime": {
                "description": "The date and time when the event ends.",
                "properties": {
                  "label": {
                    "description": "The title for this event field, as you want it to appear on a pass. Defaults to `End Time`.",
                    "example": "End Time",
                    "type": "string"
                  },
                  "value": {
                    "format": "date-time",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "eventName": {
                "description": "The value represents the event name.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/eventLabel"
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "startTime": {
                "description": "The date and time when the event begins.",
                "properties": {
                  "label": {
                    "description": "The title for this event field, as you want it to appear on a pass. Defaults to `Start Time`.",
                    "example": "Start Time",
                    "type": "string"
                  },
                  "value": {
                    "format": "date-time",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "venueAddress": {
                "description": "The address of the venue.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/eventLabel"
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "venueTitle": {
                "description": "The name of the venue where the event will take place.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/eventLabel"
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "required": [
              "eventName",
              "venueTitle",
              "venueAddress"
            ],
            "type": "object"
          },
          "passGroups": {
            "$ref": "#/components/schemas/passGroupsEvent"
          }
        },
        "required": [
          "fields"
        ],
        "title": "Event request",
        "type": "object",
        "x-schema-tag": "Event tickets"
      },
      "eventResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/eventRequest"
          },
          {
            "properties": {
              "createdAt": {
                "$ref": "#/components/schemas/createdAt"
              },
              "eventExternalId": {
                "$ref": "#/components/schemas/eventExternalId"
              },
              "eventId": {
                "$ref": "#/components/schemas/eventId"
              },
              "projectExternalId": {
                "description": "Returned if you created the event using an external ID for the project.",
                "type": "string"
              },
              "projectId": {
                "$ref": "#/components/schemas/projectId",
                "description": "The `id` of the project the event belongs to."
              },
              "updatedAt": {
                "$ref": "#/components/schemas/updatedAt"
              }
            },
            "type": "object"
          }
        ],
        "description": "An event response returns identifiers that you can use to reference the event in other endpoints, along with the complete event request body.",
        "title": "Event response",
        "x-schema-tag": "Event tickets"
      },
      "eventTicketRequest": {
        "allOf": [
          {
            "$ref": "#/components/schemas/adaptiveLinkShared"
          },
          {
            "properties": {
              "payload": {
                "properties": {
                  "events": {
                    "description": "Each object in the array represents an event. Each event object must specify the `eventId` or `eventExternalId` of an existing event, or contain the `fields` object sufficient to create a new event.\n\nYou can also provide the `eventExternalId` in conjunction with the `fields` object to assign an eventExternalId to a new event.\n",
                    "items": {
                      "oneOf": [
                        {
                          "allOf": [
                            {
                              "oneOf": [
                                {
                                  "properties": {
                                    "eventId": {
                                      "$ref": "#/components/schemas/eventId"
                                    }
                                  },
                                  "title": "Event ID",
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "eventExternalId": {
                                      "$ref": "#/components/schemas/eventExternalId"
                                    }
                                  },
                                  "title": "External Event ID",
                                  "type": "object"
                                }
                              ]
                            },
                            {
                              "properties": {
                                "attendees": {
                                  "$ref": "#/components/schemas/attendees"
                                },
                                "passGroups": {
                                  "$ref": "#/components/schemas/passGroupsEvent"
                                }
                              },
                              "type": "object"
                            }
                          ],
                          "description": "If you specify the `eventId` or `eventExternalId` of an existing event, you need only provide the attendees for the event ticket.\n",
                          "title": "Existing Event by ID"
                        },
                        {
                          "allOf": [
                            {
                              "properties": {
                                "eventExternalId": {
                                  "$ref": "#/components/schemas/eventExternalId"
                                }
                              },
                              "type": "object"
                            },
                            {
                              "$ref": "#/components/schemas/eventRequest"
                            },
                            {
                              "properties": {
                                "attendees": {
                                  "$ref": "#/components/schemas/attendees"
                                }
                              },
                              "type": "object"
                            }
                          ],
                          "description": "If creating an event, you can provide an external ID for the event. You must then provide a complete event object.\n",
                          "title": "Create New Event"
                        }
                      ]
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          }
        ],
        "description": "An event ticket requires similar information to other adaptive\nlink types, but does not support some of the same fields, and requires event and attendee information.\n\n\nLike other adaptive links, you must provide the `id` or `externalId` of an iOS or Android template. You can create the event within this request or specify an event by `eventId` or `eventExternalId`. In either case, you must also provide an array of attendees for the event.\n",
        "title": "Event ticket Adaptive Link request",
        "x-schema-tag": "Event tickets"
      },
      "eventTicketResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/adaptiveLinkResponse"
          },
          {
            "properties": {
              "eventExternalId": {
                "$ref": "#/components/schemas/eventExternalId"
              },
              "eventId": {
                "$ref": "#/components/schemas/eventId"
              },
              "status": {
                "description": "The HTTP status code for the adaptive link operation.",
                "example": 200,
                "type": "integer"
              }
            },
            "type": "object"
          }
        ],
        "description": "The response for event ticket operations is much like any other adaptive link, with the addition of the identifier of the event and an HTTP status for each individual adaptive link.",
        "title": "Event ticket Adaptive Link response",
        "x-schema-tag": "Event tickets"
      },
      "fields": {
        "description": "When updating a field on a pass or an adaptive link, you need only provide\nthe following items. You cannot update the position of the field or other\ninformation held by the template — only the field label, value, and the message\nthe user receives when their pass is updated.\n",
        "properties": {
          "changeMessage": {
            "description": "The message that appears when you change the value or label for a field. Use `%@` to pass variables to the field.",
            "type": "string"
          },
          "label": {
            "description": "The field label, usually represented as a title on the pass. Only provide the label if you want to use a different label than is provided by the template.",
            "type": "string"
          },
          "semantics": {
            "$ref": "#/components/schemas/boardingPassSemantics",
            "description": "Field-level semantics.",
            "x-apple": true
          },
          "value": {
            "description": "The default value for the field.",
            "type": "string"
          }
        },
        "required": [
          "value"
        ],
        "title": "Pass field updates",
        "type": "object"
      },
      "flightExternalId": {
        "description": "An external, custom identifier for a flight. You can reference flights by\n`flightExternalId` rather than the Airship-generated `flightId`.\n\n\nWhen creating boarding passes, if you specify an existing flight by `flightExternalId`,\nyou do not need to provide flight information in the `fields` object. If creating\na new flight in the `fields` object, you can assign a new `flightExternalId`\nto the new flight.",
        "type": "string",
        "x-inline-component": true
      },
      "flightFieldLabel": {
        "description": "A label representing the field on the pass.",
        "readOnly": true,
        "type": "string",
        "x-inline-component": true
      },
      "flightId": {
        "description": "A unique, auto-generated identifier for a flight.\n\n\nWhen creating boarding passes,\nif you specify a flight by ID, you do not need to define the flight in the\n`fields` object.\n",
        "type": "integer",
        "x-inline-component": true
      },
      "flightRequest": {
        "description": "A complete flight request object.\n\n\nThe presence or absence of fields in the flight object may slightly affect the design of boarding passes. See [Google Wallet Boarding Pass Design](https://developers.google.com/pay/passes/guides/pass-verticals/boarding-passes/design) for more information on rendering logic for Google Wallet Boarding Passes.\n",
        "properties": {
          "fields": {
            "properties": {
              "actualArrivalTime": {
                "description": "The date and time when the flight actually lands. This field is normally populated in updates to the flight, as real-time information becomes available for the benefit of ticket holders.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "format": "date-time",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "actualDepartureTime": {
                "description": "The date and time when the flight actually departs. This field is normally populated in updates to the flight, as real-time information becomes available.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "format": "date-time",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "airlineAllianceLogo": {
                "description": "A URL for the airline alliance logo, if the airline belongs to an alliance.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "value": {
                    "format": "url",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "airlineCode": {
                "description": "The airline code.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "airlineLogo": {
                "description": "A URL for the airline logo, shown on the front of the pass.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "value": {
                    "format": "url",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "airlineName": {
                "description": "The airline name.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "arrivalAirport": {
                "description": "The airport the flight arrives at.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "arrivalGate": {
                "description": "The gate that the flight arrives at.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "arrivalTerminal": {
                "description": "The terminal that the flight arrives at.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "arrivalTime": {
                "description": "The date and time the flight is scheduled to arrive at the `arrivalAirport`.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "format": "date-time",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "boardingPolicy": {
                "description": "The boarding policy for the airline and flight. If unset, Google will use `zoneBased`.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "enum": [
                      "boardingPolicyOther",
                      "groupBased",
                      "zoneBased"
                    ],
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "boardingTime": {
                "description": "The date and time when the flight boards.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "format": "date-time",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "departureAirport": {
                "description": "The airport that the flight departs from.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "departureGate": {
                "description": "The airport gate the flight departs from.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "departureTerminal": {
                "description": "The airport terminal the flight departs from.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "departureTime": {
                "description": "The date and time when the flight is scheduled to depart.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "format": "date-time",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "flightNumber": {
                "description": "The flight number.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "flightStatus": {
                "description": "The status of the flight.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "enum": [
                      "active",
                      "cancelled",
                      "landed",
                      "redirected",
                      "scheduled"
                    ],
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "seatingPolicy": {
                "description": "The seating policy for the airline and flight. If unset, Google will use `cabinBased`.",
                "properties": {
                  "label": {
                    "$ref": "#/components/schemas/flightFieldLabel"
                  },
                  "semantics": {
                    "$ref": "#/components/schemas/flightSemantics",
                    "description": "Field-level flight semantics.",
                    "x-apple": true
                  },
                  "value": {
                    "enum": [
                      "cabinBased",
                      "classBased",
                      "seatClassPolicyOther",
                      "tierBased"
                    ],
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "semantics": {
                "$ref": "#/components/schemas/flightSemantics",
                "description": "Top-level flight semantics.",
                "x-apple": true
              },
              "universalLinks": {
                "$ref": "#/components/schemas/universalLinksObject",
                "description": "Special web links containing JSON key-value pairs used to render buttons in the relevant sections of the pass."
              }
            },
            "required": [
              "flightNumber",
              "airlineCode",
              "airlineName",
              "departureAirport",
              "arrivalAirport"
            ],
            "type": "object"
          },
          "passGroups": {
            "$ref": "#/components/schemas/passGroupsFlight"
          }
        },
        "title": "Flight object",
        "type": "object",
        "x-schema-tag": "Flights and boarding passes"
      },
      "flightResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/flightRequest"
          },
          {
            "properties": {
              "createdAt": {
                "$ref": "#/components/schemas/createdAt"
              },
              "flightId": {
                "description": "A unique, auto-generated identifier for the flight. Use this ID to reference the flight in future operations.",
                "readOnly": true,
                "type": "integer"
              },
              "projectExternalId": {
                "description": "The identifier for the external project that the flight is associated with. Presently only if the project uses an external identifier.",
                "readOnly": true,
                "type": "string"
              },
              "projectId": {
                "description": "The project the flight is associated with.",
                "readOnly": true,
                "type": "string"
              },
              "updatedAt": {
                "$ref": "#/components/schemas/updatedAt"
              }
            },
            "type": "object"
          }
        ],
        "description": "A complete flight response, including identifiers to reference the flight\nand the fields defined within the flight.\n",
        "title": "Flight response",
        "x-schema-tag": "Flights and boarding passes"
      },
      "flightSemantics": {
        "description": "For Apple boarding passes only, a JSON object that uses key-value pairs to add rich, machine-readable data, such as `flightNumber` and `originalDepartureTime`, that enhances passes. You can nest this object within `fields`.\n",
        "properties": {
          "airlineCode": {
            "description": "The two-character IATA airline code.",
            "type": "string"
          },
          "currentArrivalDate": {
            "description": "The ISO 8601 date-time the flight is currently scheduled to arrive.",
            "format": "date-time",
            "type": "string"
          },
          "currentBoardingDate": {
            "description": "The ISO 8601 date-time the flight is currently scheduled to begin boarding.",
            "format": "date-time",
            "type": "string"
          },
          "currentDepartureDate": {
            "description": "The ISO 8601 date-time the flight is currently scheduled to depart.",
            "format": "date-time",
            "type": "string"
          },
          "departureAirportCode": {
            "description": "The three-letter IATA airport code the flight is departing from.",
            "type": "string"
          },
          "departureCityName": {
            "description": "The name of the departure city.",
            "type": "string"
          },
          "departureGate": {
            "description": "The gate number or letters of the departure gate.",
            "type": "string"
          },
          "departureLocation": {
            "description": "The geographic coordinates of the transit departure location.",
            "type": "object"
          },
          "departureLocationSecurityPrograms": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/securityPrograms"
              }
            ],
            "description": "A list of security programs that exist in the departure airport."
          },
          "departureLocationTimeZone": {
            "description": "The time zone for the departure location, such as America/Los_Angeles.",
            "type": "string"
          },
          "departureTerminal": {
            "description": "The name or letter of the departure terminal.",
            "type": "string"
          },
          "destinationAirportCode": {
            "description": "The three-letter IATA airport code the flight is going to.",
            "type": "string"
          },
          "destinationCityName": {
            "description": "The name of the destination city.",
            "type": "string"
          },
          "destinationGate": {
            "description": "The gate number or letters of the arrival gate.",
            "type": "string"
          },
          "destinationLocation": {
            "description": "The geographic coordinates of the transit destination location.",
            "type": "object"
          },
          "destinationLocationSecurityPrograms": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/securityPrograms"
              }
            ],
            "description": "A list of security programs that exist in the destination airport."
          },
          "destinationLocationTimeZone": {
            "description": "The time zone for the destination location, such as America/Los_Angeles.",
            "type": "string"
          },
          "destinationTerminal": {
            "description": "The name or letter of the arrival terminal.",
            "type": "string"
          },
          "flightNumber": {
            "description": "The one- to four-digit IATA flight number.",
            "type": "number"
          },
          "loungePlaceIDs": {
            "description": "A list of place IDs that reference the lounge locations.",
            "items": {
              "description": "The place ID of the lounge locations.",
              "type": "string"
            },
            "type": "array"
          },
          "originalArrivalDate": {
            "description": "The ISO 8601 date-time the flight is originally scheduled to arrive.",
            "format": "date-time",
            "type": "string"
          },
          "originalBoardingDate": {
            "description": "The ISO 8601 date-time the flight is originally scheduled to begin boarding.",
            "format": "date-time",
            "type": "string"
          },
          "originalDepartureDate": {
            "description": "The ISO 8601 date-time the flight is originally scheduled to depart.",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "originalArrivalDate",
          "departureAirportCode",
          "departureCityName",
          "departureLocationTimeZone",
          "destinationAirportCode",
          "destinationCityName",
          "destinationLocationTimeZone"
        ],
        "title": "Flight semantics object",
        "type": "object",
        "x-schema-tag": "Flights and boarding passes"
      },
      "formatType": {
        "description": "The input format for the field.",
        "enum": [
          "String",
          "Number",
          "URL",
          "Date",
          "Currency",
          "Phone",
          "Email"
        ],
        "type": "string",
        "x-inline-component": true
      },
      "googleGenericHeader": {
        "allOf": [
          {
            "$ref": "#/components/schemas/googleHeaderItemShared"
          },
          {
            "properties": {
              "fieldType": {
                "description": "Set to `topLevel` for `text` headers.",
                "enum": [
                  "topLevel"
                ],
                "type": "string"
              },
              "formatType": {
                "$ref": "#/components/schemas/googleHeaderFormatType"
              },
              "value": {
                "description": "Header text field.\n",
                "format": "text",
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "x-inline-component": true
      },
      "googleHeaderColor": {
        "allOf": [
          {
            "$ref": "#/components/schemas/googleHeaderItemShared"
          },
          {
            "properties": {
              "fieldType": {
                "description": "Set to `topLevel` for `color` and `text` headers.",
                "enum": [
                  "topLevel"
                ],
                "type": "string"
              },
              "formatType": {
                "description": "The input format for the field.",
                "enum": [
                  "String"
                ],
                "type": "string",
                "x-inline-component": true
              },
              "value": {
                "description": "The `color` objects take an rgb value in the format `rgb(255, 255, 255)`.\n",
                "format": "rgb",
                "pattern": "rgb\\({1,255}, {1,255}, {1,255}\\)",
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "x-inline-component": true
      },
      "googleHeaderFormatType": {
        "description": "Indicates that the field takes a string value. While the `formatType` for non-header fields can be another data type, header fields always take string values.\n\n\nIn general, you do not have to set this value. Airship can determine the `formatType` from the `fieldType`, and objects in the `headers` array are always String types.\n",
        "enum": [
          "String"
        ],
        "type": "string",
        "x-inline-component": true
      },
      "googleHeaderItemShared": {
        "description": "Header objects for Google Wallet templates use many of the same keys as fields on the template/pass. Populate these keys as necessary. Template responses include these keys with their default values.",
        "properties": {
          "changeMessage": {
            "$ref": "#/components/schemas/changeMessage"
          },
          "hideEmpty": {
            "$ref": "#/components/schemas/hideEmpty"
          },
          "ignoresTimeZone": {
            "description": "if true, the date-time value in a field on an Apple Wallet pass is not offset to account for the pass recipient's time zone. This may be helpful for things like boarding passes or events, where your times are set local to an airport or venue and should not change based on a user's device. When applied to a non-date-time field or a Google template, this setting is ignored.\n",
            "type": "boolean"
          },
          "label": {
            "description": "In most cases, you should not set a label for a Google template header. In responses, the label is typically an empty string.",
            "type": "string"
          },
          "required": {
            "$ref": "#/components/schemas/templateFieldRequired"
          },
          "textAlignment": {
            "$ref": "#/components/schemas/textAlignment"
          }
        },
        "title": "Optional fields for Google headers",
        "type": "object",
        "x-schema-tag": "Template objects"
      },
      "googleHeaders": {
        "description": "Fields appearing in the `headers` object for a Google pass template. Header fields typically follow the same model as other fields for Google Wallet templates and passes, but often have specific `value`, `fieldType`, and `formatType` values.",
        "properties": {
          "background_color": {
            "$ref": "#/components/schemas/googleHeaderColor",
            "description": "Sets the background color for the pass.\n"
          },
          "background_image": {
            "$ref": "#/components/schemas/googleImageHeader",
            "description": "A background image for the pass."
          },
          "barcodeAltText": {
            "allOf": [
              {
                "$ref": "#/components/schemas/googleHeaderItemShared"
              },
              {
                "properties": {
                  "fieldType": {
                    "$ref": "#/components/schemas/barcodeFieldType"
                  },
                  "formatType": {
                    "$ref": "#/components/schemas/googleHeaderFormatType"
                  },
                  "value": {
                    "description": "The alternate text for the barcode on the template.\n",
                    "type": "string"
                  }
                },
                "type": "object"
              }
            ],
            "description": "Alternate text displayed below the barcode."
          },
          "barcode_encoding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/googleHeaderItemShared"
              },
              {
                "properties": {
                  "fieldType": {
                    "$ref": "#/components/schemas/barcodeFieldType"
                  },
                  "formatType": {
                    "$ref": "#/components/schemas/googleHeaderFormatType"
                  },
                  "value": {
                    "description": "Presently, `iso-8859-1` is the only supported value.\n",
                    "enum": [
                      "iso-8859-1"
                    ],
                    "type": "string"
                  }
                },
                "type": "object"
              }
            ],
            "description": "The encoding format for the barcode."
          },
          "barcode_type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/googleHeaderItemShared"
              },
              {
                "properties": {
                  "fieldType": {
                    "$ref": "#/components/schemas/barcodeFieldType"
                  },
                  "formatType": {
                    "$ref": "#/components/schemas/googleHeaderFormatType"
                  },
                  "value": {
                    "description": "The format of the barcode supported by the project and resulting passes.\n",
                    "enum": [
                      "pdf417",
                      "aztec",
                      "code128",
                      "qr",
                      "upc-a",
                      "ean-13",
                      "code-39"
                    ],
                    "type": "string"
                  }
                },
                "type": "object"
              }
            ],
            "description": "The type of barcode supported by the template. This value must be the same as the `barcode_type` set at the project level.\n"
          },
          "barcode_value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/googleHeaderItemShared"
              },
              {
                "properties": {
                  "fieldType": {
                    "description": "Set to `barcode` for all barcode headers.",
                    "enum": [
                      "barcode"
                    ],
                    "type": "string"
                  },
                  "formatType": {
                    "$ref": "#/components/schemas/googleHeaderFormatType"
                  },
                  "value": {
                    "description": "This value is a default for the barcode. You may set a new or personalized value when creating adaptive links or passes.\n",
                    "type": "string"
                  }
                },
                "type": "object"
              }
            ],
            "description": "The default value for the barcode used by the template."
          },
          "footer_image": {
            "$ref": "#/components/schemas/googleImageHeader",
            "description": "The footer image for a template."
          },
          "foreground_color": {
            "$ref": "#/components/schemas/googleHeaderColor",
            "description": "Sets the foreground color for the template."
          },
          "header": {
            "$ref": "#/components/schemas/googleGenericHeader",
            "description": "Sets the generic pass header. Required for the generic pass type.\n"
          },
          "icon_image": {
            "$ref": "#/components/schemas/googleImageHeader",
            "description": "The icon image for the template."
          },
          "logo_image": {
            "$ref": "#/components/schemas/googleImageHeader",
            "description": "Specifies the template logo image."
          },
          "logo_text": {
            "description": "Sets the text under the logo image.",
            "properties": {
              "fieldType": {
                "description": "Indicates that the `value` is an image.",
                "enum": [
                  "image"
                ],
                "type": "string"
              },
              "formatType": {
                "$ref": "#/components/schemas/googleHeaderFormatType"
              },
              "value": {
                "description": "The alternate text for the `logo_image`.\n",
                "type": "string"
              }
            },
            "type": "object"
          },
          "sharingStatus": {
            "$ref": "#/components/schemas/sharingStatus"
          },
          "strip_image": {
            "$ref": "#/components/schemas/googleImageHeader",
            "description": "The image residing in the barcode strip."
          },
          "subheader": {
            "$ref": "#/components/schemas/googleGenericHeader",
            "description": "Sets the optional generic pass subheader.\n"
          },
          "suppress_strip_shine": {
            "allOf": [
              {
                "$ref": "#/components/schemas/googleHeaderItemShared"
              },
              {
                "properties": {
                  "fieldType": {
                    "$ref": "#/components/schemas/barcodeFieldType"
                  },
                  "formatType": {
                    "$ref": "#/components/schemas/googleHeaderFormatType"
                  },
                  "value": {
                    "type": "boolean"
                  }
                },
                "type": "object"
              }
            ],
            "description": "Determines whether or not to suppress the strip shine effect on barcodes."
          },
          "thumbnail_image": {
            "$ref": "#/components/schemas/googleImageHeader",
            "description": "An object containing the URL for the thumbnail image."
          }
        },
        "title": "Google headers",
        "type": "object"
      },
      "googleImageHeader": {
        "allOf": [
          {
            "$ref": "#/components/schemas/googleHeaderItemShared"
          },
          {
            "properties": {
              "fieldType": {
                "description": "Indicates that the `value` is an image.",
                "enum": [
                  "image"
                ],
                "type": "string"
              },
              "formatType": {
                "$ref": "#/components/schemas/googleHeaderFormatType"
              },
              "value": {
                "description": "The URL for the header image.\n",
                "format": "url",
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "x-inline-component": true
      },
      "googlePassFieldResponse": {
        "description": "A field on a pass contains information from the template noting the type of field and other positioning information.  The `value` and `label` keys from the template are represented by keys native to each google fieldType. The `label` is sometimes represented as `header`, `title.string`, etc. ; the `value` is sometimes represented as `body`, `description.string`, `uri`, etc.\n",
        "properties": {
          "col": {
            "deprecated": true,
            "description": "Determines vertical location/order within the `fieldType`. Use `order` instead.",
            "type": "integer"
          },
          "fieldType": {
            "description": "Represents the module or parent object that a field belongs to on a template.\n",
            "enum": [
              "titleModule",
              "acctModule",
              "infoModuleData",
              "textModulesData",
              "linkModulesData",
              "pointsModule",
              "notAssigned",
              "loyaltyPoints"
            ],
            "type": "string"
          },
          "formatType": {
            "$ref": "#/components/schemas/formatType"
          },
          "hideEmpty": {
            "$ref": "#/components/schemas/hideEmpty"
          },
          "order": {
            "$ref": "#/components/schemas/templateFieldOrder"
          },
          "row": {
            "deprecated": true,
            "description": "Determines horizontal location/order within the `fieldType`. Use `order` instead.",
            "type": "integer"
          }
        },
        "type": "object",
        "x-inline-component": true
      },
      "googlePayMessageResponse": {
        "description": "Information about messages associated with specified Google Wallet passes.",
        "properties": {
          "body": {
            "description": "The body of the message.",
            "type": "string"
          },
          "createdAt": {
            "$ref": "#/components/schemas/createdAt"
          },
          "header": {
            "description": "The header for the message.",
            "type": "string"
          },
          "messageType": {
            "description": "The type of message.",
            "enum": [
              "expirationNotification",
              "text"
            ],
            "type": "string"
          },
          "updatedAt": {
            "$ref": "#/components/schemas/updatedAt"
          }
        },
        "title": "Google Wallet Message Response",
        "type": "object",
        "x-inline-component": true
      },
      "googleTemplate": {
        "allOf": [
          {
            "$ref": "#/components/schemas/templateRequestHeaders"
          },
          {
            "$ref": "#/components/schemas/googleTemplateRequestFieldsModel"
          }
        ],
        "description": "A google template organizes fields into a series of module objects. Include only the objects you want to populate for a particular template; some modules may not apply to your template type.",
        "title": "Google Wallet template request",
        "type": "object",
        "x-schema-tag": "Template objects"
      },
      "googleTemplateRequestField": {
        "description": "Represents a field on a Google pass. Each field is an object with a string name containing the following keys.\n\nFields for Google templates belong to modules. Modules determine placement on the pass and, in some cases, the types of values for the field.",
        "properties": {
          "changeMessage": {
            "$ref": "#/components/schemas/changeMessage"
          },
          "col": {
            "deprecated": true,
            "description": "Determines vertical location/order within the `fieldType`. Use `order` instead.",
            "type": "integer"
          },
          "hideEmpty": {
            "$ref": "#/components/schemas/hideEmpty"
          },
          "label": {
            "description": "A label for the field; this is the field title as shown on the pass.",
            "type": "string"
          },
          "order": {
            "$ref": "#/components/schemas/templateFieldOrder"
          },
          "required": {
            "$ref": "#/components/schemas/templateFieldRequired"
          },
          "row": {
            "deprecated": true,
            "description": "Determines horizontal location/order within the `fieldType`. Use `order` instead.",
            "type": "integer"
          },
          "textAlignment": {
            "$ref": "#/components/schemas/textAlignment"
          },
          "value": {
            "$ref": "#/components/schemas/templateFieldValue"
          }
        },
        "required": [
          "label",
          "value"
        ],
        "title": "Google field object",
        "type": "object",
        "x-inline-component": true,
        "x-schema-tag": "Template objects"
      },
      "googleTemplateRequestFieldsModel": {
        "description": "Fields on a Google pass are organized into modules. Modules define how fields on the pass are organized and appear. Fields within each module are objects with a string names.",
        "properties": {
          "acctModule": {
            "additionalProperties": {
              "$ref": "#/components/schemas/googleTemplateRequestField",
              "title": "Account Module Field name"
            },
            "description": "Information associated with an account or membership. These are typically items like the `accountIdLabel` on Loyalty cards or `balance` items on a gift card.",
            "type": "object"
          },
          "headers": {
            "$ref": "#/components/schemas/googleHeaders",
            "description": "Google template headers define barcode and top-level information for passes."
          },
          "imageModulesData": {
            "additionalProperties": {
              "$ref": "#/components/schemas/googleTemplateRequestField",
              "title": "Image Module Field name"
            },
            "description": "Contains an image on the pass outside the header.",
            "maxProperties": 1,
            "type": "object"
          },
          "infoModuleData": {
            "additionalProperties": {
              "$ref": "#/components/schemas/googleTemplateRequestField",
              "title": "Info Module Field name"
            },
            "description": "Info module",
            "maxProperties": 10,
            "title": "Contains additional information for a pass. Where the text module typically contains information in a heading-paragraph format, you might think of the info module as having quick, list/table styled information.",
            "type": "object"
          },
          "linkModulesData": {
            "additionalProperties": {
              "$ref": "#/components/schemas/googleTemplateRequestField",
              "title": "Link Module Field Name"
            },
            "description": "Contains links including URLs, phone numbers, and email addresses, that you want to make available on the pass. This module typically appears at the bottom of the pass.",
            "maxProperties": 10,
            "type": "object"
          },
          "offerModule": {
            "$ref": "#/components/schemas/offerModule"
          },
          "pointsModule": {
            "additionalProperties": {
              "$ref": "#/components/schemas/googleTemplateRequestField",
              "title": "Points Module Field name"
            },
            "description": "Contains information related to `points` that pass users accrue or spend. This module is typically used on loyalty passes.",
            "type": "object"
          },
          "textModulesData": {
            "additionalProperties": {
              "$ref": "#/components/schemas/googleTemplateRequestField",
              "title": "Text Module Field name"
            },
            "description": "Contains text information for a pass. The text module typically has information in a header-body format.",
            "type": "object"
          },
          "titleModule": {
            "additionalProperties": {
              "$ref": "#/components/schemas/googleTemplateRequestField",
              "title": "Title Module Field name"
            },
            "description": "Contains title and header information specific to each pass type (as opposed to common items held within `headers`). These are items typically referenced by `class` in Google pass designs.",
            "type": "object"
          }
        },
        "title": "Google fields",
        "type": "object"
      },
      "headerFormatType": {
        "description": "For iOS, a value of `1` indicates that the `formatType` for the field is a string.",
        "enum": [
          1
        ],
        "type": "integer",
        "x-inline-component": true
      },
      "hideEmpty": {
        "description": "If true, the field is hidden if empty.",
        "type": "boolean",
        "x-inline-component": true
      },
      "iosColorHeader": {
        "properties": {
          "fieldType": {
            "description": "Set to `topLevel` for `color` and `text` headers.",
            "enum": [
              "topLevel"
            ],
            "type": "string"
          },
          "formatType": {
            "$ref": "#/components/schemas/headerFormatType"
          },
          "value": {
            "description": "The `color` objects take an rgb value in the format `rgb(255, 255, 255)`.\n",
            "format": "rgb",
            "pattern": "rgb\\({1,255}, {1,255}, {1,255}\\)",
            "type": "string"
          }
        },
        "type": "object",
        "x-inline-component": true
      },
      "iosFieldObject": {
        "description": "Defines fields on iOS templates and subsequent passes generated from the template.",
        "properties": {
          "fields": {
            "additionalProperties": {
              "description": "Fields on an iOS template are objects with a string name. Where they appear and the data they contain are determined by the fields within the object.",
              "properties": {
                "changeMessage": {
                  "$ref": "#/components/schemas/changeMessage"
                },
                "currencyCode": {
                  "$ref": "#/components/schemas/currencyCode"
                },
                "formatType": {
                  "$ref": "#/components/schemas/formatType"
                },
                "hideempty": {
                  "$ref": "#/components/schemas/hideEmpty"
                },
                "ignoresTimeZone": {
                  "description": "if true, the date-time value in a field on an Apple Wallet pass is not offset to account for the pass recipient's time zone. This may be helpful for things like boarding passes or events, where your times are set local to an airport or venue and should not change based on a user's device. When applied to a non-date-time field or a Google template, this setting is ignored.\n",
                  "type": "boolean"
                },
                "label": {
                  "description": "A label for the field; this is typically the field title as shown on the pass.",
                  "type": "string"
                },
                "numberStyle": {
                  "$ref": "#/components/schemas/numberStyle"
                },
                "order": {
                  "$ref": "#/components/schemas/templateFieldOrder"
                },
                "required": {
                  "$ref": "#/components/schemas/templateFieldRequired"
                },
                "textAlignment": {
                  "$ref": "#/components/schemas/textAlignment"
                },
                "value": {
                  "$ref": "#/components/schemas/templateFieldValue"
                }
              },
              "title": "Field Name (String)",
              "type": "object"
            },
            "description": "All non-header fields on an iOS template sit inside this object.",
            "type": "object"
          }
        },
        "title": "iOS fields",
        "type": "object"
      },
      "iosHeaders": {
        "description": "The iOS template `headers` object can contain the following objects. Each object\nhas a `formatType`, `fieldType`, and `value`.\n\n* `formatType` is always `1`, indicating that the `value` is a string.\n\n* `fieldType` is `topLevel` — a text or color value on the top-front of the pass, `image`, or `barcode`.\n\n* `value` is the default value for the header field.",
        "properties": {
          "background_color": {
            "$ref": "#/components/schemas/iosColorHeader",
            "description": "Sets the background color for the pass."
          },
          "background_image": {
            "$ref": "#/components/schemas/iosImageHeader",
            "description": "A background image for the pass."
          },
          "barcodeAltText": {
            "description": "Alternate text displayed below the barcode.",
            "properties": {
              "fieldType": {
                "$ref": "#/components/schemas/barcodeFieldType"
              },
              "formatType": {
                "$ref": "#/components/schemas/headerFormatType"
              },
              "value": {
                "description": "The alternate text for the barcode on the template.\n",
                "type": "string"
              }
            },
            "type": "object"
          },
          "barcode_encoding": {
            "description": "The encoding format for the barcode.\n",
            "properties": {
              "fieldType": {
                "$ref": "#/components/schemas/barcodeFieldType"
              },
              "formatType": {
                "$ref": "#/components/schemas/headerFormatType"
              },
              "value": {
                "description": "Presently, `iso-8859-1` is the only supported value.\n",
                "enum": [
                  "iso-8859-1"
                ],
                "type": "string"
              }
            },
            "type": "object"
          },
          "barcode_type": {
            "description": "The type of barcode supported by the template. This value must be the same as the `barcode_type` set at the project level.\n",
            "properties": {
              "fieldType": {
                "$ref": "#/components/schemas/barcodeFieldType"
              },
              "formatType": {
                "$ref": "#/components/schemas/headerFormatType"
              },
              "value": {
                "description": "The format of the barcode supported by the project and resulting passes.\n",
                "enum": [
                  "pdf417",
                  "aztec",
                  "code128",
                  "qr",
                  "upc-a",
                  "ean-13",
                  "code-39"
                ],
                "type": "string"
              }
            },
            "type": "object"
          },
          "barcode_value": {
            "description": "The default value for the barcode used by the template.",
            "properties": {
              "fieldType": {
                "description": "Set to `barcode` for all barcode headers.",
                "enum": [
                  "barcode"
                ],
                "type": "string"
              },
              "formatType": {
                "$ref": "#/components/schemas/headerFormatType"
              },
              "value": {
                "description": "This value is a default for the barcode. You may set a new or personalized value when creating adaptive links or passes.\n",
                "type": "string"
              }
            },
            "type": "object"
          },
          "footer_image": {
            "$ref": "#/components/schemas/iosImageHeader",
            "description": "The footer image for a template."
          },
          "foreground_color": {
            "$ref": "#/components/schemas/iosColorHeader",
            "description": "Sets the foreground color for the template."
          },
          "icon_image": {
            "$ref": "#/components/schemas/iosImageHeader",
            "description": "The icon image for the template."
          },
          "logo_color": {
            "$ref": "#/components/schemas/iosColorHeader",
            "description": "Specifies the color of the logo on the template."
          },
          "logo_image": {
            "$ref": "#/components/schemas/iosImageHeader",
            "description": "Specifies the template logo image."
          },
          "logo_text": {
            "description": "Sets the text under the logo image.",
            "properties": {
              "fieldType": {
                "description": "Indicates that the `value` is an image.",
                "enum": [
                  "image"
                ],
                "type": "string"
              },
              "formatType": {
                "$ref": "#/components/schemas/headerFormatType"
              },
              "value": {
                "description": "The alternate text for the `logo_image`.\n",
                "type": "string"
              }
            },
            "type": "object"
          },
          "relevantDate": {
            "description": "Sets the relevant date value that serves as the notification trigger for time-based pass relevance.",
            "properties": {
              "fieldType": {
                "description": "Indicates that the `value` is a top-level pass attribute.",
                "enum": [
                  "topLevel"
                ],
                "type": "string"
              },
              "formatType": {
                "$ref": "#/components/schemas/headerFormatType"
              },
              "value": {
                "description": "The [date-time](/developer/rest-api/wallet/introduction/#datetime-format) string indicating when the pass becomes relevant.\n",
                "type": "string"
              }
            },
            "type": "object"
          },
          "sharingStatus": {
            "$ref": "#/components/schemas/sharingStatus"
          },
          "strip_image": {
            "$ref": "#/components/schemas/iosImageHeader",
            "description": "The image residing in the barcode strip."
          },
          "suppress_strip_shine": {
            "description": "Determines whether or not to suppress the strip shine effect on barcodes.",
            "properties": {
              "fieldType": {
                "$ref": "#/components/schemas/barcodeFieldType"
              },
              "formatType": {
                "$ref": "#/components/schemas/headerFormatType"
              },
              "value": {
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "thumbnail_image": {
            "$ref": "#/components/schemas/iosImageHeader",
            "description": "An object containing the URL for the thumbnail image."
          }
        },
        "title": "iOS template headers",
        "type": "object"
      },
      "iosImageHeader": {
        "properties": {
          "fieldType": {
            "description": "Indicates that the `value` is an image.",
            "enum": [
              "image"
            ],
            "type": "string"
          },
          "formatType": {
            "$ref": "#/components/schemas/headerFormatType"
          },
          "value": {
            "description": "The URL for the header image.\n",
            "format": "url",
            "type": "string"
          }
        },
        "type": "object",
        "x-inline-component": true
      },
      "iosTemplate": {
        "allOf": [
          {
            "$ref": "#/components/schemas/templateRequestHeaders"
          },
          {
            "$ref": "#/components/schemas/iosHeaders"
          },
          {
            "$ref": "#/components/schemas/iosFieldObject"
          }
        ],
        "description": "A complete iOS template includes template meta information, headers, and fields.",
        "title": "Apple Wallet template request",
        "type": "object",
        "x-schema-tag": "Template objects"
      },
      "ipaddr": {
        "description": "A list of CIDR representations of valid IP addresses to which the issued token is restricted. IP addresses can be sent as a URL-encoded, space-delimited list (example: `ipaddr=24.20.40.0%2F24%202001%3A4860%3A4860%3A%3A8888%2F32`) or as a list as expected in a query parameter form (example: `ipaddr=24.20.40.0/24&ipaddr=2001:4860:4860::8888/32`).",
        "type": "string",
        "x-inline-component": true
      },
      "linkedPasses": {
        "description": "An object containing a `passURIs` array of passes to link.",
        "properties": {
          "passURIs": {
            "$ref": "#/components/schemas/passURIs"
          }
        },
        "title": "Linked Passes",
        "type": "object"
      },
      "locationObject": {
        "description": "Represents a location on a pass or an adaptive link.\n\n\nPlace objects in the locations array to add location information to passes and templates. Updating locations on a pass or template will replace all locations on that pass; if you want to add to the locations on a pass, you must provide all locations already included on the pass and any additional locations you want to add.\n\nApple Wallet Each pass supports up to 10 locations. If you exceed this limit for an iOS pass, we will use the 10 locations nearest to a user (located by IP address) when they install the pass.\n",
        "properties": {
          "city": {
            "description": "The location city.",
            "type": "string"
          },
          "country": {
            "description": "The country abbreviation or name.",
            "type": "string"
          },
          "latitude": {
            "description": "The latitude of the location.",
            "format": "double",
            "type": "number"
          },
          "longitude": {
            "description": "The longitude of the location.",
            "format": "double",
            "type": "number"
          },
          "region": {
            "description": "The region or state name.",
            "type": "string"
          },
          "regionCode": {
            "description": "The region or zip code.",
            "type": "string"
          },
          "relevantText": {
            "description": "An optional value shown as lock screen text for iOS when the device is close to this location.",
            "type": "string"
          },
          "streetAddress1": {
            "description": "The first line of the location address.",
            "type": "string"
          },
          "streetAddress2": {
            "description": "The second line of the location address.",
            "type": "string"
          }
        },
        "required": [
          "longitude",
          "latitude"
        ],
        "title": "Location object",
        "type": "object"
      },
      "merchantId": {
        "description": "The Airship-generated UUID for your NFC merchant information.",
        "readOnly": true,
        "type": "string",
        "x-inline-component": true
      },
      "nfc": {
        "description": "If your Apple certificate is NFC-enabled, and your terminals use Apple's Value Added Services protocol, you can include this object in Loyalty passes to identify pass holders and provide their credentials over NFC. See [Enable NFC Support for your Passes](/guides/wallet/user-guide/design-template/nfc/) for setup instructions.",
        "properties": {
          "encryptionPublicKey": {
            "description": "The public encryption key for NFC communications. Use a Base64 encoded X.509 `SubjectPublicKeyInfo` structure containing a ECDH public key for group P256.",
            "type": "string"
          },
          "message": {
            "description": "The payload for an Apple Pay terminal, 64 bytes or less. Messages longer than 64 bytes are truncated.",
            "type": "string"
          }
        },
        "required": [
          "message",
          "encryptionPublicKey"
        ],
        "title": "NFC for Apple Passes",
        "type": "object",
        "x-inline-component": true
      },
      "nfcMerchantResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/nfcMerchants"
          },
          {
            "properties": {
              "keySource": {
                "description": "Set by Airship, either `GENERATED` if Airship generates your public/private keys or `IMPORTED` if you provide your own `publicKey`.",
                "enum": [
                  "GENERATED",
                  "IMPORTED"
                ],
                "readOnly": true,
                "type": "string"
              },
              "merchantId": {
                "$ref": "#/components/schemas/merchantId"
              },
              "privateKeyPem": {
                "description": "Returned in a POST if your public/private keys are generated by Airship. This is the key your terminal uses to decode messages from Airship (that use the `publicKeyPem`).",
                "type": "string"
              },
              "projectId": {
                "$ref": "#/components/schemas/projectId"
              },
              "smartTapIssuerId": {
                "description": "Represents your platform and may contain more than one `collectorId`.",
                "type": "string",
                "x-google": true
              },
              "updatedAt": {
                "description": "The date and time when your NFC merchant information was last updated.",
                "format": "date-time",
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "description": "A response contains information generated by Airship and/or gathered from Google Wallet services.\n",
        "x-inline-component": true
      },
      "nfcMerchants": {
        "description": "Describes NFC support for your project (and related templates/passes).",
        "properties": {
          "keyVersion": {
            "description": "The SSH protocol version for your key. Can be set to `1`.",
            "maximum": 4,
            "minimum": 1,
            "type": "integer"
          },
          "merchantEmail": {
            "description": "The google merchant email address, used when configuring smartTap.",
            "type": "string"
          },
          "merchantName": {
            "description": "The google merchant name, used when configuring smartTap.",
            "type": "string"
          },
          "publicKeyPem": {
            "description": "The public key for NFC communications. If you do not provide a public key, Airship will generate a public/private key pair for you.",
            "type": "string"
          },
          "smartTapCollectorId": {
            "description": "Defines your Google Wallet merchant.",
            "type": "string"
          },
          "terminalProvider": {
            "description": "The NFC terminal provider that can read NFC messages, like `Verifone`.",
            "type": "string"
          },
          "vendor": {
            "description": "Set the vendor you want to provide information for, where `ANY` represents both Apple and Google vendors. If you omit this property, Airship assumes `ANY`.",
            "enum": [
              "GOOGLE",
              "APPLE",
              "ANY"
            ],
            "type": "string"
          }
        },
        "required": [
          "vendor"
        ],
        "type": "object",
        "x-inline-component": true
      },
      "notAcceptableResponseObject": {
        "description": "Unsupported `Accept` header. The request only supports `application/json`, `application/x-www-form-urlencoded`, `text/plain`.",
        "properties": {
          "error": {
            "description": "Error code.",
            "enum": [
              "invalid_request"
            ],
            "type": "string"
          },
          "error_description": {
            "description": "A plain-text description of the error.",
            "type": "string"
          }
        },
        "required": [
          "error"
        ],
        "title": "Error response",
        "type": "object",
        "x-inline-component": true
      },
      "notificationRequest": {
        "description": "An object for sending a custom pass notification message.",
        "properties": {
          "endTime": {
            "description": "The [date-time](/developer/rest-api/wallet/introduction/#datetime-format) string indicating when the message should disappear. Defaults to one hour in the future.",
            "format": "date-time",
            "type": "string",
            "x-google": true
          },
          "label": {
            "description": "Optional header for the message.",
            "type": "string"
          },
          "startTime": {
            "description": "The [date-time](/developer/rest-api/wallet/introduction/#datetime-format) string indicating when the message should appear. Defaults to the current time.",
            "format": "date-time",
            "type": "string",
            "x-google": true
          },
          "value": {
            "description": "The body of the notification message.",
            "type": "string"
          }
        },
        "required": [
          "value"
        ],
        "title": "Pass Notification Request",
        "type": "object",
        "x-inline-component": true
      },
      "numberStyle": {
        "description": "Determines how a template interprets number values when `formatType` is set to `Number`. This is specific to Apple Wallet passes.",
        "enum": [
          "numberStyleDecimal",
          "numberStyleSpellOut",
          "numberStyleScientific",
          "numberStylePercent"
        ],
        "type": "string",
        "x-inline-component": true
      },
      "oauthScope": {
        "description": "The value of the scope parameter is a list of space-delimited, case-sensitive strings. If multiple scopes are specified, their order does not matter. Each string adds an additional access range to the requested scope. For more information about scope values, see [OAuth token scopes](/developer/rest-api/wallet/api-auth-reference/#oauth-token-scopes) in the *Wallet API Authorization Reference* documentation.\n  * `wadl`: Adaptive Links\n  * `wevt`: Events\n  * `wfli`: Flights\n  * `wnot`: Notifications\n  * `wpas`: Passes\n  * `wprj`: Projects\n  * `wsch`: Schedules\n  * `wseg`: Segments\n  * `wrpt`: Statistics\n  * `wtmp`: Templates",
        "enum": [
          "wadl",
          "wevt",
          "wfli",
          "wnot",
          "wpas",
          "wprj",
          "wsch",
          "wseg",
          "wrpt",
          "wtmp"
        ],
        "title": "OAuth Scope",
        "type": "string",
        "x-schema-tag": "OAuth"
      },
      "offerModule": {
        "description": "Specific to google coupons, this module contains information about redeeming the coupon.",
        "properties": {
          "endTime": {
            "description": "The expiration date for the offer.",
            "format": "date-time",
            "type": "string"
          },
          "multiUseOffer": {
            "description": "Indicates whether the coupon/offer is available for multiple users or just a single user.",
            "type": "boolean"
          },
          "provider": {
            "description": "The offer provider name.",
            "type": "string"
          },
          "redemptionChannel": {
            "description": "Indicates whether the user can redeem the offer at a physical location or online.",
            "enum": [
              "online",
              "instore",
              "both",
              "temporaryPriceReduction"
            ],
            "type": "string"
          }
        },
        "type": "object",
        "x-inline-component": true
      },
      "okOauthTokenResponse": {
        "description": "Issued access token.",
        "properties": {
          "access_token": {
            "description": "The issued token that can be used for all endpoints as allowed by set scopes.",
            "type": "string"
          },
          "expires_in": {
            "description": "The number of seconds from the time the token is generated until it expires.",
            "type": "integer"
          },
          "scope": {
            "$ref": "#/components/schemas/oauthScope",
            "description": "A space-delimited list of scopes of the issued token. There may be undocumented scopes in this list."
          },
          "token_type": {
            "description": "The type of issued token.",
            "enum": [
              "Bearer"
            ],
            "type": "string"
          }
        },
        "title": "OK response",
        "type": "object",
        "x-inline-component": true
      },
      "paginationObject": {
        "description": "Contains information about pagination, according to your query parameters.",
        "properties": {
          "direction": {
            "description": "The direction of results, ascending, or descending.",
            "enum": [
              "ASC",
              "DESC"
            ],
            "type": "string"
          },
          "order": {
            "description": "The key in the result set that you want to order results by. Defaults to `id`.",
            "type": "string"
          },
          "page": {
            "description": "The page you are on. Multiply by the page size to determine the result set on the page.",
            "type": "integer"
          },
          "pageSize": {
            "description": "The number of results per page.",
            "type": "integer"
          },
          "start": {
            "description": "The first result on the page; results begin with 0.",
            "type": "integer"
          }
        },
        "title": "Pagination object",
        "type": "object"
      },
      "passGroupsEvent": {
        "description": "An array of eventId or eventExternalId values representing a group. You can reference the group to make changes to all associated events.\n\nYou can set pass groups when creating an event or when creating an event ticket adaptive link.\n",
        "items": {
          "type": "string"
        },
        "type": "array",
        "x-inline-component": true
      },
      "passGroupsFlight": {
        "description": "An array of eventId or eventExternalId values representing a group. You can reference the group to make changes to all associated events.\n\nYou can set pass groups when creating an event or when creating an event ticket adaptive link.\n",
        "items": {
          "type": "string"
        },
        "type": "array",
        "x-inline-component": true
      },
      "passId": {
        "description": "The internal identifier for the pass. Use this ID to get or modify the pass in other calls.",
        "readOnly": true,
        "type": "integer",
        "x-inline-component": true
      },
      "passMetadata": {
        "description": "Meta information about passes.",
        "properties": {
          "createdAt": {
            "$ref": "#/components/schemas/updatedAt"
          },
          "id": {
            "$ref": "#/components/schemas/passId"
          },
          "installedAt": {
            "description": "The date and time when pass was first installed on the device.",
            "format": "date-time",
            "type": "string"
          },
          "platform": {
            "description": "Wallet platform.",
            "enum": [
              "iOS",
              "Android"
            ],
            "type": "string"
          },
          "serialNumber": {
            "description": "The serial number of the pass.",
            "type": "string"
          },
          "status": {
            "description": "Recent on-device pass status.",
            "enum": [
              "installed",
              "uninstalled",
              "not_been_installed"
            ],
            "type": "string"
          },
          "templateId": {
            "$ref": "#/components/schemas/templateId"
          },
          "uninstalledAt": {
            "description": "The date and time when pass was uninstalled on the device. This value is only set if pass status is uninstalled.",
            "format": "date-time",
            "type": "string"
          },
          "updatedAt": {
            "$ref": "#/components/schemas/createdAt"
          },
          "url": {
            "description": "Pass download URL.",
            "type": "string"
          }
        },
        "title": "Pass Metadata",
        "type": "object",
        "x-inline-component": true,
        "x-schema-tag": "Passes"
      },
      "passURIs": {
        "description": "A list of URIs identifying wallet passes to link.",
        "items": {
          "example": [
            "v1/pass/12345",
            "v1/pass/adaptive/on1RsjZNQCp",
            "v1/pass/template/12345/id/my_custom_pass_id",
            "v1/pass/template/id/custom_template_id/id/custom_pass_id",
            "v1/pass/dynamic/c94df09e-faf4-11f0-9b90-42010a400014"
          ],
          "type": "string"
        },
        "title": "Pass URIs",
        "type": "array"
      },
      "passengerCapabilities": {
        "description": "List of passenger capabilities.",
        "items": {
          "anyOf": [
            {
              "description": "The passenger is eligible for pre-boarding.",
              "enum": [
                "preBoarding"
              ],
              "type": "string"
            },
            {
              "description": "The passenger is eligible for priority boarding.",
              "enum": [
                "priorityBoarding"
              ],
              "type": "string"
            },
            {
              "description": "The passenger's fare allows them to bring a carry-on item.",
              "enum": [
                "carryOn"
              ],
              "type": "string"
            },
            {
              "description": "The passenger's fare allows them to bring a personal item.",
              "enum": [
                "personalItem"
              ],
              "type": "string"
            }
          ],
          "type": "string"
        },
        "title": "Passenger capabilities",
        "type": "array"
      },
      "passengerInformationSSRs": {
        "description": "A list of Special Service Requests (SSRs) information for passengers; supports any valid four-letter IATA SSR code in addition to those listed.",
        "items": {
          "enum": [
            "infantLap"
          ],
          "type": "string"
        },
        "title": "Passenger information SSRs",
        "type": "array"
      },
      "passengerNameSemanticsObject": {
        "properties": {
          "familyName": {
            "description": "The person's family name or last name.",
            "type": "string"
          },
          "givenName": {
            "description": "The person's given name; also called the forename or first name in some countries.",
            "type": "string"
          },
          "middleName": {
            "description": "The person's middle name.",
            "type": "string"
          },
          "namePrefix": {
            "description": "The prefix for the person's name, such as \"Dr\".",
            "type": "string"
          },
          "nameSuffix": {
            "description": "The suffix for the person's name, such as \"Junior\".",
            "type": "string"
          },
          "nickname": {
            "description": "The person's nickname.",
            "type": "string"
          },
          "phoneticRepresentation": {
            "description": "The phonetic representation of the person's name.",
            "type": "string"
          }
        },
        "title": "Passenger name object",
        "type": "object"
      },
      "passengerSemantics": {
        "description": "For Apple boarding passes only, a JSON object that uses key-value pairs to add rich, machine-readable data, such as `passengerName` and `seats`, that enhances passes. You can nest this object within `fields`.\n",
        "properties": {
          "boardingGroup": {
            "description": "A group number for boarding.",
            "type": "string"
          },
          "boardingSequenceNumber": {
            "description": "A sequence number for boarding.",
            "type": "string"
          },
          "boardingZone": {
            "description": "A zone number for boarding.",
            "type": "string"
          },
          "internationalDocumentsAreVerified": {
            "description": "Denotes whether the ticket/passenger has met all the requirements for international travel.",
            "type": "boolean"
          },
          "internationalDocumentsVerifiedDeclarationName": {
            "description": "The affirmation string that is displayed if the passenger meets the requirements for international travel.",
            "type": "string"
          },
          "membershipProgramName": {
            "description": "The name of a frequent flyer or loyalty program.",
            "type": "string"
          },
          "membershipProgramNumber": {
            "description": "The ticketed passenger's frequent flyer or loyalty number.",
            "type": "string"
          },
          "membershipProgramStatus": {
            "description": "The ticketed passenger's frequent flyer or loyalty program status.",
            "type": "string"
          },
          "passengerAirlineSSRs": {
            "description": "A list of airline-specific special service requests.",
            "items": {
              "anyOf": [
                {
                  "description": "The airline-specific service request.",
                  "title": "airline service request"
                }
              ]
            },
            "type": "array"
          },
          "passengerCapabilities": {
            "$ref": "#/components/schemas/passengerCapabilities"
          },
          "passengerEligibleSecurityPrograms": {
            "$ref": "#/components/schemas/securityPrograms",
            "description": "A list of security programs that the passenger is eligible for."
          },
          "passengerInformationSSRs": {
            "$ref": "#/components/schemas/passengerInformationSSRs"
          },
          "passengerName": {
            "$ref": "#/components/schemas/passengerNameSemanticsObject"
          },
          "passengerServiceSSRs": {
            "$ref": "#/components/schemas/passengerServiceSSRs"
          },
          "priorityStatus": {
            "description": "Additional priority status the ticketed passenger holds.",
            "type": "string"
          },
          "seats": {
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/seatSemanticsObject"
                }
              ]
            },
            "type": "array"
          },
          "ticketFareClass": {
            "description": "A localizable string that denotes the ticket fare class. This value displays as a badge on the boarding pass.",
            "type": "string"
          }
        },
        "required": [
          "passengerName"
        ],
        "title": "Passenger semantics object",
        "type": "object",
        "x-schema-tag": "Flights and boarding passes"
      },
      "passengerServiceSSRs": {
        "description": "A list of Special Service Requests (SSRs) for passengers; supports any valid four-letter IATA SSR code in addition to those listed.",
        "items": {
          "enum": [
            "wheelChair",
            "serviceAnimal",
            "carryOnPet",
            "unAccompaniedMinor"
          ],
          "type": "string"
        },
        "title": "Passenger service SSRs",
        "type": "array"
      },
      "passengers": {
        "description": "An array of objects, each object representing a passenger/seat on a flight.\nPassengers are a part of the payload for boarding pass adaptive links.\n",
        "items": {
          "properties": {
            "adaptiveLinkExternalId": {
              "description": "The external ID you want to assign to a passenger's adaptive link.\n",
              "type": "string"
            },
            "fields": {
              "properties": {
                "barcodeAltText": {
                  "$ref": "#/components/schemas/fields",
                  "description": "Like other pass creation operations, when providing barcode information,\nyou need only provide the value.\n"
                },
                "barcode_value": {
                  "$ref": "#/components/schemas/fields",
                  "description": "Like other pass creation operations, when providing barcode information,\nyou need only provide the value.\n"
                },
                "boardingDoor": {
                  "description": "The door the passenger uses to board the plane.",
                  "properties": {
                    "semantics": {
                      "$ref": "#/components/schemas/passengerSemantics",
                      "description": "Field-level passenger semantics.",
                      "x-apple": true
                    },
                    "value": {
                      "enum": [
                        "front",
                        "back"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "boardingGroup": {
                  "description": "The boarding group for the passenger.",
                  "properties": {
                    "semantics": {
                      "$ref": "#/components/schemas/passengerSemantics",
                      "description": "Field-level passenger semantics.",
                      "x-apple": true
                    },
                    "value": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "boardingPosition": {
                  "description": "The value of the boarding position.",
                  "properties": {
                    "semantics": {
                      "$ref": "#/components/schemas/passengerSemantics",
                      "description": "Field-level passenger semantics.",
                      "x-apple": true
                    },
                    "value": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "boardingPrivilegeImage": {
                  "description": "The URL of the image; recommended size is 80 px tall by 80-780 px wide.",
                  "properties": {
                    "value": {
                      "format": "url",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "confirmationCode": {
                  "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.\n",
                  "type": "string"
                },
                "eticketNumber": {
                  "description": "The eTicket Number for the passenger's boarding pass.",
                  "properties": {
                    "semantics": {
                      "$ref": "#/components/schemas/passengerSemantics",
                      "description": "Field-level passenger semantics.",
                      "x-apple": true
                    },
                    "value": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "frequentFlyerNumber": {
                  "description": "The passenger's frequent flyer number.",
                  "properties": {
                    "semantics": {
                      "$ref": "#/components/schemas/passengerSemantics",
                      "description": "Field-level passenger semantics.",
                      "x-apple": true
                    },
                    "value": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "frequentFlyerProgramName": {
                  "description": "The name of the frequent flyer program the passenger belongs to.",
                  "properties": {
                    "semantics": {
                      "$ref": "#/components/schemas/passengerSemantics",
                      "description": "Field-level passenger semantics.",
                      "x-apple": true
                    },
                    "value": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "passengerName": {
                  "description": "The name of the passenger as it will appear on the pass.",
                  "properties": {
                    "value": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "seatClass": {
                  "description": "The passenger's seat class.",
                  "properties": {
                    "semantics": {
                      "$ref": "#/components/schemas/passengerSemantics",
                      "description": "Field-level passenger semantics.",
                      "x-apple": true
                    },
                    "value": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "seatNumber": {
                  "description": "The seat number the passenger will sit in.",
                  "properties": {
                    "semantics": {
                      "$ref": "#/components/schemas/passengerSemantics",
                      "description": "Field-level passenger semantics.",
                      "type": "object",
                      "x-apple": true
                    },
                    "value": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "securityProgramLogo": {
                  "description": "The URL of the logo for the security program. Recommended size is 80 px tall and 80-780 px wide.\n",
                  "format": "url",
                  "type": "string"
                },
                "semantics": {
                  "$ref": "#/components/schemas/boardingPassSemantics",
                  "description": "Top-level semantics for a passenger, which can include passenger and/or flight semantics.\n"
                },
                "sequenceNumber": {
                  "description": "The sequence number on the boarding pass. This usually matches the sequence in which the passengers checked in.",
                  "properties": {
                    "semantics": {
                      "$ref": "#/components/schemas/passengerSemantics",
                      "description": "Field-level passenger semantics.",
                      "x-apple": true
                    },
                    "value": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "sharingStatus": {
                  "$ref": "#/components/schemas/sharingStatus"
                }
              },
              "required": [
                "passengerName",
                "confirmationCode"
              ],
              "type": "object"
            }
          },
          "type": "object"
        },
        "title": "Passengers",
        "type": "array",
        "x-schema-tag": "Flights and boarding passes"
      },
      "personalizationRequirements": {
        "properties": {
          "description": {
            "description": "A brief description of the rewards program that the recipient is signing up for. The description appears on the signup sheet, under the personalization logo.",
            "type": "string"
          },
          "imageUrl": {
            "description": "The URL of the image you want to appear at the top of the signup form. This image must be a 150 x 40 point PNG image.\n",
            "format": "url",
            "type": "string"
          },
          "requiredPersonalizationFields": {
            "description": "An array of strings representing fields that a customer must provide to sign up for your rewards/loyalty program. Some keys populate multiple fields in the personalization callback or on passes.\n\n* name - requires the user to enter their `fullName`. This also populates the `givenName` and `familyName` fields on passes and/or personalization callbacks.\n* postalCode - prompts the user for their postal code. This populates both `postalCode` and `ISOCountryCode` on passes and/or personalization callbacks.\n* emailAddress - requires the user's email address.\n* phoneNumber - requires the user's phone number.\n",
            "items": {
              "enum": [
                "name",
                "postalCode",
                "emailAddress",
                "phoneNumber"
              ],
              "type": "string"
            },
            "maxItems": 4,
            "minItems": 1,
            "type": "array"
          },
          "termsAndConditions": {
            "description": "The terms and conditions for the reward program. If present, this information appears after the user enters their personal information and taps Next. The user then has the option to agree to the terms, or to cancel the signup process.",
            "type": "string"
          }
        },
        "required": [
          "requiredPersonalizationFields",
          "description"
        ],
        "title": "Apple Pass personalization requirements",
        "type": "object",
        "x-schema-tag": "Template objects"
      },
      "projectId": {
        "description": "The ID of the wallet project.",
        "type": "integer",
        "x-inline-component": true
      },
      "projectPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/projectRequest"
          },
          {
            "properties": {
              "contextId": {
                "description": "Append this value to `go.urbanairship.com/projects/` to access your project.\n",
                "readOnly": true,
                "type": "string"
              },
              "createdAt": {
                "$ref": "#/components/schemas/createdAt"
              },
              "externalId": {
                "description": "The custom, external identifier of the project. This key only appears if you assigned an external ID to the project.",
                "type": "string"
              },
              "id": {
                "description": "The identifier for the project, used to reference the project in other payloads.",
                "readOnly": true,
                "type": "integer"
              },
              "templates": {
                "description": "An array of templates belonging to the project. When creating a new project, this array is empty.",
                "items": {
                  "allOf": [
                    {
                      "properties": {
                        "createdAt": {
                          "$ref": "#/components/schemas/createdAt"
                        },
                        "id": {
                          "$ref": "#/components/schemas/templateId"
                        },
                        "updatedAt": {
                          "$ref": "#/components/schemas/updatedAt"
                        }
                      },
                      "type": "object"
                    },
                    {
                      "$ref": "#/components/schemas/templateRequestHeaders"
                    }
                  ]
                },
                "readOnly": true,
                "type": "array"
              },
              "updatedAt": {
                "$ref": "#/components/schemas/updatedAt"
              }
            },
            "type": "object"
          }
        ],
        "description": "A project response includes all fields in a project request, along with identifiers for the project and a list of templates created within the project.",
        "title": "Project response",
        "x-schema-tag": "Project objects"
      },
      "projectRequest": {
        "description": "A project request determines the type of passes you can create and the types of barcode your passes will use.",
        "properties": {
          "description": {
            "description": "A description for the project.",
            "type": "string"
          },
          "name": {
            "description": "The name of your project.",
            "type": "string"
          },
          "projectType": {
            "$ref": "#/components/schemas/projectType"
          },
          "settings": {
            "$ref": "#/components/schemas/projectSettings"
          }
        },
        "required": [
          "name",
          "projectType",
          "description"
        ],
        "title": "Project request",
        "type": "object",
        "x-schema-tag": "Project objects"
      },
      "projectSettings": {
        "description": "Contains barcode information for the project.",
        "properties": {
          "barcode_alt_text": {
            "description": "Alternate text for the barcode. This text assists the user if they hover over the barcode or the barcode doesn't render.",
            "type": "string"
          },
          "barcode_default_value": {
            "description": "The default value for the barcode. If you do not set a new value when creating a pass, the pass will use this value.\n",
            "type": "string"
          },
          "barcode_encoding": {
            "description": "Barcode encoding is set at the project level and inherited by templates\nand passes.\n",
            "enum": [
              "iso-8859-1"
            ],
            "type": "string"
          },
          "barcode_label": {
            "description": "The title of the barcode; appears above the barcode in templates. You can change this value when creating or updating templates or passes.\n",
            "type": "string"
          },
          "barcode_type": {
            "description": "The format of the barcode supported by the project and resulting passes.",
            "enum": [
              "pdf417",
              "aztec",
              "code128",
              "qr",
              "upc-a",
              "ean-13",
              "code-39"
            ],
            "type": "string"
          }
        },
        "title": "Project Settings",
        "type": "object",
        "x-inline-component": true
      },
      "projectType": {
        "description": "The type of pass the template supports; matches the `type` setting for the parent project.\n",
        "enum": [
          "memberCard",
          "coupon",
          "boardingPass",
          "eventTicket",
          "generic",
          "loyalty",
          "giftCard"
        ],
        "type": "string",
        "x-inline-component": true
      },
      "publicUrl": {
        "description": "A public URL from which users can download a pass.\n\nFor Google Wallet, the public URL deep-links to the Google Wallet store with credentials to download a pass, facilitating pass installation without a browser window. When creating Google Wallet passes, this field is required and you must specify `type: single` in the request to create a pass. If the request does not contain a Public URL, the operation will not return a URL and users will not be able to access the resulting pass.\n\nFor Apple Wallet, this URL points to a .pkpass file. We recommend using a Public URL when creating Apple Wallet passes. If you do not provide a public URL, users will not be able to install the pass without the API key.\n",
        "example": {
          "type": "Multiple"
        },
        "properties": {
          "installs": {
            "description": "The number of users who have installed the pass from the URL specified in the `path` field.",
            "readOnly": true,
            "type": "integer"
          },
          "path": {
            "description": "The URL for the pass.",
            "type": "string"
          },
          "type": {
            "description": "Determines whether a user can access the link to install a pass one time\nor multiple times. The response indicates the number of times the publicUrl\nhas been used to install a pass.\n",
            "enum": [
              "single",
              "multiple"
            ],
            "type": "string"
          },
          "used": {
            "description": "If true, a user has accessed the `path` URL.",
            "readOnly": true,
            "type": "boolean"
          }
        },
        "required": [
          "type"
        ],
        "title": "Public URL",
        "type": "object",
        "x-inline-component": true
      },
      "requestTokenBasicAuth": {
        "properties": {
          "grant_type": {
            "enum": [
              "client_credentials"
            ],
            "type": "string"
          },
          "ipaddr": {
            "$ref": "#/components/schemas/ipaddr"
          },
          "scope": {
            "$ref": "#/components/schemas/oauthScope",
            "description": "A list of scopes to which the issued token will be entitled. Scopes can be sent as URL-encoded, space-delimited list (example: `scope=wpas%20wtmp`) or as a list as expected in a query parameter form (example: `scope=wpas&scope=wtmp`)."
          },
          "sub": {
            "$ref": "#/components/schemas/subject",
            "description": "A space-delimited set of identifiers for which subjects a token is allowed. An `app` subject is required. Example: `app:<YOUR_APP_KEY>`."
          }
        },
        "required": [
          "grant_type",
          "sub"
        ],
        "title": "Request token with Basic Auth",
        "type": "object",
        "x-inline-component": true
      },
      "requestTokenWithAssertion": {
        "properties": {
          "assertion": {
            "$ref": "#/components/schemas/assertionJwt",
            "description": "An encoded JWT that contains the required headers and claims and is signed with the client credentials' private key."
          },
          "grant_type": {
            "enum": [
              "client_credentials"
            ],
            "type": "string"
          }
        },
        "required": [
          "grant_type",
          "assertion"
        ],
        "title": "Request token with assertion",
        "type": "object",
        "x-inline-component": true
      },
      "scheduleNotificationObject": {
        "description": "Specifies notifications to passes or adaptive links at a particular date and time.",
        "properties": {
          "name": {
            "description": "A name for the schedule.",
            "type": "string"
          },
          "notify": {
            "description": "The notification you want to send to an `audience` or `pass`, generated from a `template` within the project. Cannot be used with the update object present as well.",
            "properties": {
              "audience": {
                "$ref": "#/components/schemas/audienceSelector"
              },
              "pass": {
                "properties": {
                  "notification": {
                    "$ref": "#/components/schemas/notificationRequest"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "schedule": {
            "properties": {
              "scheduled_time": {
                "description": "The ISO 8601 inclusive date, optionally including an offset, e.g., 2007-03-01T13:00:00+08:00. The value will be converted and stored as UTC.",
                "format": "date-time",
                "type": "string"
              },
              "url": {
                "description": "A URL to get the schedule object.",
                "format": "url",
                "readOnly": true,
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "title": "Schedule Notification Object",
        "type": "object",
        "x-inline-component": true
      },
      "scheduleUpdateObject": {
        "description": "Specifies updates to passes or adaptive links at a particular date and time.",
        "properties": {
          "name": {
            "description": "A name for the schedule.",
            "type": "string"
          },
          "schedule": {
            "properties": {
              "scheduled_time": {
                "description": "The ISO 8601 inclusive date, optionally including an offset, e.g., 2007-03-01T13:00:00+08:00. The value will be converted and stored as UTC.",
                "format": "date-time",
                "type": "string"
              }
            },
            "type": "object"
          },
          "update": {
            "description": "The updates you want to make to an `audience` or `pass`, generated from a `template` within the project. Cannot also use the \"notify\" object when using \"update\".",
            "properties": {
              "audience": {
                "$ref": "#/components/schemas/audienceSelector"
              },
              "pass": {
                "properties": {
                  "fields": {
                    "additionalProperties": {
                      "properties": {
                        "value": {
                          "description": "The value you want to change for a field on a pass.",
                          "type": "string"
                        }
                      },
                      "title": "Field Title (String)",
                      "type": "object"
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              },
              "url": {
                "description": "A URL to get the schedule object.",
                "format": "url",
                "readOnly": true,
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "title": "Schedule update object",
        "type": "object"
      },
      "seatSemanticsObject": {
        "description": "Seating information, including cabin class.",
        "properties": {
          "seatAisle": {
            "description": "The aisle that contains the seat.",
            "type": "string"
          },
          "seatDescription": {
            "description": "A description of the seat, such as a flat bed seat.",
            "type": "string"
          },
          "seatIdentifier": {
            "description": "The identifier code for the seat.",
            "type": "string"
          },
          "seatLevel": {
            "description": "The level that contains the seat.",
            "type": "string"
          },
          "seatNumber": {
            "description": "The number of the seat.",
            "type": "string"
          },
          "seatRow": {
            "description": "The row that contains the seat.",
            "type": "string"
          },
          "seatSection": {
            "description": "The section that contains the seat.",
            "type": "string"
          },
          "seatSectionColor": {
            "description": "A color associated with identifying the seat, specified as a CSS-style RGB triple, such as `rgb(23, 187, 82)`.",
            "type": "string"
          },
          "seatType": {
            "description": "The type of seat, such as reserved seating.",
            "type": "string"
          }
        },
        "title": "Passenger seat object",
        "type": "object"
      },
      "securityPrograms": {
        "description": "Security program names.",
        "items": {
          "anyOf": [
            {
              "description": "Wallet will display a TSA PreCheck icon on the boarding pass.",
              "enum": [
                "tsaPreCheck"
              ],
              "type": "string"
            },
            {
              "description": "If present, Wallet will display a TSA PreCheck Touchless ID icon on the boarding pass.",
              "enum": [
                "tsaPrecheckTouchlessId"
              ],
              "type": "string"
            },
            {
              "description": "One Stop Security.",
              "enum": [
                "oss"
              ],
              "type": "string"
            },
            {
              "description": "International to International.",
              "enum": [
                "iti"
              ],
              "type": "string"
            },
            {
              "description": "International to Domestic.",
              "enum": [
                "itd"
              ],
              "type": "string"
            },
            {
              "description": "Global Entry.",
              "enum": [
                "globalEntry"
              ],
              "type": "string"
            },
            {
              "description": "CLEAR",
              "enum": [
                "clear"
              ],
              "type": "string"
            }
          ],
          "type": "string"
        },
        "title": "Transit security programs",
        "type": "array"
      },
      "segmentSelector": {
        "anyOf": [
          {
            "description": "AND selector",
            "properties": {
              "and": {
                "items": {
                  "oneOf": [
                    {
                      "properties": {
                        "tag": {
                          "type": "string"
                        }
                      },
                      "title": "Tag Selector",
                      "type": "object"
                    },
                    {
                      "$ref": "#/components/schemas/segmentSelector"
                    }
                  ]
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          {
            "description": "OR selector",
            "properties": {
              "or": {
                "items": {
                  "oneOf": [
                    {
                      "properties": {
                        "tag": {
                          "type": "string"
                        }
                      },
                      "title": "Tag Selector",
                      "type": "object"
                    },
                    {
                      "$ref": "#/components/schemas/segmentSelector"
                    }
                  ]
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          {
            "description": "NOT selector",
            "properties": {
              "not": {
                "description": "Defines an event value to match.",
                "items": {
                  "properties": {
                    "tag": {
                      "type": "string"
                    }
                  },
                  "title": "Tag Selector",
                  "type": "object"
                }
              }
            }
          }
        ],
        "description": "Boolean tag selectors specifying a group of passes. You can nest `AND` and `OR` selectors.",
        "title": "Segment selector"
      },
      "sharingStatus": {
        "description": "A `field` determining whether passes can be shared across users, devices, or not at all. By default, there are no restrictions with regard to users or devices (`multipleHolders`). While this setting uses the same format as other `fields`, you only need to set the `value` within the object. Most other keys are irrelevant this setting, even though they appear in responses; this field should not be visible on passes, so you should not populate label, order, etc.\n\nOn iOS devices, `oneUserOneDevice` prohibits sharing (`\"sharingProhibited\": true`); all other values allow sharing.\n\nYou can override the template setting on Apple Wallet passes. If you set this field in an adaptive link payload, it will only apply to Apple Wallet passes resulting from the adaptive link; Google Wallet passes will always use the sharing setting set at the template level.\n",
        "properties": {
          "changeMessage": {
            "$ref": "#/components/schemas/changeMessage"
          },
          "value": {
            "default": "multipleHolders",
            "description": "Determines whether a pass supports sharing across users, devices, or both. iOS interprets this as a boolean setting: `oneUserOneDevice` prohibits sharing; all other values allow sharing.\n",
            "enum": [
              "multipleHolders",
              "oneUserAllDevices",
              "oneUserOneDevice"
            ],
            "type": "string"
          }
        },
        "required": [
          "value"
        ],
        "type": "object",
        "x-inline-component": true
      },
      "startDate": {
        "description": "The start date for a statistics report.",
        "format": "date",
        "pattern": "([12]\\d{3}/(0[1-9]|1[0-2])/(0[1-9]|[12]\\d|3[01]))",
        "type": "string",
        "x-inline-component": true
      },
      "statsActivityObject": {
        "description": "Represents activity for a template or project.",
        "properties": {
          "created": {
            "description": "The number of passes created.",
            "type": "integer"
          },
          "installed": {
            "description": "The number of passes that were installed.",
            "type": "integer"
          },
          "uninstalled": {
            "description": "The number of passes that were uninstalled.",
            "type": "integer"
          }
        },
        "type": "object",
        "x-inline-component": true
      },
      "subject": {
        "description": "A space-delimited set of identifiers for which subjects a token is allowed. Example: `app:<YOUR_APP_KEY>`\n  * `app`: May operate on the given app",
        "title": "Subject",
        "x-schema-tag": "OAuth"
      },
      "tagObject": {
        "properties": {
          "createdAt": {
            "$ref": "#/components/schemas/createdAt"
          },
          "id": {
            "description": "The ID of the tag, used to reference the tag.",
            "type": "integer"
          },
          "name": {
            "description": "The name of the tag.",
            "type": "string"
          }
        },
        "title": "Tag Object",
        "type": "object",
        "x-inline-component": true
      },
      "templateFieldOrder": {
        "default": 0,
        "description": "The order of fields with the same `fieldType` (Apple) or belonging to the same `module` (Google). If there are multiple fields with the same `fieldType`, order begins at 0. For fields oriented vertically, 0 appears at the top of the `fieldType` (Apple) or module (Google); for fields oriented horizontally, a field with an order of 0 appears in the left-most position.",
        "type": "integer",
        "x-inline-component": true
      },
      "templateFieldRequired": {
        "description": "Indicates whether or not the field is required on passes created from this template.",
        "type": "boolean",
        "x-inline-component": true
      },
      "templateFieldValue": {
        "description": "The default value for the field. The data type supported by\nthis field is determined by the `formatType`.",
        "oneOf": [
          {
            "type": "string"
          },
          {
            "type": "number"
          },
          {
            "type": "integer"
          }
        ],
        "x-inline-component": true
      },
      "templateId": {
        "description": "The identifier for the template. You can recall the template by ID in other operations.",
        "readOnly": true,
        "type": "integer",
        "x-inline-component": true
      },
      "templateRequestHeaders": {
        "description": "Meta information about templates; this object appears on all templates and identifies templates associated with a project.",
        "properties": {
          "deleted": {
            "$ref": "#/components/schemas/deleted"
          },
          "description": {
            "description": "A description for the template.",
            "type": "string"
          },
          "disabled": {
            "$ref": "#/components/schemas/disabled"
          },
          "expiryInfo": {
            "description": "Determine when passes generated from the template should expire.",
            "oneOf": [
              {
                "description": "Set the specific expiration date for passes generated from this template. Passes expire at 12:00 AM on the date you provide.",
                "properties": {
                  "expiryDate": {
                    "description": "The date when passes expire.",
                    "format": "date",
                    "type": "string"
                  },
                  "expiryTimezone": {
                    "description": "Passes expire at 12:00 AM in the time zone you set.",
                    "type": "string"
                  }
                },
                "title": "Expire on a date",
                "type": "object"
              },
              {
                "description": "Expire passes generated from this template after the specified number of minutes after creation.",
                "properties": {
                  "expiryDuration": {
                    "description": "The number of days after creation that passes will expire.",
                    "type": "integer"
                  }
                },
                "title": "Expire after",
                "type": "object"
              },
              {
                "description": "Passes generated from the template will never expire.",
                "properties": {
                  "expireNever": {
                    "description": "Any string value (or null) will prevent passes generated from this template from expiring.",
                    "type": "string"
                  }
                },
                "title": "Never expire",
                "type": "object"
              }
            ]
          },
          "name": {
            "description": "The name of the template.",
            "type": "string"
          },
          "projectId": {
            "$ref": "#/components/schemas/projectId"
          },
          "projectType": {
            "$ref": "#/components/schemas/projectType"
          },
          "type": {
            "$ref": "#/components/schemas/type"
          },
          "vendor": {
            "$ref": "#/components/schemas/vendor"
          },
          "vendorId": {
            "$ref": "#/components/schemas/vendorId"
          }
        },
        "required": [
          "name",
          "vendor",
          "vendorId"
        ],
        "title": "General template headers",
        "type": "object"
      },
      "textAlignment": {
        "description": "The alignment of text on the pass.",
        "enum": [
          "textAlignmentLeft",
          "textAlignmentCenter",
          "textAlignmentRight",
          "textAlignmentNatural"
        ],
        "type": "string",
        "x-inline-component": true
      },
      "type": {
        "description": "The type of pass the template supports. This value corresponds to the `projectType`.\n",
        "enum": [
          "memberCard",
          "coupon",
          "boardingPass",
          "eventTicket",
          "generic",
          "loyalty",
          "giftCard"
        ],
        "type": "string",
        "x-inline-component": true
      },
      "unauthorizedErrorResponseObject": {
        "description": "Authentication via the `Authorization` request header failed.",
        "properties": {
          "error": {
            "description": "Error code.",
            "enum": [
              "invalid_client"
            ],
            "type": "string"
          },
          "error_description": {
            "description": "A plain-text description of the error.",
            "type": "string"
          }
        },
        "required": [
          "error"
        ],
        "title": "Unauthorized",
        "type": "object",
        "x-inline-component": true
      },
      "universalLinksObject": {
        "description": "A list of key-value pairs that represents partner URLs.",
        "properties": {
          "accessibilityURL": {
            "description": "The URL for special assistance.",
            "format": "url",
            "type": "string"
          },
          "bagPolicyURL": {
            "description": "The URL for the bag policy information.",
            "format": "url",
            "type": "string"
          },
          "changeSeatURL": {
            "description": "The URL for seat change.",
            "format": "url",
            "type": "string"
          },
          "entertainmentURL": {
            "description": "The URL for inflight entertainment.",
            "format": "url",
            "type": "string"
          },
          "managementURL": {
            "description": "The URL for managing the reservation.",
            "format": "url",
            "type": "string"
          },
          "orderFoodURL": {
            "description": "The URL for ordering a meal.",
            "format": "url",
            "type": "string"
          },
          "purchaseAdditionalBaggageURL": {
            "description": "The URL for adding/purchasing additional bags.",
            "format": "url",
            "type": "string"
          },
          "purchaseLoungeAccessURL": {
            "description": "The URL for purchasing lounge access.",
            "format": "url",
            "type": "string"
          },
          "purchaseWifiURL": {
            "description": "The URL for purchasing inflight Wi-Fi.",
            "format": "url",
            "type": "string"
          },
          "registerServiceAnimalURL": {
            "description": "The URL for registering a service animal.",
            "format": "url",
            "type": "string"
          },
          "reportLostBagURL": {
            "description": "The URL for reporting a lost bag.",
            "format": "url",
            "type": "string"
          },
          "requestWheelchairURL": {
            "description": "The URL for requesting a wheelchair.",
            "format": "url",
            "type": "string"
          },
          "transitProviderEmail": {
            "description": "The URL for the airline email address.",
            "format": "email",
            "type": "string"
          },
          "transitProviderPhoneNumber": {
            "description": "The URL for the airline phone number.",
            "format": "url",
            "type": "string"
          },
          "transitProviderWebsiteURL": {
            "description": "The URL for the airline website.",
            "format": "url",
            "type": "string"
          },
          "upgradeURL": {
            "description": "The URL for upgrading a seat or fare.",
            "format": "url",
            "type": "string"
          }
        },
        "title": "Universal links",
        "type": "object"
      },
      "updatePassRequest": {
        "properties": {
          "beacons": {
            "description": "An array of beacon objects you want to update for this pass.",
            "items": {
              "$ref": "#/components/schemas/beacon"
            },
            "type": "array",
            "x-apple": true
          },
          "fields": {
            "additionalProperties": {
              "$ref": "#/components/schemas/fields",
              "title": "Field Name (String)"
            },
            "description": "The fields you want to update on the pass."
          },
          "headers": {
            "additionalProperties": {
              "$ref": "#/components/schemas/fields",
              "title": "Header Name (String)"
            },
            "description": "The headers you want to update for this pass."
          },
          "locations": {
            "description": "The locations you want to update for this pass. Location updates replace existing locations on the pass. When updating locations, you should provide all the locations that you want to remain on the pass.",
            "items": {
              "$ref": "#/components/schemas/locationObject"
            },
            "type": "array"
          },
          "semantics": {
            "$ref": "#/components/schemas/boardingPassSemantics",
            "description": "An object that defines structured metadata for an Apple Wallet pass using key-value pairs. These semantic tags provide contextual information to the system to enhance the user experience.",
            "type": "object"
          },
          "universalLinks": {
            "$ref": "#/components/schemas/universalLinksObject",
            "description": "An object containing key-value pairs of universal links where each key-value pair defines a universal link.",
            "type": "object"
          }
        },
        "title": "Update Wallet Pass",
        "type": "object",
        "x-inline-component": true
      },
      "updatedAt": {
        "description": "The date and time when the item was last updated.",
        "format": "date-time",
        "readOnly": true,
        "type": "string",
        "x-inline-component": true
      },
      "vendor": {
        "description": "The device vendor the template is designed for.\n",
        "enum": [
          "Apple",
          "Google"
        ],
        "type": "string",
        "x-inline-component": true
      },
      "vendorId": {
        "description": "Corresponds to the `vendor` the template supports. `1` indicates an Apple\ntemplate; `2` indicates a Google template.\n",
        "enum": [
          1,
          2
        ],
        "type": "integer",
        "x-inline-component": true
      }
    },
    "securitySchemes": {
      "basicOauth": {
        "description": "Authorization header containing the word `Basic` followed by a space and a Base64-encoded string generated from your OAuth client ID and client secret in `client_id:client_secret` format. For example, `Basic YXBwX2tleTptYXN0ZXJfc2VjcmV0`. Used only for requesting OAuth tokens. See [OAuth](/developer/rest-api/wallet/operations/oauth/).",
        "scheme": "basic",
        "type": "http",
        "x-display-name": "Basic Auth (OAuth)"
      },
      "httpBasic": {
        "description": "All Wallet API operations support [basic authorization](https://en.wikipedia.org/wiki/Basic_access_authentication). The authorization header contains the word `Basic` followed by a space and a Base64-encoded string generated from your project key and project secret in `projectKey:projectSecret` format. For example, `Basic YXBwX2tleTptYXN0ZXJfc2VjcmV0`.\n        \n  You can copy your project key and secret from your wallet project. Go to **Settings**, then **API**. For TLS and cipher requirements, see [TLS and supported ciphers](#tls-and-supported-ciphers) below.\n",
        "scheme": "basic",
        "type": "http",
        "x-display-name": "Basic Auth"
      },
      "oauth2Token": {
        "description": "Authorization header containing the word `Bearer` followed by a space and an OAuth 2.0 JWT bearer token provided by our authorization server. See [OAuth](/developer/rest-api/wallet/operations/oauth/). Make sure your requests are using the appropriate [domain in the base URL](/developer/rest-api/wallet/introduction/#servers).",
        "flows": {
          "clientCredentials": {
            "scopes": {
              "wadl": "Adaptive Links",
              "wevt": "Events",
              "wfli": "Flights",
              "wnot": "Notifications",
              "wpas": "Passes",
              "wprj": "Projects",
              "wrpt": "Statistics",
              "wsch": "Schedules",
              "wseg": "Segments",
              "wtmp": "Templates"
            },
            "tokenUrl": "/token"
          }
        },
        "type": "oauth2",
        "x-display-name": "OAuth 2.0",
        "x-scope-descriptions": {
          "wadl": "Manage adaptive links.",
          "wevt": "Manage events for event tickets.",
          "wfli": "Manage flights for boarding passes.",
          "wnot": "Send pass notifications.",
          "wpas": "Manage passes.",
          "wprj": "Manage projects.",
          "wrpt": "Read pass statistics.",
          "wsch": "Manage schedules.",
          "wseg": "Manage segments.",
          "wtmp": "Manage templates."
        }
      }
    },
    "x-wallet-authentication-supported-ciphers": "Only Transport Layer Security (TLS) 1.2 and 1.3 are supported for Wallet API endpoint access. The following ciphers are supported:\n\n* TLS_CHACHA20_POLY1305_SHA256\n* TLS_AES_256_GCM_SHA384\n* TLS_AES_128_GCM_SHA256\n* TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n* TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n* TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n\nIn an effort to make wallet projects as secure as possible, we've removed support for several legacy platforms:\n\n* Android and iOS devices running unsupported operating systems\n* Java 6 or lower\n* Java 7 and 8 *without* Unlimited Strength cipher libraries enabled\n* Windows XP, Windows 7, Server 2003, Server 2008, Server 2008 R2, and Internet Explorer 9 (or lower)"
  },
  "info": {
    "description": "\nThe Wallet API provides programmatic access to the Airship wallet service,\nwhere you can create passes for Apple Wallet and Google Wallet. Passes are:\n\n* Created from templates within a project. The project determines the types of templates and passes you create; your templates determine the style and default data for your passes.\n* Distributed as links—When creating a pass or an adaptive link, you are creating a link. Users tap this link (or scan a QR code representing the link, etc.) to install the pass on their device.\n* Customizable—Add relevant data to your users when they install your pass.\n* Updatable with relevant field and value changes. After users install your passes, you can update passes with relevant field and values so your users' passes are always up to date.\n\n\nFor a better understanding of Airship wallet projects and passes, see [Wallet basics](/guides/getting-started/wallet/basics/).\n\nSee the [Getting Started Guide](/guides/getting-started/wallet/set-up-project/) for help setting up an Airship wallet project.\n\n## API Request Format\n\nAll API requests are HTTP requests. For all requests with a body, the body may be in [JSON](https://www.json.org/json-en.html)\nformat or other formats like CSV as specified for the endpoint. The proper Content-Type for\nJSON is `application/json` and the proper content type for CSV is `text/csv`.\n\n## Date/Time Format\n\nAll date/time values are represented according to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) in UTC.\nA `T` separator is preferred but not required. It will be included in all date/time values generated by the API.\n\nExample: `2023-01-28T15:00-05:00`\n\n## Security {#intro-security}\n\n* Our APIs only work under 2048-bit HTTPS encrypted connections to ensure your data is private from client to server connections.\n* Access is authenticated through a unique secret API key which we provide to you in your wallet dashboard. It is your responsibility to keep this key well-guarded, as it represents your identity.\n* You will use your own Apple Pass Type Certificate or Google Pay certificate to sign production passes. \n\n## Specifying a version\n\n  The current version of the Wallet API is 1.2. The versioning for the Wallet API is currently distinct from the versioning for the Airship Engage API.\n\n\n  Always specify the version of the API you want to use by adding an HTTP header called\n   `Api-Revision`. The value of that header should be in the format x.y where x is the API version and y the sub-revision. For instance, 1.2 is for the /v1 API, revision 2.\n\n\n## External IDs\n\nMost endpoints support an `externalId` parameter in the path. While all assets\nwithin this API typically have an internal `id`, you can use the `externalId` parameter to grant custom identifiers to your assets — projects, templates, passes, etc. These identifiers can make your assets more recognizable and help you integrate with an external application or system.\n\n\nIf you want to use external IDs, you should use them for all assets — projects, templates, passes, etc.\n\n\nIn general you can support external IDs by appending `/id/{externalId}` to an endpoint path that would either take or generate a standard `id`.",
    "title": "Airship Wallet API",
    "version": "1.2"
  },
  "openapi": "3.0.0",
  "paths": {
    "/certificates": {
      "get": {
        "description": "Returns a list of certificates, including an array of templates that use the certificate.",
        "operationId": "getCertificates",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "$ref": "#/components/parameters/Content-Type"
          },
          {
            "description": "The vendor of certificate you want to return.",
            "in": "query",
            "name": "vendor",
            "schema": {
              "enum": [
                "Apple"
              ],
              "type": "string"
            }
          },
          {
            "description": "Indicates whether or not the certificate is enabled.",
            "in": "query",
            "name": "enabled",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Indicates the field to order results by.",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Indicates the page of results to return.",
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Indicates the number of results per page.",
            "in": "query",
            "name": "pageSize",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Indicates the direction in which to return results.",
            "in": "query",
            "name": "direction",
            "schema": {
              "enum": [
                "ASC",
                "DESC"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "certificates": {
                      "items": {
                        "$ref": "#/components/schemas/certificateObject"
                      },
                      "type": "array"
                    },
                    "count": {
                      "description": "The number of results on the current page.",
                      "type": "integer"
                    },
                    "nextPage": {
                      "description": "The url for the next page of results.",
                      "format": "url",
                      "type": "string"
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/paginationObject"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns an array of certificates."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "List certificates",
        "tags": [
          "Certificates"
        ]
      },
      "post": {
        "description": "Adds a new Apple Wallet certificate to the wallet system. If the specified certificate exists in our system, and the baseName and teamIdentifier match the existing certificate, we will renew/update the existing certificate.\n\n\nWhen adding a certificate, you must paste the contents of your p12 certificate into the certificate field in the request payload. You can get the contents of your p12 file with the two following commands:\n\n* `openssl base64 -in wallet-prod.p12 -out wallet-prod.pem`\n* `cat wallet-prod.pem | tr -d \"\\n\\r\" | less`\n\n\nThe response contains the ID of your new certificate. You will use the ID to perform subsequent actions (GET, PUT, or DELETE) against this certificate. The response will also contain other information gathered from the certificate. You can find information about these additional fields under Get Certificate.",
        "operationId": "addCertificate",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/certificateObject"
              }
            }
          }
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/certificateObject"
                }
              }
            },
            "description": "Returns the created certificate and new read only fields."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Add new certificate",
        "tags": [
          "Certificates"
        ]
      }
    },
    "/certificates/{id}": {
      "delete": {
        "description": "Removes a certificate from the system.",
        "operationId": "removeCertificate",
        "responses": {
          "204": {
            "description": "A successful request returns no content."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Remove certificate",
        "tags": [
          "Certificates"
        ]
      },
      "get": {
        "description": "Returns information about a certificate, including an array of templates that use the certificate.",
        "operationId": "getCertificate",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/certificateObject"
                }
              }
            },
            "description": "Returns information about the certificate specified in the request"
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Get certificate",
        "tags": [
          "Certificates"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the certificate you want to perform operations against.",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "put": {
        "description": "Updates a certificate. Note the following behaviors:\n\n\n* The following fields can be updated directly: `enabled`, `default`, `comment`, and `name`.\n* If fields `enabled` and `default` are not specified they won't be changed.\n* If fields `comment` and `name` are not specified, we assume the value needs to be removed. If you don't want to change the value, specify null values.\n* Some of the fields will be extracted from the certificate and will be updated indirectly: teamIdentifier and baseName.\n* The field `updatedAt` will change with each update.\n* The field `createdAt` cannot be changed.\n* If the user specifies an invalid id in the path or no certificate can be found we will return an error (see below).\n* Changing the default certificate is done by setting the new certificate `\"default\": true`.\n* A single certificate must be set as the default. You cannot set the current default certificate to `\"default\": false`.",
        "operationId": "updateCertificate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/certificateObject"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/certificateObject"
                }
              }
            },
            "description": "Returns the created certificate and new read only fields."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Update certificate",
        "tags": [
          "Certificates"
        ]
      }
    },
    "/events/project/id/{projectExternalId}/id/{eventExternalId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The external ID of the project you want to create the event in or of the project the existing event belongs to.",
          "explode": false,
          "in": "path",
          "name": "projectExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "A custom identifier for an event. This is the event you want to create, get, modify, or delete.\n",
          "explode": false,
          "in": "path",
          "name": "eventExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Create an event with external IDs.\n\n\nIf your request uses an `eventExternalId` already associated with an existing event, the call is treated as a `PUT`, and updates the existing event. As with the `PUT` method, any fields not contained in the request are unchanged.",
        "operationId": "createEventExternalId",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/eventRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/eventResponse"
                }
              }
            },
            "description": "The event was successfully created. A successful request returns the `eventId` and `eventExternalId` (if applicable) values, so you can reference the event in later operations."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wevt"
            ]
          }
        ],
        "summary": "Create event with external ID",
        "tags": [
          "Events"
        ]
      }
    },
    "/events/project/{projectId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project you want to create the event in.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Create an event.\n\n\nIf your request uses an `eventExternalId` already associated with an existing event, the call is treated as a `PUT`, and updates the existing event. As with the `PUT` method, any fields not contained in the request are unchanged.",
        "operationId": "createEvent",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/eventRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/eventResponse"
                }
              }
            },
            "description": "The event was successfully created. A successful request returns the `eventId` and `eventExternalId` (if applicable) values, so you can reference the event in later operations."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wevt"
            ]
          }
        ],
        "summary": "Create event",
        "tags": [
          "Events"
        ]
      }
    },
    "/events/project/{projectId}/passGroups/{passGroup}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project that the event belongs to. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{projectExternalId}`.\n",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "The pass group that you want to modify.",
          "explode": false,
          "in": "path",
          "name": "passGroup",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        }
      ],
      "put": {
        "description": "Update all of the events in a pass group.",
        "operationId": "updateEventsInPassGroup",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "fields": {
                    "additionalProperties": true,
                    "description": "Provide only the keys that you want to update from `fields` object of an [Event Request](/developer/rest-api/wallet/schemas/event-tickets/#eventrequest); any fields that you omit from the payload remain unchanged.",
                    "type": "object"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "Update fields common to multiple events.\n"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "events": {
                      "description": "Lists the events updated as a part of this pass group.",
                      "items": {
                        "properties": {
                          "eventTicketId": {
                            "description": "The Airship event ID for events updated as a part of this pass group.",
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "groupName": {
                      "description": "The pass group that you updated in this request.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The update was successful."
          },
          "400": {
            "description": "The request was malformed."
          },
          "404": {
            "description": "The project ID or pass group was not found."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wevt"
            ]
          }
        ],
        "summary": "Update events in a pass group",
        "tags": [
          "Events"
        ]
      }
    },
    "/events/project/{projectId}/{eventId}": {
      "delete": {
        "description": "Deletes the specified event.",
        "operationId": "deleteEvent",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ok": {
                      "description": "If true, the operation completed successfully.",
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The event was deleted."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wevt"
            ]
          }
        ],
        "summary": "Delete event",
        "tags": [
          "Events"
        ]
      },
      "get": {
        "description": "Returns information about a single event.",
        "operationId": "getEvent",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/eventResponse"
                }
              }
            },
            "description": "A successful request returns the `eventId` and `eventExternalId` (if applicable) values, so you can reference the event in later operations."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wevt"
            ]
          }
        ],
        "summary": "Get event",
        "tags": [
          "Events"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project that the event belongs to. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{projectExternalId}`.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "The event you want to get, update, or delete. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{eventId}` as `id/{eventExternalId}`.",
          "explode": false,
          "in": "path",
          "name": "eventId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        }
      ],
      "put": {
        "description": "Update any of the keys provided in the `fields` object of an [Event Request](/developer/rest-api/wallet/schemas/event-tickets/#eventrequest). Provide only the fields you want to update; any fields that you omit from the payload remain unchanged.\n",
        "operationId": "updateEvent",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "fields": {
                    "additionalProperties": true,
                    "type": "object"
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/eventResponse"
                }
              }
            },
            "description": "A successful request returns the complete, updated event object and the `eventId` and `eventExternalId` (if applicable) values, so you can reference the updated event in later operations."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wevt"
            ]
          }
        ],
        "summary": "Update event",
        "tags": [
          "Events"
        ]
      }
    },
    "/events/project/{projectId}/{eventId}/passGroups": {
      "get": {
        "description": "Returns a list of pass groups associated with an event.",
        "operationId": "listPassGroupsForEvent",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "eventId": {
                      "description": "The Airship-generated ID of the event in the request.",
                      "type": "integer"
                    },
                    "passGroups": {
                      "description": "An array of the pass groups that the event belongs to.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns a list of pass groups that an event is associated with."
          },
          "400": {
            "description": "Missing fields or malformed input."
          },
          "404": {
            "description": "The event or project cannot be found."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wevt"
            ]
          }
        ],
        "summary": "List pass groups for event",
        "tags": [
          "Events"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project that the event belongs to. Use the Airship-generated project ID or project's external ID.\nFor [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{projectExternalId}`.\n",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "The event you want modify groups for.  For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{eventId}` as `id/{eventExternalId}`.\n",
          "explode": false,
          "in": "path",
          "name": "eventId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Add an event to a pass group. You can target the group to make changes to multiple events.",
        "operationId": "addEventToPassGroup",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "passGroups": {
                    "description": "An array of pass groups that you want to create and add an event to. If an event already belongs to a pass group (string) in the array, it is ignored.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "eventId": {
                      "description": "The event added to the pass group.",
                      "type": "integer"
                    },
                    "passGroups": {
                      "description": "An array of pass groups that the event was added to.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The event was successfully added to one or more `passGroups`."
          },
          "400": {
            "description": "Missing or malformed input."
          },
          "404": {
            "description": "The event or project cannot be found."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wevt"
            ]
          }
        ],
        "summary": "Add event to pass group",
        "tags": [
          "Events"
        ]
      }
    },
    "/events/project/{projectId}/{eventId}/passGroups/{passGroup}": {
      "delete": {
        "description": "Removes an event from a pass group. The group specified in the path will no longer appear in the event's `passGroups` array, nor will you be able to make changes to the event by targeting the pass group.",
        "operationId": "removeEventFromPassGroup",
        "responses": {
          "200": {
            "description": "The event was removed from the pass group."
          },
          "400": {
            "description": "The project, event, or pass group was not found."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wevt"
            ]
          }
        ],
        "summary": "Remove event from pass group",
        "tags": [
          "Events"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project that the event belongs to. Use either the Airship-generated project ID or the external ID.\nFor [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{projectExternalId}`.\n",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "The event you want modify groups for. Use either the Airship-generated event ID or the external ID for the event.\nFor [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{eventId}` as `id/{eventExternalId}`.\n",
          "explode": false,
          "in": "path",
          "name": "eventId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "The pass group you want to remove the event from.",
          "in": "path",
          "name": "passGroup",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/events/project/{projectId}/{eventId}/passes": {
      "get": {
        "description": "List passes for an event.\n",
        "operationId": "getPassesByEvent",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "description": "The total number of passes associated with a event",
                      "type": "integer"
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/paginationObject"
                    },
                    "passes": {
                      "description": "The metadata for passes associated with the event. Each object in the array represents a pass.",
                      "items": {
                        "$ref": "#/components/schemas/passMetadata"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful request returns a paged list of passes for a particular event."
          },
          "404": {
            "description": "The event ID does not exist.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "List event passes",
        "tags": [
          "Event Passes"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project that the event belongs to.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "The event you want to get passes for.",
          "explode": false,
          "in": "path",
          "name": "eventId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "Find only passes matching the installation status.\n* `installed` — passes currently installed.\n* `uninstalled` — passes that have been uninstalled.\n* `been_installed` — passes that have been either installed or uninstalled.\n* `not_been_installed` — passes that have never been installed.\n",
          "in": "query",
          "name": "status",
          "schema": {
            "enum": [
              "installed",
              "uninstalled",
              "been_installed",
              "not_been_installed"
            ],
            "type": "string"
          }
        },
        {
          "description": "The number of passes per page. Defaults to 10.",
          "in": "query",
          "name": "pageSize",
          "schema": {
            "default": 10,
            "type": "integer"
          }
        },
        {
          "description": "The page of results you want to retrieve, starting at 1.",
          "in": "query",
          "name": "page",
          "schema": {
            "default": 1,
            "type": "integer"
          }
        },
        {
          "description": "The order you want passes returned in, defaulting to `id`.",
          "in": "query",
          "name": "order",
          "schema": {
            "default": "id",
            "enum": [
              "id",
              "createdAt",
              "updatedAt"
            ],
            "type": "string"
          }
        },
        {
          "description": "Determines whether to return values in ascending or descending order. Defaults to `DESC`.",
          "in": "query",
          "name": "direction",
          "schema": {
            "default": "DESC",
            "enum": [
              "ASC",
              "DESC"
            ],
            "type": "string"
          }
        }
      ]
    },
    "/flights/project/id/{projectExternalId}/id/passGroups/{passGroup}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project that the flight belongs to.\n",
          "explode": false,
          "in": "path",
          "name": "projectExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The pass group that you want to modify.",
          "explode": false,
          "in": "path",
          "name": "passGroup",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "put": {
        "description": "Update fields common to a group of flights. Provide only the keys that you want to update from `fields` object of an [flight Request](/developer/rest-api/wallet/schemas/flights-and-boarding-passes/#flightrequest); any fields that you omit from the payload remain unchanged.\nSee also [Update flights in a pass group](#operation-flights-project-projectid-passgroups-passgroup-put).\n",
        "operationId": "updateFlightsInPassGroupExternalId",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "fields": {
                    "additionalProperties": true,
                    "description": "Provide only the keys that you want to update from `fields` object of an [flight Request](/developer/rest-api/wallet/schemas/flights-and-boarding-passes/#flightrequest); any fields that you omit from the payload remain unchanged.",
                    "type": "object"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "Provide only the field(s) you want to update for all of the flights in the group."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "flights": {
                      "description": "Lists the flights updated as a part of this pass group.",
                      "items": {
                        "properties": {
                          "flightId": {
                            "description": "The Airship flight ID for flights updated as a part of this pass group.",
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "groupName": {
                      "description": "The pass group that you updated in this request.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The update was successful."
          },
          "400": {
            "description": "The request was malformed."
          },
          "404": {
            "description": "The project ID or pass group was not found."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wfli"
            ]
          }
        ],
        "summary": "Update flights with external ID in a pass group",
        "tags": [
          "Flights"
        ]
      }
    },
    "/flights/project/id/{projectExternalId}/id/{flightExternalId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project you want to create the flight in.",
          "explode": false,
          "in": "path",
          "name": "projectExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The external identifier you want to give to the flight.",
          "explode": false,
          "in": "path",
          "name": "flightExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Create flights with external ID. See also [Create flight](#operation-flights-project-projectid-post).\n",
        "operationId": "createFlightExternalId",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/flightRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/flightResponse"
                }
              }
            },
            "description": "A successful request returns the `flightId` and `flightExternalId` (if applicable) values, so you can reference the flight in later operations."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wfli"
            ]
          }
        ],
        "summary": "Create flight with external ID",
        "tags": [
          "Flights"
        ]
      }
    },
    "/flights/project/{projectId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project you want to create the flight in.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Create flights. See also [Create flight with external ID](#operation-flights-project-id-projectexternalid-id-flightexternalid-post).\n",
        "operationId": "createFlight",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/flightRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/flightResponse"
                }
              }
            },
            "description": "A successful request returns the `flightId` and `flightExternalId` (if applicable) values, so you can reference the flight in later operations."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wfli"
            ]
          }
        ],
        "summary": "Create flight",
        "tags": [
          "Flights"
        ]
      }
    },
    "/flights/project/{projectId}/passGroups/{passGroup}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project that the flight belongs to. Use either the Airship-generated project ID or the external ID.\n",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "The pass group that you want to modify.",
          "explode": false,
          "in": "path",
          "name": "passGroup",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        }
      ],
      "put": {
        "description": "Update all of the flights in a pass group. See also [Update flights with external ID in a pass group](#operation-flights-project-id-projectexternalid-id-passgroups-passgroup-put).\n",
        "operationId": "updateFlightsInPassGroup",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "fields": {
                    "additionalProperties": true,
                    "description": "Provide only the keys that you want to update from `fields` object of an [flight Request](/developer/rest-api/wallet/schemas/flights-and-boarding-passes/#flightrequest); any fields that you omit from the payload remain unchanged.",
                    "type": "object"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "Update fields common to a group of flights.\n"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "flights": {
                      "description": "Lists the flights updated as a part of this pass group.",
                      "items": {
                        "properties": {
                          "flightId": {
                            "description": "The Airship flight ID for flights updated as a part of this pass group.",
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "groupName": {
                      "description": "The pass group that you updated in this request.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The update was successful."
          },
          "400": {
            "description": "The request was malformed."
          },
          "404": {
            "description": "The project ID or pass group was not found."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wfli"
            ]
          }
        ],
        "summary": "Update flights in a pass group",
        "tags": [
          "Flights"
        ]
      }
    },
    "/flights/project/{projectId}/{flightId}": {
      "delete": {
        "description": "Deletes the specified flight.",
        "operationId": "deleteFlight",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ok": {
                      "description": "If true, the operation completed successfully.",
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The flight was deleted."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wfli"
            ]
          }
        ],
        "summary": "Delete flight",
        "tags": [
          "Flights"
        ]
      },
      "get": {
        "description": "Returns information for a single flight.",
        "operationId": "getFlight",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/flightResponse"
                }
              }
            },
            "description": "A successful request returns the `flightId` and `flightExternalId` (if applicable) values, so you can reference the flight in later operations."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wfli"
            ]
          }
        ],
        "summary": "Get flight",
        "tags": [
          "Flights"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project that the flight belongs to. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{projectExternalId}`.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "The flight you want to get, update, or delete. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{flightId}` as `id/{flightExternalId}`.",
          "explode": false,
          "in": "path",
          "name": "flightId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        }
      ],
      "put": {
        "description": "Update any of the keys provided in the `fields` object of a [Flight Request](/developer/rest-api/wallet/schemas/flights-and-boarding-passes/#flightrequest). Provide only the fields you want to update; any fields that you omit from the payload remain unchanged.\n",
        "operationId": "updateFlight",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/flightRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/flightResponse"
                }
              }
            },
            "description": "A successful request returns the complete, updated flight object and the `flightId` and `flightExternalId` (if applicable) values, so you can reference the updated flight in later operations."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wfli"
            ]
          }
        ],
        "summary": "Update flight",
        "tags": [
          "Flights"
        ]
      }
    },
    "/flights/project/{projectId}/{flightId}/passGroups": {
      "get": {
        "description": "Returns a list of pass groups associated with a flight.",
        "operationId": "listPassGroupsForFlight",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "flightId": {
                      "description": "The ID of the flight in the request.",
                      "type": "integer"
                    },
                    "passGroups": {
                      "description": "An array of the pass groups that the flight belongs to.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns a list of pass groups that a flight is associated with."
          },
          "400": {
            "description": "Missing fields or malformed input."
          },
          "404": {
            "description": "The flight or project cannot be found."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wfli"
            ]
          }
        ],
        "summary": "List pass groups for a flight",
        "tags": [
          "Flights"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project that the flight belongs to. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{projectExternalId}`.\n",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "The flight you want modify groups for. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{flightId}` as `id/{flightExternalId}`.\n",
          "explode": false,
          "in": "path",
          "name": "flightId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Add a flight to a pass group. You can target the group to make changes to multiple flights.",
        "operationId": "addFlightToPassGroup",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "passGroups": {
                    "description": "An array of pass groups that you want to create and add a flight to. If a pass group (string) in the array already exists, it is ignored.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "flightId": {
                      "description": "The Airship flight ID for the flight added to the pass group.",
                      "type": "integer"
                    },
                    "passGroups": {
                      "description": "An array of pass groups that the flight was added to.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "At least one pass group in the `passGroups` array was created."
          },
          "400": {
            "description": "Missing or malformed input."
          },
          "404": {
            "description": "The flight or project cannot be found."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wfli"
            ]
          }
        ],
        "summary": "Add flight to a pass group",
        "tags": [
          "Flights"
        ]
      }
    },
    "/flights/project/{projectId}/{flightId}/passGroups/{passGroup}": {
      "delete": {
        "description": "Removes a flight from a pass group. The group specified in the path will no longer appear in the flight's `passGroups` array, nor will you be able to make changes to the flight by targeting the pass group.",
        "operationId": "removeFlightFromPassGroup",
        "responses": {
          "200": {
            "description": "The flight was successfully removed from the pass group."
          },
          "400": {
            "description": "The project, flight, or pass group was not found."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wfli"
            ]
          }
        ],
        "summary": "Remove flight from pass group",
        "tags": [
          "Flights"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project that the flight belongs to. Use either the Airship-generated project ID or the external ID. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{projectExternalId}`.\n",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "The flight you want modify groups for. Use either the Airship-generated flight ID or the external ID for the flight. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{flightId}` as `id/{flightExternalId}`.\n",
          "explode": false,
          "in": "path",
          "name": "flightId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "The pass group you want to remove the flight from.",
          "in": "path",
          "name": "passGroup",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/flights/project/{projectId}/{flightId}/passes": {
      "get": {
        "description": "List passes for Flight.\n",
        "operationId": "getPassesByFlight",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "description": "The total number of passes associated with a flight",
                      "type": "integer"
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/paginationObject"
                    },
                    "passes": {
                      "description": "The metadata for passes associated with the flight. Each object in the array represents a pass.",
                      "items": {
                        "$ref": "#/components/schemas/passMetadata"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful request returns a paged list of passes for a particular flight."
          },
          "404": {
            "description": "The flight ID does not exist.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "List flight passes",
        "tags": [
          "Flight Passes"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project that the flight belongs to.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "The flight you want to get passes for.",
          "explode": false,
          "in": "path",
          "name": "flightId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "Find only passes matching the installation status.\n\n* `installed` — passes currently installed.\n* `uninstalled` — passes that have been uninstalled.\n* `been_installed` — passes that have been either installed or uninstalled.\n* `not_been_installed` — passes that have never been installed.\n",
          "in": "query",
          "name": "status",
          "schema": {
            "enum": [
              "installed",
              "uninstalled",
              "been_installed",
              "not_been_installed"
            ],
            "type": "string"
          }
        },
        {
          "description": "The number of passes per page. Defaults to 10.",
          "in": "query",
          "name": "pageSize",
          "schema": {
            "default": 10,
            "type": "integer"
          }
        },
        {
          "description": "The page of results you want to retrieve, starting at 1.",
          "in": "query",
          "name": "page",
          "schema": {
            "default": 1,
            "type": "integer"
          }
        },
        {
          "description": "The order you want passes returned in, defaulting to `id`.",
          "in": "query",
          "name": "order",
          "schema": {
            "default": "id",
            "enum": [
              "id",
              "createdAt",
              "updatedAt"
            ],
            "type": "string"
          }
        },
        {
          "description": "Determines whether to return values in ascending or descending order. Defaults to `DESC`.",
          "in": "query",
          "name": "direction",
          "schema": {
            "default": "DESC",
            "enum": [
              "ASC",
              "DESC"
            ],
            "type": "string"
          }
        }
      ]
    },
    "/links/adaptive": {
      "get": {
        "description": "Returns a list of adaptive links.",
        "operationId": "listAdaptiveLinks",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "links": {
                      "items": {
                        "$ref": "#/components/schemas/adaptiveLinkResponse"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns a list of all adaptive links for the account."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "List Adaptive Links",
        "tags": [
          "Adaptive Links"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        }
      ],
      "post": {
        "description": "If a template for a device type is not provided, the adaptive link will not be able to create passes for that device. Visiting the adaptive link URL associated with an unsupported device will redirect to the landingPageUrl, if present.\n\nTemplates can be provided either implicitly as part of Dynamic Link objects or explicitly with IDs. So either one or both of iosPassLinkId and androidPassLinkId must be present, or payload must be present along with one or both of iosTemplateId and androidTemplateId.",
        "operationId": "createAdaptiveLink",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/adaptiveLinkRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/adaptiveLinkResponse"
                }
              }
            },
            "description": "A successful request results in an adaptive link."
          },
          "404": {
            "description": "Could not find template(s), or could not find or create Dynamic Link object(s).               \n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wadl"
            ]
          }
        ],
        "summary": "Create Adaptive Link",
        "tags": [
          "Adaptive Links"
        ]
      }
    },
    "/links/adaptive/multiple/project/{projectId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project you want to create the boarding pass in.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Create boarding pass or event ticket adaptive links. Creating boarding passes\nor event tickets is similar to other adaptive links, with a few additional\nitems in the request and response payloads.\n",
        "operationId": "createBoardingPassOrEventTicketAdaptiveLinks",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/eventTicketRequest"
                  },
                  {
                    "$ref": "#/components/schemas/boardingPassRequest"
                  }
                ]
              }
            }
          },
          "description": "An adaptive link request where the `fields` object can\ninclude an array of flights or events, each with an array of `passengers`\nor `attendees`, respectively.\n"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "links": {
                      "description": "An array of adaptive links.",
                      "items": {
                        "oneOf": [
                          {
                            "$ref": "#/components/schemas/boardingPassResponse"
                          },
                          {
                            "$ref": "#/components/schemas/eventTicketResponse"
                          }
                        ]
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful request returns an array of adaptive links. Each object in\nthe array represents an individual passenger or attendee in the request\npayload. Passes in the response appear in same order as objects in\nin the `flights` or `events` array.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wadl"
            ]
          }
        ],
        "summary": "Create boarding pass or event ticket Adaptive Links",
        "tags": [
          "Adaptive Links"
        ]
      }
    },
    "/links/adaptive/project/id/{projectExternalId}/id/{adaptiveLinkExternalId}": {
      "get": {
        "description": "Get an adaptive link with an external ID from a project that also has an external ID.",
        "operationId": "getAdaptiveLinkExternalProjectId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/adaptiveLinkResponse"
                }
              }
            },
            "description": "Lists urls and available passes for an individual link."
          },
          "404": {
            "description": "The project or adaptive link does not exist.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wadl"
            ]
          }
        ],
        "summary": "Get Adaptive Link from project",
        "tags": [
          "Adaptive Links with external IDs"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The external ID of the project containing an adaptive link.",
          "explode": false,
          "in": "path",
          "name": "projectExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The custom identifier for an adaptive link.",
          "explode": false,
          "in": "path",
          "name": "adaptiveLinkExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Create an adaptive link in a project that also has an external ID. The adaptiveLinkExternalID you use in the path becomes the ID for your new adaptive link.",
        "operationId": "createAdaptiveLinkExternalProjectId",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/adaptiveLinkRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/adaptiveLinkResponse"
                }
              }
            },
            "description": "A successful request results in an adaptive link."
          },
          "404": {
            "description": "Could not find project, or could not find or create Dynamic Link object(s).      \n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wadl"
            ]
          }
        ],
        "summary": "Create Adaptive Link in project",
        "tags": [
          "Adaptive Links with external IDs"
        ]
      }
    },
    "/links/adaptive/project/id/{projectExternalId}/id/{adaptiveLinkExternalId}/passes": {
      "get": {
        "description": "List passes for an adaptive link for an external project.\n",
        "operationId": "getPassesByAdaptiveLinkForExternalProject",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "description": "The total number of passes associated with an adaptive link.",
                      "type": "integer"
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/paginationObject"
                    },
                    "passes": {
                      "description": "The metadata for passes associated with the adaptive link. Each object in the array represents a pass.",
                      "items": {
                        "$ref": "#/components/schemas/passMetadata"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful request returns a paged list of passes for a particular adaptive link."
          },
          "404": {
            "description": "The project ID or adaptive link external ID does not exist.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wadl"
            ]
          }
        ],
        "summary": "List passes for an Adaptive Link for an external project",
        "tags": [
          "Adaptive Links"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The external ID of the project containing an adaptive link.",
          "explode": false,
          "in": "path",
          "name": "projectExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The adaptive link external ID used for pass creation.",
          "explode": false,
          "in": "path",
          "name": "adaptiveLinkExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "Find only passes matching the installation status.\n\n* `installed` — passes currently installed.\n* `uninstalled` — passes that have been uninstalled.\n* `been_installed` — passes that have been either installed or uninstalled.\n* `not_been_installed` — passes that have never been installed.\n* `unknown` — passes that have an unknown status.\n",
          "in": "query",
          "name": "status",
          "schema": {
            "enum": [
              "installed",
              "uninstalled",
              "been_installed",
              "not_been_installed",
              "unknown"
            ],
            "type": "string"
          }
        }
      ]
    },
    "/links/adaptive/project/id/{projectExternalId}/id/{adaptiveLinkExternalId}/passes/id/{passExternalId}": {
      "get": {
        "description": "Get a pass with an external ID that was created from an adaptive link with an external ID.",
        "operationId": "getPassFromAdaptiveLinkExternalId",
        "parameters": [
          {
            "description": "The external ID of the pass you want to get.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "passes": {
                      "description": "The metadata for passes associated with the adaptive link. Each object in the array represents a pass.",
                      "items": {
                        "$ref": "#/components/schemas/passMetadata"
                      },
                      "maxItems": 2,
                      "minItems": 1,
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns an array up to two passes created from the adaptive link — one for each template supported by the adaptive link.\n"
          },
          "404": {
            "description": "The project, adaptive link, or pass ID does not exist.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Get pass from Adaptive Link",
        "tags": [
          "Adaptive Links with external IDs"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The external ID of the project containing the adaptive link.",
          "explode": false,
          "in": "path",
          "name": "projectExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The adaptive link passes were created from.",
          "explode": false,
          "in": "path",
          "name": "adaptiveLinkExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "put": {
        "description": "Update a pass with an external ID that was created from an adaptive link with an external ID. You need only provide the fields and headers you want to update for the pass; all other information will remain unchanged.\n",
        "operationId": "updatePassesFromAdaptiveLinkExternalId",
        "parameters": [
          {
            "description": "The external ID of the pass you want to update.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/updatePassRequest"
              }
            }
          },
          "description": "Provide only the fields or headers that you want to update for the specified pass.\n\n\nLocations operate as a `set` operation. The array of pass locations is replaced by the locations you provide in an update; if you want to add to the locations on the pass, you must provide both the current locations and the locations you want to add in the payload.\n"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "tickets": {
                      "items": {
                        "properties": {
                          "ticketId": {
                            "description": "A ticket you can use to reference this operation for status, troubleshooting, or logging purposes.",
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "maxItems": 2,
                      "minItems": 1,
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns a ticket IDs corresponding to the templates the adaptive link generated passes from. For example, if the pass was installed on both Android and iOS devices, the response will include two tickets — one to update passes supported by each template."
          },
          "404": {
            "description": "The project, adaptive link, or pass ID does not exist.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Update passes from Adaptive Link for an external project",
        "tags": [
          "Adaptive Links with external IDs"
        ]
      }
    },
    "/links/adaptive/project/{projectId}/id/{adaptiveLinkExternalId}": {
      "get": {
        "description": "Get an adaptive link with an external ID.",
        "operationId": "getAdaptiveLinkExternalId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/adaptiveLinkResponse"
                }
              }
            },
            "description": "Lists urls and available passes for an individual link."
          },
          "404": {
            "description": "The project or adaptive link does not exist.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wadl"
            ]
          }
        ],
        "summary": "Get Adaptive Link",
        "tags": [
          "Adaptive Links with external IDs"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the project, generated by Airship, containing the adaptive link.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The custom identifier for the adaptive link.",
          "explode": false,
          "in": "path",
          "name": "adaptiveLinkExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Create an adaptive link with an external ID. The adaptiveLinkExternalID you use in the path becomes the ID for your new adaptive link.",
        "operationId": "createAdaptiveLinkExternalId",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/adaptiveLinkRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/adaptiveLinkResponse"
                }
              }
            },
            "description": "A successful request results in an adaptive link."
          },
          "404": {
            "description": "Could not find or create Dynamic Link object(s).      \n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wadl"
            ]
          }
        ],
        "summary": "Create Adaptive Link",
        "tags": [
          "Adaptive Links with external IDs"
        ]
      }
    },
    "/links/adaptive/project/{projectId}/id/{adaptiveLinkExternalId}/passes": {
      "get": {
        "description": "List passes for an adaptive link for a project.\n",
        "operationId": "getPassesByAdaptiveLinkForProject",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "description": "The total number of passes associated with an adaptive link.",
                      "type": "integer"
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/paginationObject"
                    },
                    "passes": {
                      "description": "The metadata for passes associated with the adaptive link. Each object in the array represents a pass.",
                      "items": {
                        "$ref": "#/components/schemas/passMetadata"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful request returns a paged list of passes for a particular adaptive link."
          },
          "404": {
            "description": "The project ID or adaptive link external ID does not exist.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "List passes for an Adaptive Link for a project",
        "tags": [
          "Adaptive Links"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the project, generated by Airship, containing the adaptive link.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The adaptive link external ID used for pass creation.",
          "explode": false,
          "in": "path",
          "name": "adaptiveLinkExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "Find only passes matching the installation status.\n\n* `installed` — passes currently installed.\n* `uninstalled` — passes that have been uninstalled.\n* `been_installed` — passes that have been either installed or uninstalled.\n* `not_been_installed` — passes that have never been installed.\n* `unknown` — passes that have an unknown status.\n",
          "in": "query",
          "name": "status",
          "schema": {
            "enum": [
              "installed",
              "uninstalled",
              "been_installed",
              "not_been_installed",
              "unknown"
            ],
            "type": "string"
          }
        }
      ]
    },
    "/links/adaptive/projects/{projectId}": {
      "get": {
        "description": "Returns a list of adaptive links for a project.",
        "operationId": "listAdaptiveLinksForProject",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "links": {
                      "items": {
                        "$ref": "#/components/schemas/adaptiveLinkResponse"
                      },
                      "maxItems": 1000,
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns a list of all adaptive links for a project."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wadl"
            ]
          }
        ],
        "summary": "List Adaptive Links for a project",
        "tags": [
          "Adaptive Links"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the project.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The maximum items to return per page. Defaults to 10.",
          "in": "query",
          "name": "pageSize",
          "schema": {
            "default": 10,
            "type": "integer"
          }
        },
        {
          "description": "The token for the next page of results.",
          "in": "query",
          "name": "nextPageToken",
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/links/adaptive/projects/{projectId}/templates/{templateId}": {
      "get": {
        "description": "Returns a list of adaptive links for a template.",
        "operationId": "listAdaptiveLinksForTemplate",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "links": {
                      "items": {
                        "$ref": "#/components/schemas/adaptiveLinkResponse"
                      },
                      "maxItems": 1000,
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns a list of all adaptive links for a template."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wadl"
            ]
          }
        ],
        "summary": "List Adaptive Links for a template",
        "tags": [
          "Adaptive Links"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the project.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The ID of the template.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The maximum items to return per page. Defaults to 10.",
          "in": "query",
          "name": "pageSize",
          "schema": {
            "default": 10,
            "type": "integer"
          }
        },
        {
          "description": "The token for the next page of results.",
          "in": "query",
          "name": "nextPageToken",
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/links/adaptive/{adaptiveLinkId}": {
      "delete": {
        "description": "Deletes an adaptive link.",
        "operationId": "deleteAdaptiveLink",
        "responses": {
          "200": {
            "description": "The adaptive link was successfully deleted. A successful operation returns no content."
          },
          "404": {
            "description": "Could not find an entry with specified `adaptiveLinkId`.    \n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wadl"
            ]
          }
        ],
        "summary": "Delete Adaptive Link",
        "tags": [
          "Adaptive Links"
        ]
      },
      "get": {
        "description": "Returns information about a single adaptive link.",
        "operationId": "getAdaptiveLink",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/adaptiveLinkResponse"
                }
              }
            },
            "description": "Lists urls and available passes for an individual link."
          },
          "404": {
            "description": "Could not find an entry with specified `adaptiveLinkId`.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wadl"
            ]
          }
        ],
        "summary": "Get Adaptive Link",
        "tags": [
          "Adaptive Links"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the adaptive link.",
          "explode": false,
          "in": "path",
          "name": "adaptiveLinkId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "put": {
        "description": "Updates an individual adaptive link. You can provide any part of an adaptive link body. Adaptive link fields that you do not provide in this request remain unchanged.",
        "operationId": "updateAdaptiveLink",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/adaptiveLinkRequest"
              }
            }
          },
          "description": "A request specifies templates and other information about, and limits for, passes created from the adaptive link. If you provide a single template, then the adaptive link functions for either iOS or Android devices and sends users of the other device type to a landing page."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/adaptiveLinkResponse"
                }
              }
            },
            "description": "A successful request results in an adaptive link."
          },
          "404": {
            "description": "Could not find templates or Dynamic Link object(s).      \n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wadl"
            ]
          }
        ],
        "summary": "Update Adaptive Link",
        "tags": [
          "Adaptive Links"
        ]
      }
    },
    "/links/adaptive/{adaptiveLinkId}/passes": {
      "get": {
        "description": "List passes for an adaptive link.\n",
        "operationId": "getPassesByAdaptiveLink",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "description": "The total number of passes associated with an adaptive link.",
                      "type": "integer"
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/paginationObject"
                    },
                    "passes": {
                      "description": "The metadata for passes associated with the adaptive link. Each object in the array represents a pass.",
                      "items": {
                        "$ref": "#/components/schemas/passMetadata"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful request returns a paged list of passes for a particular adaptive link."
          },
          "404": {
            "description": "The adaptive link ID does not exist.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "List passes for an Adaptive Link",
        "tags": [
          "Passes",
          "Adaptive Links"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The adaptive link ID used for pass creation.",
          "explode": false,
          "in": "path",
          "name": "adaptiveLinkId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "Find only passes matching the installation status.\n\n* `installed` — passes currently installed.\n* `uninstalled` — passes that have been uninstalled.\n* `been_installed` — passes that have been either installed or uninstalled.\n* `not_been_installed` — passes that have never been installed.\n",
          "in": "query",
          "name": "status",
          "schema": {
            "enum": [
              "installed",
              "uninstalled",
              "been_installed",
              "not_been_installed"
            ],
            "type": "string"
          }
        },
        {
          "description": "The number of passes per page. Defaults to 10.",
          "in": "query",
          "name": "pageSize",
          "schema": {
            "default": 10,
            "type": "integer"
          }
        },
        {
          "description": "The page of results you want to retrieve, starting at 1.",
          "in": "query",
          "name": "page",
          "schema": {
            "default": 1,
            "type": "integer"
          }
        },
        {
          "description": "The order you want passes returned in, defaulting to `id`.",
          "in": "query",
          "name": "order",
          "schema": {
            "default": "id",
            "enum": [
              "id",
              "createdAt",
              "updatedAt"
            ],
            "type": "string"
          }
        },
        {
          "description": "Determines whether to return values in ascending or descending order. Defaults to `DESC`.",
          "in": "query",
          "name": "direction",
          "schema": {
            "default": "DESC",
            "enum": [
              "ASC",
              "DESC"
            ],
            "type": "string"
          }
        }
      ]
    },
    "/links/adaptive/{adaptiveLinkId}/passes/id/{passExternalId}": {
      "get": {
        "description": "Get passes with an external IDs that were created from an adaptive link.\n",
        "operationId": "getPassesExternalId",
        "parameters": [
          {
            "description": "The external ID of the pass you want to get.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "passes": {
                      "description": "The metadata for passes associated with the adaptive link. Each object in the array represents a pass.",
                      "items": {
                        "$ref": "#/components/schemas/passMetadata"
                      },
                      "maxItems": 2,
                      "minItems": 1,
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns an array up to two passes created from the adaptive link — one for each template supported by the adaptive link.\n"
          },
          "404": {
            "description": "The adaptive link or pass ID does not exist.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Get passes from Adaptive Link",
        "tags": [
          "Adaptive Links with external IDs"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The adaptive link passes were created from.",
          "explode": false,
          "in": "path",
          "name": "adaptiveLinkId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "put": {
        "description": "Update a pass with an external ID that was created from an adaptive link. You need only provide the fields and headers you want to update for the pass; all other information will remain unchanged.\n",
        "operationId": "updatePassesExternalId",
        "parameters": [
          {
            "description": "The external ID of the pass you want to update.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/updatePassRequest"
              }
            }
          },
          "description": "Provide only the fields or headers that you want to update for the specified pass.\n\n\nLocations operate as a `set` operation. The array of pass locations is replaced by the locations you provide in an update; if you want to add to the locations on the pass, you must provide both the current locations and the locations you want to add in the payload.\n"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "tickets": {
                      "items": {
                        "properties": {
                          "ticketId": {
                            "description": "A ticket you can use to reference this operation for status, troubleshooting, or logging purposes.",
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "maxItems": 2,
                      "minItems": 1,
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns a ticket IDs corresponding to the templates the adaptive link generated passes from. For example, if the pass was installed on both Android and iOS devices, the response will include two tickets — one to update passes supported by each template.\n"
          },
          "404": {
            "description": "The adaptive link or pass ID does not exist. \n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Update passes from Adaptive Link",
        "tags": [
          "Adaptive Links with external IDs"
        ]
      }
    },
    "/pass": {
      "get": {
        "description": "List passes that your user account is responsible for. You can provide an optional template parameter, returning passes created from a particular template.",
        "operationId": "getPasses",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The `id` of the template you want to look up.",
            "in": "query",
            "name": "templateId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Find only passes matching the installation status.\n\n* `installed` — passes currently installed.\n* `uninstalled` — passes that have been uninstalled.\n* `been_installed` — passes that have been either installed or uninstalled.\n* `not_been_installed` — passes that have never been installed.\n",
            "in": "query",
            "name": "status",
            "schema": {
              "enum": [
                "installed",
                "uninstalled",
                "been_installed",
                "not_been_installed"
              ],
              "type": "string"
            }
          },
          {
            "description": "The number of passes per page. Defaults to 10.",
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 10,
              "type": "integer"
            }
          },
          {
            "description": "The page of results you want to retrieve, starting at 1.",
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "type": "integer"
            }
          },
          {
            "description": "The order you want passes returned in, defaulting to `id`.",
            "in": "query",
            "name": "order",
            "schema": {
              "default": "id",
              "enum": [
                "id",
                "createdAt",
                "updatedAt"
              ],
              "type": "string"
            }
          },
          {
            "description": "Determines whether to return values in ascending or descending order. Defaults to `DESC`.",
            "in": "query",
            "name": "direction",
            "schema": {
              "default": "DESC",
              "enum": [
                "ASC",
                "DESC"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "description": "The total number of passes associated with the template.",
                      "type": "integer"
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/paginationObject"
                    },
                    "passes": {
                      "description": "The metadata for passes associated with the template. Each object in the array represents a pass.",
                      "items": {
                        "$ref": "#/components/schemas/passMetadata"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful request returns a paged list of passes created from a particular template."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "List passes",
        "tags": [
          "Passes"
        ]
      }
    },
    "/pass/adaptive": {
      "get": {
        "description": "Generates a multi-pass bundle from an Adaptive Link.\n",
        "operationId": "generateMultiPassFromAdaptiveLink",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "description": "A publicUrl for Android users or the landing page URL if the device type was set to `web` or was not specified.",
                  "type": "object"
                }
              },
              "application/vnd.apple.pkpass": {
                "schema": {
                  "description": "A .pkpass file for iOS users.",
                  "type": "object"
                }
              }
            },
            "description": "Requests for iOS passes return a .pkpass file. Requests for Android passes redirect to a Google Pay URL containing the Google pass JSON Web Token (JWT). Requests for `web` devices or without a device type specified return the landing page URL that a user can access to manually select a device type and install the pass."
          },
          "404": {
            "description": "Could not find an entry with specified `adaptiveLinkId`.\n"
          }
        },
        "summary": "Generate multiple passes from a single Adaptive Link",
        "tags": [
          "Adaptive Links"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "Comma-separated Adaptive Link IDs to bundle.",
          "in": "query",
          "name": "ids",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "description": "The device type the user needs to install.\nOnly required when targeting a specific platform, otherwise, if a device type is not specified in the query, Airship detects the device type from the request headers. If the device type cannot be detected, Airship redirects the request to a landing page URL provided by the client as part of the Adaptive Link metadata. In your landing page, provide buttons that link to the explicit device-specific URLs for iOS and Android pass generation. For example, `/pass/adaptive?ids={comma_separated_adaptive_link_ids}&deviceType=ios`.\n",
          "in": "query",
          "name": "deviceType",
          "required": true,
          "schema": {
            "enum": [
              "ios",
              "android",
              "web"
            ],
            "type": "string"
          }
        }
      ]
    },
    "/pass/adaptive/{adaptiveLinkId}/{deviceType}": {
      "get": {
        "description": "Generates a pass from an adaptive link.\n\n\nWhen generating passes this way, you can append request parameters mapping to pass fields to the URL to add or update values to the pass at creation time. While this document lists reserved parameters, you can provide the `fieldName=value` for any field contained in the adaptive link.\n\n\nIf you configured your adaptive link object with the `isPersonalized` flag set to false (or the flag is absent), the first request will create a pass, and subsequent requests will create new instances of this same pass. If the `isPersonalized` flag is true, every request will create a new pass. If a request includes url-encoded parameters, the `isPersonalized` flag is considered true and Airship will always create a new pass for every request (instead of a pass instance).\n",
        "operationId": "generatePassFromAdaptiveLink",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "description": "A publicUrl for Android users or the landing page URL if the device type was set to `web` or was not specified.",
                  "type": "object"
                }
              },
              "application/vnd.apple.pkpass": {
                "schema": {
                  "description": "A .pkpass file for iOS users.",
                  "type": "object"
                }
              }
            },
            "description": "Requests for iOS passes return a .pkpass file. Requests for Android passes redirect to a Google Pay URL containing the Google pass JSON Web Token (JWT). Requests for `web` devices or without a device type specified return the landing page URL that a user can access to manually select a device type and install the pass."
          },
          "404": {
            "description": "Could not find an entry with specified `adaptiveLinkId`.\n"
          }
        },
        "summary": "Generate pass from Adaptive Link",
        "tags": [
          "Adaptive Links"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The identifier of the adaptive link you want to create a pass from.",
          "in": "path",
          "name": "adaptiveLinkId",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "description": "The device type the user needs to install.\nOnly required when targeting a specific platform, otherwise, if a device type is not specified in the path, Airship detects the device type from the request headers. If the device type cannot be detected, Airship redirects the request to a landing page URL provided by the client as part of the adaptive link metadata. In this landing page, provide buttons that link to the explicit device-specific URLs for iOS and Android pass generation. For example, `/pass/adaptive/{adaptiveLinkId}/{ios}`.\n",
          "in": "path",
          "name": "deviceType",
          "required": true,
          "schema": {
            "enum": [
              "ios",
              "android",
              "web"
            ],
            "type": "string"
          }
        },
        {
          "description": "Sets the barcode value for the new pass.",
          "in": "query",
          "name": "barcode",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "description": "The alternative text for the barcode on the pass. If unspecified, the barcode value is used as the barcodeAltText.",
          "in": "query",
          "name": "barcodeAltText",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "description": "Tags you want to associate with the pass. Multiple tags may be separated by `~`, e.g., `&tags=tag1~tag2~tag3`.",
          "in": "query",
          "name": "tags",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "description": "The external_id you want to set for this pass.",
          "in": "query",
          "name": "exid",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "description": "The latitude of the device installing the pass, used to calculate distance to locations specified in the adaptive link.",
          "in": "query",
          "name": "lat",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "description": "The longitude of the device installing the pass, used to calculate distance to locations specified in the adaptive link.",
          "in": "query",
          "name": "long",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "description": "The value you want to set for the NFC message field on the pass.",
          "in": "query",
          "name": "nfc",
          "required": false,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/pass/download": {
      "get": {
        "description": "Download multiple Apple Wallet passes bundled into a single .pkpasses file, using their pass IDs provided as a comma-separated query parameter. Direct the output to a file with a .zip extension. This is a utility API to help you debug passes. To download multiple passes using external IDs, see [Download multiple Apple Wallet passes in a single .pkpasses file by external ID](#operation-pass-template-templateid-download-get).\n\nSee [Apple's developer documentation](https://developer.apple.com/wallet/) for information about .pkpass files and contents.",
        "operationId": "getAppleWalletPasses",
        "responses": {
          "200": {
            "description": "Returns the .pkpasses file as a .zip extension."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Download multiple Apple Wallet passes in a single .pkpasses file",
        "tags": [
          "Apple Passes Only"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "One or more pass IDs (comma separated) that should be included in the download.",
          "explode": false,
          "in": "query",
          "name": "passIds",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/pass/id/{externalId}": {
      "put": {
        "description": "Update the specified pass. You need only include the fields that you want to update for the pass.\n\nDo not use the response payload from a `GET` to update a pass, as it contains information from both the pass itself and the template used to create the pass, and you cannot update a template from the `/v1/pass endpoint`. You should only populate the JSON Parameters below. Within the headers and fields objects, these are the changeMessage, value, and label fields.\n\n\nYou can update `locations` on a pass, but doing so will replace all locations on the pass. See the Location Object for more about the fields you should provide in the locations array.",
        "operationId": "updatePassExternalId",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The external ID of the pass you want to modify.",
            "explode": false,
            "in": "path",
            "name": "externalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "properties": {
                      "templates": {
                        "description": "Include an array of templates IDs, required to identify individual passes if there are multiple passes for the external ID in the path. If there are multiple passes for the external ID and you do not specify the templates corresponding to the passes you want to update, your request will return a 400.\n",
                        "items": {
                          "type": "integer"
                        },
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  {
                    "$ref": "#/components/schemas/updatePassRequest"
                  }
                ]
              }
            }
          },
          "description": "Provide only the fields you want to update.\n\n\nLocations operate as a `set` operation. The array of pass locations is replaced by the locations you provide in an update; if you want to add to the locations on the pass, you must provide both the current locations and the locations you want to add in the payload."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "ticketId": {
                          "description": "A ticket you can use to reference this operation for status, troubleshooting, or logging purposes.\n",
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    },
                    {
                      "items": {
                        "properties": {
                          "ticketId": {
                            "description": "A ticket you can use to reference this operation for status, troubleshooting, or logging purposes.\n",
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    }
                  ]
                }
              }
            },
            "description": "A response returns one or more [`ticketId`](/developer/rest-api/wallet/operations/tickets/) values, each referencing the pass update operation. If your request does not include the `templates` array, the response includes a single `ticketId`. If your request includes the `templates` array, the response is an array of of ticket objects, corresponding to the order of templates in the array.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Update pass",
        "tags": [
          "Passes with external IDs"
        ],
        "x-note": "You can also update a pass to include an expiration date using the `expirationDate` key."
      }
    },
    "/pass/id/{externalId}/stats": {
      "get": {
        "description": "Returns statistics for a pass with an external ID, including the total number of installs and uninstalls. The response payload lists the internal wallet ID for the template rather than the external ID.\n\n\nThis endpoint does not count repeated actions by the same user.\n",
        "operationId": "getPassStatisticsExternalId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "installed": {
                      "description": "The number of installed passes with this external ID.",
                      "type": "integer"
                    },
                    "templates": {
                      "description": "The individual pass statistics for each template used to create passes with this external ID. Each object in the array represents a template.",
                      "items": {
                        "properties": {
                          "id": {
                            "description": "The template used to create passes with this external ID.",
                            "type": "integer"
                          },
                          "installed": {
                            "description": "The number of installed passes based on this template.",
                            "type": "integer"
                          },
                          "uninstalled": {
                            "description": "The number of uninstalled passes based on this template.",
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "total": {
                      "description": "A count of the total number of passes with this external ID.",
                      "type": "integer"
                    },
                    "uninstalled": {
                      "description": "The number of uninstalled passes with this external ID.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns a summary of statistics for the pass."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wrpt"
            ]
          }
        ],
        "summary": "Pass statistics with external ID",
        "tags": [
          "Statistics"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The external ID of the pass you want to return statistics for.",
          "in": "path",
          "name": "externalId",
          "required": true,
          "schema": {
            "type": "integer"
          }
        }
      ]
    },
    "/pass/id/{passExternalId}/viewJSONPass": {
      "get": {
        "description": "View the JSON of an Apple Wallet Pass. The Airship request payload is different from the JSON payload contained in an Apple Wallet pass. You can use this endpoint to view the JSON payload as passed to Apple Wallet.\n\nSee [Apple's developer documentation](https://developer.apple.com/wallet/) for information about Apple Wallet payloads.",
        "operationId": "getAppleWalletPassJsonExternalId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "Returns JSON as passed to Apple Wallet."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "View Apple Wallet JSON with external ID",
        "tags": [
          "Apple Passes Only"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The custom identifier of the pass you want to return Apple Wallet JSON for.",
          "explode": false,
          "in": "path",
          "name": "passExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ]
    },
    "/pass/id/{templateExternalId}/id/{passExternalId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The external ID of the template you want to create your pass from.",
          "explode": false,
          "in": "path",
          "name": "templateExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The external ID that you want to give your pass.",
          "explode": false,
          "in": "path",
          "name": "passExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Create a pass from the specified template and give it a custom identifier. You can use this custom ID to perform operations against the pass in addition to the standard, unique `id` given by the Wallet API.",
        "operationId": "createPassFromTemplateExternalId",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "discriminator": {
                  "propertyName": "vendor"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/createPassAppleWalletRequest"
                  },
                  {
                    "$ref": "#/components/schemas/createPassAndroidPayRequest"
                  }
                ]
              }
            }
          },
          "description": "Create a pass; pass composition varies by vendor."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "discriminator": {
                    "propertyName": "vendor"
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/createPassAppleWalletResponse"
                    },
                    {
                      "$ref": "#/components/schemas/createPassAndroidPayResponse"
                    }
                  ]
                }
              }
            },
            "description": "A response is a populated pass and meta information about the pass. The pass response includes fields that are read only, some of which are populated directly from the template specified in the request."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Create pass from a template",
        "tags": [
          "Passes with external IDs"
        ]
      }
    },
    "/pass/template/id/{templateExternalId}/id/{passExternalId}/linkedPasses": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The external ID of the pass template.",
          "explode": false,
          "in": "path",
          "name": "templateExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The external ID of the pass you want to link additional passes to.",
          "explode": false,
          "in": "path",
          "name": "passExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Link additional passes to a user's Google Wallet pass, identified by external template ID and external pass ID. Linked passes appear automatically in the user's wallet. See [Google Wallet Auto Linked Passes](/guides/wallet/user-guide/create-links/auto-linked-passes/).",
        "operationId": "autoLinkedPassesForPassAndTemplateExternalId",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/linkedPasses"
              }
            }
          },
          "description": "Auto Linked Passes"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "400": {
            "description": "The request was malformed."
          },
          "404": {
            "description": "The pass does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Auto link passes to Google Pass with external template ID",
        "tags": [
          "Google Passes Only"
        ]
      }
    },
    "/pass/template/{templateId}/download": {
      "get": {
        "description": "Download multiple Apple Wallet passes bundled into a single .pkpasses file, using their external IDs provided as a comma-separated query parameter and a template ID. Direct the output to a file with a .zip extension. This is a utility API to help you debug passes. To download multiple passes using pass IDs, see [Download multiple Apple Wallet passes in a single .pkpasses file](#operation-pass-download-get).\n\nSee [Apple's developer documentation](https://developer.apple.com/wallet/) for information about .pkpass files and contents.\n",
        "operationId": "getAppleWalletMultiPassForTemplateExternalId",
        "responses": {
          "200": {
            "description": "Returns the .pkpasses file as a .zip extension."
          },
          "404": {
            "description": "The pass or template ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Download multiple Apple Wallet passes in a single .pkpasses file by external ID",
        "tags": [
          "Apple Passes Only"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the template the pass will be or was created from. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{templateId}` as `id/{templateExternalId}`.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "description": "The external IDs (comma separated) of the passes that you want in the download.",
          "explode": false,
          "in": "query",
          "name": "exids",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/pass/template/{templateId}/id/{passExternalId}": {
      "delete": {
        "description": "Delete a pass with an external ID.",
        "operationId": "deletePassFromTemplateExternalId",
        "parameters": [
          {
            "description": "The external ID of the pass you want to delete.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "passId": {
                      "$ref": "#/components/schemas/passId"
                    },
                    "status": {
                      "description": "Indicates that the pass was deleted.",
                      "enum": [
                        "deleted"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The pass was successfully deleted."
          },
          "404": {
            "description": "The pass or template ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Delete pass",
        "tags": [
          "Passes with external IDs"
        ],
        "x-note": "The Delete function does not remove passes from the end-user's device, but removes from our system. Deleted passes no longer count towards billing. See [Editing Wallet Pass Expiration](/guides/wallet/user-guide/updating-passes/edit-expiration/) to deactivate the pass on the end-user's device."
      },
      "get": {
        "description": "Get a pass with an external ID.",
        "operationId": "getPassFromTemplateExternalId",
        "parameters": [
          {
            "description": "The custom ID assigned to the pass.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "discriminator": {
                    "propertyName": "vendor"
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/createPassAppleWalletResponse"
                    },
                    {
                      "$ref": "#/components/schemas/createPassAndroidPayResponse"
                    }
                  ]
                }
              }
            },
            "description": "A response is a populated pass and meta information about the pass. The pass response includes fields that are read only, some of which are populated directly from the template specified in the request.\n"
          },
          "404": {
            "description": "The pass or template ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Get pass",
        "tags": [
          "Passes with external IDs"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the template the pass will be or was created from.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Create a pass from the specified template and give it a custom identifier. You can use this custom ID to perform operations against the pass like you would use the standard, unique `id` given by the Wallet API.",
        "operationId": "createPassExternalId",
        "parameters": [
          {
            "description": "The external ID you want to assign to the new pass.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "discriminator": {
                  "propertyName": "vendor"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/createPassAppleWalletRequest"
                  },
                  {
                    "$ref": "#/components/schemas/createPassAndroidPayRequest"
                  }
                ]
              }
            }
          },
          "description": "Create a pass; pass composition varies by vendor."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "discriminator": {
                    "propertyName": "vendor"
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/createPassAppleWalletResponse"
                    },
                    {
                      "$ref": "#/components/schemas/createPassAndroidPayResponse"
                    }
                  ]
                }
              }
            },
            "description": "A response is a populated pass and meta information about the pass. The pass response includes fields that are read only, some of which are populated directly from the template specified in the request."
          },
          "404": {
            "description": "The pass or template ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Create pass",
        "tags": [
          "Passes with external IDs"
        ]
      },
      "put": {
        "description": "Update a pass with an external ID.",
        "operationId": "updatePassFromTemplateExternalId",
        "parameters": [
          {
            "description": "The external ID of the pass you want to modify.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "discriminator": {
                  "propertyName": "vendor"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/createPassAppleWalletRequest"
                  },
                  {
                    "$ref": "#/components/schemas/createPassAndroidPayRequest"
                  }
                ]
              }
            }
          },
          "description": "Update a pass. You can provide any of the fields or headers used when creating a pass to update the pass.\n"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "400": {
            "description": "The request was malformed."
          },
          "404": {
            "description": "The pass or template ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Update pass for a template",
        "tags": [
          "Passes with external IDs"
        ]
      }
    },
    "/pass/template/{templateId}/id/{passExternalId}/beacons": {
      "get": {
        "description": "Lists location beacons assigned to the specified Apple Wallet pass.\n",
        "operationId": "getBeaconsForPassExternalId",
        "parameters": [
          {
            "description": "The template of the Apple Wallet pass that you want to get beacons from.",
            "explode": false,
            "in": "path",
            "name": "templateId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          },
          {
            "description": "The external ID of the Apple Wallet pass you want to get beacons for.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "beacons": {
                      "description": "An array of objects, each representing a beacon associated with the Apple Wallet pass.\n",
                      "items": {
                        "$ref": "#/components/schemas/beacon"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "An array of beacons belonging to the pass."
          },
          "404": {
            "description": "The pass or template ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "List beacons on Apple Wallet pass",
        "tags": [
          "Apple Passes Only"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        }
      ],
      "put": {
        "description": "Add or replace beacons on the specified Apple Wallet pass with an external ID.",
        "operationId": "addReplaceBeaconsForPassExternalId",
        "parameters": [
          {
            "description": "The template of the Apple Wallet pass that you want to apply beacons to.",
            "explode": false,
            "in": "path",
            "name": "templateId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          },
          {
            "description": "The external ID of the Apple Wallet pass you want to apply beacons to.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "beacons": {
                    "description": "An array of objects, each representing a beacon you want to add to an Apple Wallet pass.\n",
                    "items": {
                      "$ref": "#/components/schemas/beacon"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "An array of beacons that you want to associate with the pass.",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "A ticket you can use to reference this operation for status, troubleshooting, or logging purposes.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful call results in a ticket to apply beacons to the pass."
          },
          "404": {
            "description": "The pass or template ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Add or update beacons for Apple Wallet pass",
        "tags": [
          "Apple Passes Only"
        ]
      }
    },
    "/pass/template/{templateId}/id/{passExternalId}/download": {
      "get": {
        "description": "Download an Apple Wallet pass as a .pkpass file, using its external ID and template ID. Direct the output to a file with a .zip extension. This is a utility API to help you debug passes. To download a pass using its pass ID, see [Download an Apple Wallet .pkpass](#operation-pass-passid-download-get).\n\n\nSee [Apple's developer documentation](https://developer.apple.com/wallet/) for information about .pkpass files and contents.\n",
        "operationId": "getAppleWalletPassForTemplateExternalId",
        "responses": {
          "200": {
            "description": "Returns the .pkpass file as a .zip extension."
          },
          "404": {
            "description": "The pass or template ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Download an Apple Wallet .pkpass by external ID",
        "tags": [
          "Apple Passes Only"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The template used to create the pass.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The external ID of the pass you want to download.",
          "explode": false,
          "in": "path",
          "name": "passExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ]
    },
    "/pass/template/{templateId}/id/{passExternalId}/linkedPasses": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The `id` of the pass template.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The external ID of the pass you want to link additional passes to.",
          "explode": false,
          "in": "path",
          "name": "passExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Link additional passes to a user's Google Wallet pass, identified by template ID and external pass ID. Linked passes appear automatically in the user's wallet. See [Google Wallet Auto Linked Passes](/guides/wallet/user-guide/create-links/auto-linked-passes/).",
        "operationId": "autoLinkedPassesForPassExternalId",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/linkedPasses"
              }
            }
          },
          "description": "Auto Linked Passes"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "400": {
            "description": "The request was malformed."
          },
          "404": {
            "description": "The pass does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Auto link passes to Google Pass with external ID",
        "tags": [
          "Google Passes Only"
        ]
      }
    },
    "/pass/template/{templateId}/id/{passExternalId}/location/{locationId}": {
      "delete": {
        "description": "Delete the specified location from a pass using an external ID.",
        "operationId": "deleteLocationFromPassFromTemplateExternalId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "locations": {
                      "items": {
                        "$ref": "#/components/schemas/locationObject"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Success."
          },
          "404": {
            "description": "The pass ID, template ID, or location does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Delete locations from pass",
        "tags": [
          "Passes with external IDs"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The template of the pass that you want to delete locations from.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The external ID of the pass you want to delete locations from.",
          "explode": false,
          "in": "path",
          "name": "passExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The location you want to remove from the pass.",
          "explode": false,
          "in": "path",
          "name": "locationId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ]
    },
    "/pass/template/{templateId}/id/{passExternalId}/locations": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The template of the pass that you want to add locations to.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The external ID of the pass you want to add locations to.",
          "explode": false,
          "in": "path",
          "name": "passExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Add the locations to the specified pass.",
        "operationId": "addLocationsToPassFromTemplateExternalId",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "locations": {
                    "items": {
                      "$ref": "#/components/schemas/locationObject"
                    },
                    "type": "array"
                  }
                }
              }
            }
          },
          "description": "Set locations for the pass."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "properties": {
                      "passLocationId": {
                        "description": "The identifier for a location.",
                        "type": "integer"
                      },
                      "value": {
                        "$ref": "#/components/schemas/locationObject"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Returns `passLocationId` for each location on the pass. Use this value to identify locations in other location-based operations."
          },
          "404": {
            "description": "The pass or template ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Add locations to pass",
        "tags": [
          "Passes with external IDs"
        ]
      }
    },
    "/pass/template/{templateId}/id/{passExternalId}/message": {
      "get": {
        "description": "Returns an array of messages associated with the specified pass.",
        "operationId": "getMessagesForGooglePassExternalId",
        "parameters": [
          {
            "description": "The template of the Google Pass that you want to get messages from.",
            "explode": false,
            "in": "path",
            "name": "templateId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          },
          {
            "description": "The external ID of the Google Pass you want to get messages for.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "messages": {
                      "description": "An array of messages associated with the pass.",
                      "items": {
                        "$ref": "#/components/schemas/googlePayMessageResponse"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful response returns details for the added messages."
          },
          "404": {
            "description": "The pass or template ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Get messages for Google Pass with external ID",
        "tags": [
          "Google Passes Only"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        }
      ],
      "post": {
        "description": "Add messages to Google Wallet passes.",
        "operationId": "addMessageToGooglePassExternalId",
        "parameters": [
          {
            "description": "The template of the Google Pass that you want to apply messages to.",
            "explode": false,
            "in": "path",
            "name": "templateId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          },
          {
            "description": "The external ID of the Google Pass you want to apply messages to.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "body": {
                    "description": "The message body text.",
                    "type": "string"
                  },
                  "endTime": {
                    "description": "The date-time when the notification will end. If you do not set an end time, the notification displays indefinitely.",
                    "properties": {
                      "date": {
                        "format": "date-time",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "header": {
                    "description": "The header text for the message",
                    "type": "string"
                  },
                  "messageType": {
                    "description": "Use `expirationNotification` to warn users of expiring messages, and `text` for all other notifications. `expirationNotification` is based on the `start` value in the `displayInterval`; the maximum display interval is 30 days from now. If the expiration start date is more than 30 days from now, the message will not appear until the 30-day mark.\n",
                    "enum": [
                      "expirationNotification",
                      "text"
                    ],
                    "type": "string"
                  },
                  "startTime": {
                    "description": "The date-time when the notification will begin appearing to users.",
                    "properties": {
                      "date": {
                        "format": "date-time",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "A valid request contains one message for the pass."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlePayMessageResponse"
                }
              }
            },
            "description": "A successful response returns details for the added message."
          },
          "404": {
            "description": "The pass or template ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Add message to Google Pass with external ID",
        "tags": [
          "Google Passes Only"
        ]
      }
    },
    "/pass/template/{templateId}/id/{passExternalId}/notify": {
      "delete": {
        "description": "Removes notification field and message from the back of the pass.",
        "operationId": "deletePassNotificationByExternalId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Notification is being deleted. The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "404": {
            "description": "The pass does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wnot"
            ]
          }
        ],
        "summary": "Delete notification by pass with external ID",
        "tags": [
          "Push Notifications"
        ]
      },
      "parameters": [
        {
          "description": "The template ID for the pass you want to send or delete notification for.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The custom identifier of the pass you want to send or delete notification for.",
          "explode": false,
          "in": "path",
          "name": "passExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Send a notification to a pass. Delivers lock screen notification through the wallet app and presents notification field and message on the back of the pass.",
        "operationId": "sendPassNotificationByExternalId",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/notificationRequest"
              }
            }
          },
          "description": "Send notification to a pass."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Notification is being sent. The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "404": {
            "description": "The pass does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wnot"
            ]
          }
        ],
        "summary": "Send notification by pass with external ID",
        "tags": [
          "Push Notifications"
        ]
      },
      "x-weight": 2
    },
    "/pass/template/{templateId}/id/{passExternalId}/tags": {
      "get": {
        "description": "List tags assigned to the specified pass. See also [List tags for pass](#operation-pass-passid-tags-get).",
        "operationId": "getTagsForPassExternalId",
        "parameters": [
          {
            "description": "The template of the pass that you want to get tags for.",
            "explode": false,
            "in": "path",
            "name": "templateId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          },
          {
            "description": "The external ID of the pass you want to list tags for.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "tags": {
                      "description": "An array of tags associated with the pass.",
                      "items": {
                        "$ref": "#/components/schemas/tagObject"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "An array of tags belonging to the pass."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "List tags for pass with external ID",
        "tags": [
          "Tags"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        }
      ],
      "put": {
        "description": "Assign or update tags on a pass with an external ID.",
        "operationId": "updateTagsForPassExternalId",
        "parameters": [
          {
            "description": "The template of the pass that you want to apply tags to.",
            "explode": false,
            "in": "path",
            "name": "templateId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          },
          {
            "description": "The external ID of the pass you want to apply tags to.",
            "explode": false,
            "in": "path",
            "name": "passExternalId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": "{\"tags\":[\"aaa-bbb-ccc\"]}",
              "schema": {
                "$ref": "#/components/schemas/addTagsToPassrequest",
                "example": {
                  "tags": [
                    "aaa-bbb-ccc"
                  ]
                }
              }
            }
          },
          "description": "An array of tags that you want to associate with the pass.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "mappings": {
                      "description": "The number of tags added.",
                      "type": "integer"
                    },
                    "newTags": {
                      "description": "A list of tags successfully added to the pass.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Lists the tags added to the pass."
          },
          "404": {
            "description": "The pass or template ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Update tags for pass with external ID",
        "tags": [
          "Tags"
        ]
      }
    },
    "/pass/{id}": {
      "delete": {
        "description": "Delete the specified pass.",
        "operationId": "deletePass",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The `id` of the pass you want to delete.",
            "explode": false,
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "passId": {
                      "$ref": "#/components/schemas/passId"
                    },
                    "status": {
                      "description": "Indicates that the pass was deleted.",
                      "enum": [
                        "deleted"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The pass was successfully deleted."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Delete pass",
        "tags": [
          "Passes"
        ],
        "x-note": "The Delete function does not remove passes from the end-user's device, but removes from our system. Deleted passes no longer count towards billing. See [Editing Wallet Pass Expiration](/guides/wallet/user-guide/updating-passes/edit-expiration/) to deactivate the pass on the end-user's device."
      },
      "get": {
        "description": "Get the specified pass. This endpoint will return the external ID of a pass, but only if there is one associated with it.",
        "operationId": "getPass",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The `id` of the pass you want to look up.",
            "explode": false,
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/createPassAppleWalletResponse"
                    },
                    {
                      "$ref": "#/components/schemas/createPassAndroidPayResponse"
                    }
                  ]
                }
              }
            },
            "description": "Returns a complete pass, including headers and fields on the pass and metadata about the pass."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Get pass",
        "tags": [
          "Passes"
        ]
      },
      "post": {
        "description": "Create a pass from the specified template.\n\nYou can optionally assign an external ID to the pass or generate the pass from templates with external IDs. See the appropriate endpoints to assign or use external IDs.",
        "operationId": "createPass",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The `id` of the template you want to create your pass from.",
            "explode": false,
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "discriminator": {
                  "propertyName": "vendor"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/createPassAppleWalletRequest"
                  },
                  {
                    "$ref": "#/components/schemas/createPassAndroidPayRequest"
                  }
                ]
              }
            }
          },
          "description": "Create a pass; pass composition varies by vendor."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "discriminator": {
                    "propertyName": "vendor"
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/createPassAppleWalletResponse"
                    },
                    {
                      "$ref": "#/components/schemas/createPassAndroidPayResponse"
                    }
                  ]
                }
              }
            },
            "description": "A response is a populated pass and meta information about the pass. The pass response includes fields that are read only, some of which are populated directly from the template specified in the request."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Create pass",
        "tags": [
          "Passes"
        ]
      },
      "put": {
        "description": "Update the specified pass. You need only include the fields that you want to update for the pass.\n\n\n  Optionally, you can also Schedule an update if you want to update a pass at a later date and time. See the `/schedules` endpoints for information about scheduling updates.\n\n\n  Do not use the response payload from the `GET /v1/pass/(id)` endpoint to update a pass, as it contains information from both the pass itself and the template used to create the pass, and you cannot update a template from the  `/v1/pass endpoint`. You should only populate the JSON Parameters below. Within the headers and fields objects, these are the changeMessage,  value, and label fields.\n\n\n  You can update `locations` on a pass, but doing so will replace all locations on the pass. See the Location Object for more about the fields you should provide in the locations array.",
        "operationId": "updatePass",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The `id` of the pass you want to update.",
            "explode": false,
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/updatePassRequest"
              }
            }
          },
          "description": "Provide only the fields from a pass object that you want to update.\n\n\nLocations operate as a `set` operation. The array of pass locations is replaced by the locations you provide in an update; if you want to add to the locations on the pass, you must provide both the current locations and the locations you want to add in the payload."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "discriminator": {
                    "propertyName": "vendor"
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/createPassAppleWalletResponse"
                    },
                    {
                      "$ref": "#/components/schemas/createPassAndroidPayResponse"
                    }
                  ]
                }
              }
            },
            "description": "A response is a populated pass and meta information about the pass. The pass response includes fields that are read only, some of which are populated directly from the template specified in the request."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Update pass",
        "tags": [
          "Passes"
        ],
        "x-note": "You can also update a pass to include an expiration date using the `expirationDate` key."
      }
    },
    "/pass/{id}/dynamic": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The `templateId` of the template you want to create the pass from.\n",
          "explode": false,
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The expiration date for the pass.",
          "in": "query",
          "name": "expiry",
          "schema": {
            "format": "date",
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Generates a pass with an optional expiration date and serial number. You can also assign an external ID to passes generated from this endpoint.",
        "operationId": "createDynamicLink",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "discriminator": {
                  "propertyName": "vendor"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/createPassAppleWalletRequest"
                  },
                  {
                    "$ref": "#/components/schemas/createPassAndroidPayRequest"
                  }
                ]
              }
            }
          },
          "description": "Create a pass; pass composition varies by vendor."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "discriminator": {
                    "propertyName": "vendor"
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/createPassAppleWalletResponse"
                    },
                    {
                      "$ref": "#/components/schemas/createPassAndroidPayResponse"
                    }
                  ]
                }
              }
            },
            "description": "A response is a populated pass and meta information about the pass. The pass response includes fields that are read only, some of which are populated directly from the template specified in the request."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Generates a pass",
        "tags": [
          "Passes"
        ]
      }
    },
    "/pass/{passId}/download": {
      "get": {
        "description": "Download an Apple Wallet pass as a .pkpass file, using its pass ID. Direct the output to a file with a .zip extension. This is a utility API to help you debug passes. To download a pass using an external ID, see [Download an Apple Wallet .pkpass by external ID](#operation-pass-template-templateid-id-passexternalid-download-get).\n\nSee [Apple's developer documentation](https://developer.apple.com/wallet/) for information about .pkpass files and contents.",
        "operationId": "getAppleWalletPass",
        "responses": {
          "200": {
            "description": "Returns the .pkpass file as a .zip extension."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Download an Apple Wallet .pkpass",
        "tags": [
          "Apple Passes Only"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The `id` of the pass you want to download.",
          "explode": false,
          "in": "path",
          "name": "passId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ]
    },
    "/pass/{passId}/linkedPasses": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The `id` of the pass you want to link additional passes to.",
          "explode": false,
          "in": "path",
          "name": "passId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Link additional passes to a user's Google Wallet pass, identified by its Airship pass ID. Linked passes appear automatically in the user's wallet. See [Google Wallet Auto Linked Passes](/guides/wallet/user-guide/create-links/auto-linked-passes/).",
        "operationId": "autoLinkedPassesForPassId",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/linkedPasses"
              }
            }
          },
          "description": "Auto Linked Passes"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "400": {
            "description": "The request was malformed."
          },
          "404": {
            "description": "The pass does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Auto link passes to existing Google Pass",
        "tags": [
          "Google Passes Only"
        ]
      }
    },
    "/pass/{passId}/location/{passLocationId}": {
      "delete": {
        "description": "Delete the specified location from the specified pass.",
        "operationId": "deleteLocationFromPass",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "locations": {
                      "items": {
                        "$ref": "#/components/schemas/locationObject"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Success."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Delete locations from pass",
        "tags": [
          "Passes"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The `id` of the pass you want to remove locations from.",
          "explode": false,
          "in": "path",
          "name": "passId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The location you want to remove from the pass.",
          "explode": false,
          "in": "path",
          "name": "passLocationId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ]
    },
    "/pass/{passId}/locations": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The pass you want to add locations to.",
          "explode": false,
          "in": "path",
          "name": "passId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Add the locations to the specified pass.",
        "operationId": "addLocationsToPass",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "locations": {
                    "items": {
                      "$ref": "#/components/schemas/locationObject"
                    },
                    "type": "array"
                  }
                }
              }
            }
          },
          "description": "Set locations for the pass."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "properties": {
                      "passLocationId": {
                        "description": "The identifier for a location.",
                        "type": "integer"
                      },
                      "value": {
                        "$ref": "#/components/schemas/locationObject"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Returns `passLocationId` for each location on the pass. Use this value to identify locations in other location-based operations."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Add locations to pass",
        "tags": [
          "Passes"
        ]
      }
    },
    "/pass/{passId}/message": {
      "get": {
        "description": "Returns an array of messages associated with the specified pass.",
        "operationId": "getMessagesForGooglePass",
        "parameters": [
          {
            "description": "The `Id` of the Google Pass you want to get messages from.",
            "explode": false,
            "in": "path",
            "name": "passId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "messages": {
                      "description": "An array of messages associated with the pass.",
                      "items": {
                        "$ref": "#/components/schemas/googlePayMessageResponse"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful response returns details for the added messages."
          },
          "404": {
            "description": "The pass ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Get messages for Google Pass",
        "tags": [
          "Google Passes Only"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        }
      ],
      "post": {
        "description": "Add messages to Google Wallet passes.",
        "operationId": "addMessageToGooglePass",
        "parameters": [
          {
            "description": "The `Id` of the Google Pass you want to apply messages to.",
            "explode": false,
            "in": "path",
            "name": "passId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "body": {
                    "description": "The message body text.",
                    "type": "string"
                  },
                  "endTime": {
                    "description": "The date-time when the notification will end. If you do not set an end time, the notification displays indefinitely.",
                    "properties": {
                      "date": {
                        "format": "date-time",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "header": {
                    "description": "The header text for the message",
                    "type": "string"
                  },
                  "messageType": {
                    "description": "Use `expirationNotification` to warn users of expiring messages, and `text` for all other notifications. `expirationNotification` is based on the `start` value in the `displayInterval`; the maximum display interval is 30 days from now. If the expiration start date is more than 30 days from now, the message will not appear until the 30-day mark.\n",
                    "enum": [
                      "expirationNotification",
                      "text"
                    ],
                    "type": "string"
                  },
                  "startTime": {
                    "description": "The date-time when the notification will begin appearing to users.",
                    "properties": {
                      "date": {
                        "format": "date-time",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "A valid request contains one message for the pass."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlePayMessageResponse"
                }
              }
            },
            "description": "A successful response returns details for the added message."
          },
          "404": {
            "description": "The pass ID does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Add message to Google Pass",
        "tags": [
          "Google Passes Only"
        ]
      }
    },
    "/pass/{passId}/notify": {
      "delete": {
        "description": "Removes notification field and message from the back of the pass.",
        "operationId": "deletePassNotification",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Notification is being deleted. The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "404": {
            "description": "The pass does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wnot"
            ]
          }
        ],
        "summary": "Delete notification by pass",
        "tags": [
          "Push Notifications"
        ]
      },
      "parameters": [
        {
          "description": "The `id` of the pass you want send notification to.",
          "explode": false,
          "in": "path",
          "name": "passId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Send a notification to a pass. Delivers lock screen notification through the wallet app and presents notification field and message on the back of the pass.",
        "operationId": "sendPassNotification",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/notificationRequest"
              }
            }
          },
          "description": "Send notification to a pass."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Notification is being sent. The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "404": {
            "description": "The pass does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wnot"
            ]
          }
        ],
        "summary": "Send notification by pass",
        "tags": [
          "Push Notifications"
        ]
      },
      "x-weight": 1
    },
    "/pass/{passId}/tags": {
      "get": {
        "description": "List tags assigned to the specified pass. See also [List tags for pass with external ID](#operation-pass-template-templateid-id-passexternalid-tags-get).",
        "operationId": "listTagsForPass",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The ID of the pass you want to list tags for.",
            "explode": false,
            "in": "path",
            "name": "passId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "tags": {
                      "description": "An array of tags associated with the pass.",
                      "items": {
                        "$ref": "#/components/schemas/tagObject"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "An array of tags belonging to the pass."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "List tags for pass",
        "tags": [
          "Tags"
        ]
      },
      "put": {
        "description": "Add tags to a pass, limited to 15 tags per pass.",
        "operationId": "addTagsToPass",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The ID of the pass you want to add tags to. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{passId}` as `id/{externalId}`.",
            "explode": false,
            "in": "path",
            "name": "passId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": "{\"tags\":[\"aaa-bbb-ccc\"]}",
              "schema": {
                "$ref": "#/components/schemas/addTagsToPassrequest",
                "example": {
                  "tags": [
                    "aaa-bbb-ccc"
                  ]
                }
              }
            }
          },
          "description": "An array of tags that you want to associate with the pass.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "mappings": {
                      "description": "The number of tags added.",
                      "type": "integer"
                    },
                    "newTags": {
                      "description": "A list of tags successfully added to the pass.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Lists the tags added to the pass."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Add tags to pass",
        "tags": [
          "Tags"
        ]
      }
    },
    "/pass/{passId}/viewJSONPass": {
      "get": {
        "description": "Returns the JSON of an Apple Wallet pass. The Airship request payload is translated when sent to Apple. You can use this endpoint to view the JSON payload as passed to Apple Wallet for debugging purposes.\n\nSee [Apple's developer documentation](https://developer.apple.com/wallet/) for information about Apple Wallet payloads.",
        "operationId": "getAppleWalletPassJson",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "A successful request returns Apple JSON"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "View Apple Wallet JSON",
        "tags": [
          "Apple Passes Only"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The `id` of the pass you want to return Apple Wallet JSON for.",
          "explode": false,
          "in": "path",
          "name": "passId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ]
    },
    "/pass/{templateId}/id/{passExternalId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The template you want to create your pass from.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The external ID you want to assign to the new pass.",
          "explode": false,
          "in": "path",
          "name": "passExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ]
    },
    "/pass/{templateId}/saveToWallet": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The `id` of the template you want to generate a \"Save to Google Wallet\" button for.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Creates a pass from the specified template and returns code for a \"Save to Google Wallet\" button. Clicking or tapping this button installs the pass.",
        "operationId": "createPassFromTemplate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "externalId": {
                    "description": "An external identifier for the pass that you might want to use to update the pass in the future.",
                    "type": "string"
                  },
                  "fields": {
                    "additionalProperties": {
                      "description": "The `label` of a field you want to update on the resulting pass.",
                      "properties": {
                        "value": {
                          "description": "The value you want to provide to the field.",
                          "type": "string"
                        }
                      },
                      "title": "field.label",
                      "type": "object"
                    },
                    "type": "object"
                  },
                  "onFail": {
                    "description": "A javascript function that you want to be called when a user",
                    "type": "string"
                  },
                  "onSuccess": {
                    "description": "A javascript function that you want to be called when a user successfully adds the pass to Google Wallet.",
                    "type": "string"
                  },
                  "tag": {
                    "description": "A single tag you want to add to the pass.",
                    "type": "string"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "The request is much like creating a pass with the addition of functions to perform upon success or failure."
        },
        "responses": {
          "200": {
            "description": "A response includes the javascript for a \"Save to Google Wallet\" button."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Save to Google Wallet",
        "tags": [
          "Google Passes Only"
        ]
      }
    },
    "/project": {
      "get": {
        "description": "List the projects belonging to you.",
        "operationId": "listProjects",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The number of results per page. Defaults to 10.",
            "in": "query",
            "name": "pageSize",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "The page of the search you want to return.",
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Determines the order of results. Defaults to `id`.",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "id",
                "name",
                "createdAt",
                "updatedAt"
              ],
              "type": "string"
            }
          },
          {
            "description": "The direction of the result set, ascending or descending. Defaults to `DESC`.",
            "in": "query",
            "name": "direction",
            "schema": {
              "default": "DESC",
              "enum": [
                "ASC",
                "DESC"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "properties": {
                    "count": {
                      "description": "The total number of results.",
                      "type": "string"
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/paginationObject"
                    },
                    "projects": {
                      "items": {
                        "$ref": "#/components/schemas/projectPayload"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "An array of projects belonging to you."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "List projects",
        "tags": [
          "Projects"
        ]
      },
      "post": {
        "description": "Create an empty project. Your project is based around the type of passes you want to create and the type of barcode you will include on your passes.\n\nThe response includes an `id` and `contextId`. Use these values to access your project via the API and dashboard, respectively.\nSee also [Create project with external ID](#operation-project-id-externalid-post).",
        "operationId": "createProject",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          }
        ],
        "requestBody": {
          "content": {
            "application/json; charset=utf-8": {
              "schema": {
                "$ref": "#/components/schemas/projectRequest"
              }
            }
          },
          "description": "Create a project. Your project is based around a pass type and your certificates."
        },
        "responses": {
          "200": {
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/projectPayload"
                }
              }
            },
            "description": "Create a project. Your project is based around a pass type and your certificates."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Create project",
        "tags": [
          "Projects"
        ]
      }
    },
    "/project/duplicate/{projectId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the project you want to duplicate. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{externalId}`.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Duplicate a project by ID. The duplicate project will be named \"Copy of [ProjectName]\" and have a new `id` but will otherwise use the same settings and templates as the original project. The response payload returns the same information as a [Get Project](#operation-project-projectid-get) call, with new identifiers for the new project.",
        "operationId": "duplicateProject",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/projectPayload"
                }
              }
            },
            "description": "A project and a list of templates within the project."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Duplicate project",
        "tags": [
          "Projects"
        ]
      }
    },
    "/project/id/{externalId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The custom/external ID you want to use for your project.",
          "in": "path",
          "name": "externalId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Create a project with a custom identifier. Your project is based around the type of passes you want to create and the type of barcode you will include on your passes. It is a container for your templates and passes.\n\nThe response includes an `id` and `contextId`. Use these values to access your project via the API and dashboard, respectively.\nSee also [Create project](/developer/rest-api/wallet/operations/projects/#createproject).",
        "operationId": "createProjectExternalId",
        "requestBody": {
          "content": {
            "application/json; charset=utf-8": {
              "schema": {
                "$ref": "#/components/schemas/projectRequest"
              }
            }
          },
          "description": "Create a project. Your project is based around a pass type and your certificates."
        },
        "responses": {
          "200": {
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/projectPayload"
                }
              }
            },
            "description": "Create a project. Your project is based around a pass type and your certificates."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Create project with external ID",
        "tags": [
          "Projects"
        ]
      }
    },
    "/project/{projectId}": {
      "get": {
        "description": "Get the project with the specified `id`. The response includes information about the project (set when [Creating a Project](/developer/rest-api/wallet/operations/projects/#createproject)) and an array of templates associated with the project. The templates array contains all the information found in the `templateHeader` object.",
        "operationId": "getProject",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/projectPayload"
                }
              }
            },
            "description": "A project and a list of templates within the project."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Get project",
        "tags": [
          "Projects"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the project. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{externalId}`.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "put": {
        "description": "Update a project.",
        "operationId": "updateProject",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/projectRequest"
              }
            }
          },
          "description": "An update request can take the same payload as a Create Project request. However, you should provide only the keys you want to update. Keys you do not provide will remain unchanged.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/projectPayload"
                }
              }
            },
            "description": "Returns project metadata and a list of templates for the project."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Update project",
        "tags": [
          "Projects"
        ],
        "x-note": "Provide only the fields you want to update. While this payload takes any of the keys used when creating a project, any keys you do not provide will remain unchanged."
      }
    },
    "/project/{projectId}/activity": {
      "get": {
        "description": "Returns daily pass activity for a given project ID. You can also add start and end date parameters in the path to return activity between two dates, in the format `/template/{templateId}/activity/2018-08-10/2018-10-01`.\nIf your request did not specify a date range, the response includes all activity, organized by day, since the template's `createdAt` date.\n\nThis endpoint represents net activity, including repeated actions by the same user. For example, if the same user installs, removes, and then adds the same pass again, the report shows two passes installed and one pass removed.\n",
        "operationId": "getProjectActivity",
        "responses": {
          "200": {
            "$ref": "#/components/responses/projectActivity200"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wrpt"
            ]
          }
        ],
        "summary": "Project activity",
        "tags": [
          "Statistics"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the project you want to return activity for. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{externalId}`.",
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          }
        }
      ]
    },
    "/project/{projectId}/nfcMerchants": {
      "get": {
        "description": "Return all NFC merchant information for a project.",
        "operationId": "listNfcMerchants",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "merchants": {
                      "items": {
                        "$ref": "#/components/schemas/nfcMerchantResponse"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns all NFC merchants associated with your Airship wallet project."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wprj"
            ]
          }
        ],
        "summary": "List NFC merchants",
        "tags": [
          "Projects"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project you want to add or look up NFC merchant information for.  For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{projectExternalId}`.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Provide your merchant information and keys to support NFC interaction with passes and SmartTap for Android. When your project is NFC enabled, your audience can tap their device to a terminal to use their passes — consume point balances, use coupons, scan boarding passes, etc. See [Enable NFC Support for your Passes](/guides/wallet/user-guide/design-template/nfc/) for complete setup instructions.\n",
        "operationId": "addNfcMerchant",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/nfcMerchants"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/nfcMerchant",
            "description": "Returns the newly-added NFC merchant information for your project."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wprj"
            ]
          }
        ],
        "summary": "Add NFC merchant",
        "tags": [
          "Projects"
        ]
      }
    },
    "/project/{projectId}/nfcMerchants/{merchantId}": {
      "delete": {
        "description": "Delete an NFC merchant. Deleting your NFC information prevents users from redeeming passes using NFC for the associated terminal, unless you have already added new/different NFC information to your project.\n",
        "operationId": "deleteNfcMerchant",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "merchantId": {
                      "description": "The merchant ID that you deleted.",
                      "format": "uuid",
                      "type": "string"
                    },
                    "updatedAt": {
                      "description": "The date and time when the merchant information was deleted.",
                      "format": "date-time",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "The merchant information was deleted."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wprj"
            ]
          }
        ],
        "summary": "Delete NFC merchant",
        "tags": [
          "Projects"
        ]
      },
      "get": {
        "description": "Get an individual NFC merchant.\n",
        "operationId": "getNfcMerchant",
        "responses": {
          "200": {
            "$ref": "#/components/responses/nfcMerchant",
            "description": "Returns the merchant information associated with the `merchantId`."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wprj"
            ]
          }
        ],
        "summary": "Get NFC merchant",
        "tags": [
          "Projects"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project you want to add or look up NFC merchant information for.  For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{projectExternalId}`.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The merchant ID you want to modify.",
          "in": "path",
          "name": "merchantId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "put": {
        "description": "Update your NFC merchant information.\n",
        "operationId": "updateNfcMerchant",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "merchantEmail": {
                    "description": "The google merchant email address, used when configuring smartTap.",
                    "type": "string"
                  },
                  "merchantName": {
                    "description": "The google merchant name, used when configuring smartTap.",
                    "type": "string"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "You cannot update your public/private key. If you need to update keys, you should add a new NFC merchant configuration using new keys and delete the existing configuration.\n"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/nfcMerchant",
            "description": "Returns your updated merchant information."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wprj"
            ]
          }
        ],
        "summary": "Update NFC merchant information",
        "tags": [
          "Projects"
        ]
      }
    },
    "/project/{projectId}/settings/callback": {
      "delete": {
        "description": "Delete a registered callback specification. Because a project only uses a single callback specification, you specify the `projectId` only.",
        "operationId": "deleteCallbackSpecification",
        "responses": {
          "204": {
            "description": "A successful request returns no content."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Delete callback specification",
        "tags": [
          "Callbacks"
        ]
      },
      "get": {
        "description": "Return the callback specification for a project.",
        "operationId": "getCallbackSpecification",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/callbackSpec"
                }
              }
            },
            "description": "A successful call returns the callback specification."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Get callback specification",
        "tags": [
          "Callbacks"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the project.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "callbacks": {
          "install": {
            "{$request.body.baseUrl}/v1/pass/install/": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/callbackObject"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "OK"
                  }
                }
              }
            }
          },
          "personalize": {
            "{$request.body.baseUrl}/v1/pass/{$request.body.passId}/personalize": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/callbackObject"
                          },
                          {
                            "$ref": "#/components/schemas/callbackPersonalizationObject"
                          }
                        ]
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "OK"
                  }
                }
              }
            }
          },
          "uninstall": {
            "{$request.body.baseUrl}/v1/pass/uninstall": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/callbackObject"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "OK"
                  }
                }
              }
            }
          }
        },
        "description": "Register a callback specification, which includes the remote URL and any HTTP headers required by the remote URL.\n\nYour callback server should expect to receive callbacks at up to three endpoints:\n* `{baseUrl}/v1/pass/install` — Receives a [callback](/developer/rest-api/wallet/schemas/others/#callbackobject) when your audience installs passes.\n* `{baseUrl}/v1/pass/uninstall` — Receives a [callback](/developer/rest-api/wallet/schemas/others/#callbackobject) when your audience uninstalls passes.\n* `{baseUrl}/v1/pass/{passId}/personalize` — Receives a [callback with a personalization object](/developer/rest-api/wallet/schemas/others/#callbackpersonalizationobject) when your audience personalizes a Loyalty pass. You must [add personalization requirements](/developer/rest-api/wallet/operations/apple-wallet-pass-personalization/) to Apple templates before users can personalize passes created from them.\n\nSee [Wallet callbacks](/guides/wallet/user-guide/reporting/wallet-callbacks/) for more information.",
        "operationId": "createCallbackSpecification",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/callbackSpec"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/callbackSpec"
                }
              }
            },
            "description": "A successful call returns the callback specification."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Create callback specification",
        "tags": [
          "Callbacks"
        ]
      },
      "put": {
        "description": "Update a callback specification. The payload to update a callback is identical to the payload to create a callback.",
        "operationId": "updateCallbackSpecification",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/callbackSpec"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/callbackSpec"
                }
              }
            },
            "description": "A successful call returns the callback specification."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Update callback specification",
        "tags": [
          "Callbacks"
        ]
      }
    },
    "/project/{projectId}/stats": {
      "get": {
        "description": "Returns statistics for a given project ID. This endpoint does not count repeated actions by the same user. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), the response payload lists the internal wallet ID for the template rather than the external ID.",
        "operationId": "getProjectStatistics",
        "responses": {
          "200": {
            "$ref": "#/components/responses/projectStats200"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wrpt"
            ]
          }
        ],
        "summary": "Project statistics",
        "tags": [
          "Statistics"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the project you want to return statistics for. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{projectId}` as `id/{externalId}`.",
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "integer"
          }
        }
      ]
    },
    "/schedules/{projectId}": {
      "get": {
        "description": "Get a list of all schedules that have not yet occurred for the project.",
        "operationId": "listSchedules",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "description": "The number of schedules on the page.",
                      "type": "integer"
                    },
                    "next_page": {
                      "description": "The URL of the next page in the result set.",
                      "format": "url",
                      "type": "string"
                    },
                    "ok": {
                      "description": "If true, the operation completed successfully.",
                      "type": "boolean"
                    },
                    "schedules": {
                      "description": "The list of upcoming schedules.",
                      "items": {
                        "$ref": "#/components/schemas/scheduleUpdateObject"
                      },
                      "type": "array"
                    },
                    "total_count": {
                      "description": "The total number of schedules.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns a list of schedules, ordered scheduled_time closest to the present."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wsch"
            ]
          }
        ],
        "summary": "List schedules",
        "tags": [
          "Schedules"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project ID.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Schedule an update to a project or schedule a notification to a project.",
        "operationId": "scheduleUpdate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/scheduleUpdateObject"
                  },
                  {
                    "$ref": "#/components/schemas/scheduleNotificationObject"
                  }
                ]
              }
            }
          },
          "description": "The schedule update object to schedule an update or the schedule notification object to schedule a notification."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ok": {
                      "description": "If true, the operation completed successfully.",
                      "type": "boolean"
                    },
                    "operation_id": {
                      "description": "Identifies the operation for troubleshooting and logging.",
                      "format": "uuid",
                      "type": "string"
                    },
                    "schedule_urls": {
                      "description": "URLs for the schedules created by the operation. Items in the array are ordered just as they were in the request.",
                      "items": {
                        "format": "url",
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "schedules": {
                      "items": {
                        "$ref": "#/components/schemas/scheduleUpdateObject"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns the schedule request along with identifiers for the operation and the schedule itself."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wsch"
            ]
          }
        ],
        "summary": "Schedule an update or push notification",
        "tags": [
          "Schedules"
        ]
      }
    },
    "/schedules/{projectId}/{scheduleId}": {
      "delete": {
        "description": "Deletes the specified schedule.",
        "operationId": "deleteSchedule",
        "responses": {
          "204": {
            "description": "A deleted schedule returns no content."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wsch"
            ]
          }
        ],
        "summary": "Delete schedule",
        "tags": [
          "Schedules"
        ]
      },
      "get": {
        "description": "Return a single project's schedule.",
        "operationId": "getSchedule",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/scheduleUpdateObject"
                }
              }
            },
            "description": "Returns a single schedule object."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wsch"
            ]
          }
        ],
        "summary": "Get schedule",
        "tags": [
          "Schedules"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project ID.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The schedule ID. This is appended to the end of the `url` in the response for schedule operations.",
          "explode": false,
          "in": "path",
          "name": "scheduleId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "put": {
        "description": "Update a schedule. The payload to update a schedule is identical to the request to create a schedule.",
        "operationId": "updateSchedule",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/scheduleUpdateObject"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ok": {
                      "description": "If true, the operation completed successfully.",
                      "type": "boolean"
                    },
                    "operation_id": {
                      "description": "Identifies the operation for troubleshooting and logging.",
                      "format": "uuid",
                      "type": "string"
                    },
                    "schedule_urls": {
                      "description": "URL for the updated schedule.",
                      "items": {
                        "format": "url",
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "schedules": {
                      "items": {
                        "$ref": "#/components/schemas/scheduleUpdateObject"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns the updated schedule object."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wsch"
            ]
          }
        ],
        "summary": "Update schedule",
        "tags": [
          "Schedules"
        ]
      }
    },
    "/segments/{projectId}": {
      "get": {
        "description": "List meta information for all segments for a project.",
        "operationId": "listSegments",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "segments": {
                      "items": {
                        "properties": {
                          "creation_date": {
                            "$ref": "#/components/schemas/createdAt"
                          },
                          "display_name": {
                            "description": "The name of the segment.",
                            "type": "string"
                          },
                          "id": {
                            "description": "The identifier for the segment, used to identify the segment in other operations.",
                            "format": "uuid",
                            "type": "string"
                          },
                          "modification_date": {
                            "$ref": "#/components/schemas/updatedAt"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A response returns a list of segments for a project."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wseg"
            ]
          }
        ],
        "summary": "List segments",
        "tags": [
          "Segments"
        ]
      },
      "parameters": [
        {
          "description": "The ID of the project.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Create a segment for a project.",
        "operationId": "createSegment",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "criteria": {
                    "$ref": "#/components/schemas/segmentSelector"
                  },
                  "display_name": {
                    "description": "The name of the segment.",
                    "type": "string"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "Contains `and`, `or`, or `not` operators for tags that identify your segment."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ok": {
                      "description": "If true, the operation completed successfully.",
                      "type": "boolean"
                    },
                    "operationId": {
                      "description": "An identifier for the operation. Use this value to reference\nthe operation for troubleshooting purposes.\n",
                      "format": "uuid",
                      "type": "string"
                    },
                    "segmentId": {
                      "description": "An identifier for the segment. Use this value to reference the segment in other operations.",
                      "format": "uuid",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A response returns a segment ID that you can use to reference the segment in future operations."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wseg"
            ]
          }
        ],
        "summary": "Create segment",
        "tags": [
          "Segments"
        ]
      }
    },
    "/segments/{projectId}/{segmentId}": {
      "delete": {
        "description": "Delete a segment by ID. This operation just deletes the segment criteria. The passes previously selected by this criteria are unchanged.",
        "operationId": "deleteSegment",
        "responses": {
          "204": {
            "description": "A successful delete request returns no content."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wseg"
            ]
          }
        ],
        "summary": "Delete segment",
        "tags": [
          "Segments"
        ]
      },
      "get": {
        "description": "Returns the selector criteria for a segment.",
        "operationId": "getSegment",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "criteria": {
                      "$ref": "#/components/schemas/segmentSelector"
                    },
                    "display_name": {
                      "description": "The name of the segment.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful request returns the selection criteria for the segment."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wseg"
            ]
          }
        ],
        "summary": "Look up segment",
        "tags": [
          "Segments"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the project.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The ID of the segment.",
          "explode": false,
          "in": "path",
          "name": "segmentId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "put": {
        "description": "Update selection criteria or the display name for a segment.",
        "operationId": "updateSegment",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "criteria": {
                    "$ref": "#/components/schemas/segmentSelector"
                  },
                  "display_name": {
                    "description": "The name of the segment.",
                    "type": "string"
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ok": {
                      "description": "If true, the operation completed successfully.",
                      "type": "boolean"
                    },
                    "operationId": {
                      "description": "An identifier for the operation. Use this ID to reference the operation for troubleshooting purposes.",
                      "format": "uuid",
                      "type": "string"
                    },
                    "segmentId": {
                      "description": "An identifier for the segment that you can use to reference the segment in other operations.",
                      "format": "uuid",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A response returns a segment ID that you can use to reference the segment in future operations."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wseg"
            ]
          }
        ],
        "summary": "Update segment",
        "tags": [
          "Segments"
        ]
      }
    },
    "/segments/{projectId}/{segmentId}/notify": {
      "delete": {
        "description": "Delete pass notification for specified segment.",
        "operationId": "deleteSegmentPassNotification",
        "parameters": [
          {
            "description": "The ID of the project you want to delete the notification for.",
            "explode": false,
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          },
          {
            "description": "The ID of the segment you want to delete the notification for.",
            "explode": false,
            "in": "path",
            "name": "segmentId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          },
          {
            "description": "The ID of the template you want to delete the notification for.",
            "in": "query",
            "name": "templateId",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Notification is being deleted. The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "404": {
            "description": "The segment does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wnot"
            ]
          }
        ],
        "summary": "Delete notification by segment",
        "tags": [
          "Push Notifications"
        ]
      },
      "post": {
        "description": "Send a notification to all passes for a segment.",
        "operationId": "sendSegmentPassNotification",
        "parameters": [
          {
            "description": "The ID of the project you want to send the notification to.",
            "explode": false,
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          },
          {
            "description": "The ID of the segment you want to send the notification to.",
            "explode": false,
            "in": "path",
            "name": "segmentId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          },
          {
            "description": "The ID of the template you want to send the notification to.",
            "in": "query",
            "name": "templateId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/notificationRequest"
              }
            }
          },
          "description": "Send notification to segment passes."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Notification is being sent. The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "404": {
            "description": "The segment does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wnot"
            ]
          }
        ],
        "summary": "Send notification by segment",
        "tags": [
          "Push Notifications"
        ]
      },
      "x-weight": 5
    },
    "/segments/{projectId}/{segmentId}/passes": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the project.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The ID of the segment.",
          "explode": false,
          "in": "path",
          "name": "segmentId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The ID for the template. Required since pass updates for segments are done at the template level.",
          "in": "query",
          "name": "templateId",
          "schema": {
            "type": "string"
          }
        }
      ],
      "put": {
        "description": "Update passes by segment ID and template ID.",
        "operationId": "updatePassesBySegment",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "fields": {
                    "additionalProperties": {
                      "properties": {
                        "value": {
                          "description": "The value you want to change for field.",
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "Provide only the fields you want to update."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "A ticket you can use to reference this operation for status, troubleshooting, or logging purposes.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A response returns one or more [`ticketId`](/developer/rest-api/wallet/operations/tickets/) values, each referencing the pass update operation."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Update passes by segment",
        "tags": [
          "Segments"
        ]
      }
    },
    "/system/status": {
      "get": {
        "description": "Ensure that you can make a connection to the Wallet API.",
        "operationId": "getSystemStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "Hello": {
                      "description": "A \"Hello World\" response tells you that everything is Ok.",
                      "enum": [
                        "World"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "You have successfully established a connection with the server."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Check system status",
        "tags": [
          "Tickets"
        ]
      }
    },
    "/tag": {
      "get": {
        "description": "List all tags.",
        "operationId": "listAllTags",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The number of tags per page. Defaults to 10.",
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 10,
              "type": "integer"
            }
          },
          {
            "description": "The page of results you want to retrieve, starting at 1.",
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "type": "integer"
            }
          },
          {
            "description": "The order you want tags returned in, defaulting to `id`.",
            "in": "query",
            "name": "order",
            "schema": {
              "default": "id",
              "enum": [
                "id",
                "createdAt"
              ],
              "type": "string"
            }
          },
          {
            "description": "Determines whether to return values in ascending or descending order. Defaults to `DESC`.",
            "in": "query",
            "name": "direction",
            "schema": {
              "default": "DESC",
              "enum": [
                "ASC",
                "DESC"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "Pagination": {
                      "$ref": "#/components/schemas/paginationObject"
                    },
                    "count": {
                      "description": "The number of items returned.",
                      "type": "integer"
                    },
                    "tags": {
                      "items": {
                        "$ref": "#/components/schemas/tagObject"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A paginated array of tags."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "List all tags",
        "tags": [
          "Tags"
        ]
      }
    },
    "/tag/{tag}": {
      "delete": {
        "description": "Delete the specified tag and remove it from all passes.",
        "operationId": "deleteTag",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The tag you want to delete.",
            "explode": false,
            "in": "path",
            "name": "tag",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "description": "The number of passes the tag was removed from.",
                      "type": "integer"
                    },
                    "status": {
                      "description": "The operation was successful.",
                      "enum": [
                        "success"
                      ],
                      "type": "string"
                    },
                    "tagId": {
                      "description": "The ID of the deleted tag.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful operation returns a count of affected passes."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Delete tag",
        "tags": [
          "Tags"
        ]
      }
    },
    "/tag/{tag}/notify": {
      "delete": {
        "description": "Delete notification for passes associated with the specified tag.",
        "operationId": "deleteTagPassNotification",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Notification is being deleted. The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "404": {
            "description": "The tag does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wnot"
            ]
          }
        ],
        "summary": "Delete notification by tag",
        "tags": [
          "Push Notifications"
        ]
      },
      "parameters": [
        {
          "description": "The tag associated with the passes you want to send or delete notification for.",
          "explode": false,
          "in": "path",
          "name": "tag",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The template ID associated with the passes you want to send or delete notification for.",
          "in": "query",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Send notification to all passes associated with the specified tag.",
        "operationId": "sendTagPassNotification",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/notificationRequest"
              }
            }
          },
          "description": "Send notification to tagged passes."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Notification is being sent. The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "404": {
            "description": "The tag does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wnot"
            ]
          }
        ],
        "summary": "Send notification by tag",
        "tags": [
          "Push Notifications"
        ]
      },
      "x-weight": 6
    },
    "/tag/{tag}/pass/{pass}": {
      "delete": {
        "description": "Remove a tag from the specified pass.",
        "operationId": "removeTagFromPass",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The tag you want to remove from the pass.",
            "explode": false,
            "in": "path",
            "name": "tag",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          },
          {
            "description": "The pass you want to remove the tag from. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{pass}` as `id/{externalId}`.",
            "explode": false,
            "in": "path",
            "name": "pass",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "passId": {
                      "description": "The ID of the pass that the tag was removed from.",
                      "type": "integer"
                    },
                    "status": {
                      "description": "The operation was successful.",
                      "enum": [
                        "success"
                      ],
                      "type": "string"
                    },
                    "tagId": {
                      "description": "The ID of the removed tag.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful response includes the ID of the removed tag and the ID of the pass it was removed from."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Remove tag from a pass",
        "tags": [
          "Tags"
        ]
      }
    },
    "/tag/{tag}/passes": {
      "delete": {
        "description": "Remove a tag from all of its passes.",
        "operationId": "removeTagFromAllPasses",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The tag you want to remove.",
            "explode": false,
            "in": "path",
            "name": "tag",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "description": "The number of passes the tag was removed from.",
                      "type": "integer"
                    },
                    "status": {
                      "description": "The operation was successful.",
                      "enum": [
                        "success"
                      ],
                      "type": "string"
                    },
                    "tagId": {
                      "description": "The ID of the deleted tag.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful response returns a count of the affected passes."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Remove tag from all passes",
        "tags": [
          "Tags"
        ]
      },
      "get": {
        "description": "List the passes associated with the specified tag.",
        "operationId": "listPassesForTag",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "A tag `id` or `name`. The request returns a paginated list of passes associated with the specified tag.",
            "explode": false,
            "in": "path",
            "name": "tag",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          },
          {
            "description": "Find only passes matching the installation status.\n\n* `installed` — passes currently installed.\n* `uninstalled` — passes that have been uninstalled.\n* `been_installed` — passes that have been either installed or uninstalled.\n* `not_been_installed` — passes that have never been installed.\n",
            "in": "query",
            "name": "status",
            "schema": {
              "enum": [
                "installed",
                "uninstalled",
                "been_installed",
                "not_been_installed"
              ],
              "type": "string"
            }
          },
          {
            "description": "The number of passes per page. Defaults to 10.",
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 10,
              "type": "integer"
            }
          },
          {
            "description": "The page of results you want to retrieve, starting at 1.",
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "type": "integer"
            }
          },
          {
            "description": "The order you want tags returned in, defaulting to `id`.",
            "in": "query",
            "name": "order",
            "schema": {
              "default": "id",
              "enum": [
                "id",
                "createdAt",
                "updatedAt"
              ],
              "type": "string"
            }
          },
          {
            "description": "Determines whether to return values in ascending or descending order. Defaults to `DESC`.",
            "in": "query",
            "name": "direction",
            "schema": {
              "default": "DESC",
              "enum": [
                "ASC",
                "DESC"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "description": "The total number of results.",
                      "type": "integer"
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/paginationObject"
                    },
                    "passes": {
                      "$ref": "#/components/schemas/passMetadata"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful response returns a paginated array of passes."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "List passes for a tag",
        "tags": [
          "Tags",
          "Passes"
        ]
      },
      "put": {
        "description": "Update all of the passes that have a given tag.",
        "operationId": "updatePassesForTags",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The tag associated with the passes you want to update.",
            "explode": false,
            "in": "path",
            "name": "tag",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "fields": {
                    "additionalProperties": {
                      "properties": {
                        "value": {
                          "description": "The value you want to change for field.",
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "Provide only the fields you want to update.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful request returns a [`ticketId`](/developer/rest-api/wallet/operations/tickets/)."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Update passes by tag",
        "tags": [
          "Tags"
        ]
      }
    },
    "/tag/{tag}/stats": {
      "get": {
        "description": "Returns statistics for a given tag. Tags are typically used for segmentation but can also be useful for reporting.\nThis endpoint does not count repeated actions by the same user.\n",
        "operationId": "getTagStatistics",
        "responses": {
          "200": {
            "$ref": "#/components/responses/tagStats200"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wrpt"
            ]
          }
        ],
        "summary": "Tag statistics",
        "tags": [
          "Statistics"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The tag you want to return statistics for.",
          "in": "path",
          "name": "tag",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/template/duplicate/{templateId}": {
      "post": {
        "description": "Duplicates the specified template and put it in the same project.\n\n`/v1/template/duplicate/id/(templateExternalId)` duplicates the template specified by the external ID and puts the newly created template in the same project.",
        "operationId": "duplicateTemplate",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The templateId of the template you want to duplicate. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{id}` as `id/{templateExternalId}`.",
            "explode": false,
            "in": "path",
            "name": "templateId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "properties": {
                    "templateId": {
                      "$ref": "#/components/schemas/templateId",
                      "description": "The identifier of the newly created template."
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful request returns the ID of the newly created template."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Duplicate template",
        "tags": [
          "Templates"
        ]
      }
    },
    "/template/headers": {
      "get": {
        "description": "List the headers for templates you created.",
        "operationId": "listTemplates",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "Number of templates per page. Defaults to 10.",
            "in": "query",
            "name": "pageSize",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "The page you want to retrieve. Defaults to 1.",
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "The order you want the projects returned in. Defaults to `id`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "id",
                "name",
                "createdAt",
                "updatedAt"
              ],
              "type": "string"
            }
          },
          {
            "description": "The values ordered ascending or descending. Defaults to `DESC`.",
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "enum": [
                "ASC",
                "DESC"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "properties": {
                    "count": {
                      "description": "The total number of results.",
                      "type": "string"
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/paginationObject"
                    },
                    "templateHeaders": {
                      "description": "A list of template header objects.",
                      "items": {
                        "allOf": [
                          {
                            "properties": {
                              "createdAt": {
                                "$ref": "#/components/schemas/createdAt"
                              },
                              "id": {
                                "$ref": "#/components/schemas/templateId"
                              },
                              "updatedAt": {
                                "$ref": "#/components/schemas/updatedAt"
                              }
                            },
                            "type": "object"
                          },
                          {
                            "$ref": "#/components/schemas/templateRequestHeaders"
                          }
                        ]
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful response includes an array of template headers for templates you created. Look up an individual template to see field and header information for any individual template."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "List templates",
        "tags": [
          "Templates"
        ]
      }
    },
    "/template/{id}": {
      "delete": {
        "description": "Delete the specified template.",
        "operationId": "deleteTemplate",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The `templateId` of the template you want to delete. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{id}` as `id/{externalId}`.",
            "explode": false,
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "TemplateId": {
                      "description": "The identifier of the deleted template.",
                      "type": "integer"
                    },
                    "status": {
                      "description": "Indicates that the request succeeded.",
                      "enum": [
                        "success"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns the status of the deleted template."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Delete template",
        "tags": [
          "Templates"
        ]
      },
      "get": {
        "description": "Get the template specified by the `templateId`. To get the template payload in the same format as you would use in a `POST` or `PUT` operation, use the [/templates](/developer/rest-api/wallet/operations/templates/#gettemplatesv2) endpoint instead.",
        "operationId": "getTemplate",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The `templateId` of the template you want to look up. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{id}` as `id/{templateExternalId}`.",
            "explode": false,
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "properties": {
                        "createdAt": {
                          "$ref": "#/components/schemas/createdAt"
                        },
                        "id": {
                          "$ref": "#/components/schemas/templateId"
                        },
                        "updatedAt": {
                          "$ref": "#/components/schemas/updatedAt"
                        }
                      },
                      "type": "object"
                    },
                    {
                      "discriminator": {
                        "propertyName": "vendor"
                      },
                      "oneOf": [
                        {
                          "$ref": "#/components/schemas/iosTemplate"
                        },
                        {
                          "$ref": "#/components/schemas/googleTemplate"
                        }
                      ]
                    }
                  ]
                }
              }
            },
            "description": "A successful response returns returns the identifier of the template and dates when the template was created and last updated."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Get template",
        "tags": [
          "Templates"
        ]
      },
      "post": {
        "description": "Create a template within the specified project. A template is specific to a vendor platform, Apple or Google.\nSee also [Create template with external ID](#operation-template-projectid-id-templateexternalid-post).",
        "operationId": "createTemplate",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The `projectId` of the project that will contain the new template.",
            "explode": false,
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "discriminator": {
                  "propertyName": "vendor"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/iosTemplate"
                  },
                  {
                    "$ref": "#/components/schemas/googleTemplate"
                  }
                ]
              }
            }
          },
          "description": "The request body is structured by the platform `vendor` your template and subsequent passes are intended for."
        },
        "responses": {
          "200": {
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "properties": {
                    "templateId": {
                      "$ref": "#/components/schemas/templateId"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A response returns the template's unique identifier. Use this `templateId` to reference the template in subsequent operations.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Create template",
        "tags": [
          "Templates"
        ]
      },
      "put": {
        "description": "Update the specified template. This endpoint takes any of the parameters used for Creating a Template. You can also add or remove fields from the template with this call by adding or omitting those fields from the request.\n\nTo update the template payload in the same format as you would use in a `POST` or `PUT` operation, use the [/templates](/developer/rest-api/wallet/operations/templates/#updatetemplatesv2) endpoint instead.",
        "operationId": "updateTemplate",
        "parameters": [
          {
            "$ref": "#/components/parameters/Api-Revision"
          },
          {
            "description": "The `templateId` of the template you want to update. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{id}` as `id/{templateExternalId}`.",
            "explode": false,
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "discriminator": {
                  "propertyName": "vendor"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/iosTemplate"
                  },
                  {
                    "$ref": "#/components/schemas/googleTemplate"
                  }
                ]
              }
            }
          },
          "description": "The structure of your template is determined by the device/wallet vendor you create passes for.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "properties": {
                    "templateId": {
                      "$ref": "#/components/schemas/templateId"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A response returns the template's unique identifier. Use this `templateId` to reference the template in subsequent operations.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Update template",
        "tags": [
          "Templates"
        ],
        "x-note": "Provide a complete template object when updating a template. This call replaces the existing template object in its entirety. You must include all keys and fields that should remain in the template, otherwise they are removed."
      }
    },
    "/template/{projectId}/id/{templateExternalId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The project you want to associate your new template with.",
          "explode": false,
          "in": "path",
          "name": "projectId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The custom identifier you want to give to your new template.",
          "explode": false,
          "in": "path",
          "name": "templateExternalId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Create a template with an external ID within the specified project. A template is specific to a vendor platform, Apple or Google.\nSee also [Create template](/developer/rest-api/wallet/operations/templates/#createtemplate).",
        "operationId": "createExternalTemplate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "discriminator": {
                  "propertyName": "vendor"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/iosTemplate"
                  },
                  {
                    "$ref": "#/components/schemas/googleTemplate"
                  }
                ]
              }
            }
          },
          "description": "The request body is structured by the platform `vendor` your template and subsequent passes are intended for."
        },
        "responses": {
          "200": {
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "properties": {
                    "templateId": {
                      "$ref": "#/components/schemas/templateId"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A response returns the template's unique identifier. Use this `templateId` or the external ID to reference the template in subsequent operations.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Create template with external ID",
        "tags": [
          "Templates"
        ]
      }
    },
    "/template/{templateId}/activity": {
      "get": {
        "description": "Returns daily activity of passes created, installed, and uninstalled for a template, specified by template ID. You can also add start and end date parameters in the path to return activity between two dates, in the format `/template/id/{externalId}/activity/2018-08-10/2018-10-01`.\nIf your request did not specify a date range, the response includes all activity, organized by day, since the template's `createdAt` date.\n\nThis endpoint represents net activity, including repeated actions by the same user. For example, if the same user installs, removes, and then adds the same pass again, the report shows two passes installed and one pass removed.\n",
        "operationId": "getTemplateActivity",
        "responses": {
          "200": {
            "$ref": "#/components/responses/templateActivity200"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wrpt"
            ]
          }
        ],
        "summary": "Template activity",
        "tags": [
          "Statistics"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the template you want to return activity for. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{templateId}` as `id/{externalId}`.",
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "integer"
          }
        }
      ]
    },
    "/template/{templateId}/location/{locationId}": {
      "delete": {
        "description": "Remove a location from template.",
        "operationId": "deleteLocationFromTemplate",
        "responses": {
          "200": {
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "The location is deleted."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Delete location from template",
        "tags": [
          "Templates"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The template you want to remove a location from. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{templateId}` as `id/{externalId}`.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        },
        {
          "description": "The ID of the location you want to remove.",
          "explode": false,
          "in": "path",
          "name": "locationId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ]
    },
    "/template/{templateId}/locations": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The template you want to add locations to. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{templateId}` as `id/{externalId}`.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Add locations to the specified template.",
        "operationId": "addLocationsToTemplate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "example": {
                  "locations": [
                    {
                      "city": "Palo Alto",
                      "country": "US",
                      "latitude": 37.618,
                      "longitude": -122.374,
                      "region": "CA",
                      "regionCode": 94404,
                      "relevantText": "Hello loc0",
                      "streetAddress1": "address line #1",
                      "streetAddress2": "address line #2"
                    }
                  ]
                },
                "properties": {
                  "Locations": {
                    "items": {
                      "$ref": "#/components/schemas/locationObject"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "A request includes an array of locations.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "items": {
                    "properties": {
                      "LocationId": {
                        "description": "The identifier for a location.",
                        "type": "integer"
                      },
                      "fieldId": {
                        "type": "integer"
                      },
                      "value": {
                        "$ref": "#/components/schemas/locationObject"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A successful request returns the locations on the pass."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Add locations to template",
        "tags": [
          "Templates"
        ]
      }
    },
    "/template/{templateId}/notify": {
      "delete": {
        "description": "Delete pass notification for specified template passes.",
        "operationId": "deleteTemplatePassNotification",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Notification is being deleted. The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "404": {
            "description": "The template does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wnot"
            ]
          }
        ],
        "summary": "Delete notification by template",
        "tags": [
          "Push Notifications"
        ]
      },
      "parameters": [
        {
          "description": "The `id` of the template you want to send or delete notification for. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{templateId}` as `id/{templateExternalId}`.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Send a notification to all passes belonging to the template.",
        "operationId": "sendTemplatePassNotification",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/notificationRequest"
              }
            }
          },
          "description": "Send notification to template passes."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "An identifier for this operation.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Notification is being sent. The response contains a [`ticketId`](/developer/rest-api/wallet/operations/tickets/) that you can use to look up the operation."
          },
          "404": {
            "description": "The pass does not exist."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wnot"
            ]
          }
        ],
        "summary": "Send notification by template",
        "tags": [
          "Push Notifications"
        ]
      },
      "x-weight": 3
    },
    "/template/{templateId}/passes": {
      "get": {
        "description": "Get passes for a template.\n\n`/v1/template/id/{templateExternalId}/passes` get passes associated with a template identified by external ID.\n",
        "operationId": "getPassesByTemplate",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "pagination": {
                      "$ref": "#/components/schemas/paginationObject"
                    },
                    "passes": {
                      "description": "The metadata for passes associated with the template. Each object in the array represents a pass.",
                      "items": {
                        "$ref": "#/components/schemas/passMetadata"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A successful request returns a paged list of passes for a particular template."
          },
          "404": {
            "description": "Template not found.       \n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Get template passes",
        "tags": [
          "Templates"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The `templateId` of the template you want to get passes for. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{id}` as `id/{templateExternalId}`.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "integer"
          },
          "style": "simple"
        },
        {
          "description": "Find only passes matching the installation status.\n\n* `installed` — passes currently installed.\n* `uninstalled` — passes that have been uninstalled.\n* `been_installed` — passes that have been either installed or uninstalled.\n* `not_been_installed` — passes that have never been installed.\n",
          "in": "query",
          "name": "status",
          "schema": {
            "enum": [
              "installed",
              "uninstalled",
              "been_installed",
              "not_been_installed"
            ],
            "type": "string"
          }
        },
        {
          "description": "The number of passes per page. Defaults to 10.",
          "in": "query",
          "name": "pageSize",
          "schema": {
            "default": 10,
            "type": "integer"
          }
        },
        {
          "description": "The page of results you want to retrieve, starting at 1.",
          "in": "query",
          "name": "page",
          "schema": {
            "default": 1,
            "type": "integer"
          }
        },
        {
          "description": "The order you want passes returned in, defaulting to `id`.",
          "in": "query",
          "name": "order",
          "schema": {
            "default": "id",
            "enum": [
              "id",
              "createdAt",
              "updatedAt"
            ],
            "type": "string"
          }
        },
        {
          "description": "Determines whether to return values in ascending or descending order. Defaults to `DESC`.",
          "in": "query",
          "name": "direction",
          "schema": {
            "default": "DESC",
            "enum": [
              "ASC",
              "DESC"
            ],
            "type": "string"
          }
        }
      ],
      "put": {
        "description": "Updates all passes based on a particular template. The only information you can modify on passes for the specified template ID are images, barcode data, and the following fields:\n\n  * Membership ID fields\n  * Coupon codes\n  * Barcode values or alternative text\n  * Any other field or image on the pass\n",
        "operationId": "updatePassesByTemplate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "fields": {
                    "additionalProperties": {
                      "properties": {
                        "value": {
                          "description": "The `value` key that you want to change for the field.",
                          "type": "string"
                        }
                      },
                      "title": "Field Name (String)",
                      "type": "object"
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "Specify the fields you want to update. Any field you do not specify in this payload remains unchanged."
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ticketId": {
                      "description": "A ticket you can use to reference this operation for status, troubleshooting, or logging purposes.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns a ticket ID as a reference for the update operation."
          },
          "404": {
            "description": "Template with ID `templateId` was not found.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wpas"
            ]
          }
        ],
        "summary": "Publish a bulk update to passes",
        "tags": [
          "Templates"
        ],
        "x-important": "Updating the `order` value for `linkModulesData` can only be done in an Event or Boarding Pass template.\n"
      }
    },
    "/template/{templateId}/personalization": {
      "delete": {
        "description": "Removes personalization requirements from a template.",
        "operationId": "removePersonalizationRequirements",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/personalizationRequirements"
                }
              }
            },
            "description": "Your personalization requirements removed from the template."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Delete personalization requirements",
        "tags": [
          "Apple Wallet Pass Personalization"
        ]
      },
      "description": "Adding personalization to an Apple Wallet `loyalty` template creates a pass that prompts the user for relevant personal information when signing up for a rewards program. These endpoints help you manage the personalizable information that you require users to provide when signing up for your loyalty/rewards program.",
      "get": {
        "description": "Returns personalization requirements for a template.",
        "operationId": "getPersonalizationRequirements",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/personalizationRequirements"
                }
              }
            },
            "description": "Your template has the following personalization requirements."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Get personalization requirements",
        "tags": [
          "Apple Wallet Pass Personalization"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The loyalty card template you want to add, modify, or retrieve personalization information for.",
          "explode": false,
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ],
      "post": {
        "description": "Adds personalization requirements to a template. When a user attempts to install a pass with personalization requirements, they are first prompted for the `requiredPersonalizationFields` specified in this payload. When the user fills out the information and accepts the terms and conditions (if present), they receive a personalized pass.\n",
        "operationId": "addPersonalizationRequirements",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/personalizationRequirements"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/personalizationRequirements"
                }
              }
            },
            "description": "Your personalization requirements have been added to the template."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Add personalization requirements",
        "tags": [
          "Apple Wallet Pass Personalization"
        ]
      },
      "put": {
        "description": "When updating personalization requirements for a template, you must provide a complete payload. This request overwrites all previous personalization requirements attached to the template; any information you leave out of this request will be removed from the personalization requirements for the template.",
        "operationId": "updatePersonalizationRequirements",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/personalizationRequirements"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/personalizationRequirements"
                }
              }
            },
            "description": "Your personalization requirements have been updated for the template.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Update personalization requirements",
        "tags": [
          "Apple Wallet Pass Personalization"
        ]
      },
      "summary": "Apple wallet pass personalization"
    },
    "/template/{templateId}/stats": {
      "get": {
        "description": "Returns statistics for a given template by ID, including the total number of passes installed and uninstalled. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), the response payload lists the internal wallet ID for the template rather than the external ID.\n\n\nThis endpoint does not count repeated actions by the same user.\n",
        "operationId": "getTemplateStatistics",
        "responses": {
          "200": {
            "$ref": "#/components/responses/templateStats200"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wrpt"
            ]
          }
        ],
        "summary": "Template statistics",
        "tags": [
          "Statistics"
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/Api-Revision"
        },
        {
          "description": "The ID of the template you want to return statistics for. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{templateId}` as `id/{externalId}`.",
          "in": "path",
          "name": "templateId",
          "required": true,
          "schema": {
            "type": "integer"
          }
        }
      ]
    },
    "/templates/{id}": {
      "get": {
        "description": "Get the template specified by the `templateId`. The template payload returned will be in the same format you would use in a `POST` or `PUT` operation unlike the [/template](/developer/rest-api/wallet/operations/templates/#gettemplate) endpoint.",
        "operationId": "getTemplatesV2",
        "parameters": [
          {
            "description": "The `templateId` of the template you want to look up. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{id}` as `id/{templateExternalId}`.",
            "explode": false,
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "properties": {
                        "createdAt": {
                          "$ref": "#/components/schemas/createdAt"
                        },
                        "id": {
                          "$ref": "#/components/schemas/templateId"
                        },
                        "updatedAt": {
                          "$ref": "#/components/schemas/updatedAt"
                        }
                      },
                      "type": "object"
                    },
                    {
                      "discriminator": {
                        "propertyName": "vendor"
                      },
                      "oneOf": [
                        {
                          "$ref": "#/components/schemas/iosTemplate"
                        },
                        {
                          "$ref": "#/components/schemas/googleTemplate"
                        }
                      ]
                    }
                  ]
                }
              }
            },
            "description": "A successful response returns returns the identifier of the template and dates when the template was created and last updated."
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Get template v2",
        "tags": [
          "Templates"
        ]
      },
      "patch": {
        "description": "Update the template with the `overrides` object, performing a partial update. In the payload, you only need to provide the fields in your template that you want to override.",
        "operationId": "patchTemplates",
        "parameters": [
          {
            "description": "The `templateId` of the template you want to update. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{id}` as `id/{templateExternalId}`.",
            "explode": false,
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "discriminator": {
                  "propertyName": "vendor"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/iosTemplate"
                  },
                  {
                    "$ref": "#/components/schemas/googleTemplate"
                  }
                ]
              }
            }
          },
          "description": "The structure of your template is determined by the device/wallet vendor you create passes for.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "properties": {
                    "templateId": {
                      "$ref": "#/components/schemas/templateId"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A response returns the template's unique identifier. Use this `templateId` to reference the template in subsequent operations.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Patch template",
        "tags": [
          "Templates"
        ]
      },
      "put": {
        "description": "Update the template with the whole resource specified in the request, performing a complete replacement. You can also add or remove fields from the template with this call by adding or omitting those fields from the request. The template payload will be in the same format as in a `POST` or `PUT` operation, unlike the [/template](/developer/rest-api/wallet/operations/templates/#updatetemplate) endpoint.",
        "operationId": "updateTemplatesV2",
        "parameters": [
          {
            "description": "The `templateId` of the template you want to update. For [External IDs](/developer/rest-api/wallet/introduction/#external-ids), format the `{id}` as `id/{templateExternalId}`.",
            "explode": false,
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "discriminator": {
                  "propertyName": "vendor"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/iosTemplate"
                  },
                  {
                    "$ref": "#/components/schemas/googleTemplate"
                  }
                ]
              }
            }
          },
          "description": "The structure of your template is determined by the device/wallet vendor you create passes for.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "properties": {
                    "templateId": {
                      "$ref": "#/components/schemas/templateId"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "A response returns the template's unique identifier. Use this `templateId` to reference the template in subsequent operations.\n"
          }
        },
        "security": [
          {
            "httpBasic": []
          },
          {
            "oauth2Token": [
              "wtmp"
            ]
          }
        ],
        "summary": "Update template v2",
        "tags": [
          "Templates"
        ],
        "x-note": "Provide a complete template object when updating a template. This call replaces the existing template object in its entirety. You must include all keys and fields that should remain in the template, otherwise they will be removed."
      }
    },
    "/ticket/{ticketId}": {
      "get": {
        "description": "Get the status of a ticket. Some operations can't complete immediately and return a `ticketId`. Use this item to determine the true status of the operation.",
        "operationId": "getTicketStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "ID": {
                      "description": "The identifier of the ticket.",
                      "type": "integer"
                    },
                    "children": {
                      "type": "object"
                    },
                    "createdAt": {
                      "$ref": "#/components/schemas/createdAt"
                    },
                    "status": {
                      "description": "The status of the ticket.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Returns the status of a ticket."
          }
        },
        "security": [
          {
            "httpBasic": []
          }
        ],
        "summary": "Get ticket status",
        "tags": [
          "Tickets"
        ],
        "x-operation-settings": {
          "AllowDynamicFormParameters": false,
          "AllowDynamicQueryParameters": false,
          "CollectParameters": false,
          "IsMultiContentStreaming": false
        }
      },
      "parameters": [
        {
          "description": "The ticket you want to know the status of.",
          "explode": false,
          "in": "path",
          "name": "ticketId",
          "required": true,
          "schema": {
            "type": "string"
          },
          "style": "simple"
        }
      ]
    },
    "/token": {
      "post": {
        "description": "Request an OAuth access token with Basic Auth or an assertion. When making a request with an assertion, do not provide the Basic Auth header. See also [OAuth 2.0](/guides/wallet/api-security/#oauth-20) in the *Wallet API Security* documentation.\n\nUse `oauth2.asnapius.com` for Airship's North American cloud site and `oauth2.asnapieu.com` for Airship's European cloud site when requesting an OAuth token.",
        "operationId": "requestOauthToken",
        "parameters": [
          {
            "description": "The request must have a `Content-Type` of `application/x-www-form-urlencoded`.",
            "in": "header",
            "name": "Content-Type",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/requestTokenBasicAuth"
                  },
                  {
                    "$ref": "#/components/schemas/requestTokenWithAssertion"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/okOauthTokenResponse"
                }
              }
            },
            "description": "Returned on token request success.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "enum": [
                    "no-store"
                  ],
                  "type": "string"
                }
              },
              "Content-Type": {
                "schema": {
                  "enum": [
                    "application/json"
                  ],
                  "type": "string"
                }
              },
              "Pragma": {
                "schema": {
                  "enum": [
                    "no-cache"
                  ],
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorResponseObject"
                }
              }
            },
            "description": "Token not generated."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/unauthorizedErrorResponseObject"
                }
              }
            },
            "description": "Unauthorized.",
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "description": "The HTTP authentication methods that can be used to request an access token.",
                  "type": "string"
                }
              }
            }
          },
          "406": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/notAcceptableResponseObject"
                }
              }
            },
            "description": "Not acceptable."
          }
        },
        "security": [
          {
            "basicOauth": []
          }
        ],
        "summary": "Request token",
        "tags": [
          "OAuth"
        ]
      }
    },
    "/verify/public_key/{kid}": {
      "get": {
        "description": "Retrieve the public key of a key ID. Use `oauth2.asnapius.com` for Airship's North American cloud site and `oauth2.asnapieu.com` for Airship's European cloud site when verifying an OAuth public key.",
        "operationId": "getKeyVerification",
        "responses": {
          "200": {
            "content": {
              "application/x-pem-file": {
                "schema": {
                  "description": "The PEM-formatted public key.",
                  "type": "string"
                }
              }
            },
            "description": "Returned on success with the public key for the given `kid`.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "description": "The response contains a `Cache-Control` header which must be respected.",
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "description": "The error includes as much information as possible to help you understand the reason for the failure."
                }
              }
            },
            "description": "The requested resource doesn't exist."
          }
        },
        "summary": "Verify public key",
        "tags": [
          "OAuth"
        ]
      },
      "parameters": [
        {
          "description": "The private key ID used to sign the token. Example: `8817e96`",
          "in": "path",
          "name": "kid",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    }
  },
  "security": [
    {
      "httpBasic": []
    }
  ],
  "servers": [
    {
      "description": "The North American base URL for Wallet endpoints, including the API major version number. In addition to the major version, all requests must include an `Api-Revision` header, with a more specific version number, e.g., `1.2`.",
      "url": "https://wallet-api.urbanairship.com/v1"
    },
    {
      "description": "The European base URL for Wallet endpoints, including the API major version number. In addition to the major version, all requests must include an `Api-Revision` header, with a more specific version number, e.g., `1.2`.",
      "url": "https://wallet-api.asnapieu.com/v1"
    },
    {
      "description": "The North American base URL for OAuth token requests and public key verification. Use this when requesting an access token or verifying a key for the North American cloud site.",
      "url": "https://oauth2.asnapius.com"
    },
    {
      "description": "The European base URL for OAuth token requests and public key verification. Use this when requesting an access token or verifying a key for the European cloud site.",
      "url": "https://oauth2.asnapieu.com"
    },
    {
      "description": "The deprecated base URL for Wallet (formerly known as Reach) endpoints. Use `https://wallet-api.urbanairship.com/v1` instead.",
      "url": "https://reach-api.urbanairship.com/v1"
    }
  ],
  "tags": [
    {
      "description": "A project contains your templates and a collection of passes and determines the types of templates and passes you can create. You must specify a project for all Wallet API operations.",
      "name": "Projects",
      "x-card-description": "Manage wallet projects"
    },
    {
      "description": "A template determines the format, style, field placement, and default values for passes. You must specify a template when creating passes or adaptive links.",
      "name": "Templates",
      "x-card-description": "Create and manage pass templates",
      "x-note": "The `Create Template` and `Update Template` calls expect a different data structure than the response from a `Get Template` call."
    },
    {
      "description": "Adding personalization to an Apple Wallet `loyalty` template creates a pass that prompts the user for relevant personal information when signing up for a rewards program. These endpoints help you manage the personalizable information that you require users to provide when signing up for your loyalty/rewards program.",
      "name": "Apple Wallet Pass Personalization",
      "x-card-description": "Manage loyalty pass personalization"
    },
    {
      "description": "A link that detects the platform of a recipient and installs the correct pass.\nYou can send adaptive links to both Apple and Google platform users; When a\nuser on either platform taps the link, Airship detects the user's device\nplatform and returns the correct pass.\n\n\nTo send an adaptive link to both Google and Apple platforms, you must have configured templates for both platforms. You can send an adaptive link to an individual platform, and define the behavior for the unsupported platform.",
      "name": "Adaptive Links",
      "x-card-description": "Create platform-detecting pass links"
    },
    {
      "description": "Adaptive Link endpoints with external IDs — either for the link itself or for passes generated from adaptive links. An adaptive link is a link that detects the platform of a recipient and installs the correct pass. You can send adaptive links to both Apple and Google platform users; When a user on either platform taps the link, Airship detects the user's device platform and returns the correct pass.\n\n\nTo send an adaptive link to both Google and Apple platforms, you must have configured templates for both platforms. You can send an adaptive link to an individual platform, and define the behavior for the unsupported platform.\n",
      "name": "Adaptive Links with external IDs",
      "x-card-description": "Adaptive links with custom IDs"
    },
    {
      "description": "A pass is essentially a populated, personalized template intended for a single platform — Apple Wallet or Google Wallet. Passes manifest as links; you distribute the pass link to users, and they tap or click the link to install the pass.\n\nIf you want to distribute passes to both Apple and Google users, you may want to use Adaptive links instead. While a pass is intended for a single platform, so you have to distribute separate pass links to independent Apple and Google audiences, an adaptive link is a single pass link that detects the user's platform and installs the correct pass. Adaptive links can save you the trouble of maintaining separate passes and distribution lists for your customers.",
      "name": "Passes",
      "x-card-description": "Create and manage passes"
    },
    {
      "description": "These endpoints support passes incorporating external IDs for the template, the pass, or both. A pass is essentially a populated, personalized template intended for a single platform — Apple Wallet or Google Wallet. Passes manifest as links; you distribute the pass link to users, and they tap or click the link to install the pass.\n\nIf you want to distribute passes to both Apple and Google users, you may want to use adaptive links instead. While a pass is intended for a single platform, so you have to distribute separate pass links to independent Apple and Google audiences, an adaptive link is a single pass link that detects the user's platform and installs the correct pass. Adaptive links can save you the trouble of maintaining separate passes and distribution lists for your customers.\n",
      "name": "Passes with external IDs",
      "x-card-description": "Passes with custom IDs"
    },
    {
      "description": "Tags are plain-text identifiers for passes. Use tags to identify passes for segmentation purposes, or to target an audience of passes for updates.\n\n\nTags are limited to 15 per pass.",
      "name": "Tags",
      "x-card-description": "Tag passes for targeting"
    },
    {
      "description": "A Segment identifies a group/set of wallet passes that contains a tag or combination of tags, using boolean `and`, `or`, and `not` operators. Use segments to group and target passes for subsequent updates.",
      "name": "Segments",
      "x-card-description": "Create pass segments"
    },
    {
      "description": "Create and store flight information for use with boarding passes. When creating boarding passes, you can reference a flight, automatically populating flight information on the pass. By storing and referencing flight information independently of your passes, you can update a single flight, automatically pushing an update to all passes referencing that flight.",
      "name": "Flights",
      "x-card-description": "Manage flight information"
    },
    {
      "description": "Create and store event information for use with event tickets. When creating event tickets, you can reference an event, automatically populating event information on the pass. By storing and referencing event information independently of your passes, you can update a single event, automatically pushing an update to all passes referencing it.",
      "name": "Events",
      "x-card-description": "Manage event information"
    },
    {
      "description": "[Wallet callbacks](/guides/wallet/user-guide/reporting/wallet-callbacks/) provide a pass event notification, e.g., pass install or uninstall, using webhooks.",
      "name": "Callbacks",
      "x-card-description": "Configure pass event webhooks"
    },
    {
      "description": "Return status information about tickets or the server itself. For operations\nthat cannot complete immediately, the system returns a `ticketId`. You can look\nup this `ticketId` to determine the true status of the operation.\n",
      "name": "Tickets",
      "x-card-description": "Check operation status"
    },
    {
      "description": "Get pass creation, installation, and uninstallation counts for projects and templates.\n\n\nEndpoints for `/activity` report net total activities, including repeated actions by the same user. For example, if the same user installs, removes, and then adds the same pass again, a response will show two passes installed and one pass removed. Endpoints for `/stats` will not count repeated actions from the same user.\n",
      "name": "Statistics",
      "x-card-description": "View pass statistics"
    },
    {
      "description": "Send a push notification to end users who have iOS or Android passes installed, letting them know information has changed. By notifying users, they will receive an alert as well as an update to the back of the pass showing the most recent notification.\n",
      "name": "Push Notifications",
      "x-card-description": "Send push notifications to passes"
    },
    {
      "description": "These endpoints supports Apple certificates only. Google certificates can be managed via the UI.\n",
      "name": "Certificates",
      "x-card-description": "Manage Apple certificates"
    },
    {
      "description": "Operations specific to event ticket passes.",
      "name": "Event Passes",
      "x-card-description": "Manage event passes"
    },
    {
      "description": "Operations specific to boarding passes.",
      "name": "Flight Passes",
      "x-card-description": "Manage boarding passes"
    },
    {
      "description": "Operations that apply only to Apple Wallet passes.",
      "name": "Apple Passes Only",
      "x-card-description": "Apple-specific operations"
    },
    {
      "description": "Operations that apply only to Google Wallet passes.",
      "name": "Google Passes Only",
      "x-card-description": "Google-specific operations"
    },
    {
      "description": "Schedule pass updates for future delivery.",
      "name": "Schedules",
      "x-card-description": "Schedule pass updates"
    }
  ],
  "x-schema-tags": [
    {
      "description": "Adaptive links detect the user's platform and install the correct\npass for their device vendor. An adaptive link can specify an Apple and Google\ntemplate.\n",
      "name": "Adaptive Links",
      "x-card-description": "Adaptive link schemas"
    },
    {
      "description": "Select an audience of passes for scheduled updates or other operations.",
      "name": "Audience selection",
      "x-card-description": "Pass targeting and selection"
    },
    {
      "description": "Schemas for creating events and event ticket adaptive links. An event ticket includes both event information and an array of attendees.\n",
      "name": "Event tickets",
      "x-card-description": "Event ticket schemas"
    },
    {
      "description": "Schemas for creating flights and boarding pass adaptive links. A Boarding pass includes both flight information and an array of passengers.\n",
      "name": "Flights and boarding passes",
      "x-card-description": "Boarding pass schemas"
    },
    {
      "description": "Schemas used when creating passes (as opposed to adaptive links).",
      "name": "Passes",
      "x-card-description": "Pass object schemas"
    },
    {
      "description": "Request and Response schemas for `/project` endpoints.",
      "name": "Project objects",
      "x-card-description": "Project schemas"
    },
    {
      "description": "Template objects vary based on the vendor they're intended for and the types of passes you want to create.\n",
      "name": "Template objects",
      "x-card-description": "Template schemas"
    },
    {
      "description": "Schemas for OAuth token requests, including scopes, assertion JWTs, and subject identifiers.",
      "name": "OAuth",
      "x-card-description": "OAuth scopes and authorization"
    }
  ]
}