Skip to content

Google Wallet API

The Google Wallet API lets you create, update, list, and manage Google Wallet passes programmatically. It supports the same operations the pass builder in the Control Panel performs.

Use it to issue loyalty cards, offers, gift cards, event tickets, flight boarding passes, transit tickets, and generic passes, and to push live updates to passes already saved on your users’ devices.

https://apple-passkit.svc-nue.pushwoosh.com

All endpoints are served over HTTPS. Requests and responses use application/json unless noted otherwise.

Authentication

Anchor link to

Every request must include an Authorization header with your Pushwoosh API access token:

Authorization: Token <api-token>

The account that owns the token must own the application referenced by applicationCode. A request for an application that belongs to another account returns 403 Forbidden.

Conventions

Anchor link to
  • Field naming: JSON fields use lowerCamelCase (for example, serialNumber, hexBackgroundColor, logoUrl).
  • Unpopulated fields: responses include all fields, even when empty or zero-valued.
  • Identity: the serialNumber is always assigned by the server when a pass is created. Any value you send on create is ignored. The full Google Wallet object id is {issuerId}.{serialNumber}.
  • Images: logoUrl and heroImageUrl are public HTTPS URLs to images Google fetches—not uploaded files.
  • Pass style: exactly one style object (generic, offer, loyalty, eventTicket, giftCard, flight, or transit) must be set on a pass. The style cannot change after creation.

Error responses

Anchor link to
HTTP statusMeaning
400 Bad RequestInvalid argument—a required field is missing or malformed.
401 UnauthorizedMissing or invalid Authorization header.
403 ForbiddenThe application does not belong to the caller’s account.
404 Not FoundThe pass, template, or application was not found.
503 Service UnavailableThe service is at capacity or temporarily unavailable.
MethodPathDescription
POST/api/google/pass/validateValidate a pass configuration
POST/api/google/pass/createCreate a new pass object and get a save link
POST/api/google/pass/update/{serialNumber}Update an existing pass; Google delivers the change
GET/api/google/pass/{applicationCode}/{serialNumber}/save-linkGet an “Add to Google Wallet” save link
GET/api/google/pass/{applicationCode}/{serialNumber}Get a single pass
GET/api/google/passesList all passes for an application
POST/api/google/pass/{applicationCode}/{serialNumber}/stateActivate or invalidate a pass
DELETE/api/google/pass/{applicationCode}/{serialNumber}Delete a pass
GET/api/google/configGet the application’s Google Wallet configuration
GET/api/google/templatesList available pass templates
GET/api/google/templates/{filename}Get a single template

Create a pass

Anchor link to

Creates the pass class and object in Google Wallet, then returns the server-assigned serial number, the full object id, and an “Add to Google Wallet” save link.

POST /api/google/pass/create

Request body

Anchor link to
ParameterTypeRequiredDescription
passobjectYesThe pass object describing the pass. Exactly one style must be set.
userIdstringYesThe Pushwoosh User ID the pass is issued to.
applicationCodestringYesThe Pushwoosh application code.
Request example
Anchor link to
{
"applicationCode": "XXXXX-XXXXX",
"userId": "user-123",
"pass": {
"hexBackgroundColor": "#3c414c",
"logoUrl": "https://cdn.acme.com/logo.png",
"loyalty": {
"programName": "Acme Rewards",
"accountName": "Jane Doe",
"accountId": "1234567890",
"pointsLabel": "Points",
"pointsBalance": "1200",
"rewardsTier": "Gold"
},
"barcode": {
"format": "QR_CODE",
"value": "1234567890"
}
}
}
FieldTypeDescription
serialNumberstringServer-assigned unique identity of the created pass.
objectIdstringFull Google Wallet object id: {issuerId}.{serialNumber}.
saveLinkstring”Add to Google Wallet” link: https://pay.google.com/gp/v/save/{jwt}.
messagestringResult message.
Response example
Anchor link to
{
"serialNumber": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"objectId": "XXXXXXXXXXXXXXX.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"saveLink": "https://pay.google.com/gp/v/save/{jwt}",
"message": "Pass created successfully"
}

Validate a pass

Anchor link to

Checks a pass configuration against Google’s requirements without creating it. Useful before calling create.

POST /api/google/pass/validate

Request body

Anchor link to
ParameterTypeRequiredDescription
passobjectYesThe pass object to validate.
FieldTypeDescription
validbooleanWhether the pass passes validation.
errorsarray of stringsBlocking problems that must be fixed.
warningsarray of stringsNon-blocking advisories.

Update a pass

Anchor link to

Patches the pass object with new content. Google then delivers the updated version to every device that saved the pass. Optionally sends an Android notification with the update.

