Auto Linked Passes
Stay organized with collections
Save and categorize content based on your preferences.
Background
The Auto Linked Passes feature lets you send additional passes to a
user who already has your existing pass in their Google Wallet. You can also
pre-link passes to a primary pass when a user saves the primary
(main) pass. The Auto Linked Pass is grouped with the primary pass with a
callout above the primary pass informing the user that a new pass has been
linked. The following pass types are supported as primary or linked passes;
- Event ticket
- Boarding pass
- Transit pass
- Offer
- Gift card
- Loyalty pass
- Generic pass
|
|
Primary pass with the callout that a new pass has been added
|
New pass linked to the primary pass
|
Use Cases
You may have different use cases for linking passes to an existing pass. Some
examples include:
- Link an offer to an existing loyalty card.
- Link a meal voucher to a boarding pass or event ticket.
- Link a parking pass to an event ticket.
Some considerations when using Auto Linked Passes
- The primary object and linked object must use the same issuerId.
- There is a limit of 50 linked objects per primary object.
- Pushing linked passes automatically is not guaranteed and considered
best-effort. Users can opt out of receiving Auto Linked Passes. If the use case is
critical and the user must receive the linked pass, we recommend
communicating through another channel to ensure the user adds the pass.
- Updates to the Google Wallet AUP
include guidance on the use of Auto Linked Passes which must be adhered to.
Integration Steps
If you have already created a primary object you can skip step 1.
- Create an object of any pass type listed
with the required parameters. This is the primary object.
- Create another object of any pass type listed. This is going to be the
linked object.
- Either before or after the primary object is saved, update
the primary object with the ID of the linked object in the linkedObjectIds
parameter.
There is a minimum payload required to set the linkedObjectIds on a primary
pass. The 3 required parameters include;
- ISSUERID.PRIMARY_OBJECT_ID
- ISSUERID.PRIMARY_CLASS_ID
- ISSUERID.LINKED_OBJECT_ID
Example JSON Request to add a linked object to a pass object
…
{
"id": "ISSUERID.PASS_OBJECTID",
"classId": "ISSUERID.PASS_CLASSID",
"barcode": {
"type": "qrCode",
"value": "QR code"
},
"linkedObjectIds": {"ISSUERID.LINKED_PASS_OBJECTID"}
}
…
Example JSON Response after linking an object to a pass object
…
"state": "active",
"linkedObjectIds": {
"ISSUERID.LINKED_PASS_OBJECTID"
}
…
Expected behavior
After receiving a successful response, devices with the pass you updated
should receive the linked pass. This linked pass will be grouped together with
the primary pass. Users can see the linked pass by swiping right.
Exception handling
Potential errors may happen with incorrect use of the API which can
include;
Message |
Reason |
Primary object and linked object don't share the same issuer
ID. |
You cannot attach a linked object to another issuer's object. |
Primary object and linked object refer to the same object. |
You cannot attach the same object as the linkedObject. |
Linked object does not exist. |
The linked object should already be inserted into the Wallet
API. |
Linked object already has another linked object. Cannot add nested
linked objects. |
Linked objects cannot have another linked object. |
Object is already linked to another object. Cannot add nested linked
objects. |
Primary object cannot be a linked object by itself. |
Cannot add any more linked objects, limit exceeded. |
The limit of 50 linked passes has been reached for the primary
pass. |
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-09-03 UTC.
[null,null,["Last updated 2025-09-03 UTC."],[[["\u003cp\u003eAuto Linked Passes enable sending additional passes to users who already possess an existing pass in their Google Wallet, grouping them together for easy access.\u003c/p\u003e\n"],["\u003cp\u003eSupported pass types include event tickets, boarding passes, transit passes, offers, gift cards, loyalty passes, and generic passes, allowing for diverse use cases like linking offers to loyalty cards or meal vouchers to boarding passes.\u003c/p\u003e\n"],["\u003cp\u003ePrimary and linked passes must share the same issuer ID, with a limit of 50 linked objects per primary object and best-effort automatic pushing that users can opt out of.\u003c/p\u003e\n"],["\u003cp\u003eIntegration involves creating primary and linked objects and updating the primary object with the linked object's ID, requiring specific parameters and adhering to Google Wallet's Acceptable Use Policy.\u003c/p\u003e\n"],["\u003cp\u003eSuccessful linking results in the linked pass being grouped with the primary pass on the user's device, accessible by swiping, while potential errors like issuer ID mismatch or exceeding the linked object limit can occur.\u003c/p\u003e\n"]]],["Auto Linked Passes enable associating additional passes with a user's existing primary pass in Google Wallet. Supported pass types include event tickets, boarding passes, and more. To link passes, create both primary and linked objects, then update the primary object with the linked object's ID using the `linkedObjectIds` parameter. Both passes must share an `issuerId` and the primary pass has a 50-linked pass limit. The `linkedObjectIds` are grouped above the main pass. Ensure correct API usage to avoid errors, such as exceeding limits or mismatched issuer IDs.\n"],null,["# Auto Linked Passes\n\n#### Background\n\nThe Auto Linked Passes feature lets you send additional passes to a\nuser who already has your existing pass in their Google Wallet. You can also\npre-link passes to a primary pass when a user saves the **primary**\n(main) pass. The Auto Linked Pass is grouped with the primary pass with a\ncallout above the primary pass informing the user that a new pass has been\nlinked. The following pass types are supported as primary or linked passes;\n\n- Event ticket\n- Boarding pass\n- Transit pass\n- Offer\n- Gift card\n- Loyalty pass\n- Generic pass\n\n|--------------------------------------------------------------|-------------------------------------|\n| | |\n| Primary pass with the callout that a new pass has been added | New pass linked to the primary pass |\n\n#### Use Cases\n\nYou may have different use cases for linking passes to an existing pass. Some\nexamples include:\n\n- Link an offer to an existing loyalty card.\n- Link a meal voucher to a boarding pass or event ticket.\n- Link a parking pass to an event ticket.\n\n#### Some considerations when using Auto Linked Passes\n\n- The primary object and linked object must use the same issuerId.\n- There is a limit of 50 linked objects per primary object.\n- Pushing linked passes automatically is not guaranteed and considered best-effort. Users can opt out of receiving Auto Linked Passes. If the use case is critical and the user must receive the linked pass, we recommend communicating through another channel to ensure the user adds the pass.\n- Updates to the [Google Wallet AUP](https://payments.developers.google.com/terms/aup) include guidance on the use of Auto Linked Passes which must be adhered to.\n\n#### Integration Steps\n\nIf you have already created a **primary** object you can skip step 1.\n\n1. Create an [object](/wallet/retail/offers/use-cases/create) of any pass type listed with the required parameters. This is the **primary** object.\n2. Create another object of any pass type listed. This is going to be the **linked** object.\n3. Either before or after the primary object is saved, [update](/wallet/retail/offers/use-cases/update) the primary object with the ID of the linked object in the linkedObjectIds parameter.\n\nThere is a minimum payload required to set the linkedObjectIds on a primary\npass. The 3 required parameters include;\n\n1. ISSUERID.PRIMARY_OBJECT_ID\n2. ISSUERID.PRIMARY_CLASS_ID\n3. ISSUERID.LINKED_OBJECT_ID\n\n#### Example JSON Request to add a linked object to a pass object\n\n```carbon\n ...\n {\n \"id\": \"ISSUERID.PASS_OBJECTID\",\n \"classId\": \"ISSUERID.PASS_CLASSID\",\n \"barcode\": {\n \"type\": \"qrCode\",\n \"value\": \"QR code\"\n },\n \"linkedObjectIds\": {\"ISSUERID.LINKED_PASS_OBJECTID\"}\n }\n ...\n```\n\n#### Example JSON Response after linking an object to a pass object\n\n```scdoc\n …\n \"state\": \"active\",\n \"linkedObjectIds\": {\n \"ISSUERID.LINKED_PASS_OBJECTID\"\n }\n …\n```\n\n#### Expected behavior\n\nAfter receiving a successful response, devices with the pass you updated\nshould receive the linked pass. This linked pass will be grouped together with\nthe primary pass. Users can see the linked pass by swiping right.\n\n#### Exception handling\n\nPotential errors may happen with incorrect use of the API which can\ninclude;\n\n| **Message** | **Reason** |\n|------------------------------------------------------------------------------------|----------------------------------------------------------------------|\n| Primary object and linked object don't share the same issuer ID. | You cannot attach a linked object to another issuer's object. |\n| Primary object and linked object refer to the same object. | You cannot attach the same object as the linkedObject. |\n| Linked object does not exist. | The linked object should already be inserted into the Wallet API. |\n| Linked object already has another linked object. Cannot add nested linked objects. | Linked objects cannot have another linked object. |\n| Object is already linked to another object. Cannot add nested linked objects. | Primary object cannot be a linked object by itself. |\n| Cannot add any more linked objects, limit exceeded. | The limit of 50 linked passes has been reached for the primary pass. |"]]