Eventlayer / Build a flow
Add Apple Wallet tickets
Turn an assigned ticket into a branded pass that an attendee can save from your website.
What you will build
Add a Wallet download to your existing ticket confirmation page. Eventlayer generates the pass; your application decides who can retrieve it and where to show the link. This is an Apple Wallet flow, not a Google Wallet integration.
- 01Assigned ticket
- 02Authorised backend
- 03Signed pass URL
- 04Apple Wallet
Prerequisites
- An assigned test ticket from the registration guide.
- Your backend's Eventlayer API key and a protected ticket page.
- An iPhone to test adding a pass to Apple Wallet.
1. Design the pass
Open Dashboard → Passes, create an Apple Wallet template, and set your colours, text, and imagery. Preview the design, then save it. See Apple Wallet templates for the available fields.
2. Attach the template
Assign it to the event for a shared design, or to a ticket type for a distinct VIP or workshop pass. A ticket type's template takes precedence over the event template. Download a test pass from the dashboard to check the configuration.
3. Generate a download URL on the server
After your backend has verified that the signed-in attendee owns the booking, look up its saved ticket ID. Do not authorize access merely because someone supplied a ticket ID in a URL.
import { Eventlayer } from "eventlayer";
const eventlayer = new Eventlayer();
// Call only after checking the current user's access to this ticket.
export async function walletDownloadUrl(ticketId: string): Promise<string> {
const { data, error } = await eventlayer.tickets.generateAppleWalletPassSignedUrl(
{ ticketId: ticketId },
);
if (error) throw error;
return data.url;
}The signed URL works without an API key and expires after 24 hours. Treat it as a private bearer link: do not publish it in analytics, public pages, or logs. Generate it when the attendee requests a download, not weeks before the event.
4. Show the link on your ticket page
Render the URL returned above into a normal link. For example, this component accepts the URL from your authorized server flow:
export function WalletDownload({ url }: { url: string }) {
return <a href={url}>Add to Apple Wallet</a>;
}On supported iOS browsers, opening the link offers to add the pass. Other
browsers may download a .pkpass file. Keep a normal ticket confirmation
available for attendees who do not use Apple Wallet.
For emails, link to your protected ticket page, where a fresh download URL can be generated. Avoid making a long-lived email depend on an expiring URL.
Test and recover
- Open your confirmation page on an iPhone and add the test pass.
- Verify the attendee, ticket type, event time, venue, and branding.
- Try downloading another attendee's pass through your endpoint; deny access.
- Generate a fresh URL from the ticket page after an older link expires.
- If the pass fails to generate, inspect the API error and template setup; keep the ticket confirmation usable rather than issuing another ticket.
Next steps
Connect the same ticket to your check-in tool. Saving a pass does not check the attendee in, and it does not create another admission.