MCP 服务器

PassFast

st.passfa/passfast
电商与零售 开发者工具 公开且可连接 MCP 2026-07-28

此 MCP 可以做什么

Creates, manages, signs, shares, downloads, and generates Apple Wallet and Google Wallet passes and templates.

batchGeneratePasses
Batch generate wallet passes Generate up to 100 wallet passes in one **synchronous** request. Each accepted row is one `POST /generate-pass` (same free-100 and card-on-file gates as a single generate). Optional `POST /share-pass/create` per successful row when `create_share_links` is true (default). **Host:** `https://passfa.st/api/passes/batch` (site / Vercel preview). This is not an `api.passfa.st` Edge Function. MCP tool: `batchGeneratePasses` (secret key `sk_live_` only) — same path and body as this operation. **Auth:** `Authorization: Bearer sk_live_…` or `pk_live_…` (scope `passes:create`). A Supabase user JWT is also accepted (dashboard session). Send `X-App-Id` for multi-app orgs and `X-Org-Id` as elsewhere. **Body:** mapped `rows` (same shape the dashboard posts) **or** raw `csv` plus optional `column_map`. Do not send both. **Limits:** more than 100 rows → `400 row_limit_exceeded` **before** any generate. Empty body / empty CSV → `400 empty_batch` or `invalid_csv`. Bad template → `400 invalid_template`. Missing or invalid Bearer → `401 unauthorized`. **Billing:** a row that hits the free-100 / card gate returns the same `402` codes as generate-pass (`free_limit_reached`, `subscription_canceled`, `payment_past_due`). Remaining rows stop. Already-created rows stay. HTTP `402` is returned only when **zero** rows succeeded; a later-row 402 after some successes is HTTP `200` with `stopped_reason` and per-row results. **Partial failures:** other per-row errors (validation, duplicate serial, share-link warning) continue. The response lists every processed row. **Scope:** `passes:create` Maps to OpenAPI operationId `batchGeneratePasses` — POST /passes/batch. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'required': ['template_id'], 'properties': {'csv': {'type': 'string', 'description': 'Raw CSV text with a header row. Do not send together with rows.'}, 'rows': {'type': 'array', 'items': {'type': 'object', 'properties': {'data': {'type': 'object', 'description': 'Template field_schema values.', 'additionalProperties': True}, 'expires_at': {'type': 'string', 'format': 'date-time'}, 'external_id': {'type': 'string'}, 'serial_number': {'type': 'string', 'description': 'Optional. Auto-generated when omitted.'}}}, 'description': 'Mapped rows (dashboard / scripts). Do not send together with csv.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'column_map': {'type': 'object', 'properties': {'fields': {'type': 'object', 'additionalProperties': {'type': 'string'}}, 'expires_at': {'type': 'string'}, 'external_id': {'type': 'string'}, 'serial_number': {'type': 'string'}}, 'description': 'Optional CSV header map when `csv` is sent.'}, 'template_id': {'type': 'string', 'format': 'uuid', 'description': 'ID of a published template.'}, 'wallet_type': {'enum': ['apple', 'google', 'both'], 'type': 'string', 'default': 'apple'}, 'create_share_links': {'type': 'boolean', 'default': True, 'description': 'When true, call POST /share-pass/create after each successful generate.'}}, 'additionalProperties': False}
createApiKey
Create an API key Creates a new API key. The response contains `id`, `name`, `key_type`, `key_prefix`, `raw_key`, and `message`. The full raw key is shown only once and cannot be retrieved again. **Scope:** `org:manage` Maps to OpenAPI operationId `createApiKey` — POST /manage-keys. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'required': ['name', 'key_type'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable label for the key.'}, 'key_type': {'enum': ['secret', 'publishable'], 'type': 'string', 'description': 'Key type. Secret keys have full access; publishable keys have limited scopes.'}}, 'additionalProperties': False}
createApp
Create a new app Creates a new app within the organization. **Scope:** `org:manage` Maps to OpenAPI operationId `createApp` — POST /manage-org/app. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'properties': {'name': {'type': 'string', 'default': 'New App', 'description': 'App display name.'}}, 'additionalProperties': False}
createShareToken
Create a share token Creates a public share token for a pass, enabling distribution via URL, QR code, or messaging. The share URL points to a public page where recipients can add the pass to Apple or Google Wallet without logging in. Idempotent — if the pass already has a share token, the existing token is returned (200) instead of creating a new one (201). For dual-wallet passes (same serial number with both Apple and Google), the share token is automatically applied to all sibling passes. **Scope:** `passes:manage` Maps to OpenAPI operationId `createShareToken` — POST /share-pass/create. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['pass_id'], 'properties': {'pass_id': {'type': 'string', 'format': 'uuid', 'description': 'ID of the pass to share.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
createTemplate
Create a template Creates a new pass template in draft status. **Scope:** `templates:manage` Maps to OpenAPI operationId `createTemplate` — POST /manage-templates. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'required': ['name', 'pass_style', 'structure'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable template name.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'structure': {'type': 'object', 'required': ['backgroundColor', 'foregroundColor'], 'properties': {'nfc': {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'The data transmitted during an NFC interaction.'}, 'encryptionPublicKey': {'type': 'string', 'description': 'ECC P-256 public key (base64-encoded) for encrypting the NFC payload.'}, 'requiresAuthentication': {'type': 'boolean'}}}, 'origin': {'type': 'object', 'required': ['airportIataCode'], 'properties': {'gate': {'type': 'string'}, 'terminal': {'type': 'string'}, 'airportIataCode': {'type': 'string', 'description': '3-letter IATA airport code (e.g. `LHR`, `JFK`).'}}}, 'barcode': {'type': 'object', 'properties': {'format': {'enum': ['PKBarcodeFormatQR', 'PKBarcodeFormatPDF417', 'PKBarcodeFormatAztec', 'PKBarcodeFormatCode128'], 'type': 'string', 'description': "Apple Wallet barcode format. Automatically mapped to Google's equivalent (QR_CODE, PDF_417, AZTEC, CODE_128) when the template targets Google Wallet."}, 'altText': {'type': 'string', 'description': 'Static alternate text. Only used when `altTextDataKey` is not set.'}, 'altTextDataKey': {'type': 'string', 'description': 'Key in generate-pass `data` object whose value becomes the human-readable alt text.'}, 'messageDataKey': {'type': 'string', 'description': 'Key in generate-pass `data` object that holds the barcode message.'}, 'messageEncoding': {'type': 'string', 'default': 'iso-8859-1', 'description': 'Text encoding for the barcode message. Default is `iso-8859-1` per Apple spec.'}}}, 'beacons': {'type': 'array', 'items': {'type': 'object', 'required': ['proximityUUID'], 'properties': {'major': {'type': 'integer'}, 'minor': {'type': 'integer'}, 'relevantText': {'type': 'string'}, 'proximityUUID': {'type': 'string', 'format': 'uuid'}}}}, 'sellURL': {'type': 'string', 'format': 'uri'}, 'addOnURL': {'type': 'string', 'format': 'uri'}, 'logoText': {'type': 'string', 'description': 'Apple: text beside the logo on the pass face.'}, 'messages': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Google class-level messages.'}, 'pinLabel': {'type': 'string'}, 'tripType': {'enum': ['ROUND_TRIP', 'ONE_WAY'], 'type': 'string'}, 'doorsOpen': {'type': 'string', 'format': 'date-time'}, 'jumpToURL': {'type': 'string', 'format': 'uri'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'required': ['latitude', 'longitude'], 'properties': {'altitude': {'type': 'number'}, 'latitude': {'type': 'number'}, 'longitude': {'type': 'number'}, 'relevantText': {'type': 'string', 'description': 'Apple: lock-screen text when the device enters this location.'}}}}, 'semantics': {'type': 'object', 'description': 'Apple: top-level semantic tags (event, transit, balance categories).', 'additionalProperties': True}, 'venueName': {'type': 'string'}, 'backFields': {'type': 'array', 'items': {'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'Unique key identifying the field. Must be unique across ALL field groups in a template.'}, 'row': {'enum': [0, 1], 'type': 'integer', 'description': 'Apple: auxiliary/secondary layout control (0 or 1).'}, 'label': {'type': 'string', 'description': 'Human-readable label rendered above the value on the pass face.'}, 'value': {'oneOf': [{'type': 'string'}, {'type': 'number'}], '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"}, 'dataKey': {'type': 'string', 'description': "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"}, 'dateStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'semantics': {'type': 'object', 'description': 'Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.', 'additionalProperties': True}, 'timeStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'isRelative': {'type': 'boolean', 'description': 'Apple: whether the date is displayed relative to the current time.'}, 'numberStyle': {'enum': ['PKNumberStyleDecimal', 'PKNumberStylePercent', 'PKNumberStyleScientific', 'PKNumberStyleSpellOut'], 'type': 'string'}, 'currencyCode': {'type': 'string', 'description': 'Apple: ISO 4217 currency code. Value is formatted as currency.'}, 'changeMessage': {'type': 'string', 'description': "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."}, 'textAlignment': {'enum': ['PKTextAlignmentLeft', 'PKTextAlignmentCenter', 'PKTextAlignmentRight', 'PKTextAlignmentNatural'], 'type': 'string'}, 'attributedValue': {'type': 'string', 'description': 'Apple: HTML-flavored value (used for rendering links, etc.).'}, 'ignoresTimeZone': {'type': 'boolean', 'description': "Apple: whether to display the date in the pass's local time rather than the user's."}, 'dataDetectorTypes': {'type': 'array', 'items': {'enum': ['PKDataDetectorTypePhoneNumber', 'PKDataDetectorTypeLink', 'PKDataDetectorTypeAddress', 'PKDataDetectorTypeCalendarEvent'], 'type': 'string'}, 'description': 'Apple: back fields only. Limits which kinds of data are detected and linked.'}}, 'description': 'A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n'}}, 'bagDropURL': {'type': 'string', 'format': 'uri'}, 'checkInURL': {'type': 'string', 'format': 'uri'}, 'labelColor': {'type': 'string', 'description': 'Apple only — field label color.'}, 'pinDataKey': {'type': 'string'}, 'rowDataKey': {'type': 'string'}, 'dateTimeEnd': {'type': 'string', 'format': 'date-time'}, 'description': {'type': 'string', 'description': "Apple top-level description. Defaults to 'PassFast Pass' if unset."}, 'destination': {'type': 'object', 'required': ['airportIataCode'], 'properties': {'gate': {'type': 'string'}, 'terminal': {'type': 'string'}, 'airportIataCode': {'type': 'string', 'description': '3-letter IATA airport code (e.g. `LHR`, `JFK`).'}}}, 'gateDataKey': {'type': 'string'}, 'maxDistance': {'type': 'integer', 'description': 'Apple only — max distance (meters) for location relevance.'}, 'seatDataKey': {'type': 'string'}, 'shoppingURL': {'type': 'string', 'format': 'uri'}, 'transferURL': {'type': 'string', 'format': 'uri'}, 'transitType': {'enum': ['PKTransitTypeAir', 'PKTransitTypeTrain', 'PKTransitTypeBus', 'PKTransitTypeBoat', 'PKTransitTypeGeneric'], 'type': 'string', 'description': 'Apple Wallet transitType enum. Required for `boardingPass` templates at publish.'}, 'appLaunchURL': {'type': 'string', 'format': 'uri'}, 'flightHeader': {'type': 'object', 'required': ['carrier', 'flightNumber'], 'properties': {'carrier': {'type': 'object', 'required': ['carrierIataCode'], 'properties': {'carrierIataCode': {'type': 'string', 'description': '2-letter IATA carrier code (e.g. `BA`, `AA`).'}}}, 'flightNumber': {'type': 'string', 'description': 'Flight number (digits only per Google spec).'}}}, 'headerFields': {'type': 'array', 'items': {'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'Unique key identifying the field. Must be unique across ALL field groups in a template.'}, 'row': {'enum': [0, 1], 'type': 'integer', 'description': 'Apple: auxiliary/secondary layout control (0 or 1).'}, 'label': {'type': 'string', 'description': 'Human-readable label rendered above the value on the pass face.'}, 'value': {'oneOf': [{'type': 'string'}, {'type': 'number'}], '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"}, 'dataKey': {'type': 'string', 'description': "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"}, 'dateStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'semantics': {'type': 'object', 'description': 'Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.', 'additionalProperties': True}, 'timeStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'isRelative': {'type': 'boolean', 'description': 'Apple: whether the date is displayed relative to the current time.'}, 'numberStyle': {'enum': ['PKNumberStyleDecimal', 'PKNumberStylePercent', 'PKNumberStyleScientific', 'PKNumberStyleSpellOut'], 'type': 'string'}, 'currencyCode': {'type': 'string', 'description': 'Apple: ISO 4217 currency code. Value is formatted as currency.'}, 'changeMessage': {'type': 'string', 'description': "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."}, 'textAlignment': {'enum': ['PKTextAlignmentLeft', 'PKTextAlignmentCenter', 'PKTextAlignmentRight', 'PKTextAlignmentNatural'], 'type': 'string'}, 'attributedValue': {'type': 'string', 'description': 'Apple: HTML-flavored value (used for rendering links, etc.).'}, 'ignoresTimeZone': {'type': 'boolean', 'description': "Apple: whether to display the date in the pass's local time rather than the user's."}, 'dataDetectorTypes': {'type': 'array', 'items': {'enum': ['PKDataDetectorTypePhoneNumber', 'PKDataDetectorTypeLink', 'PKDataDetectorTypeAddress', 'PKDataDetectorTypeCalendarEvent'], 'type': 'string'}, 'description': 'Apple: back fields only. Limits which kinds of data are detected and linked.'}}, 'description': 'A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n'}}, 'orderFoodURL': {'type': 'string', 'format': 'uri'}, 'relevantDate': {'type': 'string', 'format': 'date-time', 'description': 'ISO 8601 datetime with timezone suffix. Naive datetimes (no Z/offset) are rejected.'}, 'trackBagsURL': {'type': 'string', 'format': 'uri'}, 'venueAddress': {'type': 'string'}, 'changeSeatURL': {'type': 'string', 'format': 'uri'}, 'dateTimeStart': {'type': 'string', 'format': 'date-time'}, 'eventLogoText': {'type': 'string'}, 'primaryFields': {'type': 'array', 'items': {'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'Unique key identifying the field. Must be unique across ALL field groups in a template.'}, 'row': {'enum': [0, 1], 'type': 'integer', 'description': 'Apple: auxiliary/secondary layout control (0 or 1).'}, 'label': {'type': 'string', 'description': 'Human-readable label rendered above the value on the pass face.'}, 'value': {'oneOf': [{'type': 'string'}, {'type': 'number'}], '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"}, 'dataKey': {'type': 'string', 'description': "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"}, 'dateStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'semantics': {'type': 'object', 'description': 'Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.', 'additionalProperties': True}, 'timeStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'isRelative': {'type': 'boolean', 'description': 'Apple: whether the date is displayed relative to the current time.'}, 'numberStyle': {'enum': ['PKNumberStyleDecimal', 'PKNumberStylePercent', 'PKNumberStyleScientific', 'PKNumberStyleSpellOut'], 'type': 'string'}, 'currencyCode': {'type': 'string', 'description': 'Apple: ISO 4217 currency code. Value is formatted as currency.'}, 'changeMessage': {'type': 'string', 'description': "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."}, 'textAlignment': {'enum': ['PKTextAlignmentLeft', 'PKTextAlignmentCenter', 'PKTextAlignmentRight', 'PKTextAlignmentNatural'], 'type': 'string'}, 'attributedValue': {'type': 'string', 'description': 'Apple: HTML-flavored value (used for rendering links, etc.).'}, 'ignoresTimeZone': {'type': 'boolean', 'description': "Apple: whether to display the date in the pass's local time rather than the user's."}, 'dataDetectorTypes': {'type': 'array', 'items': {'enum': ['PKDataDetectorTypePhoneNumber', 'PKDataDetectorTypeLink', 'PKDataDetectorTypeAddress', 'PKDataDetectorTypeCalendarEvent'], 'type': 'string'}, 'description': 'Apple: back fields only. Limits which kinds of data are detected and linked.'}}, 'description': 'A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n'}}, 'relevantDates': {'type': 'array', 'items': {'oneOf': [{'type': 'string', 'format': 'date-time'}, {'type': 'object', 'properties': {'endDate': {'type': 'string', 'format': 'date-time'}, 'startDate': {'type': 'string', 'format': 'date-time'}}}]}, 'description': 'Apple plural relevantDates[] — multiple time windows. Entries without timezone are filtered out.'}, 'balanceDataKey': {'type': 'string'}, 'enableSmartTap': {'type': 'boolean'}, 'googleLogoText': {'type': 'string', 'description': 'Google: brand/card title (required for Google Wallet rendering).'}, 'merchandiseURL': {'type': 'string', 'format': 'uri'}, 'objectMessages': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'seatUpgradeURL': {'type': 'string', 'format': 'uri'}, 'sectionDataKey': {'type': 'string'}, 'auxiliaryFields': {'type': 'array', 'items': {'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'Unique key identifying the field. Must be unique across ALL field groups in a template.'}, 'row': {'enum': [0, 1], 'type': 'integer', 'description': 'Apple: auxiliary/secondary layout control (0 or 1).'}, 'label': {'type': 'string', 'description': 'Human-readable label rendered above the value on the pass face.'}, 'value': {'oneOf': [{'type': 'string'}, {'type': 'number'}], '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"}, 'dataKey': {'type': 'string', 'description': "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"}, 'dateStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'semantics': {'type': 'object', 'description': 'Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.', 'additionalProperties': True}, 'timeStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'isRelative': {'type': 'boolean', 'description': 'Apple: whether the date is displayed relative to the current time.'}, 'numberStyle': {'enum': ['PKNumberStyleDecimal', 'PKNumberStylePercent', 'PKNumberStyleScientific', 'PKNumberStyleSpellOut'], 'type': 'string'}, 'currencyCode': {'type': 'string', 'description': 'Apple: ISO 4217 currency code. Value is formatted as currency.'}, 'changeMessage': {'type': 'string', 'description': "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."}, 'textAlignment': {'enum': ['PKTextAlignmentLeft', 'PKTextAlignmentCenter', 'PKTextAlignmentRight', 'PKTextAlignmentNatural'], 'type': 'string'}, 'attributedValue': {'type': 'string', 'description': 'Apple: HTML-flavored value (used for rendering links, etc.).'}, 'ignoresTimeZone': {'type': 'boolean', 'description': "Apple: whether to display the date in the pass's local time rather than the user's."}, 'dataDetectorTypes': {'type': 'array', 'items': {'enum': ['PKDataDetectorTypePhoneNumber', 'PKDataDetectorTypeLink', 'PKDataDetectorTypeAddress', 'PKDataDetectorTypeCalendarEvent'], 'type': 'string'}, 'description': 'Apple: back fields only. Limits which kinds of data are detected and linked.'}}, 'description': 'A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n'}}, 'backgroundColor': {'type': 'string', 'description': 'Accepts `#rrggbb`, `#rgb`, or `rgb(r,g,b)`. Apple emits `rgb(...)`; Google emits `#rrggbb`.'}, 'callbackOptions': {'type': 'object', 'additionalProperties': True}, 'cardNumberLabel': {'type': 'string'}, 'flightStatusURL': {'type': 'string', 'format': 'uri'}, 'foregroundColor': {'type': 'string'}, 'rotatingBarcode': {'type': 'object', 'properties': {'type': {'enum': ['QR_CODE', 'AZTEC', 'PDF_417', 'CODE_128', 'DATA_MATRIX'], 'type': 'string'}, 'totpDetails': {'type': 'object', 'properties': {'algorithm': {'enum': ['TOTP_SHA1', 'TOTP_SHA256', 'TOTP_SHA512'], 'type': 'string'}, 'parameters': {'type': 'array', 'items': {'type': 'object', 'properties': {'key': {'type': 'string', 'description': 'Base16 (hex) encoded TOTP secret.'}, 'valueLength': {'type': 'integer'}}}}, 'periodMillis': {'type': 'string', 'description': 'TOTP period as a string of milliseconds (e.g. `"30000"`).'}}}, 'valuePattern': {'type': 'string', 'description': 'Pattern for the rotating value, e.g. `rotating-{totp_value}`.'}}, 'description': 'Google Wallet rotating barcode (TOTP-based). Supply a pre-configured\nobject; PassFast does not synthesize the HMAC secret.\n'}, 'secondaryFields': {'type': 'array', 'items': {'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'Unique key identifying the field. Must be unique across ALL field groups in a template.'}, 'row': {'enum': [0, 1], 'type': 'integer', 'description': 'Apple: auxiliary/secondary layout control (0 or 1).'}, 'label': {'type': 'string', 'description': 'Human-readable label rendered above the value on the pass face.'}, 'value': {'oneOf': [{'type': 'string'}, {'type': 'number'}], '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"}, 'dataKey': {'type': 'string', 'description': "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"}, 'dateStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'semantics': {'type': 'object', 'description': 'Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.', 'additionalProperties': True}, 'timeStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'isRelative': {'type': 'boolean', 'description': 'Apple: whether the date is displayed relative to the current time.'}, 'numberStyle': {'enum': ['PKNumberStyleDecimal', 'PKNumberStylePercent', 'PKNumberStyleScientific', 'PKNumberStyleSpellOut'], 'type': 'string'}, 'currencyCode': {'type': 'string', 'description': 'Apple: ISO 4217 currency code. Value is formatted as currency.'}, 'changeMessage': {'type': 'string', 'description': "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."}, 'textAlignment': {'enum': ['PKTextAlignmentLeft', 'PKTextAlignmentCenter', 'PKTextAlignmentRight', 'PKTextAlignmentNatural'], 'type': 'string'}, 'attributedValue': {'type': 'string', 'description': 'Apple: HTML-flavored value (used for rendering links, etc.).'}, 'ignoresTimeZone': {'type': 'boolean', 'description': "Apple: whether to display the date in the pass's local time rather than the user's."}, 'dataDetectorTypes': {'type': 'array', 'items': {'enum': ['PKDataDetectorTypePhoneNumber', 'PKDataDetectorTypeLink', 'PKDataDetectorTypeAddress', 'PKDataDetectorTypeCalendarEvent'], 'type': 'string'}, 'description': 'Apple: back fields only. Limits which kinds of data are detected and linked.'}}, 'description': 'A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n'}}, 'accessibilityURL': {'type': 'string', 'format': 'uri'}, 'addChangeInfoURL': {'type': 'string', 'format': 'uri'}, 'baggagePolicyURL': {'type': 'string', 'format': 'uri'}, 'entertainmentURL': {'type': 'string', 'format': 'uri'}, 'eventNumberLabel': {'type': 'string'}, 'liveBroadcastURL': {'type': 'string', 'format': 'uri'}, 'organizationName': {'type': 'string', 'description': "Apple top-level org name. Defaults to 'PassFast' if unset."}, 'cardNumberDataKey': {'type': 'string'}, 'contactVenueEmail': {'type': 'string', 'format': 'email'}, 'googleTransitType': {'enum': ['BUS', 'RAIL', 'TRAM', 'FERRY', 'OTHER'], 'type': 'string', 'description': "Google Wallet transit class transitType enum. Auto-derived from Apple's `transitType` if not set explicitly."}, 'redemptionChannel': {'enum': ['INSTORE', 'ONLINE', 'BOTH', 'TEMPORARY_PRICE_REDUCTION'], 'type': 'string', 'description': 'Google Wallet OfferClass redemption channel.'}, 'securityAnimation': {'type': 'object', 'additionalProperties': True}, 'eventNumberDataKey': {'type': 'string'}, 'groupingIdentifier': {'type': 'string', 'description': "Apple: groups related passes. Also mapped to Google's `groupingInfo.groupingId` on the object."}, 'loyaltyPointsLabel': {'type': 'string'}, 'purchaseParkingURL': {'type': 'string', 'format': 'uri'}, 'suppressStripShine': {'type': 'boolean'}, 'useAutomaticColors': {'type': 'boolean'}, 'balanceCurrencyCode': {'type': 'string', 'description': 'ISO 4217 code used when `balance` is supplied as a plain number (dollars → micros).'}, 'contactVenueWebsite': {'type': 'string', 'format': 'uri'}, 'discoverableProgram': {'type': 'object', 'description': 'Google Loyalty: public program listing. Requires `countryCode` on the class (set via `discoverableProgram`).', 'additionalProperties': True}, 'ticketNumberDataKey': {'type': 'string'}, 'transitOperatorName': {'type': 'string'}, 'additionalInfoFields': {'type': 'array', 'items': {'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'Unique key identifying the field. Must be unique across ALL field groups in a template.'}, 'row': {'enum': [0, 1], 'type': 'integer', 'description': 'Apple: auxiliary/secondary layout control (0 or 1).'}, 'label': {'type': 'string', 'description': 'Human-readable label rendered above the value on the pass face.'}, 'value': {'oneOf': [{'type': 'string'}, {'type': 'number'}], '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"}, 'dataKey': {'type': 'string', 'description': "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"}, 'dateStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'semantics': {'type': 'object', 'description': 'Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.', 'additionalProperties': True}, 'timeStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'isRelative': {'type': 'boolean', 'description': 'Apple: whether the date is displayed relative to the current time.'}, 'numberStyle': {'enum': ['PKNumberStyleDecimal', 'PKNumberStylePercent', 'PKNumberStyleScientific', 'PKNumberStyleSpellOut'], 'type': 'string'}, 'currencyCode': {'type': 'string', 'description': 'Apple: ISO 4217 currency code. Value is formatted as currency.'}, 'changeMessage': {'type': 'string', 'description': "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."}, 'textAlignment': {'enum': ['PKTextAlignmentLeft', 'PKTextAlignmentCenter', 'PKTextAlignmentRight', 'PKTextAlignmentNatural'], 'type': 'string'}, 'attributedValue': {'type': 'string', 'description': 'Apple: HTML-flavored value (used for rendering links, etc.).'}, 'ignoresTimeZone': {'type': 'boolean', 'description': "Apple: whether to display the date in the pass's local time rather than the user's."}, 'dataDetectorTypes': {'type': 'array', 'items': {'enum': ['PKDataDetectorTypePhoneNumber', 'PKDataDetectorTypeLink', 'PKDataDetectorTypeAddress', 'PKDataDetectorTypeCalendarEvent'], 'type': 'string'}, 'description': 'Apple: back fields only. Limits which kinds of data are detected and linked.'}}, 'description': 'A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n'}, 'description': 'Apple poster-style eventTicket only. Rendered inside the eventTicket object.'}, 'loyaltyPointsDataKey': {'type': 'string'}, 'footerBackgroundColor': {'type': 'string'}, 'parkingInformationURL': {'type': 'string', 'format': 'uri'}, 'transitInformationURL': {'type': 'string', 'format': 'uri'}, 'viewUnlockRequirement': {'enum': ['UNLOCK_REQUIRED_TO_VIEW', 'VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED'], 'type': 'string'}, 'contactVenuePhoneNumber': {'type': 'string'}, 'smartTapRedemptionValue': {'type': 'string'}, 'suppressHeaderDarkening': {'type': 'boolean'}, 'ticketHolderNameDataKey': {'type': 'string'}, 'directionsInformationURL': {'type': 'string', 'format': 'uri'}, 'smartTapRedemptionDataKey': {'type': 'string'}, 'associatedStoreIdentifiers': {'type': 'array', 'items': {'type': 'integer'}, 'description': "Apple iTunes app IDs for 'Open in App'."}, 'secondaryLoyaltyPointsLabel': {'type': 'string'}, 'localScheduledArrivalDateTime': {'type': 'string', 'description': 'Google Flight: same format as departure.'}, 'secondaryLoyaltyPointsDataKey': {'type': 'string'}, 'localScheduledDepartureDateTime': {'type': 'string', 'description': 'Google Flight: ISO 8601 **without** timezone offset (local airport time). Automatically stripped if a Z/offset is supplied.'}}, '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', 'additionalProperties': True}, 'pass_style': {'enum': ['boardingPass', 'coupon', 'eventTicket', 'generic', 'storeCard'], 'type': 'string', 'description': 'Apple Wallet pass style.'}, 'description': {'type': 'string', 'description': 'Optional description of the template.'}, 'field_schema': {'type': 'object', 'description': 'Optional JSON schema for validating dynamic data.', 'additionalProperties': True}, 'wallet_types': {'type': 'array', 'items': {'enum': ['apple', 'google'], 'type': 'string'}, 'default': ['apple']}, 'icon_image_id': {'type': 'string', 'format': 'uuid'}, 'logo_image_id': {'type': 'string', 'format': 'uuid'}, 'strip_image_id': {'type': 'string', 'format': 'uuid'}, 'google_pass_type': {'enum': ['generic', 'loyalty', 'eventTicket', 'offer', 'flight', 'transit', 'giftCard'], 'type': 'string', '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'}, 'thumbnail_image_id': {'type': 'string', 'format': 'uuid'}, 'background_image_id': {'type': 'string', 'format': 'uuid'}, 'google_logo_image_id': {'type': 'string', 'format': 'uuid'}, 'google_wide_logo_image_id': {'type': 'string', 'format': 'uuid'}}, 'additionalProperties': False}
deactivateGoogleCredential
Deactivate Google credential Deactivates a Google Wallet credential. **Scope:** `certs:manage` Maps to OpenAPI operationId `deactivateGoogleCredential` — DELETE /manage-certs/google/{id}. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可能执行破坏性操作 可访问外部资源
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Google credential ID.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
deleteApiKey
Delete an API key Permanently deletes an API key. The key **must be revoked first** (via PATCH) before it can be deleted. Attempting to delete an active key returns 400. **Scope:** `org:manage` Maps to OpenAPI operationId `deleteApiKey` — DELETE /manage-keys/{id}. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可能执行破坏性操作 可访问外部资源
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'API key ID.'}}, 'additionalProperties': False}
deleteApp
Deactivate an app Deactivates the current app. This does not permanently delete data. **Scope:** `org:manage` Maps to OpenAPI operationId `deleteApp` — DELETE /manage-org/app. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可能执行破坏性操作 可访问外部资源
输入模式
{'type': 'object', 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
deleteCertificate
Delete a certificate Deletes a certificate. **Scope:** `certs:manage` Maps to OpenAPI operationId `deleteCertificate` — DELETE /manage-certs/{id}. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可能执行破坏性操作 可访问外部资源
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Certificate ID.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
deleteImage
Delete an image Deletes an image (storage file + DB row). Always succeeds when the image exists. Any template column pointing at this image is silently cleared (the template falls back to no image in that slot — re-attach a new one if needed). Any pass with `strip_image_id` pointing at this image has its override nullified and reverts to the template's strip on next render. Use `GET /manage-images/{id}/usage` first if you need to know the blast radius before deleting. **Scope:** `images:manage` Maps to OpenAPI operationId `deleteImage` — DELETE /manage-images/{id}. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可能执行破坏性操作 可访问外部资源
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Image ID.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
deleteTemplate
Delete a template Soft-deletes a template by marking it as archived. Use `permanent=true` to permanently delete the template and its associated data. **Scope:** `templates:manage` Maps to OpenAPI operationId `deleteTemplate` — DELETE /manage-templates/{id}. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可能执行破坏性操作 可访问外部资源
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Template ID.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'permanent': {'type': 'boolean', 'default': False, 'description': 'When true, permanently deletes the template instead of archiving it.'}}, 'additionalProperties': False}
downloadPass
Download a .pkpass file Downloads the `.pkpass` binary for an active pass. **Scope:** `passes:download` Maps to OpenAPI operationId `downloadPass` — GET /manage-passes/{id}/download. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Pass ID.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
downloadPassBySerial
Download a .pkpass file by serial number Downloads the `.pkpass` binary for an active pass looked up by serial number. When a serial has both Apple and Google passes, use `?wallet_type=` to select which one (defaults to `apple`). **Scope:** `passes:download` Maps to OpenAPI operationId `downloadPassBySerial` — GET /manage-passes/serial/{serial_number}/download. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['serial_number'], 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'wallet_type': {'enum': ['apple', 'google'], 'type': 'string', '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'}, 'serial_number': {'type': 'string', 'description': 'Pass serial number (unique within app + wallet type).'}}, 'additionalProperties': False}
downloadSharedPass
Download shared Apple .pkpass Downloads the Apple `.pkpass` file for a shared pass. No authentication required. Only works for active Apple passes. Maps to OpenAPI operationId `downloadSharedPass` — GET /share-pass/{token}/download. Public endpoint — no API key required. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['token'], 'properties': {'token': {'type': 'string', 'description': 'Share token (32 hex characters).'}}, 'additionalProperties': False}
generatePass
Generate a wallet pass Generates a wallet pass from a published template. For Apple passes (default), returns a signed `.pkpass` binary file directly. For Google passes (`wallet_type: "google"`), returns a JSON object containing a `save_url` that the user can open to add the pass to Google Wallet. When `wallet_type: "both"`, generates both Apple and Google passes in a single call. The response is always JSON with `apple` and `google` keys. Partial success is allowed — if one wallet fails, the other is still returned with a warning. Returns 201 if at least one succeeds. The pass ID is returned in the `X-Pass-Id` response header (for single-wallet). If the app has a validation webhook configured, the webhook is called once before generation (not per wallet type). A webhook rejection returns 403; a webhook error returns 502 (fail-closed). **Scope:** `passes:create` Maps to OpenAPI operationId `generatePass` — POST /generate-pass. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'required': ['template_id', 'serial_number', 'data'], 'properties': {'data': {'type': 'object', 'description': 'Dynamic field values merged into the template structure.', 'additionalProperties': True}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'required': ['latitude', 'longitude'], 'properties': {'altitude': {'type': 'number', 'description': 'Altitude in meters (optional).'}, 'latitude': {'type': 'number', 'description': 'Latitude in degrees.'}, 'longitude': {'type': 'number', 'description': 'Longitude in degrees.'}, 'relevantText': {'type': 'string', 'description': 'Text displayed on lock screen when user is near this location.'}}}, 'description': 'GPS locations where the pass is relevant (shown on lock screen).\nOverrides template defaults if provided.\n'}, 'expires_at': {'type': 'string', 'format': 'date-time', 'description': 'Optional expiration timestamp for the pass.'}, 'external_id': {'type': 'string', 'description': 'Optional external identifier for cross-system lookups.'}, 'template_id': {'type': 'string', 'format': 'uuid', 'description': 'ID of the published template to use.'}, 'wallet_type': {'enum': ['apple', 'google', 'both'], 'type': 'string', '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'}, 'max_distance': {'type': 'number', 'description': 'Maximum distance in meters from a location for lock screen relevance.'}, 'get_or_create': {'type': 'boolean', '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'}, 'relevant_date': {'type': 'string', 'format': 'date-time', 'description': 'ISO 8601 date when the pass is relevant (appears on lock screen).'}, 'serial_number': {'type': 'string', 'description': 'Unique serial number for this pass.'}, 'strip_image_id': {'type': 'string', 'format': 'uuid', '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'}}, 'additionalProperties': False}
getApp
Get current app details Returns the current app's settings. **Scope:** `org:read` Maps to OpenAPI operationId `getApp` — GET /manage-org/app. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
getBatchGenerateLimits
Batch generate limits Public metadata for `POST /passes/batch`. No authentication. Returns the hard row cap (100), sync mode, auth summary, and stable error codes. This path is on the site host (`https://passfa.st/api`), not `https://api.passfa.st/functions/v1`. MCP tool: `getBatchGenerateLimits`. Maps to OpenAPI operationId `getBatchGenerateLimits` — GET /passes/batch. Public endpoint — no API key required. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
getImageUsage
Get image usage / reference counts Report how an image is referenced across templates and passes. Useful before DELETE to confirm an image is unused, or to find which templates a shared asset is attached to. - `template_refs` lists every template column (e.g. `strip_image_id`, `icon_image_id`, `google_logo_image_id`) that references this image. - `pass_refs_count` is the number of passes whose per-pass `strip_image_id` points at this image. - `safe_to_delete` is `true` when `total_refs` is 0. **Scope:** `images:manage` Maps to OpenAPI operationId `getImageUsage` — GET /manage-images/{id}/usage. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Image ID.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
getManagedSigningStatus
Check managed signing availability Returns whether managed (platform) signing credentials are available for Apple and Google wallets. When `apple_ready` or `google_ready` is `true`, apps can use `signing_mode: "managed"` or `google_signing_mode: "managed"` without uploading their own credentials. **Scope:** `org:read` Maps to OpenAPI operationId `getManagedSigningStatus` — GET /manage-org/managed-signing-status. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
getOrganization
Get organization details Returns the current organization's settings. **Scope:** `org:read` Maps to OpenAPI operationId `getOrganization` — GET /manage-org. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
getPass
Get a pass Returns the full details of a single pass. **Scope:** `passes:read` Maps to OpenAPI operationId `getPass` — GET /manage-passes/{id}. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Pass ID.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
getPassBySerial
Get a pass by serial number Returns the full details of a single pass looked up by serial number. When a serial has both Apple and Google passes, use `?wallet_type=` to select which one (defaults to `apple`). **Scope:** `passes:read` Maps to OpenAPI operationId `getPassBySerial` — GET /manage-passes/serial/{serial_number}. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['serial_number'], 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'wallet_type': {'enum': ['apple', 'google'], 'type': 'string', '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'}, 'serial_number': {'type': 'string', 'description': 'Pass serial number (unique within app + wallet type).'}}, 'additionalProperties': False}
getSharePassMetadata
Get shared pass metadata Returns public metadata for a shared pass. No authentication required. Used by the public share page to display wallet buttons and pass info. Maps to OpenAPI operationId `getSharePassMetadata` — GET /share-pass/{token}. Public endpoint — no API key required. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['token'], 'properties': {'token': {'type': 'string', 'description': 'Share token (32 hex characters).'}}, 'additionalProperties': False}
getTemplate
Get a template Returns the full details of a single template. **Scope:** `templates:manage` Maps to OpenAPI operationId `getTemplate` — GET /manage-templates/{id}. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Template ID.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
listApiKeys
List API keys Returns all API keys for the current organization. **Scope:** `org:manage` Maps to OpenAPI operationId `listApiKeys` — GET /manage-keys. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
listCertificates
List certificates Returns all certificates for the current app. **Scope:** `certs:manage` Maps to OpenAPI operationId `listCertificates` — GET /manage-certs. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
listGoogleCredentials
List Google credentials Returns all active Google Wallet credentials for the current app. **Scope:** `certs:manage` Maps to OpenAPI operationId `listGoogleCredentials` — GET /manage-certs/google. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
listImages
List images Returns all images for the current app, including signed preview URLs. **Scope:** `images:manage` Maps to OpenAPI operationId `listImages` — GET /manage-images. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
listPasses
List passes Returns a paginated list of passes for the current app. **Scope:** `passes:read` Maps to OpenAPI operationId `listPasses` — GET /manage-passes. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 50, 'description': 'Maximum number of results to return.'}, 'offset': {'type': 'integer', 'default': 0, 'description': 'Number of results to skip.'}, 'status': {'enum': ['active', 'invalidated', 'expired'], 'type': 'string', 'description': 'Filter by pass status.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'external_id': {'type': 'string', 'description': 'Filter by external ID.'}, 'template_id': {'type': 'string', 'format': 'uuid', 'description': 'Filter by template ID.'}, 'wallet_type': {'enum': ['apple', 'google'], 'type': 'string', 'description': 'Filter by wallet platform type.'}, 'created_after': {'type': 'string', 'format': 'date-time', 'description': 'Only return passes created after this timestamp.'}, 'serial_number': {'type': 'string', 'description': 'Filter by serial number.'}, 'created_before': {'type': 'string', 'format': 'date-time', 'description': 'Only return passes created before this timestamp.'}}, 'additionalProperties': False}
listTemplates
List templates Returns all templates for the current app. By default returns non-archived templates. Set `archived=true` to return only archived templates. **Scope:** `templates:manage` Maps to OpenAPI operationId `listTemplates` — GET /manage-templates. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {'archived': {'type': 'boolean', 'default': False, 'description': 'When true, return only archived templates instead of active ones.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
listWebhookEvents
List webhook events Returns a paginated list of webhook event delivery records for the current app. **Scope:** `org:read` Maps to OpenAPI operationId `listWebhookEvents` — GET /manage-org/webhook-events. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 50, 'description': 'Maximum number of results to return.'}, 'offset': {'type': 'integer', 'default': 0, 'description': 'Number of results to skip.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'event_type': {'enum': ['pass.created', 'pass.updated', 'pass.voided', 'pass.expired', 'device.registered', 'device.unregistered'], 'type': 'string', 'description': 'Filter by event type.'}, 'delivery_status': {'enum': ['pending', 'delivered', 'failed'], 'type': 'string', 'description': 'Filter by delivery status.'}}, 'additionalProperties': False}
publishTemplate
Publish a template Publishes a draft template, making it available for pass generation. Published templates cannot be modified. **Scope:** `templates:manage` Maps to OpenAPI operationId `publishTemplate` — POST /manage-templates/{id}/publish. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Template ID.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
revokeApiKey
Revoke an API key Revokes an API key, making it inactive. Revoked keys cannot authenticate. **Scope:** `org:manage` Maps to OpenAPI operationId `revokeApiKey` — PATCH /manage-keys/{id}. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可能执行破坏性操作 可访问外部资源
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'API key ID.'}}, 'additionalProperties': False}
testAppleCertificates
Test Apple certificates Generates an ephemeral test `.pkpass` file to verify that the uploaded Apple signing certificates are valid and complete. The test pass is not stored — it is returned directly as a binary download. **Scope:** `certs:manage` Maps to OpenAPI operationId `testAppleCertificates` — POST /manage-certs/test. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
testGoogleConnection
Test Google connection Tests the configured Google Wallet credentials by attempting to authenticate with the Google Wallet API. **Scope:** `certs:manage` Maps to OpenAPI operationId `testGoogleConnection` — POST /manage-certs/google/test. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
testWebhook
Test the validation webhook Sends a sample validation webhook payload to the configured URL and returns the result. **Scope:** `org:manage` Maps to OpenAPI operationId `testWebhook` — POST /manage-org/app/test-webhook. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
updateApp
Update app settings Updates the current app's settings, including webhook configuration. Set `regenerate_webhook_secret` to `true` to generate a new webhook signing secret; the new secret is returned in `webhook_secret_raw` (shown only once). **Scope:** `org:manage` Maps to OpenAPI operationId `updateApp` — PATCH /manage-org/app. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'App display name.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'webhook_url': {'type': 'string', 'format': 'uri', 'description': 'URL for async event webhook delivery.'}, 'signing_mode': {'enum': ['managed', 'custom'], 'type': 'string', 'description': 'Apple signing mode. `managed` uses platform credentials; `custom` uses your own.'}, 'apple_team_id': {'type': 'string', 'description': 'Apple Developer Team ID.'}, 'google_signing_mode': {'enum': ['managed', 'custom'], 'type': 'string', 'description': 'Google signing mode. `managed` uses platform credentials; `custom` uses your own.'}, 'onboarding_completed': {'type': 'boolean', 'description': 'Whether onboarding has been completed for this app.'}, 'pass_type_identifier': {'type': 'string', 'description': 'Apple pass type identifier (e.g., pass.com.example.myapp).'}, 'validation_webhook_url': {'type': 'string', 'format': 'uri', 'description': 'URL for pre-generation validation webhooks.'}, 'regenerate_webhook_secret': {'type': 'boolean', 'description': 'Set to true to regenerate the webhook signing secret.'}}, 'additionalProperties': False}
updateOrganization
Update organization settings Updates the current organization's settings, including APNs credentials. **Scope:** `org:manage` Maps to OpenAPI operationId `updateOrganization` — PATCH /manage-org. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Organization display name.'}, 'slug': {'type': 'string', 'description': 'URL-friendly slug.'}, 'apns_key_id': {'type': 'string', 'description': 'Apple Push Notification service Key ID.'}, 'apns_key_p8': {'type': 'string', 'description': 'APNs .p8 private key contents.'}}, 'additionalProperties': False}
updatePass
Update a pass Updates the dynamic data of an active pass. Optionally sends a push notification to registered devices so they fetch the updated pass. At least one of `data`, `expires_at`, `locations`, `relevant_date`, or `max_distance` is required. **Scope:** `passes:manage` Maps to OpenAPI operationId `updatePass` — PATCH /manage-passes/{id}. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Pass ID.'}, 'data': {'type': 'object', 'description': 'New dynamic field values to merge into the pass.', 'additionalProperties': True}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'required': ['latitude', 'longitude'], 'properties': {'altitude': {'type': 'number'}, 'latitude': {'type': 'number'}, 'longitude': {'type': 'number'}, 'relevantText': {'type': 'string'}}}, 'description': 'GPS locations where the pass is relevant (overrides template defaults).'}, 'expires_at': {'type': 'string', 'format': 'date-time', 'description': 'Expiration timestamp (set to null to remove expiration).'}, 'push_update': {'type': 'boolean', 'default': False, 'description': 'If true, send a push notification to registered devices.'}, 'max_distance': {'type': 'number', 'description': 'Maximum distance in meters from a location for lock screen relevance.'}, 'relevant_date': {'type': 'string', 'format': 'date-time', 'description': 'ISO 8601 date when the pass is relevant (lock screen).'}, 'strip_image_id': {'type': 'string', 'format': 'uuid', '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"}}, 'additionalProperties': False}
updatePassBySerial
Update a pass by serial number Updates the dynamic data of an active pass looked up by serial number. Optionally sends a push notification to registered devices. At least one of `data`, `expires_at`, `locations`, `relevant_date`, or `max_distance` is required. When a serial has both Apple and Google passes, use `?wallet_type=` to select which one (defaults to `apple`). **Scope:** `passes:manage` Maps to OpenAPI operationId `updatePassBySerial` — PATCH /manage-passes/serial/{serial_number}. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['serial_number'], 'properties': {'data': {'type': 'object', 'description': 'New dynamic field values to merge into the pass.', 'additionalProperties': True}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'required': ['latitude', 'longitude'], 'properties': {'altitude': {'type': 'number'}, 'latitude': {'type': 'number'}, 'longitude': {'type': 'number'}, 'relevantText': {'type': 'string'}}}, 'description': 'GPS locations where the pass is relevant (overrides template defaults).'}, 'expires_at': {'type': 'string', 'format': 'date-time', 'description': 'Expiration timestamp (set to null to remove expiration).'}, 'push_update': {'type': 'boolean', 'default': False, 'description': 'If true, send a push notification to registered devices.'}, 'wallet_type': {'enum': ['apple', 'google'], 'type': 'string', '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'}, 'max_distance': {'type': 'number', 'description': 'Maximum distance in meters from a location for lock screen relevance.'}, 'relevant_date': {'type': 'string', 'format': 'date-time', 'description': 'ISO 8601 date when the pass is relevant (lock screen).'}, 'serial_number': {'type': 'string', 'description': 'Pass serial number (unique within app + wallet type).'}, 'strip_image_id': {'type': 'string', 'format': 'uuid', '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"}}, 'additionalProperties': False}
updateTemplate
Update a template Updates a draft template. Published templates cannot be modified. **Scope:** `templates:manage` Maps to OpenAPI operationId `updateTemplate` — PATCH /manage-templates/{id}. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Template ID.'}, 'name': {'type': 'string'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'structure': {'type': 'object', 'required': ['backgroundColor', 'foregroundColor'], 'properties': {'nfc': {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'The data transmitted during an NFC interaction.'}, 'encryptionPublicKey': {'type': 'string', 'description': 'ECC P-256 public key (base64-encoded) for encrypting the NFC payload.'}, 'requiresAuthentication': {'type': 'boolean'}}}, 'origin': {'type': 'object', 'required': ['airportIataCode'], 'properties': {'gate': {'type': 'string'}, 'terminal': {'type': 'string'}, 'airportIataCode': {'type': 'string', 'description': '3-letter IATA airport code (e.g. `LHR`, `JFK`).'}}}, 'barcode': {'type': 'object', 'properties': {'format': {'enum': ['PKBarcodeFormatQR', 'PKBarcodeFormatPDF417', 'PKBarcodeFormatAztec', 'PKBarcodeFormatCode128'], 'type': 'string', 'description': "Apple Wallet barcode format. Automatically mapped to Google's equivalent (QR_CODE, PDF_417, AZTEC, CODE_128) when the template targets Google Wallet."}, 'altText': {'type': 'string', 'description': 'Static alternate text. Only used when `altTextDataKey` is not set.'}, 'altTextDataKey': {'type': 'string', 'description': 'Key in generate-pass `data` object whose value becomes the human-readable alt text.'}, 'messageDataKey': {'type': 'string', 'description': 'Key in generate-pass `data` object that holds the barcode message.'}, 'messageEncoding': {'type': 'string', 'default': 'iso-8859-1', 'description': 'Text encoding for the barcode message. Default is `iso-8859-1` per Apple spec.'}}}, 'beacons': {'type': 'array', 'items': {'type': 'object', 'required': ['proximityUUID'], 'properties': {'major': {'type': 'integer'}, 'minor': {'type': 'integer'}, 'relevantText': {'type': 'string'}, 'proximityUUID': {'type': 'string', 'format': 'uuid'}}}}, 'sellURL': {'type': 'string', 'format': 'uri'}, 'addOnURL': {'type': 'string', 'format': 'uri'}, 'logoText': {'type': 'string', 'description': 'Apple: text beside the logo on the pass face.'}, 'messages': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Google class-level messages.'}, 'pinLabel': {'type': 'string'}, 'tripType': {'enum': ['ROUND_TRIP', 'ONE_WAY'], 'type': 'string'}, 'doorsOpen': {'type': 'string', 'format': 'date-time'}, 'jumpToURL': {'type': 'string', 'format': 'uri'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'required': ['latitude', 'longitude'], 'properties': {'altitude': {'type': 'number'}, 'latitude': {'type': 'number'}, 'longitude': {'type': 'number'}, 'relevantText': {'type': 'string', 'description': 'Apple: lock-screen text when the device enters this location.'}}}}, 'semantics': {'type': 'object', 'description': 'Apple: top-level semantic tags (event, transit, balance categories).', 'additionalProperties': True}, 'venueName': {'type': 'string'}, 'backFields': {'type': 'array', 'items': {'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'Unique key identifying the field. Must be unique across ALL field groups in a template.'}, 'row': {'enum': [0, 1], 'type': 'integer', 'description': 'Apple: auxiliary/secondary layout control (0 or 1).'}, 'label': {'type': 'string', 'description': 'Human-readable label rendered above the value on the pass face.'}, 'value': {'oneOf': [{'type': 'string'}, {'type': 'number'}], '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"}, 'dataKey': {'type': 'string', 'description': "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"}, 'dateStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'semantics': {'type': 'object', 'description': 'Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.', 'additionalProperties': True}, 'timeStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'isRelative': {'type': 'boolean', 'description': 'Apple: whether the date is displayed relative to the current time.'}, 'numberStyle': {'enum': ['PKNumberStyleDecimal', 'PKNumberStylePercent', 'PKNumberStyleScientific', 'PKNumberStyleSpellOut'], 'type': 'string'}, 'currencyCode': {'type': 'string', 'description': 'Apple: ISO 4217 currency code. Value is formatted as currency.'}, 'changeMessage': {'type': 'string', 'description': "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."}, 'textAlignment': {'enum': ['PKTextAlignmentLeft', 'PKTextAlignmentCenter', 'PKTextAlignmentRight', 'PKTextAlignmentNatural'], 'type': 'string'}, 'attributedValue': {'type': 'string', 'description': 'Apple: HTML-flavored value (used for rendering links, etc.).'}, 'ignoresTimeZone': {'type': 'boolean', 'description': "Apple: whether to display the date in the pass's local time rather than the user's."}, 'dataDetectorTypes': {'type': 'array', 'items': {'enum': ['PKDataDetectorTypePhoneNumber', 'PKDataDetectorTypeLink', 'PKDataDetectorTypeAddress', 'PKDataDetectorTypeCalendarEvent'], 'type': 'string'}, 'description': 'Apple: back fields only. Limits which kinds of data are detected and linked.'}}, 'description': 'A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n'}}, 'bagDropURL': {'type': 'string', 'format': 'uri'}, 'checkInURL': {'type': 'string', 'format': 'uri'}, 'labelColor': {'type': 'string', 'description': 'Apple only — field label color.'}, 'pinDataKey': {'type': 'string'}, 'rowDataKey': {'type': 'string'}, 'dateTimeEnd': {'type': 'string', 'format': 'date-time'}, 'description': {'type': 'string', 'description': "Apple top-level description. Defaults to 'PassFast Pass' if unset."}, 'destination': {'type': 'object', 'required': ['airportIataCode'], 'properties': {'gate': {'type': 'string'}, 'terminal': {'type': 'string'}, 'airportIataCode': {'type': 'string', 'description': '3-letter IATA airport code (e.g. `LHR`, `JFK`).'}}}, 'gateDataKey': {'type': 'string'}, 'maxDistance': {'type': 'integer', 'description': 'Apple only — max distance (meters) for location relevance.'}, 'seatDataKey': {'type': 'string'}, 'shoppingURL': {'type': 'string', 'format': 'uri'}, 'transferURL': {'type': 'string', 'format': 'uri'}, 'transitType': {'enum': ['PKTransitTypeAir', 'PKTransitTypeTrain', 'PKTransitTypeBus', 'PKTransitTypeBoat', 'PKTransitTypeGeneric'], 'type': 'string', 'description': 'Apple Wallet transitType enum. Required for `boardingPass` templates at publish.'}, 'appLaunchURL': {'type': 'string', 'format': 'uri'}, 'flightHeader': {'type': 'object', 'required': ['carrier', 'flightNumber'], 'properties': {'carrier': {'type': 'object', 'required': ['carrierIataCode'], 'properties': {'carrierIataCode': {'type': 'string', 'description': '2-letter IATA carrier code (e.g. `BA`, `AA`).'}}}, 'flightNumber': {'type': 'string', 'description': 'Flight number (digits only per Google spec).'}}}, 'headerFields': {'type': 'array', 'items': {'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'Unique key identifying the field. Must be unique across ALL field groups in a template.'}, 'row': {'enum': [0, 1], 'type': 'integer', 'description': 'Apple: auxiliary/secondary layout control (0 or 1).'}, 'label': {'type': 'string', 'description': 'Human-readable label rendered above the value on the pass face.'}, 'value': {'oneOf': [{'type': 'string'}, {'type': 'number'}], '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"}, 'dataKey': {'type': 'string', 'description': "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"}, 'dateStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'semantics': {'type': 'object', 'description': 'Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.', 'additionalProperties': True}, 'timeStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'isRelative': {'type': 'boolean', 'description': 'Apple: whether the date is displayed relative to the current time.'}, 'numberStyle': {'enum': ['PKNumberStyleDecimal', 'PKNumberStylePercent', 'PKNumberStyleScientific', 'PKNumberStyleSpellOut'], 'type': 'string'}, 'currencyCode': {'type': 'string', 'description': 'Apple: ISO 4217 currency code. Value is formatted as currency.'}, 'changeMessage': {'type': 'string', 'description': "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."}, 'textAlignment': {'enum': ['PKTextAlignmentLeft', 'PKTextAlignmentCenter', 'PKTextAlignmentRight', 'PKTextAlignmentNatural'], 'type': 'string'}, 'attributedValue': {'type': 'string', 'description': 'Apple: HTML-flavored value (used for rendering links, etc.).'}, 'ignoresTimeZone': {'type': 'boolean', 'description': "Apple: whether to display the date in the pass's local time rather than the user's."}, 'dataDetectorTypes': {'type': 'array', 'items': {'enum': ['PKDataDetectorTypePhoneNumber', 'PKDataDetectorTypeLink', 'PKDataDetectorTypeAddress', 'PKDataDetectorTypeCalendarEvent'], 'type': 'string'}, 'description': 'Apple: back fields only. Limits which kinds of data are detected and linked.'}}, 'description': 'A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n'}}, 'orderFoodURL': {'type': 'string', 'format': 'uri'}, 'relevantDate': {'type': 'string', 'format': 'date-time', 'description': 'ISO 8601 datetime with timezone suffix. Naive datetimes (no Z/offset) are rejected.'}, 'trackBagsURL': {'type': 'string', 'format': 'uri'}, 'venueAddress': {'type': 'string'}, 'changeSeatURL': {'type': 'string', 'format': 'uri'}, 'dateTimeStart': {'type': 'string', 'format': 'date-time'}, 'eventLogoText': {'type': 'string'}, 'primaryFields': {'type': 'array', 'items': {'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'Unique key identifying the field. Must be unique across ALL field groups in a template.'}, 'row': {'enum': [0, 1], 'type': 'integer', 'description': 'Apple: auxiliary/secondary layout control (0 or 1).'}, 'label': {'type': 'string', 'description': 'Human-readable label rendered above the value on the pass face.'}, 'value': {'oneOf': [{'type': 'string'}, {'type': 'number'}], '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"}, 'dataKey': {'type': 'string', 'description': "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"}, 'dateStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'semantics': {'type': 'object', 'description': 'Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.', 'additionalProperties': True}, 'timeStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'isRelative': {'type': 'boolean', 'description': 'Apple: whether the date is displayed relative to the current time.'}, 'numberStyle': {'enum': ['PKNumberStyleDecimal', 'PKNumberStylePercent', 'PKNumberStyleScientific', 'PKNumberStyleSpellOut'], 'type': 'string'}, 'currencyCode': {'type': 'string', 'description': 'Apple: ISO 4217 currency code. Value is formatted as currency.'}, 'changeMessage': {'type': 'string', 'description': "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."}, 'textAlignment': {'enum': ['PKTextAlignmentLeft', 'PKTextAlignmentCenter', 'PKTextAlignmentRight', 'PKTextAlignmentNatural'], 'type': 'string'}, 'attributedValue': {'type': 'string', 'description': 'Apple: HTML-flavored value (used for rendering links, etc.).'}, 'ignoresTimeZone': {'type': 'boolean', 'description': "Apple: whether to display the date in the pass's local time rather than the user's."}, 'dataDetectorTypes': {'type': 'array', 'items': {'enum': ['PKDataDetectorTypePhoneNumber', 'PKDataDetectorTypeLink', 'PKDataDetectorTypeAddress', 'PKDataDetectorTypeCalendarEvent'], 'type': 'string'}, 'description': 'Apple: back fields only. Limits which kinds of data are detected and linked.'}}, 'description': 'A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n'}}, 'relevantDates': {'type': 'array', 'items': {'oneOf': [{'type': 'string', 'format': 'date-time'}, {'type': 'object', 'properties': {'endDate': {'type': 'string', 'format': 'date-time'}, 'startDate': {'type': 'string', 'format': 'date-time'}}}]}, 'description': 'Apple plural relevantDates[] — multiple time windows. Entries without timezone are filtered out.'}, 'balanceDataKey': {'type': 'string'}, 'enableSmartTap': {'type': 'boolean'}, 'googleLogoText': {'type': 'string', 'description': 'Google: brand/card title (required for Google Wallet rendering).'}, 'merchandiseURL': {'type': 'string', 'format': 'uri'}, 'objectMessages': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'seatUpgradeURL': {'type': 'string', 'format': 'uri'}, 'sectionDataKey': {'type': 'string'}, 'auxiliaryFields': {'type': 'array', 'items': {'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'Unique key identifying the field. Must be unique across ALL field groups in a template.'}, 'row': {'enum': [0, 1], 'type': 'integer', 'description': 'Apple: auxiliary/secondary layout control (0 or 1).'}, 'label': {'type': 'string', 'description': 'Human-readable label rendered above the value on the pass face.'}, 'value': {'oneOf': [{'type': 'string'}, {'type': 'number'}], '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"}, 'dataKey': {'type': 'string', 'description': "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"}, 'dateStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'semantics': {'type': 'object', 'description': 'Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.', 'additionalProperties': True}, 'timeStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'isRelative': {'type': 'boolean', 'description': 'Apple: whether the date is displayed relative to the current time.'}, 'numberStyle': {'enum': ['PKNumberStyleDecimal', 'PKNumberStylePercent', 'PKNumberStyleScientific', 'PKNumberStyleSpellOut'], 'type': 'string'}, 'currencyCode': {'type': 'string', 'description': 'Apple: ISO 4217 currency code. Value is formatted as currency.'}, 'changeMessage': {'type': 'string', 'description': "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."}, 'textAlignment': {'enum': ['PKTextAlignmentLeft', 'PKTextAlignmentCenter', 'PKTextAlignmentRight', 'PKTextAlignmentNatural'], 'type': 'string'}, 'attributedValue': {'type': 'string', 'description': 'Apple: HTML-flavored value (used for rendering links, etc.).'}, 'ignoresTimeZone': {'type': 'boolean', 'description': "Apple: whether to display the date in the pass's local time rather than the user's."}, 'dataDetectorTypes': {'type': 'array', 'items': {'enum': ['PKDataDetectorTypePhoneNumber', 'PKDataDetectorTypeLink', 'PKDataDetectorTypeAddress', 'PKDataDetectorTypeCalendarEvent'], 'type': 'string'}, 'description': 'Apple: back fields only. Limits which kinds of data are detected and linked.'}}, 'description': 'A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n'}}, 'backgroundColor': {'type': 'string', 'description': 'Accepts `#rrggbb`, `#rgb`, or `rgb(r,g,b)`. Apple emits `rgb(...)`; Google emits `#rrggbb`.'}, 'callbackOptions': {'type': 'object', 'additionalProperties': True}, 'cardNumberLabel': {'type': 'string'}, 'flightStatusURL': {'type': 'string', 'format': 'uri'}, 'foregroundColor': {'type': 'string'}, 'rotatingBarcode': {'type': 'object', 'properties': {'type': {'enum': ['QR_CODE', 'AZTEC', 'PDF_417', 'CODE_128', 'DATA_MATRIX'], 'type': 'string'}, 'totpDetails': {'type': 'object', 'properties': {'algorithm': {'enum': ['TOTP_SHA1', 'TOTP_SHA256', 'TOTP_SHA512'], 'type': 'string'}, 'parameters': {'type': 'array', 'items': {'type': 'object', 'properties': {'key': {'type': 'string', 'description': 'Base16 (hex) encoded TOTP secret.'}, 'valueLength': {'type': 'integer'}}}}, 'periodMillis': {'type': 'string', 'description': 'TOTP period as a string of milliseconds (e.g. `"30000"`).'}}}, 'valuePattern': {'type': 'string', 'description': 'Pattern for the rotating value, e.g. `rotating-{totp_value}`.'}}, 'description': 'Google Wallet rotating barcode (TOTP-based). Supply a pre-configured\nobject; PassFast does not synthesize the HMAC secret.\n'}, 'secondaryFields': {'type': 'array', 'items': {'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'Unique key identifying the field. Must be unique across ALL field groups in a template.'}, 'row': {'enum': [0, 1], 'type': 'integer', 'description': 'Apple: auxiliary/secondary layout control (0 or 1).'}, 'label': {'type': 'string', 'description': 'Human-readable label rendered above the value on the pass face.'}, 'value': {'oneOf': [{'type': 'string'}, {'type': 'number'}], '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"}, 'dataKey': {'type': 'string', 'description': "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"}, 'dateStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'semantics': {'type': 'object', 'description': 'Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.', 'additionalProperties': True}, 'timeStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'isRelative': {'type': 'boolean', 'description': 'Apple: whether the date is displayed relative to the current time.'}, 'numberStyle': {'enum': ['PKNumberStyleDecimal', 'PKNumberStylePercent', 'PKNumberStyleScientific', 'PKNumberStyleSpellOut'], 'type': 'string'}, 'currencyCode': {'type': 'string', 'description': 'Apple: ISO 4217 currency code. Value is formatted as currency.'}, 'changeMessage': {'type': 'string', 'description': "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."}, 'textAlignment': {'enum': ['PKTextAlignmentLeft', 'PKTextAlignmentCenter', 'PKTextAlignmentRight', 'PKTextAlignmentNatural'], 'type': 'string'}, 'attributedValue': {'type': 'string', 'description': 'Apple: HTML-flavored value (used for rendering links, etc.).'}, 'ignoresTimeZone': {'type': 'boolean', 'description': "Apple: whether to display the date in the pass's local time rather than the user's."}, 'dataDetectorTypes': {'type': 'array', 'items': {'enum': ['PKDataDetectorTypePhoneNumber', 'PKDataDetectorTypeLink', 'PKDataDetectorTypeAddress', 'PKDataDetectorTypeCalendarEvent'], 'type': 'string'}, 'description': 'Apple: back fields only. Limits which kinds of data are detected and linked.'}}, 'description': 'A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n'}}, 'accessibilityURL': {'type': 'string', 'format': 'uri'}, 'addChangeInfoURL': {'type': 'string', 'format': 'uri'}, 'baggagePolicyURL': {'type': 'string', 'format': 'uri'}, 'entertainmentURL': {'type': 'string', 'format': 'uri'}, 'eventNumberLabel': {'type': 'string'}, 'liveBroadcastURL': {'type': 'string', 'format': 'uri'}, 'organizationName': {'type': 'string', 'description': "Apple top-level org name. Defaults to 'PassFast' if unset."}, 'cardNumberDataKey': {'type': 'string'}, 'contactVenueEmail': {'type': 'string', 'format': 'email'}, 'googleTransitType': {'enum': ['BUS', 'RAIL', 'TRAM', 'FERRY', 'OTHER'], 'type': 'string', 'description': "Google Wallet transit class transitType enum. Auto-derived from Apple's `transitType` if not set explicitly."}, 'redemptionChannel': {'enum': ['INSTORE', 'ONLINE', 'BOTH', 'TEMPORARY_PRICE_REDUCTION'], 'type': 'string', 'description': 'Google Wallet OfferClass redemption channel.'}, 'securityAnimation': {'type': 'object', 'additionalProperties': True}, 'eventNumberDataKey': {'type': 'string'}, 'groupingIdentifier': {'type': 'string', 'description': "Apple: groups related passes. Also mapped to Google's `groupingInfo.groupingId` on the object."}, 'loyaltyPointsLabel': {'type': 'string'}, 'purchaseParkingURL': {'type': 'string', 'format': 'uri'}, 'suppressStripShine': {'type': 'boolean'}, 'useAutomaticColors': {'type': 'boolean'}, 'balanceCurrencyCode': {'type': 'string', 'description': 'ISO 4217 code used when `balance` is supplied as a plain number (dollars → micros).'}, 'contactVenueWebsite': {'type': 'string', 'format': 'uri'}, 'discoverableProgram': {'type': 'object', 'description': 'Google Loyalty: public program listing. Requires `countryCode` on the class (set via `discoverableProgram`).', 'additionalProperties': True}, 'ticketNumberDataKey': {'type': 'string'}, 'transitOperatorName': {'type': 'string'}, 'additionalInfoFields': {'type': 'array', 'items': {'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'Unique key identifying the field. Must be unique across ALL field groups in a template.'}, 'row': {'enum': [0, 1], 'type': 'integer', 'description': 'Apple: auxiliary/secondary layout control (0 or 1).'}, 'label': {'type': 'string', 'description': 'Human-readable label rendered above the value on the pass face.'}, 'value': {'oneOf': [{'type': 'string'}, {'type': 'number'}], '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"}, 'dataKey': {'type': 'string', 'description': "PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"}, 'dateStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'semantics': {'type': 'object', 'description': 'Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.', 'additionalProperties': True}, 'timeStyle': {'enum': ['PKDateStyleNone', 'PKDateStyleShort', 'PKDateStyleMedium', 'PKDateStyleLong', 'PKDateStyleFull'], 'type': 'string'}, 'isRelative': {'type': 'boolean', 'description': 'Apple: whether the date is displayed relative to the current time.'}, 'numberStyle': {'enum': ['PKNumberStyleDecimal', 'PKNumberStylePercent', 'PKNumberStyleScientific', 'PKNumberStyleSpellOut'], 'type': 'string'}, 'currencyCode': {'type': 'string', 'description': 'Apple: ISO 4217 currency code. Value is formatted as currency.'}, 'changeMessage': {'type': 'string', 'description': "Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."}, 'textAlignment': {'enum': ['PKTextAlignmentLeft', 'PKTextAlignmentCenter', 'PKTextAlignmentRight', 'PKTextAlignmentNatural'], 'type': 'string'}, 'attributedValue': {'type': 'string', 'description': 'Apple: HTML-flavored value (used for rendering links, etc.).'}, 'ignoresTimeZone': {'type': 'boolean', 'description': "Apple: whether to display the date in the pass's local time rather than the user's."}, 'dataDetectorTypes': {'type': 'array', 'items': {'enum': ['PKDataDetectorTypePhoneNumber', 'PKDataDetectorTypeLink', 'PKDataDetectorTypeAddress', 'PKDataDetectorTypeCalendarEvent'], 'type': 'string'}, 'description': 'Apple: back fields only. Limits which kinds of data are detected and linked.'}}, 'description': 'A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n'}, 'description': 'Apple poster-style eventTicket only. Rendered inside the eventTicket object.'}, 'loyaltyPointsDataKey': {'type': 'string'}, 'footerBackgroundColor': {'type': 'string'}, 'parkingInformationURL': {'type': 'string', 'format': 'uri'}, 'transitInformationURL': {'type': 'string', 'format': 'uri'}, 'viewUnlockRequirement': {'enum': ['UNLOCK_REQUIRED_TO_VIEW', 'VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED'], 'type': 'string'}, 'contactVenuePhoneNumber': {'type': 'string'}, 'smartTapRedemptionValue': {'type': 'string'}, 'suppressHeaderDarkening': {'type': 'boolean'}, 'ticketHolderNameDataKey': {'type': 'string'}, 'directionsInformationURL': {'type': 'string', 'format': 'uri'}, 'smartTapRedemptionDataKey': {'type': 'string'}, 'associatedStoreIdentifiers': {'type': 'array', 'items': {'type': 'integer'}, 'description': "Apple iTunes app IDs for 'Open in App'."}, 'secondaryLoyaltyPointsLabel': {'type': 'string'}, 'localScheduledArrivalDateTime': {'type': 'string', 'description': 'Google Flight: same format as departure.'}, 'secondaryLoyaltyPointsDataKey': {'type': 'string'}, 'localScheduledDepartureDateTime': {'type': 'string', 'description': 'Google Flight: ISO 8601 **without** timezone offset (local airport time). Automatically stripped if a Z/offset is supplied.'}}, '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', 'additionalProperties': True}, 'pass_style': {'enum': ['boardingPass', 'coupon', 'eventTicket', 'generic', 'storeCard'], 'type': 'string', 'description': 'Apple Wallet pass style.'}, 'description': {'type': 'string'}, 'field_schema': {'type': 'object', 'additionalProperties': True}, 'wallet_types': {'type': 'array', 'items': {'enum': ['apple', 'google'], 'type': 'string'}, 'description': 'Wallet platforms this template supports.'}, 'icon_image_id': {'type': 'string', 'format': 'uuid'}, 'logo_image_id': {'type': 'string', 'format': 'uuid'}, 'strip_image_id': {'type': 'string', 'format': 'uuid'}, 'google_pass_type': {'allOf': [{'enum': ['generic', 'loyalty', 'eventTicket', 'offer', 'flight', 'transit', 'giftCard'], 'type': 'string', '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'}]}, 'thumbnail_image_id': {'type': 'string', 'format': 'uuid'}, 'background_image_id': {'type': 'string', 'format': 'uuid'}, 'google_logo_image_id': {'type': 'string', 'format': 'uuid'}, 'google_wide_logo_image_id': {'type': 'string', 'format': 'uuid'}}, 'additionalProperties': False}
uploadCertificate
Upload a single certificate Uploads a single PEM-encoded certificate or key. **Scope:** `certs:manage` Maps to OpenAPI operationId `uploadCertificate` — POST /manage-certs. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'required': ['cert_type', 'cert_data'], 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'cert_data': {'type': 'string', 'format': 'byte', 'description': 'Base64-encoded certificate or key data.'}, 'cert_type': {'enum': ['signer_cert', 'signer_key', 'wwdr'], 'type': 'string', 'description': 'Type of certificate being uploaded.'}}, 'additionalProperties': False}
uploadGoogleCredentials
Upload Google credentials Uploads Google service account credentials for Google Wallet pass signing. The service account JSON and issuer ID are stored securely. **Scope:** `certs:manage` Maps to OpenAPI operationId `uploadGoogleCredentials` — POST /manage-certs/google. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'required': ['service_account_json', 'issuer_id'], 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'issuer_id': {'type': 'string', 'description': 'Google Wallet issuer ID.'}, 'service_account_json': {'type': 'object', 'description': 'Google service account JSON key file contents.', 'additionalProperties': True}}, 'additionalProperties': False}
uploadImage
Upload an image Uploads an image for use in pass templates or per-pass strip overrides. Send as multipart form data with a `purpose` field and a `file` field containing the PNG image. **Upload behaviour by purpose:** - `strip` — **accumulates**. Each upload creates a new image; the returned `id` can be passed as `strip_image_id` on `POST /v1/passes` or `PATCH /v1/passes/{id}` to give individual passes their own banner. Previous `strip` images are NOT deleted — manage them via `DELETE /v1/images/{id}` when no longer referenced. - All other purposes (`icon`, `logo`, `thumbnail`, `background`, `footer`, and all `_2x`/`_3x` variants) — **replace-on-upload**. Uploading a new image of the same purpose deletes the previous one from storage and DB. These are app-wide template assets, not per-pass. **Scope:** `images:manage` Maps to OpenAPI operationId `uploadImage` — POST /manage-images. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'required': ['purpose', 'file_base64'], 'properties': {'purpose': {'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', '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'}, 'filename': {'type': 'string', 'description': 'Optional filename sent with the multipart upload.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'file_base64': {'type': 'string', 'description': 'Base64-encoded file bytes. Maps to the OpenAPI multipart `file` field — same uploadImage (or equivalent) endpoint, not a new API.'}}, 'additionalProperties': False}
uploadP12Certificate
Upload a .p12 certificate bundle Uploads a PKCS#12 (.p12) bundle containing signer certificate and private key. The bundle is decrypted with the provided password, and individual certificates are extracted and stored with AES-256-GCM encryption. **Scope:** `certs:manage` Maps to OpenAPI operationId `uploadP12Certificate` — POST /manage-certs/p12. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可访问外部资源
输入模式
{'type': 'object', 'required': ['p12_data'], 'properties': {'p12_data': {'type': 'string', 'format': 'byte', 'description': 'Base64-encoded .p12 file data.'}, 'password': {'type': 'string', 'description': 'Password to decrypt the .p12 bundle (if password-protected).'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
voidPass
Void a pass Marks a pass as invalidated and rebuilds the `.pkpass` file with Apple's `voided: true` flag. Registered devices are sent push notifications so the pass appears voided immediately in Apple Wallet. Rebuild failure is non-fatal — the pass is still invalidated at the DB level. **Scope:** `passes:manage` Maps to OpenAPI operationId `voidPass` — POST /manage-passes/{id}/void. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可能执行破坏性操作 可访问外部资源
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Pass ID.'}, 'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}}, 'additionalProperties': False}
voidPassBySerial
Void a pass by serial number Marks a pass (looked up by serial number) as invalidated and rebuilds the `.pkpass` file with Apple's `voided: true` flag. Registered devices are sent push notifications so the pass appears voided immediately in Apple Wallet. When a serial has both Apple and Google passes, use `?wallet_type=` to select which one (defaults to `apple`). **Scope:** `passes:manage` Maps to OpenAPI operationId `voidPassBySerial` — POST /manage-passes/serial/{serial_number}/void. Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.
可能执行破坏性操作 可访问外部资源
输入模式
{'type': 'object', 'required': ['serial_number'], 'properties': {'x_app_id': {'type': 'string', 'format': 'uuid', 'description': 'Override X-App-Id for this call. Omit the connection header by default; set it only for multi-app orgs.'}, 'wallet_type': {'enum': ['apple', 'google'], 'type': 'string', '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'}, 'serial_number': {'type': 'string', 'description': 'Pass serial number (unique within app + wallet type).'}}, 'additionalProperties': False}
已更改
createShareToken
2026年9月23日 02:40
已更改
listWebhookEvents
2026年9月23日 02:40
已更改
testWebhook
2026年9月23日 02:40
已更改
deleteApp
2026年9月23日 02:40
已更改
updateApp
2026年9月23日 02:40
已更改
getApp
2026年9月23日 02:40
已更改
testAppleCertificates
2026年9月23日 02:40
已更改
testGoogleConnection
2026年9月23日 02:40
已更改
deactivateGoogleCredential
2026年9月23日 02:40
已更改
listGoogleCredentials
2026年9月23日 02:40
已更改
uploadGoogleCredentials
2026年9月23日 02:40
已更改
deleteCertificate
2026年9月23日 02:40
已更改
listCertificates
2026年9月23日 02:40
已更改
uploadCertificate
2026年9月23日 02:40
已更改
uploadP12Certificate
2026年9月23日 02:40
已更改
getImageUsage
2026年9月23日 02:40
已更改
deleteImage
2026年9月23日 02:40
已更改
listImages
2026年9月23日 02:40
已更改
uploadImage
2026年9月23日 02:40
已更改
publishTemplate
2026年9月23日 02:40
已更改
deleteTemplate
2026年9月23日 02:40
已更改
updateTemplate
2026年9月23日 02:40
已更改
getTemplate
2026年9月23日 02:40
已更改
listTemplates
2026年9月23日 02:40
已更改
createTemplate
2026年9月23日 02:40
已更改
voidPass
2026年9月23日 02:40
已更改
downloadPass
2026年9月23日 02:40
已更改
voidPassBySerial
2026年9月23日 02:40
已更改
downloadPassBySerial
2026年9月23日 02:40
已更改
updatePassBySerial
2026年9月23日 02:40