Code snippets

This page contains code snippets for the following classes and objects:

JSON EventTicketClass

Once you have defined the EventTicketClass, insert it by making a POST request to the following REST URI:

https://www.googleapis.com/walletobjects/v1/eventTicketClass

Add the strict=true parameter to the REST URI to enable strict error parsing and catch additional errors, such as duplicate ID fields:

https://www.googleapis.com/walletobjects/v1/eventTicketClass?strict=true

The following example shows a JSON resource representing an EventTicketClass. The JSON must be sent in the body of the POST request. Specifically, the following code samples demonstrate defining and inserting the EventTicketClass.

Resource

{
    "kind": "walletobjects#eventTicketClass",
     "id": string,
    "reviewStatus": string,
    "issuerName": string,
     "eventName": {
        "kind": "walletobjects#localizedString",
          "translatedValues": [   {
            "kind": "walletobjects#translatedString",
                "language": string,
                "value": string
        }  ],
          "defaultValue": {
            "kind": "walletobjects#translatedString",
               "language": string,
               "value": string
        }
    },
    "venue": {
        "kind": "walletobjects#eventVenue",
          "name": {
            "kind": "walletobjects#localizedString",
               "translatedValues": [    {
                "kind": "walletobjects#translatedString",
                     "language": string,
                     "value": string
            }   ],
               "defaultValue": {
                "kind": "walletobjects#translatedString",
                    "language": string,
                    "value": string
            }
        },
          "address": {
            "kind": "walletobjects#localizedString",
               "translatedValues": [    {
                "kind": "walletobjects#translatedString",
                     "language": string,
                     "value": string
            }   ],
               "defaultValue": {
                "kind": "walletobjects#translatedString",
                    "language": string,
                    "value": string
            }
        }
    },
     "dateTime": {
        "kind": "walletobjects#eventDateTime",
          "doorsOpenLabel": string,
          "customDoorsOpenLabel": {
            "kind": "walletobjects#localizedString",
               "translatedValues": [    {
                "kind": "walletobjects#translatedString",
                     "language": string,
                     "value": string
            }   ],
               "defaultValue": {
                "kind": "walletobjects#translatedString",
                    "language": string,
                    "value": string
            }
        },
          "doorsOpen": string,
          "start": string,
          "end": string
    },
}


Java

// Define the Image Module Data
List<ImageModuleData> imageModuleData = new ArrayList<ImageModuleData>();

ImageModuleData image = new ImageModuleData().setMainImage(
    new Image().setSourceUri(
        new Uri().setUri("http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg")));

imageModuleData.add(image);

// Define Links Module Data
List<Uri> uris = new ArrayList<Uri>();
Uri uri1 = new Uri().setDescription("Nearby Locations").setUri("http://maps.google.com/?q=google");
Uri uri2 = new Uri().setDescription("Call Customer Service").setUri("tel:6505555555");

uris.add(uri1);
uris.add(uri2);

LinksModuleData linksModuleData = new LinksModuleData().setUris(uris);

// Define Text Areas
List<TextModuleData> textModulesData = new ArrayList<TextModuleData>();

TextModuleData details = new TextModuleData().setHeader("Custom EventTicket Details").setBody(
    "Baconrista events have pushed the limits since its founding.");

textModulesData.add(details);

// Define Geofence locations
List<LatLongPoint> locations = new ArrayList<LatLongPoint>();
locations.add(new LatLongPoint().setLatitude(37.422601).setLongitude(
    -122.085286));
locations.add(new LatLongPoint().setLatitude(37.424354).setLongitude(
    -122.09508869999999));
locations.add(new LatLongPoint().setLatitude(40.7406578).setLongitude(
    -74.00208940000002));

// Define event name
LocalizedStringDefaultValue eventnameDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("Baconrista Event-o-rama");
LocalizedString eventName = new LocalizedString().setDefaultValue(eventnameDefault);

// Define Event logo
ImageModuleData logoImage = new ImageModuleData().setMainImage(
    new Image().setSourceUri(
        new Uri().setUri("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png")));

// Define Event ticket venue details
LocalizedStringDefaultValue venueNameDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("Baconrista Stadium");
LocalizedString venueName = new LocalizedString().setDefaultValue(venueNameDefault);
LocalizedStringDefaultValue venueAddressDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("101 Baconrista Dr.");
LocalizedString venueAddress = new LocalizedString().setDefaultValue(venueAddressDefault);

