{"openapi":"3.1.0","info":{"title":"membo.app public API","version":"1.0","description":"API publique de membo.app pour les intégrations et les agents.\n\n## Authentification\n`Authorization: Bearer mk_live_…` avec une clé créée dans Compte › Clés API.\nLa clé agit comme l'admin qui l'a créée, limitée aux périmètres choisis\n(consulter ou modifier par périmètre). `GET /api/auth/me` renvoie le club\n(`club_id`) à utiliser dans les autres routes.\n\n## Limites\n300 requêtes par minute et par clé. Les montants sont en centimes, les dates\nen ISO 8601 (UTC). Les erreurs portent un `detail` lisible dans la langue du\nclub. Les routes absentes de cette description peuvent changer sans préavis.\n\nDocumentation : https://www.membo.app/docs/en/api\n"},"servers":[{"url":"https://api.membo.app"}],"paths":{"/api/auth/me":{"get":{"tags":["Account"],"summary":"Me","description":"Return the currently authenticated admin with their full club data.","operationId":"me_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminMe"}}}}},"security":[{"ApiKey":[]}]}},"/api/clubs/{club_id}":{"put":{"tags":["Club"],"summary":"Update Club","description":"Update club settings. Auth required.\n\nSprint 8 (T8.2): when card_custom_link_url changes, push an update to all\nactive Apple/Google passes in the background.","operationId":"update_club_api_clubs__club_id__put","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClubUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClubAdmin"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/attendance":{"get":{"tags":["Access control"],"summary":"Get Attendance","operationId":"get_attendance_api_clubs__club_id__attendance_get","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttendanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/events":{"post":{"tags":["Events"],"summary":"Create Event","operationId":"create_event_api_clubs__club_id__events_post","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventAdminDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Events"],"summary":"List Events","operationId":"list_events_api_clubs__club_id__events_get","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventAdminItem"},"title":"Response List Events Api Clubs  Club Id  Events Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/events/{event_id}":{"get":{"tags":["Events"],"summary":"Get Event Detail","operationId":"get_event_detail_api_clubs__club_id__events__event_id__get","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventAdminDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Events"],"summary":"Update Event","operationId":"update_event_api_clubs__club_id__events__event_id__patch","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventAdminDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/events/{event_id}/checkin":{"post":{"tags":["Events"],"summary":"Checkin","description":"Scan à l'entrée : billet (qr_token) OU carte de membre inscrit\n(referral_code). Verdicts : valid | already | not_registered.","operationId":"checkin_api_clubs__club_id__events__event_id__checkin_post","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckinPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/events/{event_id}/registrations":{"get":{"tags":["Events"],"summary":"List Registrations","operationId":"list_registrations_api_clubs__club_id__events__event_id__registrations_get","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventRegistrationItem"},"title":"Response List Registrations Api Clubs  Club Id  Events  Event Id  Registrations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/members":{"get":{"tags":["Members"],"summary":"List Members","description":"List members for a club with optional filters and pagination.\nQuery params: status, search, page, limit.","operationId":"list_members_api_clubs__club_id__members_get","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":50,"title":"Limit"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"dir","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Dir"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/members/export":{"get":{"tags":["Members"],"summary":"Export Members","description":"Export the full member list as either:\n  - CSV (default): UTF-8 with BOM for Excel; columns id, referral_code,\n    pass_serial_number, first_name, last_name, email, membership_start,\n    membership_end, payment_status, payment_method, created_at, + custom\n    fields. referral_code is the value encoded in the wallet QR/barcode,\n    useful for downstream integrations.\n  - PDF (?format=pdf): A4 printable roster sorted by last name then first\n    name (the usual alphabetical-listing expectation). Columns kept\n    narrow for paper: nom, prénom, email, fin abonnement, statut.","operationId":"export_members_api_clubs__club_id__members_export_get","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"member_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated member UUIDs to export (omit for all)","title":"Member Ids"},"description":"Comma-separated member UUIDs to export (omit for all)"},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(csv|pdf)$","description":"csv (default) or pdf","default":"csv","title":"Format"},"description":"csv (default) or pdf"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/members/manual":{"post":{"tags":["Members"],"summary":"Add Manual Member","description":"Manually add a member from the dashboard (T10.8).\n\nCreates the member with payment_status='paid' and is_manual=True.\nNo PSP payment is recorded. The membership_start is today.\nReturns the new member with wallet pass URLs.","operationId":"add_manual_member_api_clubs__club_id__members_manual_post","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualMemberCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/members/{member_id}/actions/cancel-subscription":{"post":{"tags":["Members"],"summary":"Cancel Member Subscription","description":"L'admin arrête le renouvellement automatique d'un membre : abonnement\nannulé chez le prestataire, le membre reste actif jusqu'à la fin de la\npériode payée, puis suit le parcours de renouvellement ordinaire.","operationId":"cancel_member_subscription_api_clubs__club_id__members__member_id__actions_cancel_subscription_post","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Member Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuspendRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/members/{member_id}/actions/extend":{"post":{"tags":["Members"],"summary":"Extend Membership","operationId":"extend_membership_api_clubs__club_id__members__member_id__actions_extend_post","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Member Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/members/{member_id}/actions/mark-paid":{"post":{"tags":["Members"],"summary":"Mark Paid","operationId":"mark_paid_api_clubs__club_id__members__member_id__actions_mark_paid_post","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Member Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkPaidRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/members/{member_id}/actions/reactivate":{"post":{"tags":["Members"],"summary":"Reactivate Member","operationId":"reactivate_member_api_clubs__club_id__members__member_id__actions_reactivate_post","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Member Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReactivateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/members/{member_id}/actions/suspend":{"post":{"tags":["Members"],"summary":"Suspend Member","operationId":"suspend_member_api_clubs__club_id__members__member_id__actions_suspend_post","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Member Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuspendRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/members/{member_id}/send-card-email":{"post":{"tags":["Members"],"summary":"Send Member Card Email","description":"Send card-ready email to a specific member (Tonboard.4).\n\nAlways sends (even if already sent before — this is a deliberate resend).\nUpdates card_email_sent_at.","operationId":"send_member_card_email_api_clubs__club_id__members__member_id__send_card_email_post","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Member Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/promo-codes":{"get":{"tags":["Promo codes"],"summary":"List Promo Codes","description":"List all promo codes for a club (admin). Filtrable par portée.","operationId":"list_promo_codes_api_clubs__club_id__promo_codes_get","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Inactive"}},{"name":"event_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Codes d'un événement précis","title":"Event Id"},"description":"Codes d'un événement précis"},{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"membership | event | all (défaut)","title":"Scope"},"description":"membership | event | all (défaut)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PromoCodePublic"},"title":"Response List Promo Codes Api Clubs  Club Id  Promo Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Promo codes"],"summary":"Create Promo Code","description":"Create a promo code (admin).","operationId":"create_promo_code_api_clubs__club_id__promo_codes_post","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoCodeCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoCodePublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/stats":{"get":{"tags":["Club"],"summary":"Get Stats","description":"Return club statistics:\n- Member counts (active, expired, total)\n- Monthly and all-time revenue with fee breakdown\n  (gross, PSP fees, Membo commission, net to club)","operationId":"get_stats_api_clubs__club_id__stats_get","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/tiers":{"get":{"tags":["Tiers"],"summary":"List Tiers","description":"List all tiers for a club (auth).\nBy default returns only active tiers; pass include_inactive=true to see soft-deleted ones.","operationId":"list_tiers_api_clubs__club_id__tiers_get","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{},"title":"Response List Tiers Api Clubs  Club Id  Tiers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Tiers"],"summary":"Create Tier","description":"Create a new membership tier for a club (T10.3).","operationId":"create_tier_api_clubs__club_id__tiers_post","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clubs/{club_id}/tiers/{tier_id}":{"put":{"tags":["Tiers"],"summary":"Update Tier","description":"Update a membership tier (T10.3). Supports partial updates.","operationId":"update_tier_api_clubs__club_id__tiers__tier_id__put","security":[{"ApiKey":[]}],"parameters":[{"name":"club_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Club Id"}},{"name":"tier_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tier Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AdminMe":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"club_id":{"type":"string","format":"uuid","title":"Club Id"},"email":{"type":"string","title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"role":{"type":"string","title":"Role"},"is_superadmin":{"type":"boolean","title":"Is Superadmin","default":false},"scopes":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Scopes"},"read_only":{"type":"boolean","title":"Read Only","default":false},"access_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Access Expires At"},"referral_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Code"},"referral_unlocked":{"type":"boolean","title":"Referral Unlocked","default":false},"onboarding_step":{"type":"string","title":"Onboarding Step","default":"created"},"club":{"$ref":"#/components/schemas/ClubAdmin"},"onboarding":{"additionalProperties":true,"type":"object","title":"Onboarding","default":{}}},"type":"object","required":["id","club_id","email","first_name","last_name","role","club"],"title":"AdminMe","description":"Extended admin profile including club data — returned by GET /api/auth/me."},"AttendanceResponse":{"properties":{"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"from_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Date"},"to_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Date"},"total_scans":{"type":"integer","title":"Total Scans"},"unique_members":{"type":"integer","title":"Unique Members"},"scans":{"items":{"$ref":"#/components/schemas/ScanEntry"},"type":"array","title":"Scans"}},"type":"object","required":["total_scans","unique_members","scans"],"title":"AttendanceResponse"},"CardBackField":{"properties":{"type":{"type":"string","enum":["text","number","link","email","phone"],"title":"Type"},"label":{"type":"string","title":"Label","default":""},"value":{"type":"string","title":"Value","default":""},"link_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Text"},"is_perk":{"type":"boolean","title":"Is Perk","default":false},"partner_logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Logo Url"},"partner_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Address"},"partner_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Website"},"partner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Email"},"partner_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Phone"},"partner_hours":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Hours"},"redeem_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redeem Instructions"},"tier_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tier Ids"}},"type":"object","required":["type"],"title":"CardBackField","description":"A single custom field on the back of the wallet card.\n\n`type` is the input kind (text, number, link, email, phone) — drives\nthe editor input + the wallet auto-detection (iOS/Android make\nemails/phones tappable).\n\n`is_perk` is an orthogonal flag that marks the field as a partner\nbenefit (collaboration with a local business). Any type can be a\nperk: a perk can be a text offer, a booking link, a contact email,\nor a phone number. When `is_perk=True`, the optional partner_*\nenrichment fields are surfaced on /m/[code]; the wallet card itself\nstays minimal (label + value).\n\nLegacy compat: rows stored with `type=\"perk\"` are normalized to\n`type=\"text\"` + `is_perk=True` on the way in (model_validator)."},"CardLocation":{"properties":{"latitude":{"type":"number","title":"Latitude"},"longitude":{"type":"number","title":"Longitude"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","required":["latitude","longitude"],"title":"CardLocation","description":"A location where the card appears on the lock screen."},"CheckinPayload":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"CheckinPayload"},"ClubAdmin":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"logo_horizontal_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Horizontal Url"},"logo_square_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Square Url"},"logo_circular_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Circular Url"},"primary_color":{"type":"string","title":"Primary Color"},"secondary_color":{"type":"string","title":"Secondary Color"},"checkout_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checkout Color"},"checkout_color_dark":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checkout Color Dark"},"membership_fee_cents":{"type":"integer","title":"Membership Fee Cents"},"currency":{"type":"string","title":"Currency"},"membership_duration_months":{"type":"integer","title":"Membership Duration Months"},"pricing_plan":{"type":"string","title":"Pricing Plan"},"commission_rate_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Commission Rate Percent"},"fee_fixed_cents":{"type":"integer","title":"Fee Fixed Cents","default":0},"payment_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Provider"},"payment_provider_next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Provider Next"},"payments_available":{"type":"boolean","title":"Payments Available","default":true},"payments_connected":{"type":"boolean","title":"Payments Connected","default":false},"payments_ready":{"type":"boolean","title":"Payments Ready","default":false},"fee_model":{"type":"string","title":"Fee Model","default":"all_in"},"psp_rate_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Psp Rate Percent"},"psp_rate_fixed_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Psp Rate Fixed Cents"},"psp_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Psp Label"},"psp_pricing_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Psp Pricing Url"},"card_custom_link_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Custom Link Label"},"card_custom_link_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Custom Link Url"},"card_custom_link_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Card Custom Link Updated At"},"card_theme":{"type":"string","title":"Card Theme","default":"default"},"card_label_color":{"type":"string","title":"Card Label Color","default":"#C8C8C8"},"card_strip_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Strip Image Url"},"card_thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Thumbnail Url"},"price_display_mode":{"type":"string","title":"Price Display Mode","default":"period"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"show_member_count":{"type":"boolean","title":"Show Member Count","default":true},"cover_photo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cover Photo Url"},"social_instagram_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Instagram Url"},"social_facebook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Facebook Url"},"social_strava_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Strava Url"},"social_whatsapp_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Whatsapp Url"},"social_twitter_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Twitter Url"},"social_linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Linkedin Url"},"social_tiktok_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Tiktok Url"},"social_youtube_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Youtube Url"},"social_website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Website Url"},"partners":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Partners"},"allow_subscription":{"type":"boolean","title":"Allow Subscription","default":false},"subscription_default":{"type":"boolean","title":"Subscription Default","default":true},"subscription_only":{"type":"boolean","title":"Subscription Only","default":false},"referral_free_until":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Referral Free Until"},"legal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"vat_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vat Number"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"},"card_welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Welcome Message"},"card_barcode_format":{"type":"string","title":"Card Barcode Format","default":"qr"},"card_sharing_prohibited":{"type":"boolean","title":"Card Sharing Prohibited","default":true},"card_hide_branding":{"type":"boolean","title":"Card Hide Branding","default":false},"card_update_notifications":{"type":"boolean","title":"Card Update Notifications","default":false},"card_geolocation_enabled":{"type":"boolean","title":"Card Geolocation Enabled","default":true},"last_wallet_push_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Wallet Push At"},"membership_mode":{"type":"string","title":"Membership Mode","default":"open"},"application_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Instructions"},"locale":{"type":"string","title":"Locale","default":"fr"},"date_format":{"type":"string","title":"Date Format","default":"auto"},"date_format_effective":{"type":"string","title":"Date Format Effective","default":"iso"},"number_format":{"type":"string","title":"Number Format","default":"auto"},"number_format_effective":{"type":"string","title":"Number Format Effective","default":"space_dot"},"fee_policy":{"type":"string","title":"Fee Policy","default":"club"},"payment_methods_enabled":{"items":{"type":"string"},"type":"array","title":"Payment Methods Enabled","default":["mollie"]},"mollie_organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mollie Organization Id"},"mollie_profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mollie Profile Id"},"payout_iban":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Iban"},"payout_bic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Bic"},"payout_beneficiary_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Beneficiary Name"},"payout_bank_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Bank Name"},"card_back_fields":{"anyOf":[{"items":{"$ref":"#/components/schemas/CardBackField"},"type":"array"},{"type":"null"}],"title":"Card Back Fields"},"card_locations":{"anyOf":[{"items":{"$ref":"#/components/schemas/CardLocation"},"type":"array"},{"type":"null"}],"title":"Card Locations"},"member_referral_enabled":{"type":"boolean","title":"Member Referral Enabled","default":true},"member_referral_reward_percent":{"type":"integer","title":"Member Referral Reward Percent","default":10},"member_referral_max_credits_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Member Referral Max Credits Cents"},"custom_fields_schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Custom Fields Schema","default":[]},"card_slot_secondary":{"type":"string","title":"Card Slot Secondary","default":"tier"},"card_slot_auxiliary":{"type":"string","title":"Card Slot Auxiliary","default":"none"},"card_custom_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Custom Source"},"card_custom_field_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Custom Field Key"},"card_custom_constant_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Custom Constant Value"},"card_custom_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Custom Label"},"accounting_account_revenue":{"type":"string","title":"Accounting Account Revenue","default":"3100"},"accounting_account_fees":{"type":"string","title":"Accounting Account Fees","default":"3090"},"accounting_account_bank":{"type":"string","title":"Accounting Account Bank","default":"1020"},"accounting_account_revenue_name":{"type":"string","title":"Accounting Account Revenue Name","default":"Cotisations"},"accounting_account_fees_name":{"type":"string","title":"Accounting Account Fees Name","default":"Frais d'encaissement"},"accounting_account_bank_name":{"type":"string","title":"Accounting Account Bank Name","default":"Banque"},"accounting_account_events":{"type":"string","title":"Accounting Account Events","default":"3200"},"accounting_account_events_name":{"type":"string","title":"Accounting Account Events Name","default":""},"accounting_account_passage":{"type":"string","title":"Accounting Account Passage","default":"1021"},"accounting_account_passage_name":{"type":"string","title":"Accounting Account Passage Name","default":"Passage Mollie"},"accounting_journal":{"type":"string","title":"Accounting Journal","default":""},"accounting_templates":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Accounting Templates"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","slug","logo_url","primary_color","secondary_color","membership_fee_cents","currency","membership_duration_months","pricing_plan","created_at","updated_at"],"title":"ClubAdmin","description":"Full club info for the admin dashboard."},"ClubUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color"},"membership_fee_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Membership Fee Cents"},"membership_duration_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Membership Duration Months"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"card_custom_link_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Custom Link Label"},"card_custom_link_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Custom Link Url"},"card_theme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Theme"},"card_label_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Label Color"},"checkout_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checkout Color"},"checkout_color_dark":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checkout Color Dark"},"price_display_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Display Mode"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"show_member_count":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Show Member Count"},"cover_photo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cover Photo Url"},"social_instagram_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Instagram Url"},"social_facebook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Facebook Url"},"social_strava_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Strava Url"},"social_whatsapp_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Whatsapp Url"},"social_twitter_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Twitter Url"},"social_linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Linkedin Url"},"social_tiktok_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Tiktok Url"},"social_youtube_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Youtube Url"},"social_website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Website Url"},"partners":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Partners"},"allow_subscription":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allow Subscription"},"subscription_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Subscription Default"},"subscription_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Subscription Only"},"legal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"vat_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vat Number"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"},"card_welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Welcome Message"},"card_barcode_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Barcode Format"},"card_sharing_prohibited":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Card Sharing Prohibited"},"card_hide_branding":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Card Hide Branding"},"card_update_notifications":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Card Update Notifications"},"card_geolocation_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Card Geolocation Enabled"},"membership_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Membership Mode"},"application_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Instructions"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"},"date_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Format"},"number_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Number Format"},"name_order":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Order"},"fee_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fee Policy"},"payment_methods_enabled":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Payment Methods Enabled"},"card_back_fields":{"anyOf":[{"items":{"$ref":"#/components/schemas/CardBackField"},"type":"array"},{"type":"null"}],"title":"Card Back Fields"},"card_locations":{"anyOf":[{"items":{"$ref":"#/components/schemas/CardLocation"},"type":"array"},{"type":"null"}],"title":"Card Locations"},"member_referral_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Member Referral Enabled"},"member_referral_reward_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Member Referral Reward Percent"},"member_referral_max_credits_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Member Referral Max Credits Cents"},"payout_iban":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Iban"},"payout_bic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Bic"},"payout_bank_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Bank Name"},"payout_beneficiary_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Beneficiary Name"},"payout_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Country"},"accounting_account_revenue":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accounting Account Revenue"},"accounting_account_fees":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accounting Account Fees"},"accounting_account_bank":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accounting Account Bank"},"accounting_account_revenue_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accounting Account Revenue Name"},"accounting_account_fees_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accounting Account Fees Name"},"accounting_account_bank_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accounting Account Bank Name"},"accounting_account_events":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accounting Account Events"},"accounting_account_events_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accounting Account Events Name"},"accounting_account_passage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accounting Account Passage"},"accounting_account_passage_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accounting Account Passage Name"},"accounting_journal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accounting Journal"},"custom_fields_schema":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Custom Fields Schema"},"card_slot_secondary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Slot Secondary"},"card_slot_auxiliary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Slot Auxiliary"},"card_custom_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Custom Source"},"card_custom_field_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Custom Field Key"},"card_custom_constant_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Custom Constant Value"},"card_custom_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Custom Label"}},"type":"object","title":"ClubUpdate","description":"Fields an admin can update."},"EventAdminDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"slug":{"type":"string","title":"Slug"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"status":{"type":"string","title":"Status"},"listed":{"type":"boolean","title":"Listed"},"access":{"type":"string","title":"Access"},"capacity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Capacity"},"registered_count":{"type":"integer","title":"Registered Count","default":0},"checked_in_count":{"type":"integer","title":"Checked In Count","default":0},"revenue_cents":{"type":"integer","title":"Revenue Cents","default":0},"net_cents":{"type":"integer","title":"Net Cents","default":0},"currency":{"type":"string","title":"Currency","default":"CHF"},"public_url":{"type":"string","title":"Public Url","default":""},"reminder_enabled":{"type":"boolean","title":"Reminder Enabled","default":true},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"location_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Name"},"location_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Address"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"registration_opens_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Registration Opens At"},"registration_closes_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Registration Closes At"},"show_attendees":{"type":"boolean","title":"Show Attendees","default":true},"attendees_min":{"type":"integer","title":"Attendees Min","default":3},"attendees_nominative":{"type":"boolean","title":"Attendees Nominative","default":false},"story_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Story Text"},"story_text_size":{"type":"string","title":"Story Text Size","default":"m"},"custom_fields_schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Custom Fields Schema","default":[]},"tickets":{"items":{"$ref":"#/components/schemas/EventTicketAdmin"},"type":"array","title":"Tickets","default":[]}},"type":"object","required":["id","title","slug","starts_at","status","listed","access"],"title":"EventAdminDetail"},"EventAdminItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"slug":{"type":"string","title":"Slug"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"status":{"type":"string","title":"Status"},"listed":{"type":"boolean","title":"Listed"},"access":{"type":"string","title":"Access"},"capacity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Capacity"},"registered_count":{"type":"integer","title":"Registered Count","default":0},"checked_in_count":{"type":"integer","title":"Checked In Count","default":0},"revenue_cents":{"type":"integer","title":"Revenue Cents","default":0},"net_cents":{"type":"integer","title":"Net Cents","default":0},"currency":{"type":"string","title":"Currency","default":"CHF"},"public_url":{"type":"string","title":"Public Url","default":""}},"type":"object","required":["id","title","slug","starts_at","status","listed","access"],"title":"EventAdminItem"},"EventCreate":{"properties":{"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"location_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Name"},"location_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Address"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"registration_opens_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Registration Opens At"},"registration_closes_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Registration Closes At"},"capacity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Capacity"},"listed":{"type":"boolean","title":"Listed","default":true},"access":{"type":"string","title":"Access","default":"public"},"show_attendees":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Show Attendees"},"attendees_min":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":1.0},{"type":"null"}],"title":"Attendees Min"},"attendees_nominative":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Attendees Nominative"},"custom_fields_schema":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Custom Fields Schema"},"tickets":{"items":{"$ref":"#/components/schemas/EventTicketPayload"},"type":"array","title":"Tickets","default":[]}},"type":"object","required":["title","starts_at"],"title":"EventCreate"},"EventRegistrationItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"ticket_name":{"type":"string","title":"Ticket Name"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"is_member":{"type":"boolean","title":"Is Member"},"qr_token":{"type":"string","title":"Qr Token"},"status":{"type":"string","title":"Status"},"has_payment":{"type":"boolean","title":"Has Payment","default":false},"amount_cents":{"type":"integer","title":"Amount Cents"},"checked_in_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Checked In At"},"wallet_apple_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Wallet Apple At"},"wallet_google_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Wallet Google At"},"ics_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ics At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"custom_fields":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Fields"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","required":["id","ticket_name","first_name","last_name","is_member","qr_token","status","amount_cents","created_at"],"title":"EventRegistrationItem"},"EventTicketAdmin":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"member_price_cents":{"type":"integer","title":"Member Price Cents"},"tier_prices":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Tier Prices"},"non_member_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Non Member Price Cents"},"quantity_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity Max"},"is_active":{"type":"boolean","title":"Is Active"},"registered_count":{"type":"integer","title":"Registered Count","default":0}},"type":"object","required":["id","name","member_price_cents","is_active"],"title":"EventTicketAdmin"},"EventTicketPayload":{"properties":{"name":{"type":"string","title":"Name"},"member_price_cents":{"type":"integer","title":"Member Price Cents","default":0},"tier_prices":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Tier Prices"},"non_member_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Non Member Price Cents"},"quantity_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity Max"}},"type":"object","required":["name"],"title":"EventTicketPayload"},"EventUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"location_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Name"},"location_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Address"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"registration_opens_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Registration Opens At"},"registration_closes_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Registration Closes At"},"capacity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Capacity"},"listed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Listed"},"access":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"reminder_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reminder Enabled"},"show_attendees":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Show Attendees"},"attendees_min":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":1.0},{"type":"null"}],"title":"Attendees Min"},"attendees_nominative":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Attendees Nominative"},"story_text":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Story Text"},"story_text_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Story Text Size"},"custom_fields_schema":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Custom Fields Schema"},"tickets":{"anyOf":[{"items":{"$ref":"#/components/schemas/EventTicketPayload"},"type":"array"},{"type":"null"}],"title":"Tickets"}},"type":"object","title":"EventUpdate"},"ExtendRequest":{"properties":{"extend_until":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Extend Until"},"extend_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extend Months"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"ExtendRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ManualMemberCreate":{"properties":{"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","format":"email","title":"Email"},"membership_end":{"type":"string","format":"date","title":"Membership End"},"tier_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tier Id"},"joined_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Joined At"},"custom_fields":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Fields"}},"type":"object","required":["first_name","last_name","email","membership_end"],"title":"ManualMemberCreate","description":"Payload to manually add a member from the dashboard (T10.8)."},"MarkPaidRequest":{"properties":{"amount_cents":{"type":"integer","title":"Amount Cents"},"payment_method":{"type":"string","title":"Payment Method","default":"bank_transfer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["amount_cents"],"title":"MarkPaidRequest"},"MemberAdminItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"membership_start":{"type":"string","format":"date","title":"Membership Start"},"membership_end":{"type":"string","format":"date","title":"Membership End"},"payment_status":{"type":"string","title":"Payment Status"},"pass_serial_number":{"type":"string","title":"Pass Serial Number"},"has_apple":{"type":"boolean","title":"Has Apple","default":false},"has_google":{"type":"boolean","title":"Has Google","default":false},"has_web":{"type":"boolean","title":"Has Web","default":false},"payment_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method"},"tier_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tier Id"},"tier_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Name"},"pending_tier_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pending Tier Id"},"pending_tier_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pending Tier Name"},"pending_tier_change_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Pending Tier Change At"},"is_manual":{"type":"boolean","title":"Is Manual","default":false},"payment_mode":{"type":"string","title":"Payment Mode","default":"one_time"},"invoice_company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Company Name"},"referral_count":{"type":"integer","title":"Referral Count","default":0},"referral_credit_cents":{"type":"integer","title":"Referral Credit Cents","default":0},"acquisition_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acquisition Source"},"referred_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referred By Name"},"custom_fields":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Fields"},"profile_complete":{"type":"boolean","title":"Profile Complete","default":true},"card_email_sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Card Email Sent At"},"card_email_reminder_sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Card Email Reminder Sent At"},"card_installed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Card Installed At"},"renewal_opt_out_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Renewal Opt Out At"},"manage_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manage Token"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","first_name","last_name","email","membership_start","membership_end","payment_status","pass_serial_number","created_at"],"title":"MemberAdminItem","description":"Member data enriched with payment method — used in admin member list (T5.1)."},"MemberListResponse":{"properties":{"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"limit":{"type":"integer","title":"Limit"},"items":{"items":{"$ref":"#/components/schemas/MemberAdminItem"},"type":"array","title":"Items"}},"type":"object","required":["total","page","limit","items"],"title":"MemberListResponse","description":"Paginated member list response."},"PromoCodeCreate":{"properties":{"code":{"type":"string","maxLength":30,"minLength":4,"title":"Code"},"discount_type":{"type":"string","title":"Discount Type"},"discount_value":{"type":"integer","exclusiveMinimum":0.0,"title":"Discount Value"},"currency":{"anyOf":[{"type":"string","maxLength":3},{"type":"null"}],"title":"Currency"},"applies_to_tier_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Applies To Tier Ids"},"event_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Event Id"},"applies_to_ticket_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Applies To Ticket Ids"},"max_uses":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Uses"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"}},"type":"object","required":["code","discount_type","discount_value"],"title":"PromoCodeCreate"},"PromoCodePublic":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"club_id":{"type":"string","format":"uuid","title":"Club Id"},"code":{"type":"string","title":"Code"},"discount_type":{"type":"string","title":"Discount Type"},"discount_value":{"type":"integer","title":"Discount Value"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"applies_to_tier_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Applies To Tier Ids"},"event_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Event Id"},"event_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Title"},"event_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Slug"},"applies_to_ticket_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Applies To Ticket Ids"},"max_uses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Uses"},"used_count":{"type":"integer","title":"Used Count"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"is_active":{"type":"boolean","title":"Is Active"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","club_id","code","discount_type","discount_value","used_count","is_active","created_at"],"title":"PromoCodePublic","description":"Returned to admin dashboard (full details)."},"ReactivateRequest":{"properties":{"extend_until":{"type":"string","format":"date","title":"Extend Until"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["extend_until"],"title":"ReactivateRequest"},"ScanEntry":{"properties":{"member_id":{"type":"string","title":"Member Id"},"member_first_name":{"type":"string","title":"Member First Name"},"member_last_name":{"type":"string","title":"Member Last Name"},"member_email":{"type":"string","title":"Member Email"},"scanned_at":{"type":"string","title":"Scanned At"},"source":{"type":"string","title":"Source","default":"verify"},"event_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Title"}},"type":"object","required":["member_id","member_first_name","member_last_name","member_email","scanned_at"],"title":"ScanEntry"},"SuspendRequest":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"SuspendRequest"},"TierCreate":{"properties":{"name":{"type":"string","title":"Name"},"card_display_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Display Label"},"price_cents":{"type":"integer","title":"Price Cents"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"duration_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Months"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"sort_order":{"type":"integer","title":"Sort Order","default":0},"membership_mode":{"anyOf":[{"type":"string","enum":["open","application","invitation"]},{"type":"null"}],"title":"Membership Mode"},"application_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Instructions"},"show_when_invitation_only":{"type":"boolean","title":"Show When Invitation Only","default":false},"is_free_fallback":{"type":"boolean","title":"Is Free Fallback","default":false},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color"},"card_label_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Label Color"}},"type":"object","required":["name","price_cents"],"title":"TierCreate"},"TierUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"card_display_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Display Label"},"price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Cents"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"duration_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Months"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"membership_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Membership Mode"},"application_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Instructions"},"show_when_invitation_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Show When Invitation Only"},"is_free_fallback":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Free Fallback"},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color"},"card_label_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Label Color"}},"type":"object","title":"TierUpdate"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","description":"Clé API mk_live_…"}}},"tags":[{"name":"Account"},{"name":"Club"},{"name":"Members"},{"name":"Tiers"},{"name":"Promo codes"},{"name":"Events"},{"name":"Access control"}]}