Eventlayer / Understand the model

Apple Wallet Templates

Customize the look and feel of Apple Wallet passes for your events and ticket types.

Apple Wallet templates let you customize the appearance of .pkpass files generated for tickets. You can set colors, a logo text, and images for the hero strip, logo, and background.

Templates can be assigned at two levels:

  • Event level — Applied to all tickets in the event by default.
  • Ticket type level — Overrides the event template for that specific ticket type.

When a pass is generated, the ticket type template merges with the event template: ticket type fields take precedence, and any null fields fall back to the event template values.

Create templates from Passes in the dashboard. The visual editor lets you choose colors, upload assets, and inspect a live pass preview before assigning the template.

Use the API when templates are generated from a design system, synchronized across workspaces, or managed by your own administration product.

Eventlayer Apple Wallet template editor and pass preview
Edit pass fields and assets while reviewing the resulting Apple Wallet design.

Template properties

PropertyTypeDescription
background_colorstring | nullBackground color in CSS format (e.g. rgb(60, 60, 60)).
foreground_colorstring | nullText color in CSS format (e.g. rgb(255, 255, 255)).
label_colorstring | nullLabel color in CSS format (e.g. rgb(200, 200, 200)).
logo_textstring | nullText displayed next to the pass logo.
header_textstring | nullText displayed in the header row of the pass.
fine_printstring | nullFine print text shown on the back of the pass.
sharing_prohibitedboolean | nullPrevents sharing the pass via Wallet's sharing feature.
grouping_identifierstring | nullGroups related passes together in Wallet.
show_barcodeboolean | nullWhether the QR code barcode is shown on the pass. Defaults to true. Set to false to hide it.

The template values are written into the pass JSON during generation.

Apple requires appLaunchURL to be paired with an associated App Store app. Contact Eventlayer support to enable this integration for your account. If it is not enabled, Eventlayer safely omits appLaunchURL from the pass.

The response also includes hero_image_url, logo_image_url, and background_image_url. These are read-only: they are set by the image upload endpoint below, not via create or update.

Image types

Images are uploaded as multipart/form-data to POST /v1/apple-wallet-templates/{id}/images (fields: image_type and file). Uploads are validated before storage: formats PNG, JPEG, or WebP, max 10MB, and within the maximum dimensions for the slot.

Image TypePass FilePurposeMax Dimensions
herostrip.pngHero image displayed on the pass strip.2488 x 840
logologo.pngLogo image displayed next to the logo text.640 x 220
backgroundbackground.pngBackground image behind the pass content.2488 x 2160

Automating templates with the API

// Create a template
const { data: template, error: templateError } =
  await eventlayer.appleWalletTemplates.create({
    backgroundColor: "rgb(60, 60, 60)",
    foregroundColor: "rgb(255, 255, 255)",
    logoText: "Acme Events",
    showBarcode: true,
  });
if (templateError) throw templateError;

// List templates
const { data: page, error: pageError } =
  await eventlayer.appleWalletTemplates.list();
if (pageError) throw pageError;
const { items: templates, meta } = page;

// Or iterate transparently across every page
for await (const {
  data: template,
  error,
} of eventlayer.appleWalletTemplates.listAll()) {
  if (error) throw error;
  console.log(template);
}

// Upload an image to a template (multipart: hero, logo, or background)
const { data: updated, error: updatedError } =
  await eventlayer.appleWalletTemplates.uploadImage({
    templateId: template.id,
    imageType: "hero",
    file: file,
    contentType: "image/png",
  });
if (updatedError) throw updatedError;

// Delete an image from a template
await eventlayer.appleWalletTemplates.deleteImage({
  templateId: template.id,
  imageType: "hero",
});

// Assign template to an event
await eventlayer.events.update({
  eventId: "ev_123",
  appleWalletTemplateId: template.id,
});

// Override template for a specific ticket type
await eventlayer.ticketTypes.update({
  ticketTypeId: "tt_123",
  appleWalletTemplateId: template.id,
});

// Remove template assignment (set to null)
await eventlayer.events.update({
  eventId: "ev_123",
  appleWalletTemplateId: null,
});

Images are uploaded directly to the API as multipart/form-data (fields: image_type and file). Uploads are validated before storage: images must be PNG, JPEG, or WebP, no larger than 10MB, and within the maximum dimensions for their slot (hero 2488x840, logo 640x220, background 2488x2160). The stored URL must be publicly accessible at pass-generation time.

Generating passes

Once a template is assigned to an event or ticket type, all passes generated for that event will use the template's colors and hero image. See the Tickets page for details on generating .pkpass files.

See the Apple Wallet Templates API Reference for full request and response schemas.

Next steps