POST /api/google/pass/update/{serialNumber}

Path parameters

Anchor link to
ParameterTypeDescription
serialNumberstringThe serial number returned when the pass was created.

Request body

Anchor link to
ParameterTypeRequiredDescription
updatesobjectYesThe pass object with the new content. The style cannot change.
applicationCodestringYesThe Pushwoosh application code.
notifyMessagestringNoWhen non-empty, push an Android notification with this text to everyone who saved the pass. Empty means a silent update.
notifyOnUpdatebooleanNoRequest a field-update notification. Only loyalty, eventTicket, and flight passes actually notify; other styles accept the flag but never send one. Notifications fire only within 3 hours of a relevant start time, and Google limits them to 3 notifications per pass per 24 hours.
FieldTypeDescription
successbooleanWhether the update succeeded.
messagestringResult message.
Anchor link to

Returns an “Add to Google Wallet” save link for an already created pass. The pass object must already exist (created via Create a pass).

GET /api/google/pass/{applicationCode}/{serialNumber}/save-link

FieldTypeDescription
saveLinkstringhttps://pay.google.com/gp/v/save/{jwt}.

Get a pass

Anchor link to

Returns a single stored pass, including its full pass object.

GET /api/google/pass/{applicationCode}/{serialNumber}

Returns { "pass": { ... } }, a single pass record.

List passes

Anchor link to

Returns a paginated, sorted list of the passes stored for an application.

GET /api/google/passes?applicationCode=XXXXX-XXXXX&page=0&perPage=20

Query parameters

Anchor link to
ParameterTypeRequiredDescription
applicationCodestringYesThe Pushwoosh application code.
orderBystringNoSort field: UPDATED (default) or CREATED.
orderDirectionstringNoSort direction: DESC (default, newest first) or ASC.
pageintegerNoZero-based page index. Defaults to 0.
perPageintegerNoPage size. 0 or omitted uses the server default.
FieldTypeDescription
passesarray of objectsThe current page of pass records.
pageintegerThe returned page index.
perPageintegerThe page size used for this response.
totalintegerTotal number of passes for the application across all pages.

Set pass state

Anchor link to

Activates or invalidates a pass. An invalidated (inactive) pass moves to the user’s Expired passes section in Google Wallet; the record is kept so it can be re-activated.

POST /api/google/pass/{applicationCode}/{serialNumber}/state

Request body

Anchor link to
ParameterTypeRequiredDescription
activebooleanYestrue sets the pass to ACTIVE; false invalidates it (INACTIVE).

Returns an empty object {} on success.

Delete a pass

Anchor link to

Invalidates the pass in Google and removes its stored record in Pushwoosh.

DELETE /api/google/pass/{applicationCode}/{serialNumber}

Returns an empty object {} on success.

Get configuration

Anchor link to

Returns the Google Wallet configuration state for an application.

GET /api/google/config?applicationCode=XXXXX-XXXXX

FieldTypeDescription
hasServiceAccountbooleanWhether a service account key is configured.
issuerIdstringThe configured Google Pay & Wallet Console Issuer ID.
serviceAccountEmailstringThe client_email of the configured service account.

List the available example pass templates, or fetch one as a pass object you can use as a starting point.

GET /api/google/templates — returns { "templates": [ { "filename", "name", "description", "style" } ] }.

GET /api/google/templates/{filename} — returns { "template": { ...pass object... } }.

Object reference

Anchor link to

Pass object

Anchor link to
FieldTypeDescription
serialNumberstringAssigned by the server on create; identifies the pass.
generic / offer / loyalty / eventTicket / giftCard / flight / transitobjectThe pass style. Exactly one must be set. See the style objects below.
hexBackgroundColorstringCard background color, #rrggbb.
logoUrlstringPublic HTTPS URL of the logo image. Required for loyalty and transit.
heroImageUrlstringPublic HTTPS URL of a wide banner image.
barcodeobjectBarcode shown on the pass.
textModulesarrayText modules shown in the details view.
linksarrayLink modules shown in the details view.
expirationTimestringISO 8601 time when Google auto-expires the pass. Empty means no expiry.
appLinkobjectApp link: a CTA button on the front of the pass.
locationsarrayLocations that trigger a geofenced notification (max 10).
holdersPolicystringWho may save the pass: ONE_USER_ALL_DEVICES (default), ONE_USER_ONE_DEVICE, or MULTIPLE_HOLDERS.

Generic object

Anchor link to
FieldTypeDescription
cardTitlestringRequired. The issuer/program name at the top of the card.
headerstringRequired. The main title of the card.
subheaderstringSecondary title.
cardFieldsarrayUp to 6 text modules pinned to the front (up to 3 rows of 2).

