FOR DEVELOPERS

Add Apple Wallet passes to your app

Send JSON. Receive a signed .pkpass file. AddPass handles Apple Wallet pass generation and signing, so you can focus on your application.

Use one endpoint to create branded generic passes with custom text, colors, images, barcodes, and location fields. Return the pass file directly or request a temporary download link for your delivery flow.

Start in the free developer sandbox, generate your first pass, and choose a paid plan when you are ready for more volume. API keys and the full reference are available in the developer portal.

Building with an AI coding agent?

Give your agent the steps to connect AddPass and generate your first Apple Wallet pass.

import { writeFile } from 'node:fs/promises';

const payload = {
  primaryText: 'Summer Gala',
  headerLabelRight: 'Admit One',
  backgroundColor: '#0F1219',
  thumbnailURL: 'https://cdn.example.com/passes/gala.png',
  barcode: { 
  	format: 'qr',
    message: 'https://example.com/tickets/12345'
  },
};

const response = await fetch('https://app.addpass.io/api/v1/generate', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_KEY_HERE',
    'Content-Type': 'application/json',
    'Accept': 'application/pkpass',
  },
  body: JSON.stringify(payload),
});

if (!response.ok) {
  throw new Error('Generation failed');
}

const buffer = Buffer.from(await response.arrayBuffer());
await writeFile('summer-gala.pkpass', buffer);

Sample JSON

Start with the example below and replace the sample values with your own data. Use a generic pass to show event details, membership information, or a QR code that links to your own check-in flow. Your application controls what the barcode does.

Choose your response: use Accept: application/pkpass for the signed file, or Accept: application/json for a temporary download link. Keep your API key on your server.

AddPass handles signing for passes generated through the API. Get your key and the full field reference in the developer portal, then test a pass on an iPhone before rolling out your integration.
{
  "backgroundColor": "#0F1219",
  "foregroundColor": "#FFFFFF",
  "labelColor": "#FFFFFF",
  "primaryText": "Your Event Name",
  "headerLabelRight": "Admit",
  "headerTextRight": "One",
  "secondaryLabelLeft": "Date",
  "secondaryTextLeft": "August 24, 2025",
  "secondaryLabelRight": "Doors",
  "secondaryTextRight": "6:30 PM",
  "auxiliaryLabelLeft": "Seat",
  "auxiliaryTextLeft": "B12",
  "auxiliaryLabelRight": "Gate",
  "auxiliaryTextRight": "North Entrance",
  "backFields": [
    {
      "label": "Support",
      "value": "support@yourdomain.com"
    },
    {
      "label": "Terms",
      "value": "https://yourdomain.com/terms"
    },
    {
      "label": "Help Desk",
      "value": "(555) 123-9876"
    }
  ],
  "barcode": {
    "format": "qr",
    "message": "https://yourdomain.com/check-in/{{token}}"
  }
}