Venue venue = new Venue().setName(venueName).setAddress(venueAddress);

// Define event start, end, and door opent datetimes.  DateTime should be String value in ISO 8601 extended format date/time, with or without an offset
VenueDateTime dateTime = new VenueDateTime()
    .setDoorsOpen("2020-04-12T10:20:50.52Z")
    .setStart("2020-04-12T11:20:50.52Z")
    .setEnd("2020-04-12T16:20:50.52Z");


EventTicketClass wobClass = new EventTicketClass()
    .setId('2945482443380251551.ExampleEventTicketClass1')
    .setIssuerName("Baconrista Stadium")
    .setReviewStatus("underReview")
    .setLocations(locations)
    .setLinksModuleData(linksModuleData)
    .setImageModulesData(imageModuleData)
    .setTextModulesData(textModulesData)
    .setEventName(eventName)
    .setLogo(logoImage)
    .setVenue(venue)
    .setDateTime(dateTime);

EventTicketClass response = client.EventTicketClass().insert(wobClass).execute();


PHP

// A list of locations at which the Wallet Class can be used.
$locations = array(
    array(
        'kind' => 'walletobjects#latLongPoint',
        'latitude' => 37.424015499999996,
        'longitude' => -122.09259560000001
    ),
    array(
        'kind' => 'walletobjects#latLongPoint',
        'latitude' => 37.424354,
        'longitude' => -122.09508869999999
    ),
    array(
        'kind' => 'walletobjects#latLongPoint',
        'latitude' => 37.7901435,
        'longitude' => -122.39026709999997
    ),
    array(
        'kind' => 'walletobjects#latLongPoint',
        'latitude' => 40.7406578,
        'longitude' => -74.00208940000002
    )
);
// Source uri of title image.
$uriTitleImageInstance = new Google_Service_Walletobjects_Uri();
$imageTitleImageInstance = new Google_Service_Walletobjects_Image();
$uriTitleImageInstance->setUri(
    'http://farm4.staticflickr.com/3723/11177041115_6e6a3b6f49_o.jpg'
);
$imageTitleImageInstance->setSourceUri($uriTitleImageInstance);
// Define text module data.
$textModulesData = array(
    array(
        'header' => 'Custom Details',
        'body' => 'Baconrista events have pushed the limits since its founding.'
    ),
);
// Define links module data.
$linksModuleData = new Google_Service_Walletobjects_LinksModuleData();
$uris = array (
    array(
        'uri' => 'http://maps.google.com/map?q=google',
        'kind' => 'walletobjecs#uri',
        'description' => 'Nearby Locations'
    ),
    array(
        'uri' => 'tel:6505555555',
        'kind' => 'walletobjecs#uri',
        'description' => 'Call Customer Service'
    )
);
$linksModuleData->setUris($uris);

$uriModuleImageInstance = new Google_Service_Walletobjects_Uri();
$uriModuleImageInstance->setUri(
    'http://farm8.staticflickr.com/7401/11177116434_d8e600bba6_o.jpg'
);
$uriModuleImageInstance->setDescription('Coffee beans');
$imageModuleImageInstance = new Google_Service_Walletobjects_Image();
$imageModuleImageInstance->setSourceUri($uriModuleImageInstance);
$imagesModuleData = new Google_Service_Walletobjects_ImageModuleData();
$imagesModuleData->setMainImage($imageModuleImageInstance);
$imagesModuleDataArr = array ($imagesModuleData);


// Define event name
$eventnameDefault = new LocalizedStringDefaultValue()->setlanguage("en-us")->setValue("Baconrista Event-o-rama");
$eventName = new LocalizedString()->setDefaultValue($eventnameDefault);

// Define Event logo
$uriLogoImageInstance = new Google_Service_Walletobjects_Uri();
$imageLogoImageInstance = new Google_Service_Walletobjects_Image();
$uriLogoImageInstance->setUri(
    'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png'
);
$imageLogoImageInstance->setSourceUri($uriLogoImageInstance);
$logoImage = new Logo()->setMainImage($imageLogoImageInstance);

// Define Event ticket venue details
$venueNameDefault = new LocalizedStringDefaultValue()->setlanguage("en-us")->setValue("Baconrista Stadium");
$venueName = new LocalizedString()->setDefaultValue(venueNameDefault);
$venueAddressDefault = new LocalizedStringDefaultValue()->setlanguage("en-us")->setValue("101 Baconrista dr.");
$venueAddress = new LocalizedString()->setDefaultValue(venueAddressDefault);

