{"name":"st.passfa/passfast","slug":"passfast","title":"PassFast","description":"Remote HTTPS MCP for Apple + Google Wallet passes. Paste sk_live_ once.","url":"https://mcp.market/server/passfast","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-09-20T16:19:03.000Z","license":"MIT"},"uptime":{"percent":100,"checks":2,"ok":2,"last_checked_at":"2026-09-21T01:55:39.138Z","last_ok_at":"2026-09-21T01:55:39.138Z","latency_ms":812},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/aberkaneso/passfast-mcp","website":"https://passfa.st/","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://passfa.st/mcp","headers":[{"description":"Bearer sk_live_… secret API key from the PassFast dashboard (pk_live_ is rejected).","isRequired":true,"isSecret":true,"name":"Authorization"},{"description":"Optional app UUID. Required for multi-app orgs; optional for single-app orgs.","name":"X-App-Id"}]}],"packages":[],"tools":[{"name":"createApiKey","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable label for the key."},"key_type":{"type":"string","description":"Key type. Secret keys have full access; publishable keys have limited scopes.","enum":["secret","publishable"]}},"required":["name","key_type"],"additionalProperties":false}},{"name":"createApp","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"App display name.","default":"New App"}},"additionalProperties":false}},{"name":"createShareToken","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"pass_id":{"type":"string","format":"uuid","description":"ID of the pass to share."}},"required":["pass_id"],"additionalProperties":false}},{"name":"createTemplate","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"name":{"type":"string","description":"Human-readable template name."},"description":{"type":"string","description":"Optional description of the template."},"pass_style":{"type":"string","description":"Apple Wallet pass style.","enum":["boardingPass","coupon","eventTicket","generic","storeCard"]},"google_pass_type":{"type":"string","description":"Google Wallet class type override. If unset, PassFast auto-maps from\nthe Apple `pass_style` (+ `structure.transitType` for boardingPass):\n- `generic` → generic\n- `storeCard` → loyalty (or giftCard via override)\n- `eventTicket` → eventTicket\n- `coupon` → offer\n- `boardingPass` + transitType PKTransitTypeAir → flight\n- `boardingPass` + transitType Train/Bus/Boat/Generic → transit\n","enum":["generic","loyalty","eventTicket","offer","flight","transit","giftCard"]},"structure":{"type":"object","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":{"backgroundColor":{"type":"string","description":"Accepts `#rrggbb`, `#rgb`, or `rgb(r,g,b)`. Apple emits `rgb(...)`; Google emits `#rrggbb`."},"foregroundColor":{"type":"string"},"labelColor":{"type":"string","description":"Apple only — field label color."},"logoText":{"type":"string","description":"Apple: text beside the logo on the pass face."},"googleLogoText":{"type":"string","description":"Google: brand/card title (required for Google Wallet rendering)."},"organizationName":{"type":"string","description":"Apple top-level org name. Defaults to 'PassFast' if unset."},"description":{"type":"string","description":"Apple top-level description. Defaults to 'PassFast Pass' if unset."},"headerFields":{"type":"array","items":{"type":"object","description":"A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n","properties":{"key":{"type":"string","description":"Unique key identifying the field. Must be unique across ALL field groups in a template."},"label":{"type":"string","description":"Human-readable label rendered above the value on the pass face."},"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"}]},"dataKey":{"type":"string","description":"PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"},"attributedValue":{"type":"string","description":"Apple: HTML-flavored value (used for rendering links, etc.)."},"changeMessage":{"type":"string","description":"Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."},"textAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentNatural"]},"currencyCode":{"type":"string","description":"Apple: ISO 4217 currency code. Value is formatted as currency."},"numberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"]},"dateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"timeStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"isRelative":{"type":"boolean","description":"Apple: whether the date is displayed relative to the current time."},"ignoresTimeZone":{"type":"boolean","description":"Apple: whether to display the date in the pass's local time rather than the user's."},"dataDetectorTypes":{"type":"array","description":"Apple: back fields only. Limits which kinds of data are detected and linked.","items":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"]}},"row":{"type":"integer","description":"Apple: auxiliary/secondary layout control (0 or 1).","enum":[0,1]},"semantics":{"type":"object","description":"Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.","additionalProperties":true}},"required":["key"]}},"primaryFields":{"type":"array","items":{"type":"object","description":"A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n","properties":{"key":{"type":"string","description":"Unique key identifying the field. Must be unique across ALL field groups in a template."},"label":{"type":"string","description":"Human-readable label rendered above the value on the pass face."},"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"}]},"dataKey":{"type":"string","description":"PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"},"attributedValue":{"type":"string","description":"Apple: HTML-flavored value (used for rendering links, etc.)."},"changeMessage":{"type":"string","description":"Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."},"textAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentNatural"]},"currencyCode":{"type":"string","description":"Apple: ISO 4217 currency code. Value is formatted as currency."},"numberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"]},"dateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"timeStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"isRelative":{"type":"boolean","description":"Apple: whether the date is displayed relative to the current time."},"ignoresTimeZone":{"type":"boolean","description":"Apple: whether to display the date in the pass's local time rather than the user's."},"dataDetectorTypes":{"type":"array","description":"Apple: back fields only. Limits which kinds of data are detected and linked.","items":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"]}},"row":{"type":"integer","description":"Apple: auxiliary/secondary layout control (0 or 1).","enum":[0,1]},"semantics":{"type":"object","description":"Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.","additionalProperties":true}},"required":["key"]}},"secondaryFields":{"type":"array","items":{"type":"object","description":"A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n","properties":{"key":{"type":"string","description":"Unique key identifying the field. Must be unique across ALL field groups in a template."},"label":{"type":"string","description":"Human-readable label rendered above the value on the pass face."},"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"}]},"dataKey":{"type":"string","description":"PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"},"attributedValue":{"type":"string","description":"Apple: HTML-flavored value (used for rendering links, etc.)."},"changeMessage":{"type":"string","description":"Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."},"textAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentNatural"]},"currencyCode":{"type":"string","description":"Apple: ISO 4217 currency code. Value is formatted as currency."},"numberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"]},"dateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"timeStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"isRelative":{"type":"boolean","description":"Apple: whether the date is displayed relative to the current time."},"ignoresTimeZone":{"type":"boolean","description":"Apple: whether to display the date in the pass's local time rather than the user's."},"dataDetectorTypes":{"type":"array","description":"Apple: back fields only. Limits which kinds of data are detected and linked.","items":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"]}},"row":{"type":"integer","description":"Apple: auxiliary/secondary layout control (0 or 1).","enum":[0,1]},"semantics":{"type":"object","description":"Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.","additionalProperties":true}},"required":["key"]}},"auxiliaryFields":{"type":"array","items":{"type":"object","description":"A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n","properties":{"key":{"type":"string","description":"Unique key identifying the field. Must be unique across ALL field groups in a template."},"label":{"type":"string","description":"Human-readable label rendered above the value on the pass face."},"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"}]},"dataKey":{"type":"string","description":"PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"},"attributedValue":{"type":"string","description":"Apple: HTML-flavored value (used for rendering links, etc.)."},"changeMessage":{"type":"string","description":"Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."},"textAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentNatural"]},"currencyCode":{"type":"string","description":"Apple: ISO 4217 currency code. Value is formatted as currency."},"numberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"]},"dateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"timeStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"isRelative":{"type":"boolean","description":"Apple: whether the date is displayed relative to the current time."},"ignoresTimeZone":{"type":"boolean","description":"Apple: whether to display the date in the pass's local time rather than the user's."},"dataDetectorTypes":{"type":"array","description":"Apple: back fields only. Limits which kinds of data are detected and linked.","items":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"]}},"row":{"type":"integer","description":"Apple: auxiliary/secondary layout control (0 or 1).","enum":[0,1]},"semantics":{"type":"object","description":"Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.","additionalProperties":true}},"required":["key"]}},"backFields":{"type":"array","items":{"type":"object","description":"A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n","properties":{"key":{"type":"string","description":"Unique key identifying the field. Must be unique across ALL field groups in a template."},"label":{"type":"string","description":"Human-readable label rendered above the value on the pass face."},"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"}]},"dataKey":{"type":"string","description":"PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"},"attributedValue":{"type":"string","description":"Apple: HTML-flavored value (used for rendering links, etc.)."},"changeMessage":{"type":"string","description":"Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."},"textAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentNatural"]},"currencyCode":{"type":"string","description":"Apple: ISO 4217 currency code. Value is formatted as currency."},"numberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"]},"dateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"timeStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"isRelative":{"type":"boolean","description":"Apple: whether the date is displayed relative to the current time."},"ignoresTimeZone":{"type":"boolean","description":"Apple: whether to display the date in the pass's local time rather than the user's."},"dataDetectorTypes":{"type":"array","description":"Apple: back fields only. Limits which kinds of data are detected and linked.","items":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"]}},"row":{"type":"integer","description":"Apple: auxiliary/secondary layout control (0 or 1).","enum":[0,1]},"semantics":{"type":"object","description":"Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.","additionalProperties":true}},"required":["key"]}},"additionalInfoFields":{"type":"array","description":"Apple poster-style eventTicket only. Rendered inside the eventTicket object.","items":{"type":"object","description":"A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n","properties":{"key":{"type":"string","description":"Unique key identifying the field. Must be unique across ALL field groups in a template."},"label":{"type":"string","description":"Human-readable label rendered above the value on the pass face."},"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"}]},"dataKey":{"type":"string","description":"PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"},"attributedValue":{"type":"string","description":"Apple: HTML-flavored value (used for rendering links, etc.)."},"changeMessage":{"type":"string","description":"Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."},"textAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentNatural"]},"currencyCode":{"type":"string","description":"Apple: ISO 4217 currency code. Value is formatted as currency."},"numberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"]},"dateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"timeStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"isRelative":{"type":"boolean","description":"Apple: whether the date is displayed relative to the current time."},"ignoresTimeZone":{"type":"boolean","description":"Apple: whether to display the date in the pass's local time rather than the user's."},"dataDetectorTypes":{"type":"array","description":"Apple: back fields only. Limits which kinds of data are detected and linked.","items":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"]}},"row":{"type":"integer","description":"Apple: auxiliary/secondary layout control (0 or 1).","enum":[0,1]},"semantics":{"type":"object","description":"Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.","additionalProperties":true}},"required":["key"]}},"barcode":{"type":"object","properties":{"format":{"type":"string","description":"Apple Wallet barcode format. Automatically mapped to Google's equivalent (QR_CODE, PDF_417, AZTEC, CODE_128) when the template targets Google Wallet.","enum":["PKBarcodeFormatQR","PKBarcodeFormatPDF417","PKBarcodeFormatAztec","PKBarcodeFormatCode128"]},"messageDataKey":{"type":"string","description":"Key in generate-pass `data` object that holds the barcode message."},"altTextDataKey":{"type":"string","description":"Key in generate-pass `data` object whose value becomes the human-readable alt text."},"altText":{"type":"string","description":"Static alternate text. Only used when `altTextDataKey` is not set."},"messageEncoding":{"type":"string","description":"Text encoding for the barcode message. Default is `iso-8859-1` per Apple spec.","default":"iso-8859-1"}}},"locations":{"type":"array","items":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"altitude":{"type":"number"},"relevantText":{"type":"string","description":"Apple: lock-screen text when the device enters this location."}},"required":["latitude","longitude"]}},"relevantDate":{"type":"string","format":"date-time","description":"ISO 8601 datetime with timezone suffix. Naive datetimes (no Z/offset) are rejected."},"relevantDates":{"type":"array","description":"Apple plural relevantDates[] — multiple time windows. Entries without timezone are filtered out.","items":{"oneOf":[{"type":"string","format":"date-time"},{"type":"object","properties":{"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"}}}]}},"maxDistance":{"type":"integer","description":"Apple only — max distance (meters) for location relevance."},"beacons":{"type":"array","items":{"type":"object","properties":{"proximityUUID":{"type":"string","format":"uuid"},"major":{"type":"integer"},"minor":{"type":"integer"},"relevantText":{"type":"string"}},"required":["proximityUUID"]}},"transitType":{"type":"string","description":"Apple Wallet transitType enum. Required for `boardingPass` templates at publish.","enum":["PKTransitTypeAir","PKTransitTypeTrain","PKTransitTypeBus","PKTransitTypeBoat","PKTransitTypeGeneric"]},"eventLogoText":{"type":"string"},"footerBackgroundColor":{"type":"string"},"suppressHeaderDarkening":{"type":"boolean"},"useAutomaticColors":{"type":"boolean"},"associatedStoreIdentifiers":{"type":"array","description":"Apple iTunes app IDs for 'Open in App'.","items":{"type":"integer"}},"appLaunchURL":{"type":"string","format":"uri"},"nfc":{"type":"object","properties":{"message":{"type":"string","description":"The data transmitted during an NFC interaction."},"encryptionPublicKey":{"type":"string","description":"ECC P-256 public key (base64-encoded) for encrypting the NFC payload."},"requiresAuthentication":{"type":"boolean"}},"required":["message"]},"suppressStripShine":{"type":"boolean"},"groupingIdentifier":{"type":"string","description":"Apple: groups related passes. Also mapped to Google's `groupingInfo.groupingId` on the object."},"semantics":{"type":"object","description":"Apple: top-level semantic tags (event, transit, balance categories).","additionalProperties":true},"addChangeInfoURL":{"type":"string","format":"uri"},"bagDropURL":{"type":"string","format":"uri"},"changeSeatURL":{"type":"string","format":"uri"},"checkInURL":{"type":"string","format":"uri"},"entertainmentURL":{"type":"string","format":"uri"},"flightStatusURL":{"type":"string","format":"uri"},"jumpToURL":{"type":"string","format":"uri"},"seatUpgradeURL":{"type":"string","format":"uri"},"shoppingURL":{"type":"string","format":"uri"},"trackBagsURL":{"type":"string","format":"uri"},"baggagePolicyURL":{"type":"string","format":"uri"},"accessibilityURL":{"type":"string","format":"uri"},"addOnURL":{"type":"string","format":"uri"},"contactVenueEmail":{"type":"string","format":"email"},"contactVenuePhoneNumber":{"type":"string"},"contactVenueWebsite":{"type":"string","format":"uri"},"directionsInformationURL":{"type":"string","format":"uri"},"liveBroadcastURL":{"type":"string","format":"uri"},"merchandiseURL":{"type":"string","format":"uri"},"orderFoodURL":{"type":"string","format":"uri"},"parkingInformationURL":{"type":"string","format":"uri"},"purchaseParkingURL":{"type":"string","format":"uri"},"sellURL":{"type":"string","format":"uri"},"transferURL":{"type":"string","format":"uri"},"transitInformationURL":{"type":"string","format":"uri"},"flightHeader":{"type":"object","properties":{"carrier":{"type":"object","properties":{"carrierIataCode":{"type":"string","description":"2-letter IATA carrier code (e.g. `BA`, `AA`)."}},"required":["carrierIataCode"]},"flightNumber":{"type":"string","description":"Flight number (digits only per Google spec)."}},"required":["carrier","flightNumber"]},"origin":{"type":"object","properties":{"airportIataCode":{"type":"string","description":"3-letter IATA airport code (e.g. `LHR`, `JFK`)."},"terminal":{"type":"string"},"gate":{"type":"string"}},"required":["airportIataCode"]},"destination":{"type":"object","properties":{"airportIataCode":{"type":"string","description":"3-letter IATA airport code (e.g. `LHR`, `JFK`)."},"terminal":{"type":"string"},"gate":{"type":"string"}},"required":["airportIataCode"]},"localScheduledDepartureDateTime":{"type":"string","description":"Google Flight: ISO 8601 **without** timezone offset (local airport time). Automatically stripped if a Z/offset is supplied."},"localScheduledArrivalDateTime":{"type":"string","description":"Google Flight: same format as departure."},"transitOperatorName":{"type":"string"},"googleTransitType":{"type":"string","description":"Google Wallet transit class transitType enum. Auto-derived from Apple's `transitType` if not set explicitly.","enum":["BUS","RAIL","TRAM","FERRY","OTHER"]},"tripType":{"type":"string","enum":["ROUND_TRIP","ONE_WAY"]},"venueName":{"type":"string"},"venueAddress":{"type":"string"},"doorsOpen":{"type":"string","format":"date-time"},"dateTimeStart":{"type":"string","format":"date-time"},"dateTimeEnd":{"type":"string","format":"date-time"},"seatDataKey":{"type":"string"},"rowDataKey":{"type":"string"},"sectionDataKey":{"type":"string"},"gateDataKey":{"type":"string"},"ticketHolderNameDataKey":{"type":"string"},"ticketNumberDataKey":{"type":"string"},"pinLabel":{"type":"string"},"cardNumberLabel":{"type":"string"},"eventNumberLabel":{"type":"string"},"cardNumberDataKey":{"type":"string"},"pinDataKey":{"type":"string"},"balanceDataKey":{"type":"string"},"balanceCurrencyCode":{"type":"string","description":"ISO 4217 code used when `balance` is supplied as a plain number (dollars → micros)."},"eventNumberDataKey":{"type":"string"},"loyaltyPointsDataKey":{"type":"string"},"loyaltyPointsLabel":{"type":"string"},"secondaryLoyaltyPointsDataKey":{"type":"string"},"secondaryLoyaltyPointsLabel":{"type":"string"},"discoverableProgram":{"type":"object","description":"Google Loyalty: public program listing. Requires `countryCode` on the class (set via `discoverableProgram`).","additionalProperties":true},"redemptionChannel":{"type":"string","description":"Google Wallet OfferClass redemption channel.","enum":["INSTORE","ONLINE","BOTH","TEMPORARY_PRICE_REDUCTION"]},"messages":{"type":"array","description":"Google class-level messages.","items":{"type":"object","additionalProperties":true}},"enableSmartTap":{"type":"boolean"},"callbackOptions":{"type":"object","additionalProperties":true},"securityAnimation":{"type":"object","additionalProperties":true},"viewUnlockRequirement":{"type":"string","enum":["UNLOCK_REQUIRED_TO_VIEW","VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED"]},"rotatingBarcode":{"type":"object","description":"Google Wallet rotating barcode (TOTP-based). Supply a pre-configured\nobject; PassFast does not synthesize the HMAC secret.\n","properties":{"type":{"type":"string","enum":["QR_CODE","AZTEC","PDF_417","CODE_128","DATA_MATRIX"]},"valuePattern":{"type":"string","description":"Pattern for the rotating value, e.g. `rotating-{totp_value}`."},"totpDetails":{"type":"object","properties":{"periodMillis":{"type":"string","description":"TOTP period as a string of milliseconds (e.g. `\"30000\"`)."},"algorithm":{"type":"string","enum":["TOTP_SHA1","TOTP_SHA256","TOTP_SHA512"]},"parameters":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Base16 (hex) encoded TOTP secret."},"valueLength":{"type":"integer"}}}}}}}},"smartTapRedemptionValue":{"type":"string"},"smartTapRedemptionDataKey":{"type":"string"},"objectMessages":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["backgroundColor","foregroundColor"],"additionalProperties":true},"field_schema":{"type":"object","description":"Optional JSON schema for validating dynamic data.","additionalProperties":true},"wallet_types":{"type":"array","default":["apple"],"items":{"type":"string","enum":["apple","google"]}},"icon_image_id":{"type":"string","format":"uuid"},"logo_image_id":{"type":"string","format":"uuid"},"google_logo_image_id":{"type":"string","format":"uuid"},"google_wide_logo_image_id":{"type":"string","format":"uuid"},"strip_image_id":{"type":"string","format":"uuid"},"thumbnail_image_id":{"type":"string","format":"uuid"},"background_image_id":{"type":"string","format":"uuid"}},"required":["name","pass_style","structure"],"additionalProperties":false}},{"name":"deactivateGoogleCredential","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"id":{"type":"string","format":"uuid","description":"Google credential ID."}},"required":["id"],"additionalProperties":false}},{"name":"deleteApiKey","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"API key ID."}},"required":["id"],"additionalProperties":false}},{"name":"deleteApp","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."}},"additionalProperties":false}},{"name":"deleteCertificate","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"id":{"type":"string","format":"uuid","description":"Certificate ID."}},"required":["id"],"additionalProperties":false}},{"name":"deleteImage","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"id":{"type":"string","format":"uuid","description":"Image ID."}},"required":["id"],"additionalProperties":false}},{"name":"deleteTemplate","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"id":{"type":"string","format":"uuid","description":"Template ID."},"permanent":{"type":"boolean","default":false,"description":"When true, permanently deletes the template instead of archiving it."}},"required":["id"],"additionalProperties":false}},{"name":"downloadPass","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"id":{"type":"string","format":"uuid","description":"Pass ID."}},"required":["id"],"additionalProperties":false}},{"name":"downloadPassBySerial","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"serial_number":{"type":"string","description":"Pass serial number (unique within app + wallet type)."},"wallet_type":{"type":"string","enum":["apple","google"],"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"}},"required":["serial_number"],"additionalProperties":false}},{"name":"downloadSharedPass","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token":{"type":"string","description":"Share token (32 hex characters)."}},"required":["token"],"additionalProperties":false}},{"name":"generatePass","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"template_id":{"type":"string","format":"uuid","description":"ID of the published template to use."},"serial_number":{"type":"string","description":"Unique serial number for this pass."},"data":{"type":"object","description":"Dynamic field values merged into the template structure.","additionalProperties":true},"external_id":{"type":"string","description":"Optional external identifier for cross-system lookups."},"expires_at":{"type":"string","format":"date-time","description":"Optional expiration timestamp for the pass."},"get_or_create":{"type":"boolean","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","default":false},"locations":{"type":"array","description":"GPS locations where the pass is relevant (shown on lock screen).\nOverrides template defaults if provided.\n","items":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude in degrees."},"longitude":{"type":"number","description":"Longitude in degrees."},"altitude":{"type":"number","description":"Altitude in meters (optional)."},"relevantText":{"type":"string","description":"Text displayed on lock screen when user is near this location."}},"required":["latitude","longitude"]}},"relevant_date":{"type":"string","format":"date-time","description":"ISO 8601 date when the pass is relevant (appears on lock screen)."},"max_distance":{"type":"number","description":"Maximum distance in meters from a location for lock screen relevance."},"wallet_type":{"type":"string","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"],"default":"apple"},"strip_image_id":{"type":"string","format":"uuid","description":"Override the template's strip/hero image for this pass only. The referenced\nimage must belong to the same app and have purpose `strip` (or a `strip_*`\nvariant). Applied to Apple `strip.png` and Google `heroImage` atomically\n(same value for both wallets in `wallet_type: \"both\"`). Omit or send `null`\nto use the template's strip image.\n"}},"required":["template_id","serial_number","data"],"additionalProperties":false}},{"name":"getApp","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."}},"additionalProperties":false}},{"name":"getImageUsage","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"id":{"type":"string","format":"uuid","description":"Image ID."}},"required":["id"],"additionalProperties":false}},{"name":"getManagedSigningStatus","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"getOrganization","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"getPass","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"id":{"type":"string","format":"uuid","description":"Pass ID."}},"required":["id"],"additionalProperties":false}},{"name":"getPassBySerial","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"serial_number":{"type":"string","description":"Pass serial number (unique within app + wallet type)."},"wallet_type":{"type":"string","enum":["apple","google"],"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"}},"required":["serial_number"],"additionalProperties":false}},{"name":"getSharePassMetadata","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token":{"type":"string","description":"Share token (32 hex characters)."}},"required":["token"],"additionalProperties":false}},{"name":"getTemplate","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"id":{"type":"string","format":"uuid","description":"Template ID."}},"required":["id"],"additionalProperties":false}},{"name":"listApiKeys","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"listCertificates","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."}},"additionalProperties":false}},{"name":"listGoogleCredentials","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."}},"additionalProperties":false}},{"name":"listImages","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."}},"additionalProperties":false}},{"name":"listPasses","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"template_id":{"type":"string","format":"uuid","description":"Filter by template ID."},"status":{"type":"string","enum":["active","invalidated","expired"],"description":"Filter by pass status."},"external_id":{"type":"string","description":"Filter by external ID."},"serial_number":{"type":"string","description":"Filter by serial number."},"created_after":{"type":"string","format":"date-time","description":"Only return passes created after this timestamp."},"created_before":{"type":"string","format":"date-time","description":"Only return passes created before this timestamp."},"limit":{"type":"integer","default":50,"description":"Maximum number of results to return."},"offset":{"type":"integer","default":0,"description":"Number of results to skip."},"wallet_type":{"type":"string","enum":["apple","google"],"description":"Filter by wallet platform type."}},"additionalProperties":false}},{"name":"listTemplates","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"archived":{"type":"boolean","default":false,"description":"When true, return only archived templates instead of active ones."}},"additionalProperties":false}},{"name":"listWebhookEvents","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"event_type":{"type":"string","enum":["pass.created","pass.updated","pass.voided","pass.expired","device.registered","device.unregistered"],"description":"Filter by event type."},"delivery_status":{"type":"string","enum":["pending","delivered","failed"],"description":"Filter by delivery status."},"limit":{"type":"integer","default":50,"description":"Maximum number of results to return."},"offset":{"type":"integer","default":0,"description":"Number of results to skip."}},"additionalProperties":false}},{"name":"publishTemplate","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"id":{"type":"string","format":"uuid","description":"Template ID."}},"required":["id"],"additionalProperties":false}},{"name":"revokeApiKey","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"API key ID."}},"required":["id"],"additionalProperties":false}},{"name":"testAppleCertificates","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."}},"additionalProperties":false}},{"name":"testGoogleConnection","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."}},"additionalProperties":false}},{"name":"testWebhook","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."}},"additionalProperties":false}},{"name":"updateApp","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"name":{"type":"string","description":"App display name."},"apple_team_id":{"type":"string","description":"Apple Developer Team ID."},"pass_type_identifier":{"type":"string","description":"Apple pass type identifier (e.g., pass.com.example.myapp)."},"webhook_url":{"type":"string","format":"uri","description":"URL for async event webhook delivery."},"validation_webhook_url":{"type":"string","format":"uri","description":"URL for pre-generation validation webhooks."},"signing_mode":{"type":"string","description":"Apple signing mode. `managed` uses platform credentials; `custom` uses your own.","enum":["managed","custom"]},"google_signing_mode":{"type":"string","description":"Google signing mode. `managed` uses platform credentials; `custom` uses your own.","enum":["managed","custom"]},"onboarding_completed":{"type":"boolean","description":"Whether onboarding has been completed for this app."},"regenerate_webhook_secret":{"type":"boolean","description":"Set to true to regenerate the webhook signing secret."}},"additionalProperties":false}},{"name":"updateOrganization","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Organization display name."},"slug":{"type":"string","description":"URL-friendly slug."},"apns_key_id":{"type":"string","description":"Apple Push Notification service Key ID."},"apns_key_p8":{"type":"string","description":"APNs .p8 private key contents."}},"additionalProperties":false}},{"name":"updatePass","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"id":{"type":"string","format":"uuid","description":"Pass ID."},"data":{"type":"object","description":"New dynamic field values to merge into the pass.","additionalProperties":true},"push_update":{"type":"boolean","description":"If true, send a push notification to registered devices.","default":false},"expires_at":{"type":"string","format":"date-time","description":"Expiration timestamp (set to null to remove expiration)."},"locations":{"type":"array","description":"GPS locations where the pass is relevant (overrides template defaults).","items":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"altitude":{"type":"number"},"relevantText":{"type":"string"}},"required":["latitude","longitude"]}},"relevant_date":{"type":"string","format":"date-time","description":"ISO 8601 date when the pass is relevant (lock screen)."},"max_distance":{"type":"number","description":"Maximum distance in meters from a location for lock screen relevance."},"strip_image_id":{"type":"string","format":"uuid","description":"Override the template's strip/hero image for this pass. The referenced\nimage must belong to the same app and have purpose `strip` (or a `strip_*`\nvariant). Applied to Apple `strip.png` and Google `heroImage` atomically\n(synced to the sibling pass for dual-wallet). Send `null` to clear the\noverride and revert to the template's strip image. Omit the field to\nleave the current override unchanged.\n"}},"required":["id"],"additionalProperties":false}},{"name":"updatePassBySerial","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"serial_number":{"type":"string","description":"Pass serial number (unique within app + wallet type)."},"wallet_type":{"type":"string","enum":["apple","google"],"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"},"data":{"type":"object","description":"New dynamic field values to merge into the pass.","additionalProperties":true},"push_update":{"type":"boolean","description":"If true, send a push notification to registered devices.","default":false},"expires_at":{"type":"string","format":"date-time","description":"Expiration timestamp (set to null to remove expiration)."},"locations":{"type":"array","description":"GPS locations where the pass is relevant (overrides template defaults).","items":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"altitude":{"type":"number"},"relevantText":{"type":"string"}},"required":["latitude","longitude"]}},"relevant_date":{"type":"string","format":"date-time","description":"ISO 8601 date when the pass is relevant (lock screen)."},"max_distance":{"type":"number","description":"Maximum distance in meters from a location for lock screen relevance."},"strip_image_id":{"type":"string","format":"uuid","description":"Override the template's strip/hero image for this pass. The referenced\nimage must belong to the same app and have purpose `strip` (or a `strip_*`\nvariant). Applied to Apple `strip.png` and Google `heroImage` atomically\n(synced to the sibling pass for dual-wallet). Send `null` to clear the\noverride and revert to the template's strip image. Omit the field to\nleave the current override unchanged.\n"}},"required":["serial_number"],"additionalProperties":false}},{"name":"updateTemplate","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"id":{"type":"string","format":"uuid","description":"Template ID."},"name":{"type":"string"},"description":{"type":"string"},"pass_style":{"type":"string","description":"Apple Wallet pass style.","enum":["boardingPass","coupon","eventTicket","generic","storeCard"]},"google_pass_type":{"allOf":[{"type":"string","description":"Google Wallet class type override. If unset, PassFast auto-maps from\nthe Apple `pass_style` (+ `structure.transitType` for boardingPass):\n- `generic` → generic\n- `storeCard` → loyalty (or giftCard via override)\n- `eventTicket` → eventTicket\n- `coupon` → offer\n- `boardingPass` + transitType PKTransitTypeAir → flight\n- `boardingPass` + transitType Train/Bus/Boat/Generic → transit\n","enum":["generic","loyalty","eventTicket","offer","flight","transit","giftCard"]}]},"structure":{"type":"object","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":{"backgroundColor":{"type":"string","description":"Accepts `#rrggbb`, `#rgb`, or `rgb(r,g,b)`. Apple emits `rgb(...)`; Google emits `#rrggbb`."},"foregroundColor":{"type":"string"},"labelColor":{"type":"string","description":"Apple only — field label color."},"logoText":{"type":"string","description":"Apple: text beside the logo on the pass face."},"googleLogoText":{"type":"string","description":"Google: brand/card title (required for Google Wallet rendering)."},"organizationName":{"type":"string","description":"Apple top-level org name. Defaults to 'PassFast' if unset."},"description":{"type":"string","description":"Apple top-level description. Defaults to 'PassFast Pass' if unset."},"headerFields":{"type":"array","items":{"type":"object","description":"A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n","properties":{"key":{"type":"string","description":"Unique key identifying the field. Must be unique across ALL field groups in a template."},"label":{"type":"string","description":"Human-readable label rendered above the value on the pass face."},"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"}]},"dataKey":{"type":"string","description":"PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"},"attributedValue":{"type":"string","description":"Apple: HTML-flavored value (used for rendering links, etc.)."},"changeMessage":{"type":"string","description":"Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."},"textAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentNatural"]},"currencyCode":{"type":"string","description":"Apple: ISO 4217 currency code. Value is formatted as currency."},"numberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"]},"dateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"timeStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"isRelative":{"type":"boolean","description":"Apple: whether the date is displayed relative to the current time."},"ignoresTimeZone":{"type":"boolean","description":"Apple: whether to display the date in the pass's local time rather than the user's."},"dataDetectorTypes":{"type":"array","description":"Apple: back fields only. Limits which kinds of data are detected and linked.","items":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"]}},"row":{"type":"integer","description":"Apple: auxiliary/secondary layout control (0 or 1).","enum":[0,1]},"semantics":{"type":"object","description":"Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.","additionalProperties":true}},"required":["key"]}},"primaryFields":{"type":"array","items":{"type":"object","description":"A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n","properties":{"key":{"type":"string","description":"Unique key identifying the field. Must be unique across ALL field groups in a template."},"label":{"type":"string","description":"Human-readable label rendered above the value on the pass face."},"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"}]},"dataKey":{"type":"string","description":"PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"},"attributedValue":{"type":"string","description":"Apple: HTML-flavored value (used for rendering links, etc.)."},"changeMessage":{"type":"string","description":"Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."},"textAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentNatural"]},"currencyCode":{"type":"string","description":"Apple: ISO 4217 currency code. Value is formatted as currency."},"numberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"]},"dateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"timeStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"isRelative":{"type":"boolean","description":"Apple: whether the date is displayed relative to the current time."},"ignoresTimeZone":{"type":"boolean","description":"Apple: whether to display the date in the pass's local time rather than the user's."},"dataDetectorTypes":{"type":"array","description":"Apple: back fields only. Limits which kinds of data are detected and linked.","items":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"]}},"row":{"type":"integer","description":"Apple: auxiliary/secondary layout control (0 or 1).","enum":[0,1]},"semantics":{"type":"object","description":"Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.","additionalProperties":true}},"required":["key"]}},"secondaryFields":{"type":"array","items":{"type":"object","description":"A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n","properties":{"key":{"type":"string","description":"Unique key identifying the field. Must be unique across ALL field groups in a template."},"label":{"type":"string","description":"Human-readable label rendered above the value on the pass face."},"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"}]},"dataKey":{"type":"string","description":"PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"},"attributedValue":{"type":"string","description":"Apple: HTML-flavored value (used for rendering links, etc.)."},"changeMessage":{"type":"string","description":"Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."},"textAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentNatural"]},"currencyCode":{"type":"string","description":"Apple: ISO 4217 currency code. Value is formatted as currency."},"numberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"]},"dateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"timeStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"isRelative":{"type":"boolean","description":"Apple: whether the date is displayed relative to the current time."},"ignoresTimeZone":{"type":"boolean","description":"Apple: whether to display the date in the pass's local time rather than the user's."},"dataDetectorTypes":{"type":"array","description":"Apple: back fields only. Limits which kinds of data are detected and linked.","items":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"]}},"row":{"type":"integer","description":"Apple: auxiliary/secondary layout control (0 or 1).","enum":[0,1]},"semantics":{"type":"object","description":"Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.","additionalProperties":true}},"required":["key"]}},"auxiliaryFields":{"type":"array","items":{"type":"object","description":"A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n","properties":{"key":{"type":"string","description":"Unique key identifying the field. Must be unique across ALL field groups in a template."},"label":{"type":"string","description":"Human-readable label rendered above the value on the pass face."},"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"}]},"dataKey":{"type":"string","description":"PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"},"attributedValue":{"type":"string","description":"Apple: HTML-flavored value (used for rendering links, etc.)."},"changeMessage":{"type":"string","description":"Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."},"textAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentNatural"]},"currencyCode":{"type":"string","description":"Apple: ISO 4217 currency code. Value is formatted as currency."},"numberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"]},"dateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"timeStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"isRelative":{"type":"boolean","description":"Apple: whether the date is displayed relative to the current time."},"ignoresTimeZone":{"type":"boolean","description":"Apple: whether to display the date in the pass's local time rather than the user's."},"dataDetectorTypes":{"type":"array","description":"Apple: back fields only. Limits which kinds of data are detected and linked.","items":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"]}},"row":{"type":"integer","description":"Apple: auxiliary/secondary layout control (0 or 1).","enum":[0,1]},"semantics":{"type":"object","description":"Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.","additionalProperties":true}},"required":["key"]}},"backFields":{"type":"array","items":{"type":"object","description":"A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n","properties":{"key":{"type":"string","description":"Unique key identifying the field. Must be unique across ALL field groups in a template."},"label":{"type":"string","description":"Human-readable label rendered above the value on the pass face."},"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"}]},"dataKey":{"type":"string","description":"PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"},"attributedValue":{"type":"string","description":"Apple: HTML-flavored value (used for rendering links, etc.)."},"changeMessage":{"type":"string","description":"Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."},"textAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentNatural"]},"currencyCode":{"type":"string","description":"Apple: ISO 4217 currency code. Value is formatted as currency."},"numberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"]},"dateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"timeStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"isRelative":{"type":"boolean","description":"Apple: whether the date is displayed relative to the current time."},"ignoresTimeZone":{"type":"boolean","description":"Apple: whether to display the date in the pass's local time rather than the user's."},"dataDetectorTypes":{"type":"array","description":"Apple: back fields only. Limits which kinds of data are detected and linked.","items":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"]}},"row":{"type":"integer","description":"Apple: auxiliary/secondary layout control (0 or 1).","enum":[0,1]},"semantics":{"type":"object","description":"Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.","additionalProperties":true}},"required":["key"]}},"additionalInfoFields":{"type":"array","description":"Apple poster-style eventTicket only. Rendered inside the eventTicket object.","items":{"type":"object","description":"A single field inside a pass. Used in `headerFields`, `primaryFields`,\n`secondaryFields`, `auxiliaryFields`, `backFields`, and\n`additionalInfoFields` (poster-style eventTicket only).\n","properties":{"key":{"type":"string","description":"Unique key identifying the field. Must be unique across ALL field groups in a template."},"label":{"type":"string","description":"Human-readable label rendered above the value on the pass face."},"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"}]},"dataKey":{"type":"string","description":"PassFast-specific: name of a key in the generate-pass request\nbody's `data` object whose value should populate this field.\n"},"attributedValue":{"type":"string","description":"Apple: HTML-flavored value (used for rendering links, etc.)."},"changeMessage":{"type":"string","description":"Apple: notification text when this field's value changes. Must contain `%@` placeholder for the new value."},"textAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentNatural"]},"currencyCode":{"type":"string","description":"Apple: ISO 4217 currency code. Value is formatted as currency."},"numberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"]},"dateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"timeStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"]},"isRelative":{"type":"boolean","description":"Apple: whether the date is displayed relative to the current time."},"ignoresTimeZone":{"type":"boolean","description":"Apple: whether to display the date in the pass's local time rather than the user's."},"dataDetectorTypes":{"type":"array","description":"Apple: back fields only. Limits which kinds of data are detected and linked.","items":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"]}},"row":{"type":"integer","description":"Apple: auxiliary/secondary layout control (0 or 1).","enum":[0,1]},"semantics":{"type":"object","description":"Apple: per-field semantic tags for Siri / Maps / Do-Not-Disturb integration.","additionalProperties":true}},"required":["key"]}},"barcode":{"type":"object","properties":{"format":{"type":"string","description":"Apple Wallet barcode format. Automatically mapped to Google's equivalent (QR_CODE, PDF_417, AZTEC, CODE_128) when the template targets Google Wallet.","enum":["PKBarcodeFormatQR","PKBarcodeFormatPDF417","PKBarcodeFormatAztec","PKBarcodeFormatCode128"]},"messageDataKey":{"type":"string","description":"Key in generate-pass `data` object that holds the barcode message."},"altTextDataKey":{"type":"string","description":"Key in generate-pass `data` object whose value becomes the human-readable alt text."},"altText":{"type":"string","description":"Static alternate text. Only used when `altTextDataKey` is not set."},"messageEncoding":{"type":"string","description":"Text encoding for the barcode message. Default is `iso-8859-1` per Apple spec.","default":"iso-8859-1"}}},"locations":{"type":"array","items":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"altitude":{"type":"number"},"relevantText":{"type":"string","description":"Apple: lock-screen text when the device enters this location."}},"required":["latitude","longitude"]}},"relevantDate":{"type":"string","format":"date-time","description":"ISO 8601 datetime with timezone suffix. Naive datetimes (no Z/offset) are rejected."},"relevantDates":{"type":"array","description":"Apple plural relevantDates[] — multiple time windows. Entries without timezone are filtered out.","items":{"oneOf":[{"type":"string","format":"date-time"},{"type":"object","properties":{"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"}}}]}},"maxDistance":{"type":"integer","description":"Apple only — max distance (meters) for location relevance."},"beacons":{"type":"array","items":{"type":"object","properties":{"proximityUUID":{"type":"string","format":"uuid"},"major":{"type":"integer"},"minor":{"type":"integer"},"relevantText":{"type":"string"}},"required":["proximityUUID"]}},"transitType":{"type":"string","description":"Apple Wallet transitType enum. Required for `boardingPass` templates at publish.","enum":["PKTransitTypeAir","PKTransitTypeTrain","PKTransitTypeBus","PKTransitTypeBoat","PKTransitTypeGeneric"]},"eventLogoText":{"type":"string"},"footerBackgroundColor":{"type":"string"},"suppressHeaderDarkening":{"type":"boolean"},"useAutomaticColors":{"type":"boolean"},"associatedStoreIdentifiers":{"type":"array","description":"Apple iTunes app IDs for 'Open in App'.","items":{"type":"integer"}},"appLaunchURL":{"type":"string","format":"uri"},"nfc":{"type":"object","properties":{"message":{"type":"string","description":"The data transmitted during an NFC interaction."},"encryptionPublicKey":{"type":"string","description":"ECC P-256 public key (base64-encoded) for encrypting the NFC payload."},"requiresAuthentication":{"type":"boolean"}},"required":["message"]},"suppressStripShine":{"type":"boolean"},"groupingIdentifier":{"type":"string","description":"Apple: groups related passes. Also mapped to Google's `groupingInfo.groupingId` on the object."},"semantics":{"type":"object","description":"Apple: top-level semantic tags (event, transit, balance categories).","additionalProperties":true},"addChangeInfoURL":{"type":"string","format":"uri"},"bagDropURL":{"type":"string","format":"uri"},"changeSeatURL":{"type":"string","format":"uri"},"checkInURL":{"type":"string","format":"uri"},"entertainmentURL":{"type":"string","format":"uri"},"flightStatusURL":{"type":"string","format":"uri"},"jumpToURL":{"type":"string","format":"uri"},"seatUpgradeURL":{"type":"string","format":"uri"},"shoppingURL":{"type":"string","format":"uri"},"trackBagsURL":{"type":"string","format":"uri"},"baggagePolicyURL":{"type":"string","format":"uri"},"accessibilityURL":{"type":"string","format":"uri"},"addOnURL":{"type":"string","format":"uri"},"contactVenueEmail":{"type":"string","format":"email"},"contactVenuePhoneNumber":{"type":"string"},"contactVenueWebsite":{"type":"string","format":"uri"},"directionsInformationURL":{"type":"string","format":"uri"},"liveBroadcastURL":{"type":"string","format":"uri"},"merchandiseURL":{"type":"string","format":"uri"},"orderFoodURL":{"type":"string","format":"uri"},"parkingInformationURL":{"type":"string","format":"uri"},"purchaseParkingURL":{"type":"string","format":"uri"},"sellURL":{"type":"string","format":"uri"},"transferURL":{"type":"string","format":"uri"},"transitInformationURL":{"type":"string","format":"uri"},"flightHeader":{"type":"object","properties":{"carrier":{"type":"object","properties":{"carrierIataCode":{"type":"string","description":"2-letter IATA carrier code (e.g. `BA`, `AA`)."}},"required":["carrierIataCode"]},"flightNumber":{"type":"string","description":"Flight number (digits only per Google spec)."}},"required":["carrier","flightNumber"]},"origin":{"type":"object","properties":{"airportIataCode":{"type":"string","description":"3-letter IATA airport code (e.g. `LHR`, `JFK`)."},"terminal":{"type":"string"},"gate":{"type":"string"}},"required":["airportIataCode"]},"destination":{"type":"object","properties":{"airportIataCode":{"type":"string","description":"3-letter IATA airport code (e.g. `LHR`, `JFK`)."},"terminal":{"type":"string"},"gate":{"type":"string"}},"required":["airportIataCode"]},"localScheduledDepartureDateTime":{"type":"string","description":"Google Flight: ISO 8601 **without** timezone offset (local airport time). Automatically stripped if a Z/offset is supplied."},"localScheduledArrivalDateTime":{"type":"string","description":"Google Flight: same format as departure."},"transitOperatorName":{"type":"string"},"googleTransitType":{"type":"string","description":"Google Wallet transit class transitType enum. Auto-derived from Apple's `transitType` if not set explicitly.","enum":["BUS","RAIL","TRAM","FERRY","OTHER"]},"tripType":{"type":"string","enum":["ROUND_TRIP","ONE_WAY"]},"venueName":{"type":"string"},"venueAddress":{"type":"string"},"doorsOpen":{"type":"string","format":"date-time"},"dateTimeStart":{"type":"string","format":"date-time"},"dateTimeEnd":{"type":"string","format":"date-time"},"seatDataKey":{"type":"string"},"rowDataKey":{"type":"string"},"sectionDataKey":{"type":"string"},"gateDataKey":{"type":"string"},"ticketHolderNameDataKey":{"type":"string"},"ticketNumberDataKey":{"type":"string"},"pinLabel":{"type":"string"},"cardNumberLabel":{"type":"string"},"eventNumberLabel":{"type":"string"},"cardNumberDataKey":{"type":"string"},"pinDataKey":{"type":"string"},"balanceDataKey":{"type":"string"},"balanceCurrencyCode":{"type":"string","description":"ISO 4217 code used when `balance` is supplied as a plain number (dollars → micros)."},"eventNumberDataKey":{"type":"string"},"loyaltyPointsDataKey":{"type":"string"},"loyaltyPointsLabel":{"type":"string"},"secondaryLoyaltyPointsDataKey":{"type":"string"},"secondaryLoyaltyPointsLabel":{"type":"string"},"discoverableProgram":{"type":"object","description":"Google Loyalty: public program listing. Requires `countryCode` on the class (set via `discoverableProgram`).","additionalProperties":true},"redemptionChannel":{"type":"string","description":"Google Wallet OfferClass redemption channel.","enum":["INSTORE","ONLINE","BOTH","TEMPORARY_PRICE_REDUCTION"]},"messages":{"type":"array","description":"Google class-level messages.","items":{"type":"object","additionalProperties":true}},"enableSmartTap":{"type":"boolean"},"callbackOptions":{"type":"object","additionalProperties":true},"securityAnimation":{"type":"object","additionalProperties":true},"viewUnlockRequirement":{"type":"string","enum":["UNLOCK_REQUIRED_TO_VIEW","VIEW_UNLOCK_REQUIREMENT_UNSPECIFIED"]},"rotatingBarcode":{"type":"object","description":"Google Wallet rotating barcode (TOTP-based). Supply a pre-configured\nobject; PassFast does not synthesize the HMAC secret.\n","properties":{"type":{"type":"string","enum":["QR_CODE","AZTEC","PDF_417","CODE_128","DATA_MATRIX"]},"valuePattern":{"type":"string","description":"Pattern for the rotating value, e.g. `rotating-{totp_value}`."},"totpDetails":{"type":"object","properties":{"periodMillis":{"type":"string","description":"TOTP period as a string of milliseconds (e.g. `\"30000\"`)."},"algorithm":{"type":"string","enum":["TOTP_SHA1","TOTP_SHA256","TOTP_SHA512"]},"parameters":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Base16 (hex) encoded TOTP secret."},"valueLength":{"type":"integer"}}}}}}}},"smartTapRedemptionValue":{"type":"string"},"smartTapRedemptionDataKey":{"type":"string"},"objectMessages":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["backgroundColor","foregroundColor"],"additionalProperties":true},"field_schema":{"type":"object","additionalProperties":true},"icon_image_id":{"type":"string","format":"uuid"},"logo_image_id":{"type":"string","format":"uuid"},"google_logo_image_id":{"type":"string","format":"uuid"},"google_wide_logo_image_id":{"type":"string","format":"uuid"},"strip_image_id":{"type":"string","format":"uuid"},"thumbnail_image_id":{"type":"string","format":"uuid"},"background_image_id":{"type":"string","format":"uuid"},"wallet_types":{"type":"array","description":"Wallet platforms this template supports.","items":{"type":"string","enum":["apple","google"]}}},"required":["id"],"additionalProperties":false}},{"name":"uploadCertificate","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"cert_type":{"type":"string","description":"Type of certificate being uploaded.","enum":["signer_cert","signer_key","wwdr"]},"cert_data":{"type":"string","format":"byte","description":"Base64-encoded certificate or key data."}},"required":["cert_type","cert_data"],"additionalProperties":false}},{"name":"uploadGoogleCredentials","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"service_account_json":{"type":"object","description":"Google service account JSON key file contents.","additionalProperties":true},"issuer_id":{"type":"string","description":"Google Wallet issuer ID."}},"required":["service_account_json","issuer_id"],"additionalProperties":false}},{"name":"uploadImage","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"purpose":{"type":"string","description":"The intended use of the image. `strip` uploads accumulate\n(for per-pass `strip_image_id` overrides); all other purposes\nreplace existing uploads of the same purpose for the app.\n","enum":["icon","icon_2x","icon_3x","logo","logo_2x","logo_3x","thumbnail","thumbnail_2x","strip","strip_2x","background","background_2x","footer","footer_2x"]},"file_base64":{"type":"string","description":"Base64-encoded file bytes. Maps to the OpenAPI multipart `file` field — same uploadImage (or equivalent) endpoint, not a new API."},"filename":{"type":"string","description":"Optional filename sent with the multipart upload."}},"required":["purpose","file_base64"],"additionalProperties":false}},{"name":"uploadP12Certificate","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"p12_data":{"type":"string","format":"byte","description":"Base64-encoded .p12 file data."},"password":{"type":"string","description":"Password to decrypt the .p12 bundle (if password-protected)."}},"required":["p12_data"],"additionalProperties":false}},{"name":"voidPass","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"id":{"type":"string","format":"uuid","description":"Pass ID."}},"required":["id"],"additionalProperties":false}},{"name":"voidPassBySerial","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x_app_id":{"type":"string","format":"uuid","description":"Override X-App-Id for this call. Defaults to the MCP connection header."},"serial_number":{"type":"string","description":"Pass serial number (unique within app + wallet type)."},"wallet_type":{"type":"string","enum":["apple","google"],"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"}},"required":["serial_number"],"additionalProperties":false}}],"scan":{"score":85,"grade":"A","scanned_at":"2026-09-20T20:08:24.046Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T20:08:23.959Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1498ms"]},"poisoning":{"score":15,"max":15,"notes":["45 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":6,"max":10,"notes":["namespace and repository owner differ","website matches verified namespace"]}},"findings":[],"inputs":{"probes":[{"url":"https://passfa.st/mcp","reachable":true,"authRequired":false,"latencyMs":1498,"serverInfo":{"name":"passfast","version":"1.0.0"}}],"packages":[],"repo":{"found":true,"owner":"aberkaneso","repo":"passfast-mcp","archived":false,"pushedAt":"2026-09-20T16:19:03Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/265242725?v=4","ownerCreatedAt":"2026-03-03T09:55:57Z","license":"MIT"},"icon":{"url":"https://passfa.st/icon.svg?icon.a1931216.svg","source":"site"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-20T16:19:03.000Z","score":23}}}},"grade_history":[],"reviews":[]}