# Google Wallet Auto Linked Passes

Send additional passes to users who already have a pass in their Google Wallet, automatically grouped with the existing pass.

## About Auto Linked Passes

Google Wallet's Auto Linked Passes feature automatically groups related passes together in a user's wallet. You use the Wallet API to link passes to a primary pass that the user already has, and Google Wallet handles the rest:

- The linked passes appear alongside the primary pass without the user needing to save or install them.
- The Wallet app displays a notification on the primary pass when a new linked pass arrives.

You can use auto-linking for all [Airship-supported Google Wallet pass types](https://www.airship.com/docs/guides/wallet/user-guide/reference/), and any pass type can serve as either the primary or linked pass. Because the user doesn't need to take any action, auto-linking increases the likelihood that they see and use the pass at the right moment.

Use this feature whenever a customer's journey involves multiple complementary passes:

- **Boarding pass + loyalty card** — When a frequent flyer already has your loyalty card in their Google Wallet, you can issue a boarding pass and link it to the loyalty card so the boarding pass appears alongside it automatically.
- **Event ticket + parking pass** — For a stadium or venue event, link a parking pass to the event ticket at the time of purchase. When the user opens their wallet on arrival, both passes are grouped and immediately accessible.
- **Boarding pass + lounge access** — When a business class traveler is issued a boarding pass, link their lounge access pass to it so they can locate it without a separate distribution step.
- **Member card + coupon** — During a promotional campaign, link a discount pass to a customer's existing member card so the offer appears in their wallet without requiring them to install it separately.

## Link passes

To link passes, submit a `POST` request to the [Wallet API](https://www.airship.com/docs/developer/rest-api/wallet/). The primary pass must be created using the Wallet API.

Three endpoints are available for linking passes, each based on how you identify the primary pass: by pass ID, by template ID and external pass ID, or by external template ID and external pass ID. In the request body, provide a `passURIs` array listing the passes to link. See [Pass URI formats](#pass-uri-formats) for supported formats.

Use the [Auto link passes to existing Google Pass](https://www.airship.com/docs/developer/rest-api/wallet/operations/google-passes-only/#autolinkedpassesforpassid) endpoint when you have the Airship-generated numeric ID for the primary pass.

**Link passes using a pass ID**

```http
POST /v1/pass/12345/linkedPasses HTTP/1.1
Authorization: Basic <authorization string>
Content-Type: application/json

{
  "passURIs": ["v1/pass/adaptive/fqsl9UyW3O7", "v1/pass/adaptive/Xzq5O7lf262"]
}
```


Use the [Auto link passes to Google Pass with external ID](https://www.airship.com/docs/developer/rest-api/wallet/operations/google-passes-only/#autolinkedpassesforpassexternalid) endpoint when you have the Airship-generated template ID and your own external ID for the primary pass.

**Link passes using a template ID and external pass ID**

```http
POST /v1/pass/template/12345/id/boarding-pass-smith-815/linkedPasses HTTP/1.1
Authorization: Basic <authorization string>
Content-Type: application/json

{
  "passURIs": ["v1/pass/adaptive/gqsl9UyW3O8", "v1/pass/template/id/lounge-template/id/lounge-smith-815"]
}
```


Use the [Auto link passes to Google Pass with external template ID](https://www.airship.com/docs/developer/rest-api/wallet/operations/google-passes-only/#autolinkedpassesforpassandtemplateexternalid) endpoint when you manage both the template and pass with your own external IDs.

**Link passes using an external template ID and external pass ID**

```http
POST /v1/pass/template/id/boarding-pass-template/id/boarding-pass-smith-815/linkedPasses HTTP/1.1
Authorization: Basic <authorization string>
Content-Type: application/json

{
  "passURIs": ["v1/pass/template/id/parking-template/id/parking-lot-b-007", "v1/pass/template/id/lounge-template/id/lounge-smith-815"]
}
```


Each of these endpoints returns HTTP 200 with a `ticketId` on success. Use the `ticketId` to look up the status of the operation. See the [Tickets API](https://www.airship.com/docs/developer/rest-api/wallet/operations/tickets/) in the Wallet API reference.

**Example link passes response**

```json
{
  "ticketId": 12345
}
```


## Pass URI formats

Each entry in the `passURIs` array is a URI that identifies a pass. The format depends on which identifier you have:

| Format | Identifier referenced |
| --- | --- |
| `v1/pass/{passId}` | Airship-generated pass ID |
| `v1/pass/adaptive/{adaptiveLinkId}` | Adaptive Link ID |
| `v1/pass/template/{templateId}/id/{passExternalId}` | Template ID and external pass ID |
| `v1/pass/template/id/{templateExternalId}/id/{passExternalId}` | External template ID and external pass ID |
| `v1/pass/dynamic/{dynamicPassId}` | Dynamic pass ID |

For more information about external IDs, see [External (or Custom) IDs](https://www.airship.com/docs/guides/wallet/user-guide/basics/#external-or-custom-ids) in *Wallet basics*.