$venue = new Venue().setName($venueName).setAddress($venueAddress);

// Define event start, end, and door opent datetimes.  DateTime should be String value in ISO 8601 extended format date/time, with or without an offset
$dateTime = new VenueDateTime();
$dateTime->setDoorsOpen("2020-04-12T10:20:50.52Z")
$dateTime->setStart("2020-04-12T11:20:50.52Z")
$dateTime->setEnd("2020-04-12T16:20:50.52Z");

// Create wallet class.
$wobClass = new Google_Service_Walletobjects_EventTicketClass();
$EventTicketClass->setId('2945482443380251551.EventTicketClass');
$wobClass->setIssuerName('Baconrista Stadium');
$wobClass->setReviewStatus('underReview');
$wobClass->setLocations($locations);
$wobClass->setEventName($eventName);
$wobClass->setLogo($logoImage);
$wobClass->setVenue($venue);
$wobClass->setDateTime($dateTime);

$service->EventTicketClass->insert($wobClass);


Python

api_object = generate_eventticket_class(
      '1234567', 'ExampleeventticketClass')
api_request = service.eventticketclass().insert(body=api_object)
api_response = api_request.execute()

def generate_eventticket_class(issuer_id, class_id):
  eventticket_class = {
      'kind': 'walletobjects#eventTicketClass',
      'id': '%s.%s' % (issuer_id, class_id),
      'issuerName': 'Baconrista Stadium',
      'eventName': {
            'defaultValue': {
             'language': 'en-US',
             'value': 'Bacon Coffee Fun Event'
            }
      },
      'locations': [{
          'kind': 'walletobjects#latLongPoint',
          'latitude': 37.424015499999996,
          'longitude': -122.09259560000001
      }, {
          'kind': 'walletobjects#latLongPoint',
          'latitude': 37.424354,
          'longitude': -122.09508869999999
      }, {
          'kind': 'walletobjects#latLongPoint',
          'latitude': 37.7901435,
          'longitude': -122.39026709999997
      }, {
          'kind': 'walletobjects#latLongPoint',
          'latitude': 40.7406578,
          'longitude': -74.00208940000002
      }],
      'reviewStatus': 'underReview',
      'review': {
          'comments': 'Real auto approval by system'
      },
      'textModulesData': [{
          'header': 'Custom Details',
          'body': 'Baconrista events have pushed the limits since its founding.'
      }],
      'linksModuleData': {
          'uris': [{
              'kind': 'walletobjects#uri',
              'uri': 'http://maps.google.com/map?q=google',
              'description': 'Nearby Locations'
          }, {
              'kind': 'walletobjects#uri',
              'uri': 'tel:6505555555',
              'description': 'Call Customer Service'
          }]
      },
      'imageModulesData': [{
          'mainImage': {
              'kind': 'walletobjects#image',
              'sourceUri': {
                  'kind': 'walletobjects#uri',
                  'uri': 'http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg',
                  'description': 'Coffee beans'
              }
          }
      }],
      "logo": {
          "kind": "walletobjects#image",
            "sourceUri": {
              "kind": "walletobjects#uri",
                 "uri": 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png',
                 "description": 'Baconrista stadium logo'
          }
      },
      "venue": {
          "kind": "walletobjects#eventVenue",
            "name": {
              "kind": "walletobjects#localizedString",
                    "defaultValue": {
                  "kind": "walletobjects#translatedString",
                      "language": 'en-us',
                      "value": 'Baconrista Stadium'
              }
          },
            "address": {
              "kind": "walletobjects#localizedString",
                    "defaultValue": {
                  "kind": "walletobjects#translatedString",
                      "language": 'en-us',
                      "value": '101 Baconrista Dr.'
              }
          }
      },
       "dateTime": {
          "kind": "walletobjects#eventDateTime",
            "doorsOpen": '2020-04-12T10:20:50.52Z',
            "start": '2020-04-12T11:20:50.52Z',
            "end": '2020-04-12T16:20:50.52Z'
      }
  }
  return eventticket_class


JSON EventTicketObject

The following samples define the EventTicketObject:

Resource

