Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,556Letters: 14Defects: 1,331counted 2 min ago
teppi

Server definition

Hash
sha256:520bc28d2181aeb8a9f5bbd83e9441303efb3170f22c0ce7d6ec4fdedbfbc96d
What it is
What a remote MCP server returned when asked what it offers: 47 tools

The blob, as servednamed by its sha256

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