Offer object

Anchor link to
FieldTypeDescription
titlestringRequired. For example, 20% off everything.
providerstringRequired. The merchant name.
detailsstringOffer details.
finePrintstringTerms and conditions.
redemptionChannelstringONLINE, INSTORE, BOTH (default), or TEMPORARY_PRICE_REDUCTION.
issuerNamestringShown on Google’s “issued by” surfaces; defaults to provider.

Loyalty object

Anchor link to
FieldTypeDescription
programNamestringRequired. Requires logoUrl on the pass.
accountNamestringMember name shown on the card.
accountIdstringMember id shown on the card.
pointsLabelstringFor example, Points. Shown only with a balance.
pointsBalancestringThe points balance.
rewardsTierstringFor example, Gold.
rewardsTierLabelstringLabel next to the tier; defaults to Tier.
issuerNamestringDefaults to programName.

Event ticket object

Anchor link to
FieldTypeDescription
eventNamestringRequired.
venueName / venueAddressstringVenue details.
startDateTime / endDateTimestringISO 8601 with offset (for example, 2026-07-01T19:30:00+02:00).
ticketHolderName / ticketNumber / ticketTypestringHolder and ticket details.
section / row / seat / gatestringSeating details.
issuerNamestringDefaults to eventName.

Gift card object

Anchor link to
FieldTypeDescription
merchantNamestringRequired.
cardNumberstringRequired.
pinstringCard PIN.
balancestringDecimal amount, for example 25.00. Requires balanceCurrency.
balanceCurrencystringISO 4217 currency code, for example USD.
issuerNamestringDefaults to merchantName.

Flight object

Anchor link to
FieldTypeDescription
carrierIataCodestringRequired. 2-letter IATA code, for example LX.
airlineNamestringAirline display name.
flightNumberstringRequired. Digits only, for example 113.
originAirportCode / destinationAirportCodestringRequired. 3-letter IATA codes.
originTerminal / originGate / destinationTerminalstringTerminal and gate details.
departureDateTimestringRequired. Origin airport local time, ISO 8601 without offset (for example, 2026-09-01T06:30:00).
boardingTime / arrivalDateTimestringSame local format. arrivalDateTime is destination local time.
passengerNamestringRequired.
confirmationCode / seatNumber / seatClass / boardingGroupstringPassenger details.
issuerNamestringDefaults to airlineName, then the carrier code.

Transit object

Anchor link to
FieldTypeDescription
transitTypestringRequired. BUS, RAIL, TRAM, FERRY, or OTHER.
transitOperatorNamestringRequired. Requires logoUrl on the pass.
passengerNamestringRequired.
ticketNumberstringTicket number.
tripTypestringONE_WAY (default) or ROUND_TRIP.
legsarrayOne or more transit legs in travel order.
issuerNamestringDefaults to transitOperatorName.

Transit leg object

Anchor link to
FieldTypeDescription
originName / destinationNamestringRequired.
departureDateTime / arrivalDateTimestringISO 8601; offset optional (local time when omitted).
platform / coach / seatstringBoarding details.
fareNamestringFor example, Anytime Single.

Barcode object

Anchor link to
FieldTypeDescription
formatstringQR_CODE, PDF_417, AZTEC, CODE_128, EAN_13, and other Google Wallet barcode types.
valuestringData encoded in the barcode.
altTextstringText shown below the barcode.

Text module object

Anchor link to
FieldTypeDescription
idstringIdentifier of the module.
headerstringModule heading.
bodystringModule text.
Anchor link to
FieldTypeDescription
uristringExternal link URL.
descriptionstringLink label shown in the details view.
Anchor link to
FieldTypeDescription
uristringWeb URL or deep-link target URI.
androidPackageNamestringOptional. When set, opens the Android app.
descriptionstringInternal description of the target URI (not a visible button label); defaults to the URI.

Location object

Anchor link to
FieldTypeDescription
latitudenumber-90.0 to +90.0.
longitudenumber-180.0 to +180.0.

Pass record object

Anchor link to

Returned by list/get endpoints.

FieldTypeDescription
serialNumberstringPass serial number.
objectIdstringFull Google Wallet object id {issuerId}.{serialNumber}.
cardTitlestringDisplay title/header for the pass.
headerstringSecondary display title.
userIdstringPushwoosh User ID the pass was issued to.
createdAt / updatedAtstringCreation and last-update timestamps.
statestringACTIVE or INACTIVE.
stylestringgeneric, offer, loyalty, eventTicket, giftCard, flight, or transit.
passobjectThe full pass object, for editing.