{
  "kind": "walletobjects#eventTicketObject",
  "id": string,
  "classId": string,
  "state": string,
  "barcode": {
    "kind": "walletobjects#barcode",
    "type": string,
    "value": string,
    "alternateText": string
  },
  "messages": [
    {
      "kind": "walletobjects#walletObjectMessage",
      "header": string,
      "localizedHeader": {
        "kind": "walletobjects#localizedString",
        "translatedValues": [
          {
            "kind": "walletobjects#translatedString",
            "language": string,
            "value": string
          }
        ],
        "defaultValue": {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      },
      "body": string,
      "localizedBody": {
        "kind": "walletobjects#localizedString",
        "translatedValues": [
          {
            "kind": "walletobjects#translatedString",
            "language": string,
            "value": string
          }
        ],
        "defaultValue": {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      },
      "displayInterval": {
        "kind": "walletobjects#timeInterval",
        "start": {
          "date": datetime
        },
        "end": {
          "date": datetime
        }
      },
      "id": string,
      "messageType": string
    }
  ],
  "validTimeInterval": {
    "kind": "walletobjects#timeInterval",
    "start": {
      "date": datetime
    },
    "end": {
      "date": datetime
    }
  },
  "locations": [
    {
      "kind": "walletobjects#latLongPoint",
      "latitude": double,
      "longitude": double
    }
  ],
  "hasUsers": boolean,
  "smartTapRedemptionValue": string,
  "hasLinkedDevice": boolean,
  "disableExpirationNotification": boolean,
  "infoModuleData": {
    "labelValueRows": [
      {
        "columns": [
          {
            "label": string,
            "localizedLabel": {
              "kind": "walletobjects#localizedString",
              "translatedValues": [
                {
                  "kind": "walletobjects#translatedString",
                  "language": string,
                  "value": string
                }
              ],
              "defaultValue": {
                "kind": "walletobjects#translatedString",
                "language": string,
                "value": string
              }
            },
            "value": string,
            "localizedValue": {
              "kind": "walletobjects#localizedString",
              "translatedValues": [
                {
                  "kind": "walletobjects#translatedString",
                  "language": string,
                  "value": string
                }
              ],
              "defaultValue": {
                "kind": "walletobjects#translatedString",
                "language": string,
                "value": string
              }
            }
          }
        ]
      }
    ],
    "showLastUpdateTime": boolean
  },
  "imageModulesData": [
    {
      "mainImage": {
        "kind": "walletobjects#image",
        "sourceUri": {
          "kind": "walletobjects#uri",
          "uri": string,
          "description": string,
          "localizedDescription": {
            "kind": "walletobjects#localizedString",
            "translatedValues": [
              {
                "kind": "walletobjects#translatedString",
                "language": string,
                "value": string
              }
            ],
            "defaultValue": {
              "kind": "walletobjects#translatedString",
              "language": string,
              "value": string
            }
          }
        }
      }
    }
  ],
  "textModulesData": [
    {
      "header": string,
      "body": string,
      "localizedHeader": {
        "kind": "walletobjects#localizedString",
        "translatedValues": [
          {
            "kind": "walletobjects#translatedString",
            "language": string,
            "value": string
          }
        ],
        "defaultValue": {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      },
      "localizedBody": {
        "kind": "walletobjects#localizedString",
        "translatedValues": [
          {
            "kind": "walletobjects#translatedString",
            "language": string,
            "value": string
          }
        ],
        "defaultValue": {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      }
    }
  ],
  "linksModuleData": {
    "uris": [
      {
        "kind": "walletobjects#uri",
        "uri": string,
        "description": string,
        "localizedDescription": {
          "kind": "walletobjects#localizedString",
          "translatedValues": [
            {
              "kind": "walletobjects#translatedString",
              "language": string,
              "value": string
            }
          ],
          "defaultValue": {
            "kind": "walletobjects#translatedString",
            "language": string,
            "value": string
          }
        }
      }
    ]
  },
  "classReference": eventticketclass Resource,
  "seatInfo": {
    "kind": "walletobjects#eventSeat",
    "seat": {
      "kind": "walletobjects#localizedString",
      "translatedValues": [
        {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      ],
      "defaultValue": {
        "kind": "walletobjects#translatedString",
        "language": string,
        "value": string
      }
    },
    "row": {
      "kind": "walletobjects#localizedString",
      "translatedValues": [
        {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      ],
      "defaultValue": {
        "kind": "walletobjects#translatedString",
        "language": string,
        "value": string
      }
    },
    "section": {
      "kind": "walletobjects#localizedString",
      "translatedValues": [
        {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      ],
      "defaultValue": {
        "kind": "walletobjects#translatedString",
        "language": string,
        "value": string
      }
    },
    "gate": {
      "kind": "walletobjects#localizedString",
      "translatedValues": [
        {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      ],
      "defaultValue": {
        "kind": "walletobjects#translatedString",
        "language": string,
        "value": string
      }
    }
  },
  "reservationInfo": {
    "kind": "walletobjects#eventReservationInfo",
    "confirmationCode": string
  },
  "ticketHolderName": string,
  "ticketNumber": string,
  "ticketType": {
    "kind": "walletobjects#localizedString",
    "translatedValues": [
      {
        "kind": "walletobjects#translatedString",
        "language": string,
        "value": string
      }
    ],
    "defaultValue": {
      "kind": "walletobjects#translatedString",
      "language": string,
      "value": string
    }
  },
  "faceValue": {
    "kind": "walletobjects#money",
    "micros": long,
    "currencyCode": string
  }
}


Java

// Define Barcode
Barcode barcode = new Barcode().setType("upcA").setValue("123456789012")
    .setAlternateText("12345");

// Define Seat Info
LocalizedStringDefaultValue gateDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("A");
LocalizedString gate = new LocalizedString().setDefaultValue(gateDefault);

LocalizedStringDefaultValue sectionDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("5");
LocalizedString section = new LocalizedString().setDefaultValue(sectionDefault);

LocalizedStringDefaultValue rowDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("G3");
LocalizedString row = new LocalizedString().setDefaultValue(rowDefault);

LocalizedStringDefaultValue seatDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("42");
LocalizedString seat = new LocalizedString().setDefaultValue(seatDefault);

SeatInfo seatInfo = new SeatInfo()
  .setGate(gate)
  .setSection(section)
  .setRow(row)
  .setSeat(seat);

// Define Wallet Object
eventTicketObject object = new eventTicketObject()
  .setClassId('2945482443380251551.ExampleeventTicketClass1')
    .setId('2945482443380251551.ExampleeventTicketObject1')
    .setBarcode(barcode)
    .setState("active")
    .setSeatInfo(seatInfo)
    .setTicketHolderName("Sir Bacon IV")
    .setTicketNumber("123abc");


PHP

$barcode = new Google_Service_Walletobjects_Barcode();
$barcode->setType('upcA');
$barcode->setValue('123456789012');
$barcode->setAlternateText('12345');

// Define Seat Info
$gateDefault = new LocalizedStringDefaultValue()
$gateDefault->setlanguage("en-us")
$gateDefault->setValue("A");
$gate = new LocalizedString();
$gate->setDefaultValue($gateDefault);

$sectionDefault = new LocalizedStringDefaultValue()
$sectionDefault->setlanguage("en-us")
$sectionDefault->setValue("5");
$section = new LocalizedString();
$section->setDefaultValue($sectionDefault);

$rowDefault = new LocalizedStringDefaultValue()
$rowDefault->setlanguage("en-us")
$rowDefault->setValue("G3");
$row = new LocalizedString();
$row->setDefaultValue($rowDefault);

$seatDefault = new LocalizedStringDefaultValue()
$seatDefault->setlanguage("en-us")
$seatDefault->setValue("42");
$seat = new LocalizedString();
$seat->setDefaultValue($seatDefault);

$seatInfo = new SeatInfo();
$seatInfo->setGate(gate);
$seatInfo->setSection(section);
$seatInfo->setRow(row);
$seatInfo->setSeat(seat);


// Create wallet object.
$eventTicketObject = new Google_Service_Walletobjects_eventTicketObject();
$eventTicketObject->setClassId('2945482443380251551.eventTicketClass');
$eventTicketObject->setId('2945482443380251551.eventTicketObject');
$eventTicketObject->setState('active');
$eventTicketObject->setBarcode($barcode);
$eventTicketObject->setSeatInfo($seatInfo);
$eventTicketObject->setTicketHolderName("Sir Bacon IV");
$eventTicketObject->setTicketNumber("123abc");


Python

eventTicket_object = {
    'kind': 'walletobjects#eventTicketObject',
    'classId': '1234567.ExampleEventTicketClass',
    'id': '1234567.ExampleEventTicketObject',
    'state': 'active',
    'barcode': {
        'kind': 'walletobjects#barcode',
        'type': 'upcA',
        'value': '123456789012',
        'alternateText': '12345'
    },
    "seatInfo": {
        "kind": "walletobjects#eventSeat",
        "seat": {
            "kind": "walletobjects#localizedString",
            "defaultValue": {
                "kind": "walletobjects#translatedString",
                "language": 'en-us',
                "value": '42'
            }
        },
        "row": {
            "kind": "walletobjects#localizedString",
            "defaultValue": {
                "kind": "walletobjects#translatedString",
                "language": 'en-us',
                "value": 'G3'
            }
        },
        "section": {
            "kind": "walletobjects#localizedString",
            "defaultValue": {
                "kind": "walletobjects#translatedString",
                "language": 'en-us',
                "value": '5'
            }
        },
        "gate": {
            "kind": "walletobjects#localizedString",
            "defaultValue": {
                "kind": "walletobjects#translatedString",
                "language": 'en-us',
                "value": 'A'
            }
        }
    },
    "ticketHolderName": 'Sir Bacon IV',
    "ticketNumber": '123abc',

}


There are two ways to insert the EventTicketObject.

The first way is to make a POST request (with defined object in body) to the following REST URI:

https://www.googleapis.com/walletobjects/v1/eventTicketObject

The second way is to create a JSON web token (JWT) from the EventTicketObject definition and put the JWT in a Save to Google Pay button. For more information, see Add a web button.

Add EventTicketObject using Android API

Adding EventTicketObjects with the Android API is currently unavailable.

You can use the REST API from your app by invoking a JWT link in an ACTION_VIEW intent, as described in Use JWT link and intent.

Save multiple attendees button

You can save many passes with one Save to Google Pay button or weblink, which is useful when one user purchases multiple tickets for one event.

In order to save multiple attendees, include multiple Passes in the array in the JSON Web Token (JWT) to be signed. The following examples show two variations on how to do this, as described in Make a button to save multiple passes:

  1. This example uses pre-inserted Event Ticket classes and objects categorized as the same group, and it only sends the IDs of each object. Note that the classId property is optional. It's shown here for demonstrative purposes. In this example, the class IDs used are different.

    {
        "aud": "google",
        "origins": [
            "http://localhost:8080"
        ],
        "iss": "your_iam_account@appspot.gserviceaccount.com",
        "iat": 1536970285,
        "typ": "savetoandroidpay",
        "payload": {
            "eventTicketObjects": [
                {
                    "classId": "<my_issuer_id>.EventTicketClass_A",
                    "id": "<my_issuer_id>.EventTicketObject_A"
                },
                {
    	      //this is a different class, but has same class.eventId
                    "classId": "<my_issuer_id>.EventTicketClass_B",
                    "id": "<my_issuer_id>.EventTicketObject_B"
                }
            ]
        }
    }
        
  2. This example defines a class, as well as multiple objects that reference this class. Both the class and the objects are inserted when the user saves the passes.

    {
        "aud": "google",
        "origins": [
            "http://localhost:8080"
        ],
        "iss": "your_iam_account@appspot.gserviceaccount.com",
        "iat": 1536970285,
        "typ": "savetoandroidpay",
        "payload": {
            "eventTicketClasses": [
              {
               "id": "<my_issuer_id>.EventTicketClass",
               "issuerName": "Baconrista Events",
               "reviewStatus": "underReview",
               "eventName": {
                "defaultValue": {
                 "language": "en-US",
                 "value": "Bacon Coffee Fun Event"
                }
               },
               "venue": {
                "name": {
                 "defaultValue": {
                  "language": "En-US",
                  "value": "1600 Amphitheatre Pkwy, Mountain View, CA 94043"
                 }
                },
                "address": {
                 "defaultValue": {
                  "language": "En-US",
                  "value": "1600 Amphitheatre Pkwy, Mountain View, CA 94043"
                 }
                }
               },
               "dateTime": {
                "doorsOpenLabel": "doorsOpen",
                "doorsOpen": "2027-04-12T19:20",
                "start": "2027-04-12T20:00",
                "end": "2027-04-12T21:20"
               }
              }
          ],
          "eventTicketObjects": [ {
            "classId": "<my_issuer_id>.EventTicketClass",
            "id": "<my_issuer_id>.EventTicketObject_1",
            "state": "active",
            },
            {
              "classId": "<my_issuer_id>.EventTicketClass",
              "id": "<my_issuer_id>.EventTicketObject_1",
              "state": "active",
            }
          ]
        }
    }