Server definition
- Hash
- sha256:520bc28d2181aeb8a9f5bbd83e9441303efb3170f22c0ce7d6ec4fdedbfbc96d
- What it is
- What a remote MCP server returned when asked what it offers: 47 tools
The blob, as servednamed by its sha256
{
"instructions": "PassFast MCP exposes the public PassFast HTTP API as tools named after OpenAPI operationIds (https://passfa.st/openapi.yaml).\nAuthenticate by pasting a secret key once in the MCP client config: Authorization: Bearer sk_live_… Omit X-App-Id by default; set it only for multi-app orgs. initialize and tools/list validate the key the same way as tools/call (invalid or revoked sk_live_ is rejected). No OAuth, no PassFast agent account, no chat UI — the agent is the MCP client (Cursor / Claude / ChatGPT / Codex / Grok). This server accepts only sk_live_, never pk_live_.\nDo not invent endpoints. Tool names match operationIds exactly.\nMember and invitation tools (listMembers, inviteMember, acceptInvitation, updateMemberRole, removeMember, listInvitations, revokeInvitation) require a user JWT and are out of scope for key-auth MCP v1. Use the dashboard or HTTP API with a session JWT.\ngeneratePass and batchGeneratePasses bill and rate-limit exactly as the HTTP API does — there is no extra MCP spend. First 100 generates are free once; then $0.015 per active pass / month. Expired passes still bill until voided or deleted. batchGeneratePasses proxies POST https://passfa.st/api/passes/batch (max 100 rows, same free-100 / card gates; 101 rows → 400 row_limit_exceeded).\nInstall docs: https://passfa.st/docs/mcp",
"tools": [
{
"description": "Batch generate wallet passes\n\nGenerate up to 100 wallet passes in one **synchronous** request.\nEach accepted row is one `POST /generate-pass` (same free-100 and\ncard-on-file gates as a single generate). Optional\n`POST /share-pass/create` per successful row when `create_share_links`\nis true (default).\n\n**Host:** `https://passfa.st/api/passes/batch` (site / Vercel preview).\nThis is not an `api.passfa.st` Edge Function. MCP tool:\n`batchGeneratePasses` (secret key `sk_live_` only) — same path and\nbody as this operation.\n\n**Auth:** `Authorization: Bearer sk_live_…` or `pk_live_…` (scope\n`passes:create`). A Supabase user JWT is also accepted (dashboard\nsession). Send `X-App-Id` for multi-app orgs and `X-Org-Id` as\nelsewhere.\n\n**Body:** mapped `rows` (same shape the dashboard posts) **or** raw\n`csv` plus optional `column_map`. Do not send both.\n\n**Limits:** more than 100 rows → `400 row_limit_exceeded` **before**\nany generate. Empty body / empty CSV → `400 empty_batch` or\n`invalid_csv`. Bad template → `400 invalid_template`. Missing or\ninvalid Bearer → `401 unauthorized`.\n\n**Billing:** a row that hits the free-100 / card gate returns the same\n`402` codes as generate-pass (`free_limit_reached`,\n`subscription_canceled`, `payment_past_due`). Remaining rows stop.\nAlready-created rows stay. HTTP `402` is returned only when **zero**\nrows succeeded; a later-row 402 after some successes is HTTP `200`\nwith `stopped_reason` and per-row results.\n\n**Partial failures:** other per-row errors (validation, duplicate\nserial, share-link warning) continue. The response lists every\nprocessed row.\n\n**Scope:** `passes:create`\n\nMaps to OpenAPI operationId `batchGeneratePasses` — POST /passes/batch.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"column_map": {
"description": "Optional CSV header map when `csv` is sent.",
"properties": {
"expires_at": {
"type": "string"
},
"external_id": {
"type": "string"
},
"fields": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"serial_number": {
"type": "string"
}
},
"type": "object"
},
"create_share_links": {
"default": true,
"description": "When true, call POST /share-pass/create after each successful generate.",
"type": "boolean"
},
"csv": {
"description": "Raw CSV text with a header row. Do not send together with rows.",
"type": "string"
},
"rows": {
"description": "Mapped rows (dashboard / scripts). Do not send together with csv.",
"items": {
"properties": {
"data": {
"additionalProperties": true,
"description": "Template field_schema values.",
"type": "object"
},
"expires_at": {
"format": "date-time",
"type": "string"
},
"external_id": {
"type": "string"
},
"serial_number": {
"description": "Optional. Auto-generated when omitted.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"template_id": {
"description": "ID of a published template.",
"format": "uuid",
"type": "string"
},
"wallet_type": {
"default": "apple",
"enum": [
"apple",
"google",
"both"
],
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"template_id"
],
"type": "object"
},
"name": "batchGeneratePasses",
"outputSchema": null
},
{
"description": "Create an API key\n\nCreates a new API key. The response contains `id`, `name`, `key_type`,\n`key_prefix`, `raw_key`, and `message`. The full raw key is shown only\nonce and cannot be retrieved again.\n\n**Scope:** `org:manage`\n\nMaps to OpenAPI operationId `createApiKey` — POST /manage-keys.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"key_type": {
"description": "Key type. Secret keys have full access; publishable keys have limited scopes.",
"enum": [
"secret",
"publishable"
],
"type": "string"
},
"name": {
"description": "Human-readable label for the key.",
"type": "string"
}
},
"required": [
"name",
"key_type"
],
"type": "object"
},
"name": "createApiKey",
"outputSchema": null
},
{
"description": "Create a new app\n\nCreates a new app within the organization.\n\n**Scope:** `org:manage`\n\nMaps to OpenAPI operationId `createApp` — POST /manage-org/app.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"name": {
"default": "New App",
"description": "App display name.",
"type": "string"
}
},
"type": "object"
},
"name": "createApp",
"outputSchema": null
},
{
"description": "Create a share token\n\nCreates a public share token for a pass, enabling distribution via URL,\nQR code, or messaging. The share URL points to a public page where\nrecipients can add the pass to Apple or Google Wallet without logging in.\n\nIdempotent — if the pass already has a share token, the existing token\nis returned (200) instead of creating a new one (201).\n\nFor dual-wallet passes (same serial number with both Apple and Google),\nthe share token is automatically applied to all sibling passes.\n\n**Scope:** `passes:manage`\n\nMaps to OpenAPI operationId `createShareToken` — POST /share-pass/create.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"pass_id": {
"description": "ID of the pass to share.",
"format": "uuid",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"pass_id"
],
"type": "object"
},
"name": "createShareToken",
"outputSchema": null
},
{
"description": "Create a template\n\nCreates a new pass template in draft status.\n\n**Scope:** `templates:manage`\n\nMaps to OpenAPI operationId `createTemplate` — POST /manage-templates.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"background_image_id": {
"format": "uuid",
"type": "string"
},
"description": {
"description": "Optional description of the template.",
"type": "string"
},
"field_schema": {
"additionalProperties": true,
"description": "Optional JSON schema for validating dynamic data.",
"type": "object"
},
"google_logo_image_id": {
"format": "uuid",
"type": "string"
},
"google_pass_type": {
"description": "Google Wallet class type override. If unset, PassFast auto-maps from\nthe Apple `pass_style` (+ `structure.transitType` for boardingPass):\n- `generic` → generic\n- `storeCard` → loyalty (or giftCard via override)\n- `eventTicket` → eventTicket\n- `coupon` → offer\n- `boardingPass` + transitType PKTransitTypeAir → flight\n- `boardingPass` + transitType Train/Bus/Boat/Generic → transit\n",
"enum": [
"generic",
"loyalty",
"eventTicket",
"offer",
"flight",
"transit",
"giftCard"
],
"type": "string"
},
"google_wide_logo_image_id": {
"format": "uuid",
"type": "string"
},
"icon_image_id": {
"format": "uuid",
"type": "string"
},
"logo_image_id": {
"format": "uuid",
"type": "string"
},
"name": {
"description": "Human-readable template name.",
"type": "string"
},
"pass_style": {
"description": "Apple Wallet pass style.",
"enum": [
"boardingPass",
"coupon",
"eventTicket",
"generic",
"storeCard"
],
"type": "string"
},
"strip_image_id": {
"format": "uuid",
"type": "string"
},
"structure": {
"additionalProperties": true,
"description": "Complete pass structure. Drives both Apple `pass.json` emission and\nGoogle Wallet class/object JSON. Fields are grouped below by platform,\nbut the single JSONB object carries all of them for dual-wallet templates.\n",
"properties": {
"accessibilityURL": {
"format": "uri",
"type": "string"
},
"addChangeInfoURL": {
"format": "uri",
"type": "string"
},
"addOnURL": {
"format": "uri",
"type": "string"
},
"additionalInfoFields": {
"description": "Apple poster-style eventTicket only. Rendered inside the eventTicket object.",
"items": {
"description": "A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n",
"properties": {
"attributedValue": {
"description": "Apple: HTML-flavored value (used for rendering links, etc.).",
"type": "string"
},
"changeMessage": {
"description": "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value.",
"type": "string"
},
"currencyCode": {
"description": "Apple: ISO 4217 currency code. Value is formatted as currency.",
"type": "string"
},
"dataDetectorTypes": {
"description": "Apple: back fields only. Limits which kinds of data are detected and linked.",
"items": {
"enum": [
"PKDataDetectorTypePhoneNumber",
"PKDataDetectorTypeLink",
"PKDataDetectorTypeAddress",
"PKDataDetectorTypeCalendarEvent"
],
"type": "string"
},
"type": "array"
},
"dataKey": {
"description": "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n",
"type": "string"
},
"dateStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"ignoresTimeZone": {
"description": "Apple: whether to display the date in the pass's local time rather than the user's.",
"type": "boolean"
},
"isRelative": {
"description": "Apple: whether the date is displayed relative to the current time.",
"type": "boolean"
},
"key": {
"description": "Unique key identifying the field. Must be unique across ALL field groups in a template.",
"type": "string"
},
"label": {
"description": "Human-readable label rendered above the value on the pass face.",
"type": "string"
},
"numberStyle": {
"enum": [
"PKNumberStyleDecimal",
"PKNumberStylePercent",
"PKNumberStyleScientific",
"PKNumberStyleSpellOut"
],
"type": "string"
},
"row": {
"description": "Apple: auxiliary/secondary layout control (0 or 1).",
"enum": [
0,
1
],
"type": "integer"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.",
"type": "object"
},
"textAlignment": {
"enum": [
"PKTextAlignmentLeft",
"PKTextAlignmentCenter",
"PKTextAlignmentRight",
"PKTextAlignmentNatural"
],
"type": "string"
},
"timeStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"value": {
"description": "Static value for the field. Number types are preserved for\nApple's `numberStyle` / `currencyCode` formatters. For dynamic\nvalues, omit `value` and set `dataKey` instead.\n",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"appLaunchURL": {
"format": "uri",
"type": "string"
},
"associatedStoreIdentifiers": {
"description": "Apple iTunes app IDs for 'Open in App'.",
"items": {
"type": "integer"
},
"type": "array"
},
"auxiliaryFields": {
"items": {
"description": "A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n",
"properties": {
"attributedValue": {
"description": "Apple: HTML-flavored value (used for rendering links, etc.).",
"type": "string"
},
"changeMessage": {
"description": "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value.",
"type": "string"
},
"currencyCode": {
"description": "Apple: ISO 4217 currency code. Value is formatted as currency.",
"type": "string"
},
"dataDetectorTypes": {
"description": "Apple: back fields only. Limits which kinds of data are detected and linked.",
"items": {
"enum": [
"PKDataDetectorTypePhoneNumber",
"PKDataDetectorTypeLink",
"PKDataDetectorTypeAddress",
"PKDataDetectorTypeCalendarEvent"
],
"type": "string"
},
"type": "array"
},
"dataKey": {
"description": "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n",
"type": "string"
},
"dateStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"ignoresTimeZone": {
"description": "Apple: whether to display the date in the pass's local time rather than the user's.",
"type": "boolean"
},
"isRelative": {
"description": "Apple: whether the date is displayed relative to the current time.",
"type": "boolean"
},
"key": {
"description": "Unique key identifying the field. Must be unique across ALL field groups in a template.",
"type": "string"
},
"label": {
"description": "Human-readable label rendered above the value on the pass face.",
"type": "string"
},
"numberStyle": {
"enum": [
"PKNumberStyleDecimal",
"PKNumberStylePercent",
"PKNumberStyleScientific",
"PKNumberStyleSpellOut"
],
"type": "string"
},
"row": {
"description": "Apple: auxiliary/secondary layout control (0 or 1).",
"enum": [
0,
1
],
"type": "integer"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.",
"type": "object"
},
"textAlignment": {
"enum": [
"PKTextAlignmentLeft",
"PKTextAlignmentCenter",
"PKTextAlignmentRight",
"PKTextAlignmentNatural"
],
"type": "string"
},
"timeStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"value": {
"description": "Static value for the field. Number types are preserved for\nApple's `numberStyle` / `currencyCode` formatters. For dynamic\nvalues, omit `value` and set `dataKey` instead.\n",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"backFields": {
"items": {
"description": "A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n",
"properties": {
"attributedValue": {
"description": "Apple: HTML-flavored value (used for rendering links, etc.).",
"type": "string"
},
"changeMessage": {
"description": "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value.",
"type": "string"
},
"currencyCode": {
"description": "Apple: ISO 4217 currency code. Value is formatted as currency.",
"type": "string"
},
"dataDetectorTypes": {
"description": "Apple: back fields only. Limits which kinds of data are detected and linked.",
"items": {
"enum": [
"PKDataDetectorTypePhoneNumber",
"PKDataDetectorTypeLink",
"PKDataDetectorTypeAddress",
"PKDataDetectorTypeCalendarEvent"
],
"type": "string"
},
"type": "array"
},
"dataKey": {
"description": "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n",
"type": "string"
},
"dateStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"ignoresTimeZone": {
"description": "Apple: whether to display the date in the pass's local time rather than the user's.",
"type": "boolean"
},
"isRelative": {
"description": "Apple: whether the date is displayed relative to the current time.",
"type": "boolean"
},
"key": {
"description": "Unique key identifying the field. Must be unique across ALL field groups in a template.",
"type": "string"
},
"label": {
"description": "Human-readable label rendered above the value on the pass face.",
"type": "string"
},
"numberStyle": {
"enum": [
"PKNumberStyleDecimal",
"PKNumberStylePercent",
"PKNumberStyleScientific",
"PKNumberStyleSpellOut"
],
"type": "string"
},
"row": {
"description": "Apple: auxiliary/secondary layout control (0 or 1).",
"enum": [
0,
1
],
"type": "integer"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.",
"type": "object"
},
"textAlignment": {
"enum": [
"PKTextAlignmentLeft",
"PKTextAlignmentCenter",
"PKTextAlignmentRight",
"PKTextAlignmentNatural"
],
"type": "string"
},
"timeStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"value": {
"description": "Static value for the field. Number types are preserved for\nApple's `numberStyle` / `currencyCode` formatters. For dynamic\nvalues, omit `value` and set `dataKey` instead.\n",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"backgroundColor": {
"description": "Accepts `#rrggbb`, `#rgb`, or `rgb(r,g,b)`. Apple emits `rgb(...)`; Google emits `#rrggbb`.",
"type": "string"
},
"bagDropURL": {
"format": "uri",
"type": "string"
},
"baggagePolicyURL": {
"format": "uri",
"type": "string"
},
"balanceCurrencyCode": {
"description": "ISO 4217 code used when `balance` is supplied as a plain number (dollars → micros).",
"type": "string"
},
"balanceDataKey": {
"type": "string"
},
"barcode": {
"properties": {
"altText": {
"description": "Static alternate text. Only used when `altTextDataKey` is not set.",
"type": "string"
},
"altTextDataKey": {
"description": "Key in generate-pass `data` object whose value becomes the human-readable alt text.",
"type": "string"
},
"format": {
"description": "Apple Wallet barcode format. Automatically mapped to Google's equivalent (QR_CODE, PDF_417, AZTEC, CODE_128) when the template targets Google Wallet.",
"enum": [
"PKBarcodeFormatQR",
"PKBarcodeFormatPDF417",
"PKBarcodeFormatAztec",
"PKBarcodeFormatCode128"
],
"type": "string"
},
"messageDataKey": {
"description": "Key in generate-pass `data` object that holds the barcode message.",
"type": "string"
},
"messageEncoding": {
"default": "iso-8859-1",
"description": "Text encoding for the barcode message. Default is `iso-8859-1` per Apple spec.",
"type": "string"
}
},
"type": "object"
},
"beacons": {
"items": {
"properties": {
"major": {
"type": "integer"
},
"minor": {
"type": "integer"
},
"proximityUUID": {
"format": "uuid",
"type": "string"
},
"relevantText": {
"type": "string"
}
},
"required": [
"proximityUUID"
],
"type": "object"
},
"type": "array"
},
"callbackOptions": {
"additionalProperties": true,
"type": "object"
},
"cardNumberDataKey": {
"type": "string"
},
"cardNumberLabel": {
"type": "string"
},
"changeSeatURL": {
"format": "uri",
"type": "string"
},
"checkInURL": {
"format": "uri",
"type": "string"
},
"contactVenueEmail": {
"format": "email",
"type": "string"
},
"contactVenuePhoneNumber": {
"type": "string"
},
"contactVenueWebsite": {
"format": "uri",
"type": "string"
},
"dateTimeEnd": {
"format": "date-time",
"type": "string"
},
"dateTimeStart": {
"format": "date-time",
"type": "string"
},
"description": {
"description": "Apple top-level description. Defaults to 'PassFast Pass' if unset.",
"type": "string"
},
"destination": {
"properties": {
"airportIataCode": {
"description": "3-letter IATA airport code (e.g. `LHR`, `JFK`).",
"type": "string"
},
"gate": {
"type": "string"
},
"terminal": {
"type": "string"
}
},
"required": [
"airportIataCode"
],
"type": "object"
},
"directionsInformationURL": {
"format": "uri",
"type": "string"
},
"discoverableProgram": {
"additionalProperties": true,
"description": "Google Loyalty: public program listing. Requires `countryCode` on the class (set via `discoverableProgram`).",
"type": "object"
},
"doorsOpen": {
"format": "date-time",
"type": "string"
},
"enableSmartTap": {
"type": "boolean"
},
"entertainmentURL": {
"format": "uri",
"type": "string"
},
"eventLogoText": {
"type": "string"
},
"eventNumberDataKey": {
"type": "string"
},
"eventNumberLabel": {
"type": "string"
},
"flightHeader": {
"properties": {
"carrier": {
"properties": {
"carrierIataCode": {
"description": "2-letter IATA carrier code (e.g. `BA`, `AA`).",
"type": "string"
}
},
"required": [
"carrierIataCode"
],
"type": "object"
},
"flightNumber": {
"description": "Flight number (digits only per Google spec).",
"type": "string"
}
},
"required": [
"carrier",
"flightNumber"
],
"type": "object"
},
"flightStatusURL": {
"format": "uri",
"type": "string"
},
"footerBackgroundColor": {
"type": "string"
},
"foregroundColor": {
"type": "string"
},
"gateDataKey": {
"type": "string"
},
"googleLogoText": {
"description": "Google: brand/card title (required for Google Wallet rendering).",
"type": "string"
},
"googleTransitType": {
"description": "Google Wallet transit class transitType enum. Auto-derived from Apple's `transitType` if not set explicitly.",
"enum": [
"BUS",
"RAIL",
"TRAM",
"FERRY",
"OTHER"
],
"type": "string"
},
"groupingIdentifier": {
"description": "Apple: groups related passes. Also mapped to Google's `groupingInfo.groupingId` on the object.",
"type": "string"
},
"headerFields": {
"items": {
"description": "A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n",
"properties": {
"attributedValue": {
"description": "Apple: HTML-flavored value (used for rendering links, etc.).",
"type": "string"
},
"changeMessage": {
"description": "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value.",
"type": "string"
},
"currencyCode": {
"description": "Apple: ISO 4217 currency code. Value is formatted as currency.",
"type": "string"
},
"dataDetectorTypes": {
"description": "Apple: back fields only. Limits which kinds of data are detected and linked.",
"items": {
"enum": [
"PKDataDetectorTypePhoneNumber",
"PKDataDetectorTypeLink",
"PKDataDetectorTypeAddress",
"PKDataDetectorTypeCalendarEvent"
],
"type": "string"
},
"type": "array"
},
"dataKey": {
"description": "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n",
"type": "string"
},
"dateStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"ignoresTimeZone": {
"description": "Apple: whether to display the date in the pass's local time rather than the user's.",
"type": "boolean"
},
"isRelative": {
"description": "Apple: whether the date is displayed relative to the current time.",
"type": "boolean"
},
"key": {
"description": "Unique key identifying the field. Must be unique across ALL field groups in a template.",
"type": "string"
},
"label": {
"description": "Human-readable label rendered above the value on the pass face.",
"type": "string"
},
"numberStyle": {
"enum": [
"PKNumberStyleDecimal",
"PKNumberStylePercent",
"PKNumberStyleScientific",
"PKNumberStyleSpellOut"
],
"type": "string"
},
"row": {
"description": "Apple: auxiliary/secondary layout control (0 or 1).",
"enum": [
0,
1
],
"type": "integer"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.",
"type": "object"
},
"textAlignment": {
"enum": [
"PKTextAlignmentLeft",
"PKTextAlignmentCenter",
"PKTextAlignmentRight",
"PKTextAlignmentNatural"
],
"type": "string"
},
"timeStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"value": {
"description": "Static value for the field. Number types are preserved for\nApple's `numberStyle` / `currencyCode` formatters. For dynamic\nvalues, omit `value` and set `dataKey` instead.\n",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"jumpToURL": {
"format": "uri",
"type": "string"
},
"labelColor": {
"description": "Apple only — field label color.",
"type": "string"
},
"liveBroadcastURL": {
"format": "uri",
"type": "string"
},
"localScheduledArrivalDateTime": {
"description": "Google Flight: same format as departure.",
"type": "string"
},
"localScheduledDepartureDateTime": {
"description": "Google Flight: ISO 8601 **without** timezone offset (local airport time). Automatically stripped if a Z/offset is supplied.",
"type": "string"
},
"locations": {
"items": {
"properties": {
"altitude": {
"type": "number"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"relevantText": {
"description": "Apple: lock-screen text when the device enters this location.",
"type": "string"
}
},
"required": [
"latitude",
"longitude"
],
"type": "object"
},
"type": "array"
},
"logoText": {
"description": "Apple: text beside the logo on the pass face.",
"type": "string"
},
"loyaltyPointsDataKey": {
"type": "string"
},
"loyaltyPointsLabel": {
"type": "string"
},
"maxDistance": {
"description": "Apple only — max distance (meters) for location relevance.",
"type": "integer"
},
"merchandiseURL": {
"format": "uri",
"type": "string"
},
"messages": {
"description": "Google class-level messages.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"nfc": {
"properties": {
"encryptionPublicKey": {
"description": "ECC P-256 public key (base64-encoded) for encrypting the NFC payload.",
"type": "string"
},
"message": {
"description": "The data transmitted during an NFC interaction.",
"type": "string"
},
"requiresAuthentication": {
"type": "boolean"
}
},
"required": [
"message"
],
"type": "object"
},
"objectMessages": {
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"orderFoodURL": {
"format": "uri",
"type": "string"
},
"organizationName": {
"description": "Apple top-level org name. Defaults to 'PassFast' if unset.",
"type": "string"
},
"origin": {
"properties": {
"airportIataCode": {
"description": "3-letter IATA airport code (e.g. `LHR`, `JFK`).",
"type": "string"
},
"gate": {
"type": "string"
},
"terminal": {
"type": "string"
}
},
"required": [
"airportIataCode"
],
"type": "object"
},
"parkingInformationURL": {
"format": "uri",
"type": "string"
},
"pinDataKey": {
"type": "string"
},
"pinLabel": {
"type": "string"
},
"primaryFields": {
"items": {
"description": "A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n",
"properties": {
"attributedValue": {
"description": "Apple: HTML-flavored value (used for rendering links, etc.).",
"type": "string"
},
"changeMessage": {
"description": "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value.",
"type": "string"
},
"currencyCode": {
"description": "Apple: ISO 4217 currency code. Value is formatted as currency.",
"type": "string"
},
"dataDetectorTypes": {
"description": "Apple: back fields only. Limits which kinds of data are detected and linked.",
"items": {
"enum": [
"PKDataDetectorTypePhoneNumber",
"PKDataDetectorTypeLink",
"PKDataDetectorTypeAddress",
"PKDataDetectorTypeCalendarEvent"
],
"type": "string"
},
"type": "array"
},
"dataKey": {
"description": "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n",
"type": "string"
},
"dateStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"ignoresTimeZone": {
"description": "Apple: whether to display the date in the pass's local time rather than the user's.",
"type": "boolean"
},
"isRelative": {
"description": "Apple: whether the date is displayed relative to the current time.",
"type": "boolean"
},
"key": {
"description": "Unique key identifying the field. Must be unique across ALL field groups in a template.",
"type": "string"
},
"label": {
"description": "Human-readable label rendered above the value on the pass face.",
"type": "string"
},
"numberStyle": {
"enum": [
"PKNumberStyleDecimal",
"PKNumberStylePercent",
"PKNumberStyleScientific",
"PKNumberStyleSpellOut"
],
"type": "string"
},
"row": {
"description": "Apple: auxiliary/secondary layout control (0 or 1).",
"enum": [
0,
1
],
"type": "integer"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.",
"type": "object"
},
"textAlignment": {
"enum": [
"PKTextAlignmentLeft",
"PKTextAlignmentCenter",
"PKTextAlignmentRight",
"PKTextAlignmentNatural"
],
"type": "string"
},
"timeStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"value": {
"description": "Static value for the field. Number types are preserved for\nApple's `numberStyle` / `currencyCode` formatters. For dynamic\nvalues, omit `value` and set `dataKey` instead.\n",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"purchaseParkingURL": {
"format": "uri",
"type": "string"
},
"redemptionChannel": {
"description": "Google Wallet OfferClass redemption channel.",
"enum": [
"INSTORE",
"ONLINE",
"BOTH",
"TEMPORARY_PRICE_REDUCTION"
],
"type": "string"
},
"relevantDate": {
"description": "ISO 8601 datetime with timezone suffix. Naive datetimes (no Z/offset) are rejected.",
"format": "date-time",
"type": "string"
},
"relevantDates": {
"description": "Apple plural relevantDates[] — multiple time windows. Entries without timezone are filtered out.",
"items": {
"oneOf": [
{
"format": "date-time",
"type": "string"
},
{
"properties": {
"endDate": {
"format": "date-time",
"type": "string"
},
"startDate": {
"format": "date-time",
"type": "string"
}
},
"type": "object"
}
]
},
"type": "array"
},
"rotatingBarcode": {
"description": "Google Wallet rotating barcode (TOTP-based). Supply a pre-configured\nobject; PassFast does not synthesize the HMAC secret.\n",
"properties": {
"totpDetails": {
"properties": {
"algorithm": {
"enum": [
"TOTP_SHA1",
"TOTP_SHA256",
"TOTP_SHA512"
],
"type": "string"
},
"parameters": {
"items": {
"properties": {
"key": {
"description": "Base16 (hex) encoded TOTP secret.",
"type": "string"
},
"valueLength": {
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"periodMillis": {
"description": "TOTP period as a string of milliseconds (e.g. `\"30000\"`).",
"type": "string"
}
},
"type": "object"
},
"type": {
"enum": [
"QR_CODE",
"AZTEC",
"PDF_417",
"CODE_128",
"DATA_MATRIX"
],
"type": "string"
},
"valuePattern": {
"description": "Pattern for the rotating value, e.g. `rotating-{totp_value}`.",
"type": "string"
}
},
"type": "object"
},
"rowDataKey": {
"type": "string"
},
"seatDataKey": {
"type": "string"
},
"seatUpgradeURL": {
"format": "uri",
"type": "string"
},
"secondaryFields": {
"items": {
"description": "A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n",
"properties": {
"attributedValue": {
"description": "Apple: HTML-flavored value (used for rendering links, etc.).",
"type": "string"
},
"changeMessage": {
"description": "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value.",
"type": "string"
},
"currencyCode": {
"description": "Apple: ISO 4217 currency code. Value is formatted as currency.",
"type": "string"
},
"dataDetectorTypes": {
"description": "Apple: back fields only. Limits which kinds of data are detected and linked.",
"items": {
"enum": [
"PKDataDetectorTypePhoneNumber",
"PKDataDetectorTypeLink",
"PKDataDetectorTypeAddress",
"PKDataDetectorTypeCalendarEvent"
],
"type": "string"
},
"type": "array"
},
"dataKey": {
"description": "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n",
"type": "string"
},
"dateStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"ignoresTimeZone": {
"description": "Apple: whether to display the date in the pass's local time rather than the user's.",
"type": "boolean"
},
"isRelative": {
"description": "Apple: whether the date is displayed relative to the current time.",
"type": "boolean"
},
"key": {
"description": "Unique key identifying the field. Must be unique across ALL field groups in a template.",
"type": "string"
},
"label": {
"description": "Human-readable label rendered above the value on the pass face.",
"type": "string"
},
"numberStyle": {
"enum": [
"PKNumberStyleDecimal",
"PKNumberStylePercent",
"PKNumberStyleScientific",
"PKNumberStyleSpellOut"
],
"type": "string"
},
"row": {
"description": "Apple: auxiliary/secondary layout control (0 or 1).",
"enum": [
0,
1
],
"type": "integer"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.",
"type": "object"
},
"textAlignment": {
"enum": [
"PKTextAlignmentLeft",
"PKTextAlignmentCenter",
"PKTextAlignmentRight",
"PKTextAlignmentNatural"
],
"type": "string"
},
"timeStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"value": {
"description": "Static value for the field. Number types are preserved for\nApple's `numberStyle` / `currencyCode` formatters. For dynamic\nvalues, omit `value` and set `dataKey` instead.\n",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"secondaryLoyaltyPointsDataKey": {
"type": "string"
},
"secondaryLoyaltyPointsLabel": {
"type": "string"
},
"sectionDataKey": {
"type": "string"
},
"securityAnimation": {
"additionalProperties": true,
"type": "object"
},
"sellURL": {
"format": "uri",
"type": "string"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: top-level semantic tags (event, transit, balance categories).",
"type": "object"
},
"shoppingURL": {
"format": "uri",
"type": "string"
},
"smartTapRedemptionDataKey": {
"type": "string"
},
"smartTapRedemptionValue": {
"type": "string"
},
"suppressHeaderDarkening": {
"type": "boolean"
},
"suppressStripShine": {
"type": "boolean"
},
"ticketHolderNameDataKey": {
"type": "string"
},
"ticketNumberDataKey": {
"type": "string"
},
"trackBagsURL": {
"format": "uri",
"type": "string"
},
"transferURL": {
"format": "uri",
"type": "string"
},
"transitInformationURL": {
"format": "uri",
"type": "string"
},
"transitOperatorName": {
"type": "string"
},
"transitType": {
"description": "Apple Wallet transitType enum. Required for `boardingPass` templates at publish.",
"enum": [
"PKTransitTypeAir",
"PKTransitTypeTrain",
"PKTransitTypeBus",
"PKTransitTypeBoat",
"PKTransitTypeGeneric"
],
"type": "string"
},
"tripType": {
"enum": [
"ROUND_TRIP",
"ONE_WAY"
],
"type": "string"
},
"useAutomaticColors": {
"type": "boolean"
},
"venueAddress": {
"type": "string"
},
"venueName": {
"type": "string"
},
"viewUnlockRequirement": {
"enum": [
"UNLOCK_REQUIRED_TO_VIEW",
"VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED"
],
"type": "string"
}
},
"required": [
"backgroundColor",
"foregroundColor"
],
"type": "object"
},
"thumbnail_image_id": {
"format": "uuid",
"type": "string"
},
"wallet_types": {
"default": [
"apple"
],
"items": {
"enum": [
"apple",
"google"
],
"type": "string"
},
"type": "array"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"name",
"pass_style",
"structure"
],
"type": "object"
},
"name": "createTemplate",
"outputSchema": null
},
{
"description": "Deactivate Google credential\n\nDeactivates a Google Wallet credential.\n\n**Scope:** `certs:manage`\n\nMaps to OpenAPI operationId `deactivateGoogleCredential` — DELETE /manage-certs/google/{id}.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Google credential ID.",
"format": "uuid",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "deactivateGoogleCredential",
"outputSchema": null
},
{
"description": "Delete an API key\n\nPermanently deletes an API key. The key **must be revoked first**\n(via PATCH) before it can be deleted. Attempting to delete an active\nkey returns 400.\n\n**Scope:** `org:manage`\n\nMaps to OpenAPI operationId `deleteApiKey` — DELETE /manage-keys/{id}.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "API key ID.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "deleteApiKey",
"outputSchema": null
},
{
"description": "Deactivate an app\n\nDeactivates the current app. This does not permanently delete data.\n\n**Scope:** `org:manage`\n\nMaps to OpenAPI operationId `deleteApp` — DELETE /manage-org/app.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"type": "object"
},
"name": "deleteApp",
"outputSchema": null
},
{
"description": "Delete a certificate\n\nDeletes a certificate.\n\n**Scope:** `certs:manage`\n\nMaps to OpenAPI operationId `deleteCertificate` — DELETE /manage-certs/{id}.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Certificate ID.",
"format": "uuid",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "deleteCertificate",
"outputSchema": null
},
{
"description": "Delete an image\n\nDeletes an image (storage file + DB row). Always succeeds when the image exists.\n\nAny template column pointing at this image is silently cleared (the template\nfalls back to no image in that slot — re-attach a new one if needed).\nAny pass with `strip_image_id` pointing at this image has its override nullified\nand reverts to the template's strip on next render.\n\nUse `GET /manage-images/{id}/usage` first if you need to know the blast radius\nbefore deleting.\n\n**Scope:** `images:manage`\n\nMaps to OpenAPI operationId `deleteImage` — DELETE /manage-images/{id}.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Image ID.",
"format": "uuid",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "deleteImage",
"outputSchema": null
},
{
"description": "Delete a template\n\nSoft-deletes a template by marking it as archived. Use `permanent=true`\nto permanently delete the template and its associated data.\n\n**Scope:** `templates:manage`\n\nMaps to OpenAPI operationId `deleteTemplate` — DELETE /manage-templates/{id}.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Template ID.",
"format": "uuid",
"type": "string"
},
"permanent": {
"default": false,
"description": "When true, permanently deletes the template instead of archiving it.",
"type": "boolean"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "deleteTemplate",
"outputSchema": null
},
{
"description": "Download a .pkpass file\n\nDownloads the `.pkpass` binary for an active pass.\n\n**Scope:** `passes:download`\n\nMaps to OpenAPI operationId `downloadPass` — GET /manage-passes/{id}/download.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Pass ID.",
"format": "uuid",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "downloadPass",
"outputSchema": null
},
{
"description": "Download a .pkpass file by serial number\n\nDownloads the `.pkpass` binary for an active pass looked up by serial number.\nWhen a serial has both Apple and Google passes, use `?wallet_type=` to select which one (defaults to `apple`).\n\n**Scope:** `passes:download`\n\nMaps to OpenAPI operationId `downloadPassBySerial` — GET /manage-passes/serial/{serial_number}/download.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"serial_number": {
"description": "Pass serial number (unique within app + wallet type).",
"type": "string"
},
"wallet_type": {
"default": "apple",
"description": "Wallet type to look up when a serial number has both Apple and Google passes.\nDefaults to `apple` for backward compatibility.\n",
"enum": [
"apple",
"google"
],
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"serial_number"
],
"type": "object"
},
"name": "downloadPassBySerial",
"outputSchema": null
},
{
"description": "Download shared Apple .pkpass\n\nDownloads the Apple `.pkpass` file for a shared pass. No authentication\nrequired. Only works for active Apple passes.\n\nMaps to OpenAPI operationId `downloadSharedPass` — GET /share-pass/{token}/download. Public endpoint — no API key required.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"token": {
"description": "Share token (32 hex characters).",
"type": "string"
}
},
"required": [
"token"
],
"type": "object"
},
"name": "downloadSharedPass",
"outputSchema": null
},
{
"description": "Generate a wallet pass\n\nGenerates a wallet pass from a published template. For Apple passes (default),\nreturns a signed `.pkpass` binary file directly. For Google passes\n(`wallet_type: \"google\"`), returns a JSON object containing a `save_url`\nthat the user can open to add the pass to Google Wallet.\n\nWhen `wallet_type: \"both\"`, generates both Apple and Google passes in a single\ncall. The response is always JSON with `apple` and `google` keys. Partial success\nis allowed — if one wallet fails, the other is still returned with a warning.\nReturns 201 if at least one succeeds.\n\nThe pass ID is returned in the `X-Pass-Id` response header (for single-wallet).\n\nIf the app has a validation webhook configured, the webhook is called once\nbefore generation (not per wallet type). A webhook rejection returns 403;\na webhook error returns 502 (fail-closed).\n\n**Scope:** `passes:create`\n\nMaps to OpenAPI operationId `generatePass` — POST /generate-pass.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"data": {
"additionalProperties": true,
"description": "Dynamic field values merged into the template structure.",
"type": "object"
},
"expires_at": {
"description": "Optional expiration timestamp for the pass.",
"format": "date-time",
"type": "string"
},
"external_id": {
"description": "Optional external identifier for cross-system lookups.",
"type": "string"
},
"get_or_create": {
"default": false,
"description": "When true, if a pass with the same serial_number already exists and is active,\nreturn the existing .pkpass (200) instead of a 409 error. The response includes\nan `X-Pass-Existed: true` header. If the existing pass is voided/expired,\nreturns 409. When false (default), duplicate serials always return 409.\n",
"type": "boolean"
},
"locations": {
"description": "GPS locations where the pass is relevant (shown on lock screen).\nOverrides template defaults if provided.\n",
"items": {
"properties": {
"altitude": {
"description": "Altitude in meters (optional).",
"type": "number"
},
"latitude": {
"description": "Latitude in degrees.",
"type": "number"
},
"longitude": {
"description": "Longitude in degrees.",
"type": "number"
},
"relevantText": {
"description": "Text displayed on lock screen when user is near this location.",
"type": "string"
}
},
"required": [
"latitude",
"longitude"
],
"type": "object"
},
"type": "array"
},
"max_distance": {
"description": "Maximum distance in meters from a location for lock screen relevance.",
"type": "number"
},
"relevant_date": {
"description": "ISO 8601 date when the pass is relevant (appears on lock screen).",
"format": "date-time",
"type": "string"
},
"serial_number": {
"description": "Unique serial number for this pass.",
"type": "string"
},
"strip_image_id": {
"description": "Override the template's strip/hero image for this pass only. The referenced\nimage must belong to the same app and have purpose `strip` (or a `strip_*`\nvariant). Applied to Apple `strip.png` and Google `heroImage` atomically\n(same value for both wallets in `wallet_type: \"both\"`). Omit or send `null`\nto use the template's strip image.\n",
"format": "uuid",
"type": "string"
},
"template_id": {
"description": "ID of the published template to use.",
"format": "uuid",
"type": "string"
},
"wallet_type": {
"default": "apple",
"description": "Target wallet platform. Defaults to `apple`. When set to `google`,\nthe response is a JSON object with a `save_url` instead of a binary .pkpass file.\nWhen set to `both`, generates both Apple and Google passes in one call and\nreturns a JSON object with `apple`, `google`, and `warnings` keys.\n",
"enum": [
"apple",
"google",
"both"
],
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"template_id",
"serial_number",
"data"
],
"type": "object"
},
"name": "generatePass",
"outputSchema": null
},
{
"description": "Get current app details\n\nReturns the current app's settings.\n\n**Scope:** `org:read`\n\nMaps to OpenAPI operationId `getApp` — GET /manage-org/app.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"type": "object"
},
"name": "getApp",
"outputSchema": null
},
{
"description": "Batch generate limits\n\nPublic metadata for `POST /passes/batch`. No authentication.\n\nReturns the hard row cap (100), sync mode, auth summary, and stable\nerror codes. This path is on the site host (`https://passfa.st/api`),\nnot `https://api.passfa.st/functions/v1`. MCP tool:\n`getBatchGenerateLimits`.\n\nMaps to OpenAPI operationId `getBatchGenerateLimits` — GET /passes/batch. Public endpoint — no API key required.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "getBatchGenerateLimits",
"outputSchema": null
},
{
"description": "Get image usage / reference counts\n\nReport how an image is referenced across templates and passes. Useful before\nDELETE to confirm an image is unused, or to find which templates a shared\nasset is attached to.\n\n- `template_refs` lists every template column (e.g. `strip_image_id`,\n `icon_image_id`, `google_logo_image_id`) that references this image.\n- `pass_refs_count` is the number of passes whose per-pass `strip_image_id`\n points at this image.\n- `safe_to_delete` is `true` when `total_refs` is 0.\n\n**Scope:** `images:manage`\n\nMaps to OpenAPI operationId `getImageUsage` — GET /manage-images/{id}/usage.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Image ID.",
"format": "uuid",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "getImageUsage",
"outputSchema": null
},
{
"description": "Check managed signing availability\n\nReturns whether managed (platform) signing credentials are available\nfor Apple and Google wallets. When `apple_ready` or `google_ready` is\n`true`, apps can use `signing_mode: \"managed\"` or\n`google_signing_mode: \"managed\"` without uploading their own credentials.\n\n**Scope:** `org:read`\n\nMaps to OpenAPI operationId `getManagedSigningStatus` — GET /manage-org/managed-signing-status.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "getManagedSigningStatus",
"outputSchema": null
},
{
"description": "Get organization details\n\nReturns the current organization's settings.\n\n**Scope:** `org:read`\n\nMaps to OpenAPI operationId `getOrganization` — GET /manage-org.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "getOrganization",
"outputSchema": null
},
{
"description": "Get a pass\n\nReturns the full details of a single pass.\n\n**Scope:** `passes:read`\n\nMaps to OpenAPI operationId `getPass` — GET /manage-passes/{id}.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Pass ID.",
"format": "uuid",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "getPass",
"outputSchema": null
},
{
"description": "Get a pass by serial number\n\nReturns the full details of a single pass looked up by serial number.\nWhen a serial has both Apple and Google passes, use `?wallet_type=` to select which one (defaults to `apple`).\n\n**Scope:** `passes:read`\n\nMaps to OpenAPI operationId `getPassBySerial` — GET /manage-passes/serial/{serial_number}.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"serial_number": {
"description": "Pass serial number (unique within app + wallet type).",
"type": "string"
},
"wallet_type": {
"default": "apple",
"description": "Wallet type to look up when a serial number has both Apple and Google passes.\nDefaults to `apple` for backward compatibility.\n",
"enum": [
"apple",
"google"
],
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"serial_number"
],
"type": "object"
},
"name": "getPassBySerial",
"outputSchema": null
},
{
"description": "Get shared pass metadata\n\nReturns public metadata for a shared pass. No authentication required.\nUsed by the public share page to display wallet buttons and pass info.\n\nMaps to OpenAPI operationId `getSharePassMetadata` — GET /share-pass/{token}. Public endpoint — no API key required.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"token": {
"description": "Share token (32 hex characters).",
"type": "string"
}
},
"required": [
"token"
],
"type": "object"
},
"name": "getSharePassMetadata",
"outputSchema": null
},
{
"description": "Get a template\n\nReturns the full details of a single template.\n\n**Scope:** `templates:manage`\n\nMaps to OpenAPI operationId `getTemplate` — GET /manage-templates/{id}.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Template ID.",
"format": "uuid",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "getTemplate",
"outputSchema": null
},
{
"description": "List API keys\n\nReturns all API keys for the current organization.\n\n**Scope:** `org:manage`\n\nMaps to OpenAPI operationId `listApiKeys` — GET /manage-keys.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "listApiKeys",
"outputSchema": null
},
{
"description": "List certificates\n\nReturns all certificates for the current app.\n\n**Scope:** `certs:manage`\n\nMaps to OpenAPI operationId `listCertificates` — GET /manage-certs.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"type": "object"
},
"name": "listCertificates",
"outputSchema": null
},
{
"description": "List Google credentials\n\nReturns all active Google Wallet credentials for the current app.\n\n**Scope:** `certs:manage`\n\nMaps to OpenAPI operationId `listGoogleCredentials` — GET /manage-certs/google.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"type": "object"
},
"name": "listGoogleCredentials",
"outputSchema": null
},
{
"description": "List images\n\nReturns all images for the current app, including signed preview URLs.\n\n**Scope:** `images:manage`\n\nMaps to OpenAPI operationId `listImages` — GET /manage-images.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"type": "object"
},
"name": "listImages",
"outputSchema": null
},
{
"description": "List passes\n\nReturns a paginated list of passes for the current app.\n\n**Scope:** `passes:read`\n\nMaps to OpenAPI operationId `listPasses` — GET /manage-passes.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"created_after": {
"description": "Only return passes created after this timestamp.",
"format": "date-time",
"type": "string"
},
"created_before": {
"description": "Only return passes created before this timestamp.",
"format": "date-time",
"type": "string"
},
"external_id": {
"description": "Filter by external ID.",
"type": "string"
},
"limit": {
"default": 50,
"description": "Maximum number of results to return.",
"type": "integer"
},
"offset": {
"default": 0,
"description": "Number of results to skip.",
"type": "integer"
},
"serial_number": {
"description": "Filter by serial number.",
"type": "string"
},
"status": {
"description": "Filter by pass status.",
"enum": [
"active",
"invalidated",
"expired"
],
"type": "string"
},
"template_id": {
"description": "Filter by template ID.",
"format": "uuid",
"type": "string"
},
"wallet_type": {
"description": "Filter by wallet platform type.",
"enum": [
"apple",
"google"
],
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"type": "object"
},
"name": "listPasses",
"outputSchema": null
},
{
"description": "List templates\n\nReturns all templates for the current app. By default returns non-archived\ntemplates. Set `archived=true` to return only archived templates.\n\n**Scope:** `templates:manage`\n\nMaps to OpenAPI operationId `listTemplates` — GET /manage-templates.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"archived": {
"default": false,
"description": "When true, return only archived templates instead of active ones.",
"type": "boolean"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"type": "object"
},
"name": "listTemplates",
"outputSchema": null
},
{
"description": "List webhook events\n\nReturns a paginated list of webhook event delivery records for the current app.\n\n**Scope:** `org:read`\n\nMaps to OpenAPI operationId `listWebhookEvents` — GET /manage-org/webhook-events.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"delivery_status": {
"description": "Filter by delivery status.",
"enum": [
"pending",
"delivered",
"failed"
],
"type": "string"
},
"event_type": {
"description": "Filter by event type.",
"enum": [
"pass.created",
"pass.updated",
"pass.voided",
"pass.expired",
"device.registered",
"device.unregistered"
],
"type": "string"
},
"limit": {
"default": 50,
"description": "Maximum number of results to return.",
"type": "integer"
},
"offset": {
"default": 0,
"description": "Number of results to skip.",
"type": "integer"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"type": "object"
},
"name": "listWebhookEvents",
"outputSchema": null
},
{
"description": "Publish a template\n\nPublishes a draft template, making it available for pass generation.\nPublished templates cannot be modified.\n\n**Scope:** `templates:manage`\n\nMaps to OpenAPI operationId `publishTemplate` — POST /manage-templates/{id}/publish.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Template ID.",
"format": "uuid",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "publishTemplate",
"outputSchema": null
},
{
"description": "Revoke an API key\n\nRevokes an API key, making it inactive. Revoked keys cannot authenticate.\n\n**Scope:** `org:manage`\n\nMaps to OpenAPI operationId `revokeApiKey` — PATCH /manage-keys/{id}.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "API key ID.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "revokeApiKey",
"outputSchema": null
},
{
"description": "Test Apple certificates\n\nGenerates an ephemeral test `.pkpass` file to verify that the uploaded\nApple signing certificates are valid and complete. The test pass is\nnot stored — it is returned directly as a binary download.\n\n**Scope:** `certs:manage`\n\nMaps to OpenAPI operationId `testAppleCertificates` — POST /manage-certs/test.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"type": "object"
},
"name": "testAppleCertificates",
"outputSchema": null
},
{
"description": "Test Google connection\n\nTests the configured Google Wallet credentials by attempting to\nauthenticate with the Google Wallet API.\n\n**Scope:** `certs:manage`\n\nMaps to OpenAPI operationId `testGoogleConnection` — POST /manage-certs/google/test.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"type": "object"
},
"name": "testGoogleConnection",
"outputSchema": null
},
{
"description": "Test the validation webhook\n\nSends a sample validation webhook payload to the configured URL\nand returns the result.\n\n**Scope:** `org:manage`\n\nMaps to OpenAPI operationId `testWebhook` — POST /manage-org/app/test-webhook.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"type": "object"
},
"name": "testWebhook",
"outputSchema": null
},
{
"description": "Update app settings\n\nUpdates the current app's settings, including webhook configuration.\nSet `regenerate_webhook_secret` to `true` to generate a new webhook\nsigning secret; the new secret is returned in `webhook_secret_raw`\n(shown only once).\n\n**Scope:** `org:manage`\n\nMaps to OpenAPI operationId `updateApp` — PATCH /manage-org/app.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"apple_team_id": {
"description": "Apple Developer Team ID.",
"type": "string"
},
"google_signing_mode": {
"description": "Google signing mode. `managed` uses platform credentials; `custom` uses your own.",
"enum": [
"managed",
"custom"
],
"type": "string"
},
"name": {
"description": "App display name.",
"type": "string"
},
"onboarding_completed": {
"description": "Whether onboarding has been completed for this app.",
"type": "boolean"
},
"pass_type_identifier": {
"description": "Apple pass type identifier (e.g., pass.com.example.myapp).",
"type": "string"
},
"regenerate_webhook_secret": {
"description": "Set to true to regenerate the webhook signing secret.",
"type": "boolean"
},
"signing_mode": {
"description": "Apple signing mode. `managed` uses platform credentials; `custom` uses your own.",
"enum": [
"managed",
"custom"
],
"type": "string"
},
"validation_webhook_url": {
"description": "URL for pre-generation validation webhooks.",
"format": "uri",
"type": "string"
},
"webhook_url": {
"description": "URL for async event webhook delivery.",
"format": "uri",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"type": "object"
},
"name": "updateApp",
"outputSchema": null
},
{
"description": "Update organization settings\n\nUpdates the current organization's settings, including APNs credentials.\n\n**Scope:** `org:manage`\n\nMaps to OpenAPI operationId `updateOrganization` — PATCH /manage-org.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"apns_key_id": {
"description": "Apple Push Notification service Key ID.",
"type": "string"
},
"apns_key_p8": {
"description": "APNs .p8 private key contents.",
"type": "string"
},
"name": {
"description": "Organization display name.",
"type": "string"
},
"slug": {
"description": "URL-friendly slug.",
"type": "string"
}
},
"type": "object"
},
"name": "updateOrganization",
"outputSchema": null
},
{
"description": "Update a pass\n\nUpdates the dynamic data of an active pass. Optionally sends a push\nnotification to registered devices so they fetch the updated pass.\nAt least one of `data`, `expires_at`, `locations`, `relevant_date`,\nor `max_distance` is required.\n\n**Scope:** `passes:manage`\n\nMaps to OpenAPI operationId `updatePass` — PATCH /manage-passes/{id}.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"data": {
"additionalProperties": true,
"description": "New dynamic field values to merge into the pass.",
"type": "object"
},
"expires_at": {
"description": "Expiration timestamp (set to null to remove expiration).",
"format": "date-time",
"type": "string"
},
"id": {
"description": "Pass ID.",
"format": "uuid",
"type": "string"
},
"locations": {
"description": "GPS locations where the pass is relevant (overrides template defaults).",
"items": {
"properties": {
"altitude": {
"type": "number"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"relevantText": {
"type": "string"
}
},
"required": [
"latitude",
"longitude"
],
"type": "object"
},
"type": "array"
},
"max_distance": {
"description": "Maximum distance in meters from a location for lock screen relevance.",
"type": "number"
},
"push_update": {
"default": false,
"description": "If true, send a push notification to registered devices.",
"type": "boolean"
},
"relevant_date": {
"description": "ISO 8601 date when the pass is relevant (lock screen).",
"format": "date-time",
"type": "string"
},
"strip_image_id": {
"description": "Override the template's strip/hero image for this pass. The referenced\nimage must belong to the same app and have purpose `strip` (or a `strip_*`\nvariant). Applied to Apple `strip.png` and Google `heroImage` atomically\n(synced to the sibling pass for dual-wallet). Send `null` to clear the\noverride and revert to the template's strip image. Omit the field to\nleave the current override unchanged.\n",
"format": "uuid",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "updatePass",
"outputSchema": null
},
{
"description": "Update a pass by serial number\n\nUpdates the dynamic data of an active pass looked up by serial number.\nOptionally sends a push notification to registered devices.\nAt least one of `data`, `expires_at`, `locations`, `relevant_date`,\nor `max_distance` is required.\nWhen a serial has both Apple and Google passes, use `?wallet_type=` to select which one (defaults to `apple`).\n\n**Scope:** `passes:manage`\n\nMaps to OpenAPI operationId `updatePassBySerial` — PATCH /manage-passes/serial/{serial_number}.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"data": {
"additionalProperties": true,
"description": "New dynamic field values to merge into the pass.",
"type": "object"
},
"expires_at": {
"description": "Expiration timestamp (set to null to remove expiration).",
"format": "date-time",
"type": "string"
},
"locations": {
"description": "GPS locations where the pass is relevant (overrides template defaults).",
"items": {
"properties": {
"altitude": {
"type": "number"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"relevantText": {
"type": "string"
}
},
"required": [
"latitude",
"longitude"
],
"type": "object"
},
"type": "array"
},
"max_distance": {
"description": "Maximum distance in meters from a location for lock screen relevance.",
"type": "number"
},
"push_update": {
"default": false,
"description": "If true, send a push notification to registered devices.",
"type": "boolean"
},
"relevant_date": {
"description": "ISO 8601 date when the pass is relevant (lock screen).",
"format": "date-time",
"type": "string"
},
"serial_number": {
"description": "Pass serial number (unique within app + wallet type).",
"type": "string"
},
"strip_image_id": {
"description": "Override the template's strip/hero image for this pass. The referenced\nimage must belong to the same app and have purpose `strip` (or a `strip_*`\nvariant). Applied to Apple `strip.png` and Google `heroImage` atomically\n(synced to the sibling pass for dual-wallet). Send `null` to clear the\noverride and revert to the template's strip image. Omit the field to\nleave the current override unchanged.\n",
"format": "uuid",
"type": "string"
},
"wallet_type": {
"default": "apple",
"description": "Wallet type to look up when a serial number has both Apple and Google passes.\nDefaults to `apple` for backward compatibility.\n",
"enum": [
"apple",
"google"
],
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"serial_number"
],
"type": "object"
},
"name": "updatePassBySerial",
"outputSchema": null
},
{
"description": "Update a template\n\nUpdates a draft template. Published templates cannot be modified.\n\n**Scope:** `templates:manage`\n\nMaps to OpenAPI operationId `updateTemplate` — PATCH /manage-templates/{id}.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"background_image_id": {
"format": "uuid",
"type": "string"
},
"description": {
"type": "string"
},
"field_schema": {
"additionalProperties": true,
"type": "object"
},
"google_logo_image_id": {
"format": "uuid",
"type": "string"
},
"google_pass_type": {
"allOf": [
{
"description": "Google Wallet class type override. If unset, PassFast auto-maps from\nthe Apple `pass_style` (+ `structure.transitType` for boardingPass):\n- `generic` → generic\n- `storeCard` → loyalty (or giftCard via override)\n- `eventTicket` → eventTicket\n- `coupon` → offer\n- `boardingPass` + transitType PKTransitTypeAir → flight\n- `boardingPass` + transitType Train/Bus/Boat/Generic → transit\n",
"enum": [
"generic",
"loyalty",
"eventTicket",
"offer",
"flight",
"transit",
"giftCard"
],
"type": "string"
}
]
},
"google_wide_logo_image_id": {
"format": "uuid",
"type": "string"
},
"icon_image_id": {
"format": "uuid",
"type": "string"
},
"id": {
"description": "Template ID.",
"format": "uuid",
"type": "string"
},
"logo_image_id": {
"format": "uuid",
"type": "string"
},
"name": {
"type": "string"
},
"pass_style": {
"description": "Apple Wallet pass style.",
"enum": [
"boardingPass",
"coupon",
"eventTicket",
"generic",
"storeCard"
],
"type": "string"
},
"strip_image_id": {
"format": "uuid",
"type": "string"
},
"structure": {
"additionalProperties": true,
"description": "Complete pass structure. Drives both Apple `pass.json` emission and\nGoogle Wallet class/object JSON. Fields are grouped below by platform,\nbut the single JSONB object carries all of them for dual-wallet templates.\n",
"properties": {
"accessibilityURL": {
"format": "uri",
"type": "string"
},
"addChangeInfoURL": {
"format": "uri",
"type": "string"
},
"addOnURL": {
"format": "uri",
"type": "string"
},
"additionalInfoFields": {
"description": "Apple poster-style eventTicket only. Rendered inside the eventTicket object.",
"items": {
"description": "A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n",
"properties": {
"attributedValue": {
"description": "Apple: HTML-flavored value (used for rendering links, etc.).",
"type": "string"
},
"changeMessage": {
"description": "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value.",
"type": "string"
},
"currencyCode": {
"description": "Apple: ISO 4217 currency code. Value is formatted as currency.",
"type": "string"
},
"dataDetectorTypes": {
"description": "Apple: back fields only. Limits which kinds of data are detected and linked.",
"items": {
"enum": [
"PKDataDetectorTypePhoneNumber",
"PKDataDetectorTypeLink",
"PKDataDetectorTypeAddress",
"PKDataDetectorTypeCalendarEvent"
],
"type": "string"
},
"type": "array"
},
"dataKey": {
"description": "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n",
"type": "string"
},
"dateStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"ignoresTimeZone": {
"description": "Apple: whether to display the date in the pass's local time rather than the user's.",
"type": "boolean"
},
"isRelative": {
"description": "Apple: whether the date is displayed relative to the current time.",
"type": "boolean"
},
"key": {
"description": "Unique key identifying the field. Must be unique across ALL field groups in a template.",
"type": "string"
},
"label": {
"description": "Human-readable label rendered above the value on the pass face.",
"type": "string"
},
"numberStyle": {
"enum": [
"PKNumberStyleDecimal",
"PKNumberStylePercent",
"PKNumberStyleScientific",
"PKNumberStyleSpellOut"
],
"type": "string"
},
"row": {
"description": "Apple: auxiliary/secondary layout control (0 or 1).",
"enum": [
0,
1
],
"type": "integer"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.",
"type": "object"
},
"textAlignment": {
"enum": [
"PKTextAlignmentLeft",
"PKTextAlignmentCenter",
"PKTextAlignmentRight",
"PKTextAlignmentNatural"
],
"type": "string"
},
"timeStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"value": {
"description": "Static value for the field. Number types are preserved for\nApple's `numberStyle` / `currencyCode` formatters. For dynamic\nvalues, omit `value` and set `dataKey` instead.\n",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"appLaunchURL": {
"format": "uri",
"type": "string"
},
"associatedStoreIdentifiers": {
"description": "Apple iTunes app IDs for 'Open in App'.",
"items": {
"type": "integer"
},
"type": "array"
},
"auxiliaryFields": {
"items": {
"description": "A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n",
"properties": {
"attributedValue": {
"description": "Apple: HTML-flavored value (used for rendering links, etc.).",
"type": "string"
},
"changeMessage": {
"description": "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value.",
"type": "string"
},
"currencyCode": {
"description": "Apple: ISO 4217 currency code. Value is formatted as currency.",
"type": "string"
},
"dataDetectorTypes": {
"description": "Apple: back fields only. Limits which kinds of data are detected and linked.",
"items": {
"enum": [
"PKDataDetectorTypePhoneNumber",
"PKDataDetectorTypeLink",
"PKDataDetectorTypeAddress",
"PKDataDetectorTypeCalendarEvent"
],
"type": "string"
},
"type": "array"
},
"dataKey": {
"description": "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n",
"type": "string"
},
"dateStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"ignoresTimeZone": {
"description": "Apple: whether to display the date in the pass's local time rather than the user's.",
"type": "boolean"
},
"isRelative": {
"description": "Apple: whether the date is displayed relative to the current time.",
"type": "boolean"
},
"key": {
"description": "Unique key identifying the field. Must be unique across ALL field groups in a template.",
"type": "string"
},
"label": {
"description": "Human-readable label rendered above the value on the pass face.",
"type": "string"
},
"numberStyle": {
"enum": [
"PKNumberStyleDecimal",
"PKNumberStylePercent",
"PKNumberStyleScientific",
"PKNumberStyleSpellOut"
],
"type": "string"
},
"row": {
"description": "Apple: auxiliary/secondary layout control (0 or 1).",
"enum": [
0,
1
],
"type": "integer"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.",
"type": "object"
},
"textAlignment": {
"enum": [
"PKTextAlignmentLeft",
"PKTextAlignmentCenter",
"PKTextAlignmentRight",
"PKTextAlignmentNatural"
],
"type": "string"
},
"timeStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"value": {
"description": "Static value for the field. Number types are preserved for\nApple's `numberStyle` / `currencyCode` formatters. For dynamic\nvalues, omit `value` and set `dataKey` instead.\n",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"backFields": {
"items": {
"description": "A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n",
"properties": {
"attributedValue": {
"description": "Apple: HTML-flavored value (used for rendering links, etc.).",
"type": "string"
},
"changeMessage": {
"description": "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value.",
"type": "string"
},
"currencyCode": {
"description": "Apple: ISO 4217 currency code. Value is formatted as currency.",
"type": "string"
},
"dataDetectorTypes": {
"description": "Apple: back fields only. Limits which kinds of data are detected and linked.",
"items": {
"enum": [
"PKDataDetectorTypePhoneNumber",
"PKDataDetectorTypeLink",
"PKDataDetectorTypeAddress",
"PKDataDetectorTypeCalendarEvent"
],
"type": "string"
},
"type": "array"
},
"dataKey": {
"description": "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n",
"type": "string"
},
"dateStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"ignoresTimeZone": {
"description": "Apple: whether to display the date in the pass's local time rather than the user's.",
"type": "boolean"
},
"isRelative": {
"description": "Apple: whether the date is displayed relative to the current time.",
"type": "boolean"
},
"key": {
"description": "Unique key identifying the field. Must be unique across ALL field groups in a template.",
"type": "string"
},
"label": {
"description": "Human-readable label rendered above the value on the pass face.",
"type": "string"
},
"numberStyle": {
"enum": [
"PKNumberStyleDecimal",
"PKNumberStylePercent",
"PKNumberStyleScientific",
"PKNumberStyleSpellOut"
],
"type": "string"
},
"row": {
"description": "Apple: auxiliary/secondary layout control (0 or 1).",
"enum": [
0,
1
],
"type": "integer"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.",
"type": "object"
},
"textAlignment": {
"enum": [
"PKTextAlignmentLeft",
"PKTextAlignmentCenter",
"PKTextAlignmentRight",
"PKTextAlignmentNatural"
],
"type": "string"
},
"timeStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"value": {
"description": "Static value for the field. Number types are preserved for\nApple's `numberStyle` / `currencyCode` formatters. For dynamic\nvalues, omit `value` and set `dataKey` instead.\n",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"backgroundColor": {
"description": "Accepts `#rrggbb`, `#rgb`, or `rgb(r,g,b)`. Apple emits `rgb(...)`; Google emits `#rrggbb`.",
"type": "string"
},
"bagDropURL": {
"format": "uri",
"type": "string"
},
"baggagePolicyURL": {
"format": "uri",
"type": "string"
},
"balanceCurrencyCode": {
"description": "ISO 4217 code used when `balance` is supplied as a plain number (dollars → micros).",
"type": "string"
},
"balanceDataKey": {
"type": "string"
},
"barcode": {
"properties": {
"altText": {
"description": "Static alternate text. Only used when `altTextDataKey` is not set.",
"type": "string"
},
"altTextDataKey": {
"description": "Key in generate-pass `data` object whose value becomes the human-readable alt text.",
"type": "string"
},
"format": {
"description": "Apple Wallet barcode format. Automatically mapped to Google's equivalent (QR_CODE, PDF_417, AZTEC, CODE_128) when the template targets Google Wallet.",
"enum": [
"PKBarcodeFormatQR",
"PKBarcodeFormatPDF417",
"PKBarcodeFormatAztec",
"PKBarcodeFormatCode128"
],
"type": "string"
},
"messageDataKey": {
"description": "Key in generate-pass `data` object that holds the barcode message.",
"type": "string"
},
"messageEncoding": {
"default": "iso-8859-1",
"description": "Text encoding for the barcode message. Default is `iso-8859-1` per Apple spec.",
"type": "string"
}
},
"type": "object"
},
"beacons": {
"items": {
"properties": {
"major": {
"type": "integer"
},
"minor": {
"type": "integer"
},
"proximityUUID": {
"format": "uuid",
"type": "string"
},
"relevantText": {
"type": "string"
}
},
"required": [
"proximityUUID"
],
"type": "object"
},
"type": "array"
},
"callbackOptions": {
"additionalProperties": true,
"type": "object"
},
"cardNumberDataKey": {
"type": "string"
},
"cardNumberLabel": {
"type": "string"
},
"changeSeatURL": {
"format": "uri",
"type": "string"
},
"checkInURL": {
"format": "uri",
"type": "string"
},
"contactVenueEmail": {
"format": "email",
"type": "string"
},
"contactVenuePhoneNumber": {
"type": "string"
},
"contactVenueWebsite": {
"format": "uri",
"type": "string"
},
"dateTimeEnd": {
"format": "date-time",
"type": "string"
},
"dateTimeStart": {
"format": "date-time",
"type": "string"
},
"description": {
"description": "Apple top-level description. Defaults to 'PassFast Pass' if unset.",
"type": "string"
},
"destination": {
"properties": {
"airportIataCode": {
"description": "3-letter IATA airport code (e.g. `LHR`, `JFK`).",
"type": "string"
},
"gate": {
"type": "string"
},
"terminal": {
"type": "string"
}
},
"required": [
"airportIataCode"
],
"type": "object"
},
"directionsInformationURL": {
"format": "uri",
"type": "string"
},
"discoverableProgram": {
"additionalProperties": true,
"description": "Google Loyalty: public program listing. Requires `countryCode` on the class (set via `discoverableProgram`).",
"type": "object"
},
"doorsOpen": {
"format": "date-time",
"type": "string"
},
"enableSmartTap": {
"type": "boolean"
},
"entertainmentURL": {
"format": "uri",
"type": "string"
},
"eventLogoText": {
"type": "string"
},
"eventNumberDataKey": {
"type": "string"
},
"eventNumberLabel": {
"type": "string"
},
"flightHeader": {
"properties": {
"carrier": {
"properties": {
"carrierIataCode": {
"description": "2-letter IATA carrier code (e.g. `BA`, `AA`).",
"type": "string"
}
},
"required": [
"carrierIataCode"
],
"type": "object"
},
"flightNumber": {
"description": "Flight number (digits only per Google spec).",
"type": "string"
}
},
"required": [
"carrier",
"flightNumber"
],
"type": "object"
},
"flightStatusURL": {
"format": "uri",
"type": "string"
},
"footerBackgroundColor": {
"type": "string"
},
"foregroundColor": {
"type": "string"
},
"gateDataKey": {
"type": "string"
},
"googleLogoText": {
"description": "Google: brand/card title (required for Google Wallet rendering).",
"type": "string"
},
"googleTransitType": {
"description": "Google Wallet transit class transitType enum. Auto-derived from Apple's `transitType` if not set explicitly.",
"enum": [
"BUS",
"RAIL",
"TRAM",
"FERRY",
"OTHER"
],
"type": "string"
},
"groupingIdentifier": {
"description": "Apple: groups related passes. Also mapped to Google's `groupingInfo.groupingId` on the object.",
"type": "string"
},
"headerFields": {
"items": {
"description": "A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n",
"properties": {
"attributedValue": {
"description": "Apple: HTML-flavored value (used for rendering links, etc.).",
"type": "string"
},
"changeMessage": {
"description": "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value.",
"type": "string"
},
"currencyCode": {
"description": "Apple: ISO 4217 currency code. Value is formatted as currency.",
"type": "string"
},
"dataDetectorTypes": {
"description": "Apple: back fields only. Limits which kinds of data are detected and linked.",
"items": {
"enum": [
"PKDataDetectorTypePhoneNumber",
"PKDataDetectorTypeLink",
"PKDataDetectorTypeAddress",
"PKDataDetectorTypeCalendarEvent"
],
"type": "string"
},
"type": "array"
},
"dataKey": {
"description": "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n",
"type": "string"
},
"dateStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"ignoresTimeZone": {
"description": "Apple: whether to display the date in the pass's local time rather than the user's.",
"type": "boolean"
},
"isRelative": {
"description": "Apple: whether the date is displayed relative to the current time.",
"type": "boolean"
},
"key": {
"description": "Unique key identifying the field. Must be unique across ALL field groups in a template.",
"type": "string"
},
"label": {
"description": "Human-readable label rendered above the value on the pass face.",
"type": "string"
},
"numberStyle": {
"enum": [
"PKNumberStyleDecimal",
"PKNumberStylePercent",
"PKNumberStyleScientific",
"PKNumberStyleSpellOut"
],
"type": "string"
},
"row": {
"description": "Apple: auxiliary/secondary layout control (0 or 1).",
"enum": [
0,
1
],
"type": "integer"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.",
"type": "object"
},
"textAlignment": {
"enum": [
"PKTextAlignmentLeft",
"PKTextAlignmentCenter",
"PKTextAlignmentRight",
"PKTextAlignmentNatural"
],
"type": "string"
},
"timeStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"value": {
"description": "Static value for the field. Number types are preserved for\nApple's `numberStyle` / `currencyCode` formatters. For dynamic\nvalues, omit `value` and set `dataKey` instead.\n",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"jumpToURL": {
"format": "uri",
"type": "string"
},
"labelColor": {
"description": "Apple only — field label color.",
"type": "string"
},
"liveBroadcastURL": {
"format": "uri",
"type": "string"
},
"localScheduledArrivalDateTime": {
"description": "Google Flight: same format as departure.",
"type": "string"
},
"localScheduledDepartureDateTime": {
"description": "Google Flight: ISO 8601 **without** timezone offset (local airport time). Automatically stripped if a Z/offset is supplied.",
"type": "string"
},
"locations": {
"items": {
"properties": {
"altitude": {
"type": "number"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"relevantText": {
"description": "Apple: lock-screen text when the device enters this location.",
"type": "string"
}
},
"required": [
"latitude",
"longitude"
],
"type": "object"
},
"type": "array"
},
"logoText": {
"description": "Apple: text beside the logo on the pass face.",
"type": "string"
},
"loyaltyPointsDataKey": {
"type": "string"
},
"loyaltyPointsLabel": {
"type": "string"
},
"maxDistance": {
"description": "Apple only — max distance (meters) for location relevance.",
"type": "integer"
},
"merchandiseURL": {
"format": "uri",
"type": "string"
},
"messages": {
"description": "Google class-level messages.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"nfc": {
"properties": {
"encryptionPublicKey": {
"description": "ECC P-256 public key (base64-encoded) for encrypting the NFC payload.",
"type": "string"
},
"message": {
"description": "The data transmitted during an NFC interaction.",
"type": "string"
},
"requiresAuthentication": {
"type": "boolean"
}
},
"required": [
"message"
],
"type": "object"
},
"objectMessages": {
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"orderFoodURL": {
"format": "uri",
"type": "string"
},
"organizationName": {
"description": "Apple top-level org name. Defaults to 'PassFast' if unset.",
"type": "string"
},
"origin": {
"properties": {
"airportIataCode": {
"description": "3-letter IATA airport code (e.g. `LHR`, `JFK`).",
"type": "string"
},
"gate": {
"type": "string"
},
"terminal": {
"type": "string"
}
},
"required": [
"airportIataCode"
],
"type": "object"
},
"parkingInformationURL": {
"format": "uri",
"type": "string"
},
"pinDataKey": {
"type": "string"
},
"pinLabel": {
"type": "string"
},
"primaryFields": {
"items": {
"description": "A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n",
"properties": {
"attributedValue": {
"description": "Apple: HTML-flavored value (used for rendering links, etc.).",
"type": "string"
},
"changeMessage": {
"description": "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value.",
"type": "string"
},
"currencyCode": {
"description": "Apple: ISO 4217 currency code. Value is formatted as currency.",
"type": "string"
},
"dataDetectorTypes": {
"description": "Apple: back fields only. Limits which kinds of data are detected and linked.",
"items": {
"enum": [
"PKDataDetectorTypePhoneNumber",
"PKDataDetectorTypeLink",
"PKDataDetectorTypeAddress",
"PKDataDetectorTypeCalendarEvent"
],
"type": "string"
},
"type": "array"
},
"dataKey": {
"description": "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n",
"type": "string"
},
"dateStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"ignoresTimeZone": {
"description": "Apple: whether to display the date in the pass's local time rather than the user's.",
"type": "boolean"
},
"isRelative": {
"description": "Apple: whether the date is displayed relative to the current time.",
"type": "boolean"
},
"key": {
"description": "Unique key identifying the field. Must be unique across ALL field groups in a template.",
"type": "string"
},
"label": {
"description": "Human-readable label rendered above the value on the pass face.",
"type": "string"
},
"numberStyle": {
"enum": [
"PKNumberStyleDecimal",
"PKNumberStylePercent",
"PKNumberStyleScientific",
"PKNumberStyleSpellOut"
],
"type": "string"
},
"row": {
"description": "Apple: auxiliary/secondary layout control (0 or 1).",
"enum": [
0,
1
],
"type": "integer"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.",
"type": "object"
},
"textAlignment": {
"enum": [
"PKTextAlignmentLeft",
"PKTextAlignmentCenter",
"PKTextAlignmentRight",
"PKTextAlignmentNatural"
],
"type": "string"
},
"timeStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"value": {
"description": "Static value for the field. Number types are preserved for\nApple's `numberStyle` / `currencyCode` formatters. For dynamic\nvalues, omit `value` and set `dataKey` instead.\n",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"purchaseParkingURL": {
"format": "uri",
"type": "string"
},
"redemptionChannel": {
"description": "Google Wallet OfferClass redemption channel.",
"enum": [
"INSTORE",
"ONLINE",
"BOTH",
"TEMPORARY_PRICE_REDUCTION"
],
"type": "string"
},
"relevantDate": {
"description": "ISO 8601 datetime with timezone suffix. Naive datetimes (no Z/offset) are rejected.",
"format": "date-time",
"type": "string"
},
"relevantDates": {
"description": "Apple plural relevantDates[] — multiple time windows. Entries without timezone are filtered out.",
"items": {
"oneOf": [
{
"format": "date-time",
"type": "string"
},
{
"properties": {
"endDate": {
"format": "date-time",
"type": "string"
},
"startDate": {
"format": "date-time",
"type": "string"
}
},
"type": "object"
}
]
},
"type": "array"
},
"rotatingBarcode": {
"description": "Google Wallet rotating barcode (TOTP-based). Supply a pre-configured\nobject; PassFast does not synthesize the HMAC secret.\n",
"properties": {
"totpDetails": {
"properties": {
"algorithm": {
"enum": [
"TOTP_SHA1",
"TOTP_SHA256",
"TOTP_SHA512"
],
"type": "string"
},
"parameters": {
"items": {
"properties": {
"key": {
"description": "Base16 (hex) encoded TOTP secret.",
"type": "string"
},
"valueLength": {
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"periodMillis": {
"description": "TOTP period as a string of milliseconds (e.g. `\"30000\"`).",
"type": "string"
}
},
"type": "object"
},
"type": {
"enum": [
"QR_CODE",
"AZTEC",
"PDF_417",
"CODE_128",
"DATA_MATRIX"
],
"type": "string"
},
"valuePattern": {
"description": "Pattern for the rotating value, e.g. `rotating-{totp_value}`.",
"type": "string"
}
},
"type": "object"
},
"rowDataKey": {
"type": "string"
},
"seatDataKey": {
"type": "string"
},
"seatUpgradeURL": {
"format": "uri",
"type": "string"
},
"secondaryFields": {
"items": {
"description": "A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n",
"properties": {
"attributedValue": {
"description": "Apple: HTML-flavored value (used for rendering links, etc.).",
"type": "string"
},
"changeMessage": {
"description": "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value.",
"type": "string"
},
"currencyCode": {
"description": "Apple: ISO 4217 currency code. Value is formatted as currency.",
"type": "string"
},
"dataDetectorTypes": {
"description": "Apple: back fields only. Limits which kinds of data are detected and linked.",
"items": {
"enum": [
"PKDataDetectorTypePhoneNumber",
"PKDataDetectorTypeLink",
"PKDataDetectorTypeAddress",
"PKDataDetectorTypeCalendarEvent"
],
"type": "string"
},
"type": "array"
},
"dataKey": {
"description": "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n",
"type": "string"
},
"dateStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"ignoresTimeZone": {
"description": "Apple: whether to display the date in the pass's local time rather than the user's.",
"type": "boolean"
},
"isRelative": {
"description": "Apple: whether the date is displayed relative to the current time.",
"type": "boolean"
},
"key": {
"description": "Unique key identifying the field. Must be unique across ALL field groups in a template.",
"type": "string"
},
"label": {
"description": "Human-readable label rendered above the value on the pass face.",
"type": "string"
},
"numberStyle": {
"enum": [
"PKNumberStyleDecimal",
"PKNumberStylePercent",
"PKNumberStyleScientific",
"PKNumberStyleSpellOut"
],
"type": "string"
},
"row": {
"description": "Apple: auxiliary/secondary layout control (0 or 1).",
"enum": [
0,
1
],
"type": "integer"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.",
"type": "object"
},
"textAlignment": {
"enum": [
"PKTextAlignmentLeft",
"PKTextAlignmentCenter",
"PKTextAlignmentRight",
"PKTextAlignmentNatural"
],
"type": "string"
},
"timeStyle": {
"enum": [
"PKDateStyleNone",
"PKDateStyleShort",
"PKDateStyleMedium",
"PKDateStyleLong",
"PKDateStyleFull"
],
"type": "string"
},
"value": {
"description": "Static value for the field. Number types are preserved for\nApple's `numberStyle` / `currencyCode` formatters. For dynamic\nvalues, omit `value` and set `dataKey` instead.\n",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"secondaryLoyaltyPointsDataKey": {
"type": "string"
},
"secondaryLoyaltyPointsLabel": {
"type": "string"
},
"sectionDataKey": {
"type": "string"
},
"securityAnimation": {
"additionalProperties": true,
"type": "object"
},
"sellURL": {
"format": "uri",
"type": "string"
},
"semantics": {
"additionalProperties": true,
"description": "Apple: top-level semantic tags (event, transit, balance categories).",
"type": "object"
},
"shoppingURL": {
"format": "uri",
"type": "string"
},
"smartTapRedemptionDataKey": {
"type": "string"
},
"smartTapRedemptionValue": {
"type": "string"
},
"suppressHeaderDarkening": {
"type": "boolean"
},
"suppressStripShine": {
"type": "boolean"
},
"ticketHolderNameDataKey": {
"type": "string"
},
"ticketNumberDataKey": {
"type": "string"
},
"trackBagsURL": {
"format": "uri",
"type": "string"
},
"transferURL": {
"format": "uri",
"type": "string"
},
"transitInformationURL": {
"format": "uri",
"type": "string"
},
"transitOperatorName": {
"type": "string"
},
"transitType": {
"description": "Apple Wallet transitType enum. Required for `boardingPass` templates at publish.",
"enum": [
"PKTransitTypeAir",
"PKTransitTypeTrain",
"PKTransitTypeBus",
"PKTransitTypeBoat",
"PKTransitTypeGeneric"
],
"type": "string"
},
"tripType": {
"enum": [
"ROUND_TRIP",
"ONE_WAY"
],
"type": "string"
},
"useAutomaticColors": {
"type": "boolean"
},
"venueAddress": {
"type": "string"
},
"venueName": {
"type": "string"
},
"viewUnlockRequirement": {
"enum": [
"UNLOCK_REQUIRED_TO_VIEW",
"VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED"
],
"type": "string"
}
},
"required": [
"backgroundColor",
"foregroundColor"
],
"type": "object"
},
"thumbnail_image_id": {
"format": "uuid",
"type": "string"
},
"wallet_types": {
"description": "Wallet platforms this template supports.",
"items": {
"enum": [
"apple",
"google"
],
"type": "string"
},
"type": "array"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "updateTemplate",
"outputSchema": null
},
{
"description": "Upload a single certificate\n\nUploads a single PEM-encoded certificate or key.\n\n**Scope:** `certs:manage`\n\nMaps to OpenAPI operationId `uploadCertificate` — POST /manage-certs.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cert_data": {
"description": "Base64-encoded certificate or key data.",
"format": "byte",
"type": "string"
},
"cert_type": {
"description": "Type of certificate being uploaded.",
"enum": [
"signer_cert",
"signer_key",
"wwdr"
],
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"cert_type",
"cert_data"
],
"type": "object"
},
"name": "uploadCertificate",
"outputSchema": null
},
{
"description": "Upload Google credentials\n\nUploads Google service account credentials for Google Wallet pass signing.\nThe service account JSON and issuer ID are stored securely.\n\n**Scope:** `certs:manage`\n\nMaps to OpenAPI operationId `uploadGoogleCredentials` — POST /manage-certs/google.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"issuer_id": {
"description": "Google Wallet issuer ID.",
"type": "string"
},
"service_account_json": {
"additionalProperties": true,
"description": "Google service account JSON key file contents.",
"type": "object"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"service_account_json",
"issuer_id"
],
"type": "object"
},
"name": "uploadGoogleCredentials",
"outputSchema": null
},
{
"description": "Upload an image\n\nUploads an image for use in pass templates or per-pass strip overrides.\nSend as multipart form data with a `purpose` field and a `file` field\ncontaining the PNG image.\n\n**Upload behaviour by purpose:**\n- `strip` — **accumulates**. Each upload creates a new image; the returned\n `id` can be passed as `strip_image_id` on `POST /v1/passes` or\n `PATCH /v1/passes/{id}` to give individual passes their own banner.\n Previous `strip` images are NOT deleted — manage them via\n `DELETE /v1/images/{id}` when no longer referenced.\n- All other purposes (`icon`, `logo`, `thumbnail`, `background`, `footer`,\n and all `_2x`/`_3x` variants) — **replace-on-upload**. Uploading a new\n image of the same purpose deletes the previous one from storage and DB.\n These are app-wide template assets, not per-pass.\n\n**Scope:** `images:manage`\n\nMaps to OpenAPI operationId `uploadImage` — POST /manage-images.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"file_base64": {
"description": "Base64-encoded file bytes. Maps to the OpenAPI multipart `file` field — same uploadImage (or equivalent) endpoint, not a new API.",
"type": "string"
},
"filename": {
"description": "Optional filename sent with the multipart upload.",
"type": "string"
},
"purpose": {
"description": "The intended use of the image. `strip` uploads accumulate\n(for per-pass `strip_image_id` overrides); all other purposes\nreplace existing uploads of the same purpose for the app.\n",
"enum": [
"icon",
"icon_2x",
"icon_3x",
"logo",
"logo_2x",
"logo_3x",
"thumbnail",
"thumbnail_2x",
"strip",
"strip_2x",
"background",
"background_2x",
"footer",
"footer_2x"
],
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"purpose",
"file_base64"
],
"type": "object"
},
"name": "uploadImage",
"outputSchema": null
},
{
"description": "Upload a .p12 certificate bundle\n\nUploads a PKCS#12 (.p12) bundle containing signer certificate and private key.\nThe bundle is decrypted with the provided password, and individual certificates\nare extracted and stored with AES-256-GCM encryption.\n\n**Scope:** `certs:manage`\n\nMaps to OpenAPI operationId `uploadP12Certificate` — POST /manage-certs/p12.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"p12_data": {
"description": "Base64-encoded .p12 file data.",
"format": "byte",
"type": "string"
},
"password": {
"description": "Password to decrypt the .p12 bundle (if password-protected).",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"p12_data"
],
"type": "object"
},
"name": "uploadP12Certificate",
"outputSchema": null
},
{
"description": "Void a pass\n\nMarks a pass as invalidated and rebuilds the `.pkpass` file with Apple's `voided: true` flag.\nRegistered devices are sent push notifications so the pass appears voided immediately in Apple Wallet.\nRebuild failure is non-fatal — the pass is still invalidated at the DB level.\n\n**Scope:** `passes:manage`\n\nMaps to OpenAPI operationId `voidPass` — POST /manage-passes/{id}/void.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Pass ID.",
"format": "uuid",
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "voidPass",
"outputSchema": null
},
{
"description": "Void a pass by serial number\n\nMarks a pass (looked up by serial number) as invalidated and rebuilds the `.pkpass`\nfile with Apple's `voided: true` flag. Registered devices are sent push notifications\nso the pass appears voided immediately in Apple Wallet.\nWhen a serial has both Apple and Google passes, use `?wallet_type=` to select which one (defaults to `apple`).\n\n**Scope:** `passes:manage`\n\nMaps to OpenAPI operationId `voidPassBySerial` — POST /manage-passes/serial/{serial_number}/void.\n\nSame PassFast HTTP API, billing, and rate limits. Do not invent other paths.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"serial_number": {
"description": "Pass serial number (unique within app + wallet type).",
"type": "string"
},
"wallet_type": {
"default": "apple",
"description": "Wallet type to look up when a serial number has both Apple and Google passes.\nDefaults to `apple` for backward compatibility.\n",
"enum": [
"apple",
"google"
],
"type": "string"
},
"x_app_id": {
"description": "Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.",
"format": "uuid",
"type": "string"
}
},
"required": [
"serial_number"
],
"type": "object"
},
"name": "voidPassBySerial",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:520bc28d2181aeb8a9f5bbd83e9441303efb3170f22c0ce7d6ec4fdedbfbc96d | sha256sum