{"openapi":"3.1.0","info":{"title":"LoyaltyDog","description":"\nWelcome to the LoyaltyDog API! This API provides access to our loyalty program features, allowing you to integrate with various platforms and manage your loyalty data.\n\nWant to query LoyaltyDog via an AI assistant (Claude, Cursor, Windsurf)? See the [MCP Integration guide](https://loyaltydog.ai/playground#mcp).\n    ","termsOfService":"https://loyalty.dog/loyalty-program-terms-service","contact":{"name":"LoyaltyDog Support","url":"https://loyalty.dog/contact-us","email":"support@loyalty.dog"},"version":"1.0.1"},"servers":[{"url":"https://api.loyalty.dog","description":"Production"}],"paths":{"/v2/admin/breaches":{"post":{"tags":["Admin","GDPR"],"summary":"Create Breach Incident","description":"Record a new GDPR Article 33 breach incident. Sets a 72-hour ICO notification deadline.","operationId":"create_breach_incident_v2_admin_breaches_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBreachPayload"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/admin/breaches/{breachId}":{"patch":{"tags":["Admin","GDPR"],"summary":"Update Breach Incident","description":"Update a breach incident. Recomputes risk level when affected records or categories change.","operationId":"update_breach_incident_v2_admin_breaches__breachId__patch","parameters":[{"name":"breachId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBreachPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/admin/breaches/{breachId}/notify-authority":{"post":{"tags":["Admin","GDPR"],"summary":"Record Authority Notification","description":"Record that the ICO/supervisory authority has been notified (manual step).","operationId":"record_authority_notification_v2_admin_breaches__breachId__notify_authority_post","parameters":[{"name":"breachId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/token":{"post":{"tags":["Token"],"summary":"Login For Access Token","description":"Authenticate a user and issue a JWT access token based on valid credentials.\n\n### Parameters:\n- `form_data` (OAuth2PasswordRequestForm): The form data containing the username and password.\n\n### Returns:\n- `OAuth2Token`: An object containing the access token and token type for the authenticated user.","operationId":"login_for_access_token_v2_token_post","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_for_access_token_v2_token_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuth2Token"}}}},"401":{"description":"Invalid authentication credentials."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]},"get":{"tags":["Token"],"summary":"Get Token Info","description":"Retrieve user information associated with the current access token.\n\n### Parameters:\n- `current_user` (User): The user instance obtained from the current access token.\n\n### Returns:\n- `UserRead`: The serialized user data.","operationId":"get_token_info_v2_token_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRead"}}}},"401":{"description":"Missing token or inactive user."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/appkeys":{"post":{"tags":["Token"],"summary":"Create App Key","description":"Create an application-specific key for accessing other APIs.\n\n### Parameters:\n- `user` (User): The user instance for whom the app key is being created.\n- `data` (AppKeyCreate, optional): The data containing the name, full access rights, and optional expiration.\n\n### Returns:\n- `dict`: A dictionary containing the app key's ID, token, and expiration date.","operationId":"create_app_key_v2_appkeys_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AppKeyCreate"},{"type":"null"}],"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/token/logout":{"post":{"tags":["Token"],"summary":"Logout","description":"Revoke the current session token. Subsequent requests with this token return 401.","operationId":"logout_v2_token_logout_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/token/mfa/status":{"get":{"tags":["Token"],"summary":"Mfa Status","description":"Return whether MFA is enrolled for the current user.","operationId":"mfa_status_v2_token_mfa_status_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/token/mfa/setup":{"post":{"tags":["Token"],"summary":"Setup Mfa","description":"Generate a TOTP secret and return the provisioning URI. Call verify-setup to complete enrollment.","operationId":"setup_mfa_v2_token_mfa_setup_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaSetupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/token/mfa/verify-setup":{"post":{"tags":["Token"],"summary":"Verify Mfa Setup","description":"Verify the first TOTP code to confirm enrollment and enable MFA on the account.","operationId":"verify_mfa_setup_v2_token_mfa_verify_setup_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaCodeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/token/mfa/disable":{"post":{"tags":["Token"],"summary":"Disable Mfa","description":"Disable MFA. Requires a valid TOTP code to confirm intent.","operationId":"disable_mfa_v2_token_mfa_disable_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaCodeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/token/mfa-verify":{"post":{"tags":["Token"],"summary":"Verify Mfa Login","description":"Complete the MFA login challenge. Returns a full JWT with mfa_verified=True.","operationId":"verify_mfa_login_v2_token_mfa_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaLoginVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuth2Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/v2/loyalty/programs":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Programs","description":"### List Loyalty Programs\n\nRetrieve a list of all loyalty programs associated with the current user.\n\n- **Returns**: A list of loyalty programs in a simplified format.","operationId":"get_loyalty_programs_v2_loyalty_programs_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BasicProgramRead"},"title":"Response Get Loyalty Programs V2 Loyalty Programs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/programs":{"post":{"tags":["Loyalty"],"summary":"Create Loyalty Program","description":"Create a new loyalty program.\n\n### Args:\n- `data`: Payload to create the program.\n- `user`: The user creating the program, derived from the current session.\n\n### Returns:\n- JSON response with the created program details or an error message.","operationId":"create_loyalty_program_v2_programs_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProgramPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Details","description":"### Get Loyalty Program Details\n\nFetch detailed information about a specific loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **Returns**: Detailed information of the specified loyalty program.","operationId":"get_loyalty_program_details_v2_loyalty_programs__programId__get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Loyalty"],"summary":"Update Loyalty Program Details","description":"### Update Program\n\nUpdate the details of a specific loyalty program based on provided data.\n\n- **programId**: The unique identifier of the loyalty program.\n- **data**: A dictionary containing the fields to update.\n- **Returns**: The updated program details.","operationId":"update_loyalty_program_details_v2_loyalty_programs__programId__put","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProgramPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customFields":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Custom Fields","description":"### Get Loyalty Program Custom Fields\n\nRetrieve custom fields defined for a specific loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **Returns**: A list of custom fields associated with the program.","operationId":"get_loyalty_program_custom_fields_v2_loyalty_programs__programId__customFields_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Loyalty"],"summary":"Update Loyalty Program Custom Fields","description":"### Update Loyalty Program Custom Fields\n\nModify or replace the custom fields for a specific loyalty program.\n\n- **customFields**: A list of new custom fields to be applied.\n- **programId**: The unique identifier of the loyalty program.\n- **Returns**: A list of updated custom fields.","operationId":"update_loyalty_program_custom_fields_v2_loyalty_programs__programId__customFields_put","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TemplatePlaceholder"},"title":"Customfields"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/icon":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Icon","description":"### Get Loyalty Program Icon\n\nRetrieve the icon image associated with a specific loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **Returns**: The icon image data.","operationId":"get_loyalty_program_icon_v2_loyalty_programs__programId__icon_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Loyalty"],"summary":"Update Loyalty Program Icon","description":"### Update Icon\n\nUpdate the icon image for a specific loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **user**: The current active user making the request.\n- **image**: The new image file to be uploaded.\n- **crop**: Optional cropping instructions.\n- **Returns**: The updated icon image data.","operationId":"update_loyalty_program_icon_v2_loyalty_programs__programId__icon_put","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_update_loyalty_program_icon_v2_loyalty_programs__programId__icon_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/passtype":{"put":{"tags":["Loyalty"],"summary":"Change Loyalty Program Pass Type","description":"### Change Pass Type\n\nUpdate the pass type associated with a specific loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **passType**: The new pass type to be applied.\n- **Returns**: A response indicating the success of the operation.","operationId":"change_loyalty_program_pass_type_v2_loyalty_programs__programId__passtype_put","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_change_loyalty_program_pass_type_v2_loyalty_programs__programId__passtype_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/card":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Card","description":"### Get Loyalty Program Card\n\nRetrieve the card details associated with a specific loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **Returns**: The card details as a dictionary.","operationId":"get_loyalty_program_card_v2_loyalty_programs__programId__card_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Loyalty"],"summary":"Update Loyalty Program Card","description":"### Update Card\n\nModify the card details for a specific loyalty program based on provided data.\n\n- **programId**: The unique identifier of the loyalty program.\n- **data**: The new card details to be applied.\n- **Returns**: The updated card details.","operationId":"update_loyalty_program_card_v2_loyalty_programs__programId__card_put","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePass"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/card/images":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Card Images","description":"### Get Loyalty Program Card Images\n\nRetrieve all card images associated with a specific loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **Returns**: A list of card images as dictionaries.","operationId":"get_loyalty_program_card_images_v2_loyalty_programs__programId__card_images_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/card/images/{type}":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Card Image","description":"### Get Loyalty Program Card Image\n\nFetch a specific type of card image for a loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **type**: The specific type of card image to retrieve.\n- **Returns**: The requested card image as a dictionary.","operationId":"get_loyalty_program_card_image_v2_loyalty_programs__programId__card_images__type__get","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Loyalty"],"summary":"Update Loyalty Program Card Image","description":"### Update Card Image\n\nCreate or update a specific type of card image for a loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **type**: The type of card image to update.\n- **image**: The new image file to be uploaded.\n- **Returns**: The updated card image data.","operationId":"update_loyalty_program_card_image_v2_loyalty_programs__programId__card_images__type__post","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_update_loyalty_program_card_image_v2_loyalty_programs__programId__card_images__type__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Loyalty"],"summary":"Delete Loyalty Program Card Image","description":"### Delete Card Image\n\nRemove a specific type of card image from a loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **type**: The type of card image to delete.\n- **Returns**: A response indicating the success of the operation.","operationId":"delete_loyalty_program_card_image_v2_loyalty_programs__programId__card_images__type__delete","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/offers":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Offers","description":"### Get Loyalty Program Offers\n\nRetrieve a list of offers associated with a specific loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **Returns**: A list of offers in a simplified format.","operationId":"get_loyalty_program_offers_v2_loyalty_programs__programId__offers_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Loyalty"],"summary":"Create Loyalty Program Offer","description":"### Create Offer\n\nCreate a new offer within a specific loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **data**: The data for the new offer.\n- **user**: The current active user making the request.\n- **Returns**: The details of the newly created offer.","operationId":"create_loyalty_program_offer_v2_loyalty_programs__programId__offers_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOfferPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/offers/{offerId}":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Offer","description":"### Get Loyalty Program Offer\n\nRetrieves the details of a specific offer within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `offerId`: UUID of the offer\n\n- **Returns**:\n    - Offer details as a JSON object.","operationId":"get_loyalty_program_offer_v2_loyalty_programs__programId__offers__offerId__get","parameters":[{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Loyalty"],"summary":"Update Loyalty Program Offer","description":"### Update Offer\n\nUpdates an existing offer within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `offerId`: UUID of the offer\n\n- **Request Body**:\n    - `data`: JSON object containing offer data to be updated.\n\n- **Returns**:\n    - Updated offer details as a JSON object.","operationId":"update_loyalty_program_offer_v2_loyalty_programs__programId__offers__offerId__put","parameters":[{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOfferPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Loyalty"],"summary":"Delete Loyalty Program Offer","description":"### Delete Offer\n\nDeletes an offer from a loyalty program. Only offers in 'DRAFT' status can be deleted.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `offerId`: UUID of the offer\n\n- **Returns**:\n    - HTTP 200 OK if successful, or an error message if conditions are not met.","operationId":"delete_loyalty_program_offer_v2_loyalty_programs__programId__offers__offerId__delete","parameters":[{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/offers/{offerId}/publish":{"post":{"tags":["Loyalty"],"summary":"Publish Loyalty Program Offer","description":"### Publish Offer\n\nChanges the status of an offer to 'LIVE' or 'SCHEDULED' based on the start date.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `offerId`: UUID of the offer\n\n- **Returns**:\n    - Offer details as a JSON object after status update.","operationId":"publish_loyalty_program_offer_v2_loyalty_programs__programId__offers__offerId__publish_post","parameters":[{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/offers/{offerId}/cancel":{"post":{"tags":["Loyalty"],"summary":"Cancel Loyalty Program Offer","description":"### Cancel Offer\n\nCancels an offer within a loyalty program. Only offers in 'DRAFT' or 'LIVE' status can be canceled.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `offerId`: UUID of the offer\n\n- **Returns**:\n    - Offer details as a JSON object after status update.","operationId":"cancel_loyalty_program_offer_v2_loyalty_programs__programId__offers__offerId__cancel_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/offers/{offerId}/duplicate":{"post":{"tags":["Loyalty"],"summary":"Duplicate Loyalty Program Offer","description":"### Duplicate Offer\n\nCreates a duplicate of an existing offer within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n\n- **Request Body**:\n    - `data`: JSON object containing the new offer data.\n\n- **Returns**:\n    - Details of the duplicated offer as a JSON object.","operationId":"duplicate_loyalty_program_offer_v2_loyalty_programs__programId__offers__offerId__duplicate_post","parameters":[{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOfferPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/offers/{offerId}/card":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Offer Card","description":"### Get Loyalty Program Offer Card\n\nRetrieves the card details associated with a specific offer within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `offerId`: UUID of the offer\n\n- **Returns**:\n    - Card details as a JSON object.","operationId":"get_loyalty_program_offer_card_v2_loyalty_programs__programId__offers__offerId__card_get","parameters":[{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Loyalty"],"summary":"Update Loyalty Program Offer Card","description":"### Update Offer Card\n\nUpdates the card details of a specific offer within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `offerId`: UUID of the offer\n\n- **Request Body**:\n    - `data`: JSON object containing the new card data.\n\n- **Returns**:\n    - Updated card details as a JSON object.","operationId":"update_loyalty_program_offer_card_v2_loyalty_programs__programId__offers__offerId__card_put","parameters":[{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePass"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/offers/{offerId}/card/images":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Offer Images","description":"### Get Loyalty Program Offer Images\n\nRetrieves all card images associated with a specific offer within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `offerId`: UUID of the offer\n\n- **Returns**:\n    - List of card images as JSON objects.","operationId":"get_loyalty_program_offer_images_v2_loyalty_programs__programId__offers__offerId__card_images_get","parameters":[{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/offers/{offerId}/card/images/{type}":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Offer Card Image","description":"### Get Loyalty Program Offer Card Image\n\nRetrieves a specific type of card image associated with an offer within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `offerId`: UUID of the offer\n    - `type`: Type of the card image (e.g., 'thumbnail', 'banner')\n\n- **Returns**:\n    - Card image details as a JSON object, or an error message if not found.","operationId":"get_loyalty_program_offer_card_image_v2_loyalty_programs__programId__offers__offerId__card_images__type__get","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Loyalty"],"summary":"Create Or Update Loyalty Program Offer Card Image","description":"### Create or Update Card Offer Image\n\nUpdates or creates a new card image for a specific offer within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `offerId`: UUID of the offer\n    - `type`: Type of the card image (e.g., 'thumbnail', 'banner')\n\n- **Request Body**:\n    - `image`: Image file to be uploaded.\n\n- **Returns**:\n    - Updated or new card image details as a JSON object, or an error message if the image is invalid.","operationId":"create_or_update_loyalty_program_offer_card_image_v2_loyalty_programs__programId__offers__offerId__card_images__type__post","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_or_update_loyalty_program_offer_card_image_v2_loyalty_programs__programId__offers__offerId__card_images__type__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Loyalty"],"summary":"Delete Loyalty Program Offer Card Image","description":"### Delete Card Offer Image\n\nDeletes a specific type of card image associated with an offer within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `offerId`: UUID of the offer\n    - `type`: Type of the card image to be deleted (e.g., 'thumbnail', 'banner')\n\n- **Returns**:\n    - HTTP 200 OK on successful deletion.","operationId":"delete_loyalty_program_offer_card_image_v2_loyalty_programs__programId__offers__offerId__card_images__type__delete","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Customers","description":"### List Loyalty Program Customers\n\nRetrieves a list of customers associated with a specific loyalty program.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program\n\n**Query Parameters**:\n- `phone`: Filter by customer's phone number (optional)\n- `email`: Filter by customer's email (optional)\n- `pid`: Filter by personal identifier (optional)\n- `pidNumber`: Filter by personal identifier number (optional)\n- `includeTotal`: Include total member count in response (default: false)\n\n**Returns**:\n- By default: A list of customer details as JSON objects.\n- If includeTotal=true: An object with `customers` array and `total` count.","operationId":"get_loyalty_program_customers_v2_loyalty_programs__programId__customers_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"phone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"pid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pid"}},{"name":"pidNumber","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pidnumber"}},{"name":"orderBy","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Orderby"}},{"name":"byName","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Byname"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Loyalty"],"summary":"Create Loyalty Program Customer","description":"### Create Loyalty Program Customer\n\nCreates a new customer within a loyalty program.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program\n\n**Request Body**:\n- `data`: Customer data to be added\n\n**Returns**:\n- Customer details as a JSON object on successful creation.\n- HTTP 404 Not Found if the program template is not found.","operationId":"create_loyalty_program_customer_v2_loyalty_programs__programId__customers_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomerPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers/push":{"post":{"tags":["Loyalty"],"summary":"Post Loyalty Program Customers Push","description":"### Send Push Message to All Customers\n\nSends a push notification to all customers associated with a specific loyalty program.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program\n\n**Request Body**:\n- `message`: The message content to send (optional)\n\n**Note**:\n- Excessive usage of push notifications can lead to rate limiting or blocking of your cards.\n\n**Returns**:\n- HTTP 200 OK on successful delivery.","operationId":"post_loyalty_program_customers_push_v2_loyalty_programs__programId__customers_push_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_post_loyalty_program_customers_push_v2_loyalty_programs__programId__customers_push_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers/{customerId}":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Customer","description":"### Get Loyalty Program Customer\n\nRetrieves details of a specific customer within a loyalty program.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program\n- `customerId`: UUID of the customer\n\n**Returns**:\n- Customer details as a JSON object.","operationId":"get_loyalty_program_customer_v2_loyalty_programs__programId__customers__customerId__get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Loyalty"],"summary":"Update Loyalty Program Customer","description":"### Update Loyalty Program Customer\n\nUpdates details of a specific customer within a loyalty program.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program\n- `customerId`: UUID of the customer\n\n**Request Body**:\n- `data`: Updated customer data\n\n**Returns**:\n- Updated customer details as a JSON object.","operationId":"update_loyalty_program_customer_v2_loyalty_programs__programId__customers__customerId__put","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomerPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Loyalty"],"summary":"Delete Loyalty Program Customer","description":"### Delete Loyalty Program Customer\n\nSoft-deletes a customer from a loyalty program. The customer document is retained\nfor the GDPR retention period (30 days) before being hard-deleted by the background\nprocessor (SWE-376). Related operational data (pass, events) is cleaned up immediately.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program\n- `customerId`: UUID of the customer\n\n**Returns**:\n- HTTP 202 Accepted with a deletion timeline (`softDeletedAt`, `hardDeleteAfter`, `status`).","operationId":"delete_loyalty_program_customer_v2_loyalty_programs__programId__customers__customerId__delete","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers/{customerId}/points/reserved":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Customer Reserved Points","description":"### Get Loyalty Program Customer Reserved and Available Points\nRetrieves the total reserved and available points for a specific customer within a loyalty program.\n**Path Parameters**:\n- `programId`: UUID of the loyalty program\n- `customerId`: UUID of the customer\n**Returns**:\n- A JSON object containing reservedPoints and availablePoints.","operationId":"get_loyalty_program_customer_reserved_points_v2_loyalty_programs__programId__customers__customerId__points_reserved_get","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers/{customerId}/push":{"post":{"tags":["Loyalty"],"summary":"Post Loyalty Program Customer Push","description":"### Send Push Notification to a Customer\n\nSends a push notification to a specific customer's installed pass.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program\n- `customerId`: UUID of the customer\n\n**Request Body**:\n- `message`: The message content to send (optional)\n\n**Note**:\n- Excessive usage of push notifications can lead to rate limiting or blocking of your cards.\n\n**Returns**:\n- HTTP 200 OK on successful delivery.","operationId":"post_loyalty_program_customer_push_v2_loyalty_programs__programId__customers__customerId__push_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_post_loyalty_program_customer_push_v2_loyalty_programs__programId__customers__customerId__push_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers/{customerId}/points/add":{"post":{"tags":["Loyalty"],"summary":"Update Loyalty Program Customer Points","description":"### Add Reward Points to Customer Account\n\nAdds a specified number of reward points to a customer's account within a loyalty program.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program\n- `customerId`: UUID of the customer\n\n**Request Body**:\n- `points`: Number of points to add\n\n**Returns**:\n- Updated customer details with new points total as a JSON object.","operationId":"update_loyalty_program_customer_points_v2_loyalty_programs__programId__customers__customerId__points_add_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_loyalty_program_customer_points_v2_loyalty_programs__programId__customers__customerId__points_add_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers/{customerId}/offers":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Customer Offers","description":"### List Available Offers for Customer\n\nLists all available offers for a specific customer within a loyalty program.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program\n- `customerId`: UUID of the customer\n\n**Returns**:\n- A list of available offers as JSON objects.","operationId":"get_loyalty_program_customer_offers_v2_loyalty_programs__programId__customers__customerId__offers_get","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers/{customerId}/offers/{offerId}/claim":{"post":{"tags":["Loyalty"],"summary":"Claim Loyalty Program Customer Offer","description":"### Claim an Offer for Customer\n\nAllows a customer to claim an offer if they meet the necessary conditions.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program\n- `customerId`: UUID of the customer\n- `offerId`: UUID of the offer\n\n**Returns**:\n- HTTP 200 OK on successful claim.\n- HTTP 422 Unprocessable Entity if conditions are not met.","operationId":"claim_loyalty_program_customer_offer_v2_loyalty_programs__programId__customers__customerId__offers__offerId__claim_post","parameters":[{"name":"offerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Offerid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers/{customerId}/offers/current/redeem":{"post":{"tags":["Loyalty"],"summary":"Redeem Loyalty Program Customer Offer","description":"### Redeem Current Offer for Customer\n\nRedeems the current offer for a customer within a loyalty program.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program\n- `customerId`: UUID of the customer\n\n**Returns**:\n- HTTP 200 OK on successful redemption.","operationId":"redeem_loyalty_program_customer_offer_v2_loyalty_programs__programId__customers__customerId__offers_current_redeem_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers/{customerId}/activities":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Customer Activities","description":"### Get Loyalty Program Activities of Customer\n\nRetrieve a list of activities associated with a specific loyalty customer.\n\n- **programId**: The unique identifier of the loyalty program.\n- **Returns**: A list of activities in a simplified format.","operationId":"get_loyalty_program_customer_activities_v2_loyalty_programs__programId__customers__customerId__activities_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"End"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers/{customerId}/transactions":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Customer Transactions","description":"### Get Loyalty Program Transactions of Customer\n\nRetrieve a list of transactions associated with a specific loyalty customer.\n\n- **programId**: The unique identifier of the loyalty program.\n- **customerId**: The unique identifier of the loyalty customer.\n- **raw**: Include raw provider-specific data (default: false)\n- **enriched**: Include human-readable customer and product details (default: false)\n- **Returns**: A list of transactions in a simplified format.","operationId":"get_loyalty_program_customer_transactions_v2_loyalty_programs__programId__customers__customerId__transactions_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"raw","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Raw"}},{"name":"enriched","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enriched"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"End"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers/{customerId}/export":{"get":{"tags":["Loyalty"],"summary":"Export Loyalty Program Customer Data","description":"### Export Customer Data (DSAR — SWE-362)\n\nReturns all personal data held for a specific customer: identity, loyalty state,\nconsent records, and activity history. Use to fulfill GDPR Data Subject Access Requests.\n\nSupports `format=json` (default) and `format=csv`.","operationId":"export_loyalty_program_customer_data_v2_loyalty_programs__programId__customers__customerId__export_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"format","in":"query","required":false,"schema":{"enum":["json","csv"],"type":"string","default":"json","title":"Format"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/activities":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Activities","description":"### Get Loyalty Program Activities\n\nRetrieve a list of activities associated with a specific loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **Returns**: A list of activities in a simplified format.","operationId":"get_loyalty_program_activities_v2_loyalty_programs__programId__activities_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"End"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/transactions":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Transactions","description":"### Get Loyalty Program Transactions\n\nRetrieve a list of transactions associated with a specific loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **raw**: Include raw provider-specific data (default: false)\n- **enriched**: Include human-readable customer and product details (default: false)\n- **Returns**: A list of transactions in a simplified format.","operationId":"get_loyalty_program_transactions_v2_loyalty_programs__programId__transactions_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"raw","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Raw"}},{"name":"enriched","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enriched"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"End"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/vouchers":{"post":{"tags":["Loyalty"],"summary":"Create Loyalty Program Voucher","description":"### Create Voucher\n\nCreate a new voucher within a specific loyalty program.\n\n- **programId**: The unique identifier of the loyalty program.\n- **data**: The data for the new voucher.\n- **user**: The current active user making the request.\n- **Returns**: The details of the newly created voucher.","operationId":"create_loyalty_program_voucher_v2_loyalty_programs__programId__vouchers_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVoucherPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/vouchers/{voucherId}":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Voucher","description":"### Get Loyalty Program Voucher\n\nRetrieves the details of a specific voucher within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `voucherId`: UUID of the voucher\n\n- **Returns**:\n    - Voucher details as a JSON object.","operationId":"get_loyalty_program_voucher_v2_loyalty_programs__programId__vouchers__voucherId__get","parameters":[{"name":"voucherId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Voucherid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Loyalty"],"summary":"Update Loyalty Program Voucher","description":"### Update Voucher\n\nUpdates an existing voucher within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `voucherId`: UUID of the voucher\n\n- **Request Body**:\n    - `data`: JSON object containing voucher data to be updated.\n\n- **Returns**:\n    - Updated voucher details as a JSON object.","operationId":"update_loyalty_program_voucher_v2_loyalty_programs__programId__vouchers__voucherId__put","parameters":[{"name":"voucherId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Voucherid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVoucherPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Loyalty"],"summary":"Delete Loyalty Program Voucher","description":"### Delete Voucher\n\nDeletes an voucher from a loyalty program. Only vouchers in 'DRAFT' status can be deleted.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `voucherId`: UUID of the voucher\n\n- **Returns**:\n    - HTTP 200 OK if successful, or an error message if conditions are not met.","operationId":"delete_loyalty_program_voucher_v2_loyalty_programs__programId__vouchers__voucherId__delete","parameters":[{"name":"voucherId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Voucherid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/vouchers/{voucherId}/publish":{"post":{"tags":["Loyalty"],"summary":"Publish Loyalty Program Voucher","description":"### Publish Voucher\n\nChanges the status of an voucher to 'LIVE' or 'SCHEDULED' based on the start date.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `voucherId`: UUID of the voucher\n\n- **Returns**:\n    - Voucher details as a JSON object after status update.","operationId":"publish_loyalty_program_voucher_v2_loyalty_programs__programId__vouchers__voucherId__publish_post","parameters":[{"name":"voucherId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Voucherid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/vouchers/{voucherId}/cancel":{"post":{"tags":["Loyalty"],"summary":"Cancel Loyalty Program Voucher","description":"### Cancel Voucher\n\nCancels an voucher within a loyalty program. Only vouchers in 'DRAFT' or 'LIVE' status can be canceled.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `voucherId`: UUID of the voucher\n\n- **Returns**:\n    - Voucher details as a JSON object after status update.","operationId":"cancel_loyalty_program_voucher_v2_loyalty_programs__programId__vouchers__voucherId__cancel_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"voucherId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Voucherid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/vouchers/{voucherId}/issue":{"post":{"tags":["Loyalty"],"summary":"Publish Loyalty Program Voucher","operationId":"publish_loyalty_program_voucher_v2_loyalty_programs__programId__vouchers__voucherId__issue_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"voucherId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Voucherid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_publish_loyalty_program_voucher_v2_loyalty_programs__programId__vouchers__voucherId__issue_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/vouchers/{voucherId}/card":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Voucher Card","description":"### Get Loyalty Program Voucher Card\n\nRetrieves the card details associated with a specific voucher within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `voucherId`: UUID of the voucher\n\n- **Returns**:\n    - Card details as a JSON object.","operationId":"get_loyalty_program_voucher_card_v2_loyalty_programs__programId__vouchers__voucherId__card_get","parameters":[{"name":"voucherId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Voucherid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Loyalty"],"summary":"Update Loyalty Program Voucher Card","description":"### Update Voucher Card\n\nUpdates the card details of a specific voucher within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `voucherId`: UUID of the voucher\n\n- **Request Body**:\n    - `data`: JSON object containing the new card data.\n\n- **Returns**:\n    - Updated card details as a JSON object.","operationId":"update_loyalty_program_voucher_card_v2_loyalty_programs__programId__vouchers__voucherId__card_put","parameters":[{"name":"voucherId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Voucherid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePass"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/vouchers/{voucherId}/card/images":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Voucher Images","description":"### Get Loyalty Program Voucher Images\n\nRetrieves all card images associated with a specific voucher within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `voucherId`: UUID of the voucher\n\n- **Returns**:\n    - List of card images as JSON objects.","operationId":"get_loyalty_program_voucher_images_v2_loyalty_programs__programId__vouchers__voucherId__card_images_get","parameters":[{"name":"voucherId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Voucherid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/vouchers/{voucherId}/card/images/{type}":{"get":{"tags":["Loyalty"],"summary":"Get Loyalty Program Voucher Card Image","description":"### Get Loyalty Program Voucher Card Image\n\nRetrieves a specific type of card image associated with an voucher within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `voucherId`: UUID of the voucher\n    - `type`: Type of the card image (e.g., 'thumbnail', 'banner')\n\n- **Returns**:\n    - Card image details as a JSON object, or an error message if not found.","operationId":"get_loyalty_program_voucher_card_image_v2_loyalty_programs__programId__vouchers__voucherId__card_images__type__get","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"voucherId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Voucherid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Loyalty"],"summary":"Create Or Update Loyalty Program Voucher Card Image","description":"### Create or Update Card Voucher Image\n\nUpdates or creates a new card image for a specific voucher within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `voucherId`: UUID of the voucher\n    - `type`: Type of the card image (e.g., 'thumbnail', 'banner')\n\n- **Request Body**:\n    - `image`: Image file to be uploaded.\n\n- **Returns**:\n    - Updated or new card image details as a JSON object, or an error message if the image is invalid.","operationId":"create_or_update_loyalty_program_voucher_card_image_v2_loyalty_programs__programId__vouchers__voucherId__card_images__type__post","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"voucherId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Voucherid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_or_update_loyalty_program_voucher_card_image_v2_loyalty_programs__programId__vouchers__voucherId__card_images__type__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Loyalty"],"summary":"Delete Loyalty Program Voucher Card Image","description":"### Delete Card Voucher Image\n\nDeletes a specific type of card image associated with an voucher within a loyalty program.\n\n- **Path Parameters**:\n    - `programId`: UUID of the loyalty program\n    - `voucherId`: UUID of the voucher\n    - `type`: Type of the card image to be deleted (e.g., 'thumbnail', 'banner')\n\n- **Returns**:\n    - HTTP 200 OK on successful deletion.","operationId":"delete_loyalty_program_voucher_card_image_v2_loyalty_programs__programId__vouchers__voucherId__card_images__type__delete","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"voucherId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Voucherid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/loyalty/programs/{programId}/customers/{customerId}/consents":{"post":{"tags":["Loyalty"],"summary":"Record Customer Consents","description":"### Record Customer Consents\n\nCreates an immutable consent record for each consent decision in the request.\nCaptures IP address and user-agent at the time of recording for evidentiary purposes.\n\nConsent records are append-only — each call adds new records; existing records\nare never modified. Use GET to retrieve the current state per consent type.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program (merchant)\n- `customerId`: UUID of the customer\n\n**Request Body**:\n- `consents`: List of consent decisions (`consentType`, `granted`, `method`)\n- `policyVersion`: Version of the policy document accepted\n\n**Returns**:\n- 201 Created with the list of newly created consent records.","operationId":"record_customer_consents_v2_loyalty_programs__programId__customers__customerId__consents_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordConsentsPayload"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Loyalty"],"summary":"Get Customer Consents","description":"### Get Current Customer Consent State\n\nReturns the most recent consent record for each consent type recorded for\nthis customer under this merchant. Types with no records are omitted.\n\n**Path Parameters**:\n- `programId`: UUID of the loyalty program (merchant)\n- `customerId`: UUID of the customer\n\n**Returns**:\n- List of the latest consent record per type, ordered by most recently recorded.","operationId":"get_customer_consents_v2_loyalty_programs__programId__customers__customerId__consents_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Programid"}},{"name":"customerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Customerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/dsar/requests":{"post":{"tags":["GDPR"],"summary":"Create Dsar Request","description":"### Create Data Subject Access Request\n\nInitiates a new Data Subject Access Request (DSAR). A verification token is\ngenerated and should be sent to the customer via email for identity verification.\nThe request includes a 30-day response deadline per GDPR Article 12.\n\n**Request Body**:\n- `customerId`: UUID of the customer requesting access\n- `requestType`: Type of request (access, deletion, portability, rectification)\n- `requestedBy`: Email address of the person making the request\n\n**Returns**:\n- 201 Created with the DSAR request details including deadline.","operationId":"create_dsar_request_v2_dsar_requests_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDSARRequestPayload"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DSARRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/dsar/requests/{dsarId}/verify":{"post":{"tags":["GDPR"],"summary":"Verify Dsar Request","description":"### Verify DSAR Request Identity\n\nVerifies customer identity using the token sent via email. Once verified,\ntriggers an async task to generate the data export and email it to the customer.\n\n**Path Parameters**:\n- `dsarId`: UUID of the DSAR request\n\n**Query Parameters**:\n- `token`: The verification token from the email\n\n**Returns**:\n- Confirmation that verification was successful and export generation started.","operationId":"verify_dsar_request_v2_dsar_requests__dsarId__verify_post","parameters":[{"name":"dsarId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DSARVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/dsar/requests/{dsarId}/status":{"get":{"tags":["GDPR"],"summary":"Get Dsar Status","description":"### Get DSAR Request Status\n\nRetrieves the current status of a DSAR request. Includes export file details\nif the request has been completed.\n\n**Path Parameters**:\n- `dsarId`: UUID of the DSAR request\n\n**Returns**:\n- DSAR status, deadline, and export details if available.","operationId":"get_dsar_status_v2_dsar_requests__dsarId__status_get","parameters":[{"name":"dsarId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DSARStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/merchants/{merchant_id}/metrics":{"get":{"tags":["Merchants"],"summary":"Get Merchant Metrics","description":"Get metrics for a merchant's loyalty program.\n\n### Args:\n- `merchant_id`: The ID of the merchant (program)\n- `period`: The time period for metrics (7d, 30d, 90d, custom)\n- `user`: The authenticated user\n\n### Returns:\n- MetricsResponse with program metrics and trends","operationId":"get_merchant_metrics_v2_merchants__merchant_id__metrics_get","parameters":[{"name":"merchant_id","in":"path","required":true,"schema":{"type":"string","title":"Merchant Id"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d|custom)$","default":"30d","title":"Period"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/merchants/{merchant_id}/metrics/chart":{"get":{"tags":["Merchants"],"summary":"Get Chart Data","description":"Get time-series chart data for performance visualization.\n\n### Args:\n- `merchant_id`: The ID of the merchant (program)\n- `metric`: The metric to chart (member_growth, redemptions, points_issued, engagement_rate)\n- `period`: The time period (7d, 30d, 90d, custom)\n- `user`: The authenticated user\n\n### Returns:\n- ChartDataResponse with daily data points and event markers","operationId":"get_chart_data_v2_merchants__merchant_id__metrics_chart_get","parameters":[{"name":"merchant_id","in":"path","required":true,"schema":{"type":"string","title":"Merchant Id"}},{"name":"metric","in":"query","required":false,"schema":{"type":"string","pattern":"^(member_growth|redemptions|points_issued|engagement_rate)$","default":"member_growth","title":"Metric"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d|custom)$","default":"30d","title":"Period"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/users/me/accept-terms":{"post":{"tags":["Merchants"],"summary":"Accept Terms","description":"### Record Merchant Terms Acceptance (SWE-361)\n\nRecord the merchant's explicit acceptance of ToS, DPA, and Privacy Policy.\nAll three must be accepted in a single call. Stores acceptance timestamps,\ndocument versions, and the client IP on the merchant's User record.\n\n**Request Body**:\n- `acceptTos`: Must be `true`\n- `acceptDpa`: Must be `true`\n- `acceptPrivacy`: Must be `true`\n- `tosVersion`: Version string of the Terms of Service accepted (e.g. \"1.0\")\n- `dpaVersion`: Version string of the Data Processing Agreement accepted\n- `privacyVersion`: Version string of the Privacy Policy accepted\n\n**Returns**: Timestamps at which each document was accepted.","operationId":"accept_terms_v2_users_me_accept_terms_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptTermsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptTermsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/admin/terms-versions":{"post":{"tags":["Admin","GDPR"],"summary":"Publish Terms Version","description":"Publish a new version of a legal document (admin only, SWE-380).\n\nCreating a new version will cause all users whose accepted version does not\nmatch to receive a 403 on protected routes until they re-accept.","operationId":"publish_terms_version_v2_admin_terms_versions_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishTermsVersionPayload"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/health":{"get":{"tags":["Gift Cards"],"summary":"Giftcardhealthcheck","description":"### Gift Card Service Health Check\n\nCheck the health status of the gift card service.\n\n**Returns**:\n- Health status information","operationId":"giftCardHealthCheck_v2_giftcards_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v2/giftcards/passes/{passSid}":{"get":{"tags":["Gift Cards"],"summary":"Getgiftcardbypasssid","description":"### Get Gift Card Info by Pass SID\n\nReturns lightweight gift card information for the pass linked to the given `passSid`.\nThis endpoint is used by the public pass page to determine if a pass is linked to a\ngift card and what state the card is in, so the appropriate UI screen can be shown.\n\n**No customer session is required** — only HMAC authentication from the ambassador.\n\n**Path Parameters**:\n- `passSid`: The SID of the wallet pass\n\n**Returns**:\n- `id`: Gift card MongoDB ObjectId\n- `programId`: The gift card program ID (required to call activate endpoint)\n- `status`: Current card status (pending / active / expired / etc.)\n- `lastFourDigits`: Last 4 digits of the card number\n- `initialValue`: Face value of the card\n- `balance`: Current balance\n- `expiresAt`: Card expiry datetime\n- `merchantName`: Name of the issuing merchant\n\n**Status Codes**:\n- 200: Gift card found\n- 404: No gift card linked to this pass SID","operationId":"getGiftCardByPassSid_v2_giftcards_passes__passSid__get","parameters":[{"name":"passSid","in":"path","required":true,"schema":{"type":"string","title":"Passsid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards":{"get":{"tags":["Gift Cards"],"summary":"Getgiftcards","operationId":"getGiftCards_v2_giftcards_programs__programId__cards_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"merchant_id","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Merchant Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/GiftCardStatus"},{"type":"null"}],"title":"Status"}},{"name":"positive_balance","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Positive Balance"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Gift Cards"],"summary":"Creategiftcard","description":"Create a new gift card in pending status with a generated card number and security code.\n\nValidates and sets the expiration (defaults to 1 year, must not exceed 5 years), sanitizes the provided custom message to prevent XSS, generates a unique 16-digit card number and a 6-digit security code, persists the card with a zero balance and the requested initialValue, and returns the persisted card representation.\n\nParameters:\n    data (CreateGiftCardRequest): Request payload containing initialValue, merchantId, optional customer fields, expiration, isPhysical, designTemplate, and customMessage.\n\nReturns:\n    GiftCardResponse: The newly created gift card data (status will be \"pending\"); the security code is stored but not returned.","operationId":"createGiftCard_v2_giftcards_programs__programId__cards_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGiftCardRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/cards":{"get":{"tags":["Gift Cards"],"summary":"Getgiftcards","operationId":"getGiftCards_v2_giftcards_programs_cards_get","parameters":[{"name":"merchant_id","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Merchant Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/GiftCardStatus"},{"type":"null"}],"title":"Status"}},{"name":"positive_balance","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Positive Balance"}},{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/search":{"get":{"tags":["Gift Cards"],"summary":"Searchgiftcards","description":"### Search Gift Cards\n\nSearch for gift cards by card number, last four digits, customer name, or customer email.","operationId":"searchGiftCards_v2_giftcards_programs__programId__search_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"merchant_id","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Merchant Id"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/search":{"get":{"tags":["Gift Cards"],"summary":"Searchgiftcards","description":"### Search Gift Cards\n\nSearch for gift cards by card number, last four digits, customer name, or customer email.","operationId":"searchGiftCards_v2_giftcards_programs_search_get","parameters":[{"name":"merchant_id","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Merchant Id"}},{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}":{"get":{"tags":["Gift Cards"],"summary":"Getgiftcarddetails","description":"### Get Gift Card Details\n\nRetrieves comprehensive details for a specific gift card including current balance,\nstatus, and optionally the complete transaction history.\n\n**Card Information**:\n- Current balance and initial value\n- Card status (pending, active, expired, voided, depleted)\n- Card number (16 digits) and last four digits\n- Customer information (email, name, ID)\n- Merchant identifier\n- Expiration and activation dates\n- Physical/digital card indicator\n- Design template and custom message\n\n**Business Rules**:\n- Card number is returned in full (security code is never exposed)\n- Status reflects current card state\n- Timestamps in UTC\n- Optional transaction history sorted newest first\n\n**Path Parameters**:\n- `programId`: MongoDB ObjectId of the loyalty program\n- `cardId`: MongoDB ObjectId of the gift card\n\n**Query Parameters**:\n- `include_transactions`: Include full transaction history (default: false)\n  - Use `?include_transactions=true` to include all transactions\n  - Transactions sorted by createdAt descending (newest first)\n\n**Returns**:\n- Gift card details object\n- Optional: transactions array if include_transactions=true\n\n**Response Example (without transactions)**:\n```json\n{\n    \"id\": \"507f191e810c19729de860ea\",\n    \"cardNumber\": \"4000123456789012\",\n    \"lastFourDigits\": \"9012\",\n    \"balance\": 100.00,\n    \"initialValue\": 100.00,\n    \"status\": \"active\",\n    \"createdAt\": \"2025-01-01T00:00:00Z\",\n    \"updatedAt\": \"2025-01-15T10:30:00Z\",\n    \"activatedAt\": \"2025-01-02T14:20:00Z\",\n    \"expiresAt\": \"2026-01-01T00:00:00Z\",\n    \"customerId\": \"customer_456\",\n    \"customerEmail\": \"customer@example.com\",\n    \"customerName\": \"John Doe\",\n    \"merchantId\": \"merchant_123\",\n    \"isPhysical\": false,\n    \"designTemplate\": \"birthday\",\n    \"customMessage\": \"Happy Birthday!\"\n}\n```\n\n**Response Example (with transactions)**:\n```json\n{\n    \"id\": \"507f191e810c19729de860ea\",\n    ...card details...,\n    \"transactions\": [\n        {\n            \"id\": \"507f1f77bcf86cd799439011\",\n            \"transactionType\": \"REDEMPTION\",\n            \"amount\": -25.50,\n            \"balanceBefore\": 100.00,\n            \"balanceAfter\": 74.50,\n            ...transaction details...\n        }\n    ]\n}\n```\n\n**Status Codes**:\n- 200: Gift card details retrieved successfully\n- 404: Gift card not found or doesn't belong to program\n- 401: Unauthorized","operationId":"getGiftCardDetails_v2_giftcards_programs__programId__cards__cardId__get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"include_transactions","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Transactions"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/schedule":{"patch":{"tags":["Gift Cards"],"summary":"Schedulegiftcarddelivery","operationId":"scheduleGiftCardDelivery_v2_giftcards_programs__programId__cards__cardId__schedule_patch","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleGiftCardDeliveryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/resend-code":{"post":{"tags":["Gift Cards"],"summary":"Resendgiftcardsecuritycode","description":"### Resend Security Code\n\nGenerates a new security code for the gift card and resends it via email or SMS.\nApplicable primarily to PENDING cards, allowing merchants to re-send the code if\nthe customer lost the email/SMS or needs a fresh code.","operationId":"resendGiftCardSecurityCode_v2_giftcards_programs__programId__cards__cardId__resend_code_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ResendSecurityCodeRequest"},{"type":"null"}],"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/activate":{"post":{"tags":["Gift Cards"],"summary":"Activategiftcard","description":"### Activate Gift Card\n\nActivates a pending gift card and loads the initial balance. Creates an ACTIVATION transaction\nfor audit trail.\n\n**Business Rules**:\n- Only PENDING cards can be activated\n- Card must not be expired\n- Balance is set to initialValue upon activation\n- Status changes from PENDING to ACTIVE\n- Customer information can be updated during activation\n- Activation creates a transaction record\n- Authenticated customer session is required\n\n**Path Parameters**:\n- `programId`: MongoDB ObjectId of the loyalty program\n- `cardId`: MongoDB ObjectId of the gift card\n\n**Request Body**:\n- `customerEmail`: Customer email (optional, updates card if provided)\n- `customerName`: Customer name (optional, updates card if provided)\n\n**Returns**:\n- Activated gift card details with updated balance and ACTIVE status\n- Includes activatedAt timestamp\n\n**Status Codes**:\n- 200: Gift card activated successfully\n- 400: Card cannot be activated (already active, expired, or invalid status)\n- 404: Gift card not found or doesn't belong to program\n- 409: Activation conflicted with concurrent update\n- 401: Unauthorized\n\n**Idempotency Scope**:\n- Idempotency keys are scoped to `programId + activate + cardId`\n- The same key may be reused for different cards or different gift card actions","operationId":"activateGiftCard_v2_giftcards_programs__programId__cards__cardId__activate_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateGiftCardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/reload":{"post":{"tags":["Gift Cards"],"summary":"Reloadgiftcard","description":"### Reload Gift Card\n\nAdds funds to an active gift card. Creates a RELOAD transaction for audit trail.\n\n**Business Rules**:\n- Only ACTIVE cards can be reloaded\n- Card must not be expired\n- Reload amount: $0.01 - $5,000 per transaction\n- Maximum card balance: $10,000\n- New balance = current balance + reload amount\n- Transaction includes before/after balance tracking\n\n**Path Parameters**:\n- `programId`: MongoDB ObjectId of the loyalty program\n- `cardId`: MongoDB ObjectId of the gift card\n\n**Request Body**:\n- `amount`: Amount to add ($0.01 - $5,000)\n- `referenceId`: External reference ID for tracking (optional)\n- `description`: Transaction description (optional, defaults to \"Gift card reload\")\n\n**Returns**:\n- Updated gift card details with new balance\n- Balance reflects immediately after reload\n\n**Status Codes**:\n- 200: Gift card reloaded successfully\n- 400: Cannot reload (inactive, expired, or would exceed max balance of $10,000)\n- 404: Gift card not found or doesn't belong to program\n- 401: Unauthorized\n\n**Error Response (Max Balance Exceeded)**:\n```json\n{\n    \"detail\": \"Reload would exceed maximum card balance\",\n    \"currentBalance\": 9500.00,\n    \"reloadAmount\": 1000.00,\n    \"maxBalance\": 10000.00,\n    \"availableReloadAmount\": 500.00\n}\n```\n\n**Idempotency Scope**:\n- Idempotency keys are scoped to `programId + reload + cardId`\n- The same key may be reused for different cards or different gift card actions","operationId":"reloadGiftCard_v2_giftcards_programs__programId__cards__cardId__reload_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReloadGiftCardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/reload-by-number":{"post":{"tags":["Gift Cards"],"summary":"Reloadgiftcardbynumber","description":"### Reload Gift Card by Card Number\n\nAllows topping up a gift card using the card number instead of the card ID.\nThis is useful for POS/cashier scenarios where the cashier types or scans\na card number rather than looking up the internal ID.\n\n**Business Rules**:\n- Same rules as the standard reload endpoint\n- Only ACTIVE cards can be reloaded\n- Card must not be expired\n- Reload amount: $0.01 - $5,000 per transaction\n- Maximum card balance: $10,000\n\n**Request Body**:\n- `cardNumber`: The full card number (up to 20 chars)\n- `amount`: Amount to add ($0.01 - $5,000)\n- `referenceId`: External reference ID for tracking (optional)\n- `description`: Transaction description (optional, defaults to \"Gift card reload\")\n\n**Status Codes**:\n- 200: Gift card reloaded successfully\n- 400: Cannot reload (inactive, expired, or would exceed max balance)\n- 404: Gift card not found","operationId":"reloadGiftCardByNumber_v2_giftcards_programs__programId__cards_reload_by_number_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReloadByCardNumberRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/redeem":{"post":{"tags":["Gift Cards"],"summary":"Redeemgiftcard","description":"Redeem a specified amount from an active, non-expired gift card and record a REDEMPTION transaction.\n\nPerforms an atomic balance deduction (prevents double-spend and race conditions), updates the card status to DEPLETED when balance reaches zero, and inserts a GiftCardTransaction recording the redemption.\n\nReturns:\n    RedeemResponse: Contains `transactionId`, `giftCardId`, `amountRedeemed`, `remainingBalance`, `success`, and `message`.\n\nIdempotency Scope:\n    Keys are scoped to `programId + redeem + cardId`.\n    The same key may be reused for different cards or different gift card actions.","operationId":"redeemGiftCard_v2_giftcards_programs__programId__cards__cardId__redeem_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemGiftCardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/transactions/{transactionId}/refund":{"post":{"tags":["Gift Cards"],"summary":"Refundgiftcardtransaction","operationId":"refundGiftCardTransaction_v2_giftcards_programs__programId__cards__cardId__transactions__transactionId__refund_post","parameters":[{"name":"transactionId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundGiftCardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/customer/balance-check":{"post":{"tags":["Gift Cards"],"summary":"Customercheckgiftcardbalance","description":"### Customer Balance Check (Cross-Program)\n\nAllows customers to check the balance of any gift card without needing to know\nthe programId. Searches across all programs by card number and security code.\n\nThis endpoint is designed for customer-facing applications where the customer\nmay have cards from multiple merchants/programs.\n\n**Security**:\n- Rate limited: 5 requests per minute per IP\n- Pattern detection for enumeration attacks\n- Card lockout after multiple failed attempts\n- Constant-time security code comparison\n\n**Request Body**:\n- `cardNumber`: The full 16-digit card number\n- `securityCode`: The 6-digit security code\n\n**Returns**:\n- Card balance, status, expiration, and activity status\n\n**Status Codes**:\n- 200: Balance retrieved successfully\n- 404: Card not found or invalid security code\n- 429: Rate limited or card locked","operationId":"customerCheckGiftCardBalance_v2_giftcards_customer_balance_check_post","parameters":[{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/v2/giftcards/programs/{programId}/balance-check":{"post":{"tags":["Gift Cards"],"summary":"Checkgiftcardbalance","description":"Authenticate the provided card number and security code, and return the card's balance and usability information.\n\nPerforms a constant-time security-code comparison and abuse/lockout checks before returning card details.\n\nReturns:\n    BalanceCheckResponse: Contains `cardNumber`, `lastFourDigits`, `balance`, `status`, `expiresAt`, and `isActive`.\n    On authentication failure or lockout the endpoint responds with an HTTP error (e.g., 404 for not found/invalid code, 429 for rate limiting or card lockout).","operationId":"checkGiftCardBalance_v2_giftcards_programs__programId__balance_check_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/v2/giftcards/programs/{programId}/consolidate":{"post":{"tags":["Gift Cards"],"summary":"Consolidategiftcards","description":"Consolidates multiple ACTIVE gift cards from the same program and customer into a single new active card with the combined balance.\n\nPerforms validation (2–10 unique cards, all ACTIVE, positive balances, same customer, total ≤ $10,000), acquires per-card locks to prevent concurrent modifications, creates a new card with a cryptographically generated number and security code, voids source cards (setting their balances to zero), and records consolidation transactions inside an atomic database transaction.\n\nReturns:\n    ConsolidateResponse: Details of the consolidation including `newCard` (the created gift card), `voidedCards` (IDs of source cards), `totalConsolidatedAmount`, `consolidationTransactions` (transaction IDs), and an informational `message`.\n\nIdempotency Scope:\n    Keys are scoped to `programId + consolidate + sorted source card ids`.\n    Reusing the same key for a different source-card set is treated as a fresh operation.","operationId":"consolidateGiftCards_v2_giftcards_programs__programId__consolidate_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidateGiftCardsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/transactions":{"get":{"tags":["Gift Cards"],"summary":"Getgiftcardtransactions","description":"### Get Gift Card Transaction History\n\nRetrieves paginated transaction history for a gift card with complete audit trail.\nTransactions include all card activities: activation, reloads, redemptions, and consolidations.\n\n**Transaction Types**:\n- ACTIVATION: Initial card activation and balance loading\n- RELOAD: Balance addition transactions\n- REDEMPTION: Balance deduction for purchases (negative amount)\n- CONSOLIDATION: Card consolidation (negative for voided cards, positive for new card)\n- VOID: Card voiding transactions\n- PURCHASE: Gift card purchase transactions\n- REFUND: Refund credit transactions\n\n**Business Rules**:\n- Returns transactions in reverse chronological order (newest first)\n- Includes before/after balance for each transaction\n- Contains optional POS reference data (transactionId, cashierId, terminalId)\n- Supports pagination for large transaction histories\n- All transactions immutable for audit compliance\n\n**Path Parameters**:\n- `programId`: MongoDB ObjectId of the loyalty program\n- `cardId`: MongoDB ObjectId of the gift card\n\n**Query Parameters**:\n- `limit`: Maximum number of transactions to return (1-100, default: 50)\n- `offset`: Number of transactions to skip for pagination (default: 0)\n\n**Returns**:\n- List of transaction objects ordered by createdAt (newest first)\n- Each transaction includes full details: type, amount, balances, timestamps, references\n\n**Transaction Response Fields**:\n```json\n{\n    \"id\": \"507f1f77bcf86cd799439011\",\n    \"transactionType\": \"REDEMPTION\",\n    \"amount\": -25.50,\n    \"balanceBefore\": 100.00,\n    \"balanceAfter\": 74.50,\n    \"referenceId\": \"ORDER_12345\",\n    \"description\": \"Purchase at Store #42\",\n    \"createdAt\": \"2025-01-15T10:30:00Z\",\n    \"processedAt\": \"2025-01-15T10:30:00Z\",\n    \"merchantId\": \"merchant_123\",\n    \"posTransactionId\": \"POS_TXN_789\",\n    \"cashierId\": \"cashier_001\",\n    \"terminalId\": \"terminal_A\"\n}\n```\n\n**Status Codes**:\n- 200: Transactions retrieved successfully (empty list if no transactions)\n- 404: Gift card not found or doesn't belong to program\n- 401: Unauthorized\n\n**Pagination Example**:\n- First page: `/giftcards/programs/{programId}/cards/{id}/transactions?limit=20&offset=0`\n- Second page: `/giftcards/programs/{programId}/cards/{id}/transactions?limit=20&offset=20`\n- Third page: `/giftcards/programs/{programId}/cards/{id}/transactions?limit=20&offset=40`","operationId":"getGiftCardTransactions_v2_giftcards_programs__programId__cards__cardId__transactions_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/transfer":{"post":{"tags":["Gift Cards"],"summary":"Transfergiftcardbalance","description":"### Transfer Balance Between Gift Cards\n\nMoves a specified amount from a source gift card to a destination gift card within the same program.\nThe source card's security code is required to authorise the transfer.\n\nBoth cards must be active and belong to the same program. A `TRANSFER_OUT` transaction is recorded\non the source card and a `TRANSFER_IN` transaction on the destination card.\n\n**Business Rules**:\n- Source and destination cards must be different\n- Both cards must have status `active`\n- Source card balance must be >= transfer amount\n- Destination card balance after transfer must not exceed £10,000.00\n- Source card security code must match (constant-time comparison)\n- Transfer depletes source card if resulting balance reaches zero\n\n**Status Codes**:\n- 200: Transfer completed successfully\n- 400: Invalid amount, insufficient balance, or cards not eligible\n- 401: Incorrect security code\n- 404: Source or destination card not found\n- 409: Card currently locked by another operation\n\n**Idempotency Scope**:\n- Idempotency keys are scoped to `programId + transfer + sourceCardId + destinationCardId`\n- The same key may be reused for different source/destination pairs or other gift card actions","operationId":"transferGiftCardBalance_v2_giftcards_programs__programId__cards__cardId__transfer_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferBalanceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferBalanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/transfer-ownership":{"post":{"tags":["Gift Cards"],"summary":"Transfergiftcardownership","description":"### Transfer Gift Card Ownership\n\nUpdates the cardholder details (name, email, optional customer ID) on an active gift card.\nIntended for merchant use when a card is gifted or resold to a new owner.\n\nAn `OWNERSHIP_TRANSFER` transaction is recorded for audit trail purposes.\n\n**Business Rules**:\n- Card must be active\n- New owner email must be a valid email address (validated by Pydantic `EmailStr`)\n- Name is sanitized to remove HTML/script content\n\n**Status Codes**:\n- 200: Ownership transferred successfully\n- 400: Card is not active\n- 404: Card not found\n- 401: Unauthorized","operationId":"transferGiftCardOwnership_v2_giftcards_programs__programId__cards__cardId__transfer_ownership_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferOwnershipRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/network/overview":{"get":{"tags":["Gift Cards"],"summary":"Getnetworkoverview","description":"### Network Overview\n\nReturns aggregate statistics across the entire gift card network (all programs\nand merchants). Intended for network-admin and reporting dashboards.\n\nGroups card counts and transaction volumes by merchant, and returns overall totals.\n\n**Status Codes**:\n- 200: Overview returned successfully\n- 401: Unauthorized\n- 403: Forbidden (caller is not a network admin)","operationId":"getNetworkOverview_v2_giftcards_network_overview_get","parameters":[{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkOverviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/reports/business":{"get":{"tags":["Gift Cards"],"summary":"Getbusinessreports","operationId":"getBusinessReports_v2_giftcards_programs__programId__reports_business_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/reports/expiration-warnings":{"get":{"tags":["Gift Cards"],"summary":"Getexpirationwarnings","operationId":"getExpirationWarnings_v2_giftcards_programs__programId__reports_expiration_warnings_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpirationWarningReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/void":{"post":{"tags":["Gift Cards"],"summary":"Voidgiftcard","operationId":"voidGiftCard_v2_giftcards_programs__programId__cards__cardId__void_post","parameters":[{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoidGiftCardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpiredCardProcessingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/suspend":{"post":{"tags":["Gift Cards"],"summary":"Suspendgiftcard","operationId":"suspendGiftCard_v2_giftcards_programs__programId__cards__cardId__suspend_post","parameters":[{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuspendGiftCardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/unsuspend":{"post":{"tags":["Gift Cards"],"summary":"Unsuspendgiftcard","operationId":"unsuspendGiftCard_v2_giftcards_programs__programId__cards__cardId__unsuspend_post","parameters":[{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsuspendGiftCardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/{cardId}/process-expired":{"post":{"tags":["Gift Cards"],"summary":"Processexpiredcard","operationId":"processExpiredCard_v2_giftcards_programs__programId__cards__cardId__process_expired_post","parameters":[{"name":"cardId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpiredCardProcessingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpiredCardProcessingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/compliance/aml":{"get":{"tags":["Gift Cards"],"summary":"Getamlalerts","operationId":"getAMLAlerts_v2_giftcards_programs__programId__compliance_aml_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"From Date"}},{"name":"to_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"To Date"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AMLReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/compliance/aml/{alertId}/acknowledge":{"post":{"tags":["Gift Cards"],"summary":"Acknowledgeamlalert","operationId":"acknowledgeAMLAlert_v2_giftcards_programs__programId__compliance_aml__alertId__acknowledge_post","parameters":[{"name":"alertId","in":"path","required":true,"schema":{"type":"string","title":"Alertid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AMLAcknowledgeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Acknowledgeamlalert V2 Giftcards Programs  Programid  Compliance Aml  Alertid  Acknowledge Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/gdpr/export":{"post":{"tags":["Gift Cards"],"summary":"Exportgiftcardcustomerdata","operationId":"exportGiftCardCustomerData_v2_giftcards_gdpr_export_post","parameters":[{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GDPRExportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GDPRExportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/gdpr/download":{"get":{"tags":["Gift Cards"],"summary":"Downloadgiftcardcustomerdata","operationId":"downloadGiftCardCustomerData_v2_giftcards_gdpr_download_get","parameters":[{"name":"exportId","in":"query","required":true,"schema":{"type":"string","title":"Exportid"}},{"name":"format","in":"query","required":true,"schema":{"type":"string","pattern":"^(json|csv)$","title":"Format"}},{"name":"customerId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customerid"}},{"name":"customerEmail","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customeremail"}},{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/gdpr/erasure":{"post":{"tags":["Gift Cards"],"summary":"Erasegiftcardcustomerdata","operationId":"eraseGiftCardCustomerData_v2_giftcards_gdpr_erasure_post","parameters":[{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RightToErasureRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RightToErasureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/gdpr/consent/lookup":{"get":{"tags":["Gift Cards"],"summary":"Getgiftcardconsentbyidentifier","description":"Look up GDPR consent by email, phone, or customer ID.\n\nUse this endpoint when searching by email or phone (no customerId needed).\nFor path-based lookup by customerId, use /gdpr/consent/{customerId}.","operationId":"getGiftCardConsentByIdentifier_v2_giftcards_gdpr_consent_lookup_get","parameters":[{"name":"customerId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customerid"}},{"name":"customerEmail","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customeremail"}},{"name":"customerPhone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customerphone"}},{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentRecordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/gdpr/consent/{customerId}":{"get":{"tags":["Gift Cards"],"summary":"Getgiftcardconsent","operationId":"getGiftCardConsent_v2_giftcards_gdpr_consent__customerId__get","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","title":"Customerid"}},{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentRecordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Gift Cards"],"summary":"Updategiftcardconsent","operationId":"updateGiftCardConsent_v2_giftcards_gdpr_consent__customerId__post","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","title":"Customerid"}},{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentRecordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/gdpr/consent":{"post":{"tags":["Gift Cards"],"summary":"Creategiftcardconsent","description":"Create or update GDPR consent for a customer identified by email or phone.\n\nUse this endpoint when saving consent without a known customerId.\nRequires customerEmail or customerPhone in the request body.","operationId":"createGiftCardConsent_v2_giftcards_gdpr_consent_post","parameters":[{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentRecordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/reports/escheatment":{"get":{"tags":["Gift Cards"],"summary":"Getescheatmentreport","operationId":"getEscheatmentReport_v2_giftcards_programs__programId__reports_escheatment_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"jurisdiction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jurisdiction"}},{"name":"dormancy_days","in":"query","required":false,"schema":{"type":"integer","maximum":3650,"minimum":1,"default":1095,"title":"Dormancy Days"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscheatmentReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/customer/reports":{"get":{"tags":["Gift Cards"],"summary":"Getcustomerreports","operationId":"getCustomerReports_v2_giftcards_customer_reports_get","parameters":[{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/customer/transactions":{"get":{"tags":["Gift Cards"],"summary":"Getcustomertransactions","description":"### Get All Customer Transactions\n\nReturns paginated transaction history across all gift cards belonging to the customer.","operationId":"getCustomerTransactions_v2_giftcards_customer_transactions_get","parameters":[{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TransactionResponse"},"title":"Response Getcustomertransactions V2 Giftcards Customer Transactions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/customer/consolidatable-merchants":{"get":{"tags":["Gift Cards"],"summary":"Getcustomerconsolidatablemerchants","description":"Get list of merchants and their number of active, positive-balance cards for a customer.","operationId":"getCustomerConsolidatableMerchants_v2_giftcards_customer_consolidatable_merchants_get","parameters":[{"name":"programId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConsolidatableMerchantResponse"},"title":"Response Getcustomerconsolidatablemerchants V2 Giftcards Customer Consolidatable Merchants Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/bulk":{"post":{"tags":["Gift Cards"],"summary":"Issue multiple gift cards","description":"### Bulk Issue Gift Cards\n\nIssues multiple gift cards in a single request. For counts up to the sync\nthreshold (`gift_card_bulk_issue_sync_threshold`, default 50) the cards are\ncreated synchronously and returned immediately. For larger batches the request\nis accepted asynchronously and a task ID is returned for polling.\n\n**Issuance modes**:\n- `count` (integer) — count-only: cards have no recipient data; a CSV download\n  link is returned so the merchant can distribute the numbers.\n- `recipients` (list) — per-recipient: each card is optionally pre-populated\n  with the given customer info and a notification is dispatched.\n\n**Path Parameters**:\n- `programId`: MongoDB ObjectId of the loyalty program\n\n**Request Body** (`BulkIssueGiftCardRequest`):\n- `initialValue`: Starting balance (0.01 – 10,000.00)\n- `isPhysical`: `true` for physical cards\n- `designTemplate`: Optional design-template slug\n- `expiresAt`: Optional explicit expiry; defaults to +365 days\n- `count` **or** `recipients`: Mutually exclusive\n\n**Response (sync ≤ threshold)**:\n- HTTP 201 with `BulkIssuanceSyncResponse`\n\n**Response (async > threshold)**:\n- HTTP 202 with `BulkIssuanceAsyncResponse` (`taskId`, `status`)\n\n**Idempotency**:\n- Pass `Idempotency-Key` header to make the request safely retryable.","operationId":"bulkIssueGiftCards_v2_giftcards_programs__programId__cards_bulk_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkIssueGiftCardRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/BulkIssuanceSyncResponse"},{"$ref":"#/components/schemas/BulkIssuanceAsyncResponse"}],"title":"Response Bulkissuegiftcards V2 Giftcards Programs  Programid  Cards Bulk Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/cards/bulk/{taskId}":{"get":{"tags":["Gift Cards"],"summary":"Poll async bulk issuance task","description":"### Poll Async Bulk Issuance\n\nReturns the current status of an async bulk gift-card issuance task.\n\n**Path Parameters**:\n- `programId`: MongoDB ObjectId of the loyalty program\n- `taskId`: Celery task ID returned by the bulk issuance POST\n\n**Response** (`BulkIssuanceTaskStatus`):\n- `status`: `\"pending\"` | `\"processing\"` | `\"completed\"` | `\"failed\"`\n- `issuedCount`, `cards`, `csvDownloadUrl` — populated when `status == \"completed\"`\n- `failedCount`, `error` — populated when `status == \"failed\"` or on partial failure","operationId":"pollBulkIssuance_v2_giftcards_programs__programId__cards_bulk__taskId__get","parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string","title":"Taskid"}},{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkIssuanceTaskStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/customers/otp/send":{"post":{"tags":["Gift Card Customers"],"summary":"Sendcustomerotp","description":"### Send OTP to Customer\n\nGenerate and send a one-time password to a customer's email or phone number.\nThe OTP is stored in Redis with a 5-minute expiry.\n\n**Rate Limiting**:\n- Maximum 5 requests per hour per target\n- Maximum 10 requests per day per target\n\n**Security**:\n- OTP codes are 6 digits, cryptographically secure\n- Codes expire after 5 minutes\n- Maximum 3 verification attempts per code\n- OTP codes are never returned in production (only in dev/test mode)\n\n**Request Body**:\n- `target`: Email address or phone number\n\n**Status Codes**:\n- 200: OTP sent successfully\n- 400: Invalid target format\n- 429: Rate limit exceeded","operationId":"sendCustomerOTP_v2_giftcards_customers_otp_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendOTPRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendOTPResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/customers/otp/verify":{"post":{"tags":["Gift Card Customers"],"summary":"Verifycustomerotp","description":"### Verify OTP and Login Customer\n\nVerify the OTP code sent to the customer's email or phone.\nOn success, finds or creates a GiftCardCustomer record and returns a session token.\n\n**Flow**:\n1. Verify the OTP code against Redis\n2. Find or create a GiftCardCustomer document in MongoDB\n3. Update customer's trust level and login metadata\n4. Create a Redis-backed session (24-hour TTL)\n5. Return session token and customer identity\n\n**Request Body**:\n- `target`: Email or phone the OTP was sent to\n- `code`: 6-digit OTP code\n- `name`: Optional customer name (used during first registration)\n\n**Status Codes**:\n- 200: OTP verified, session created\n- 400: Invalid code, expired, or too many attempts","operationId":"verifyCustomerOTP_v2_giftcards_customers_otp_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyOTPRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyOTPResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/customers/logout":{"post":{"tags":["Gift Card Customers"],"summary":"Logoutcustomer","description":"### Logout Customer\n\nInvalidate a customer's session token in Redis.\n\n**Request Body**:\n- `sessionToken`: The session token to invalidate\n\n**Status Codes**:\n- 200: Session invalidated (or already expired)","operationId":"logoutCustomer_v2_giftcards_customers_logout_post","parameters":[{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/customers/session":{"post":{"tags":["Gift Card Customers"],"summary":"Validatecustomersession","description":"### Validate Customer Session\n\nCheck if a customer session token is still valid and return the customer identity.\nUsed by the ambassador to verify customer authentication on protected routes.\n\n**Request Body**:\n- `sessionToken`: The session token to validate\n\n**Returns**:\n- `valid`: Whether the session is valid\n- `customer`: Customer identity if session is valid\n\n**Status Codes**:\n- 200: Session validation result returned","operationId":"validateCustomerSession_v2_giftcards_customers_session_post","parameters":[{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/merchants/session":{"post":{"tags":["Gift Card Merchants"],"summary":"Initmerchantsession","description":"### Init or Refresh Merchant Session\n\nCalled by eposn-giftcards immediately after resolving a valid platform token.\nLooks up the merchant by `(merchantId, platform)`.  If a record exists the\ninfo is updated; if not, a new `GiftCardMerchant` document is created.\n\nLocations are stored as embedded sub-documents.  If `locationId` is provided,\nthe matching location is upserted within the merchant document.\n\n`programId` is stored **per location** — if supplied it will update only the\nactive location's `programId`, not a merchant-level field.\n\n**Returns**:\n- Full merchant context including the active location's `programId` so callers\n  can build a session without an additional API round-trip.\n\n**Status Codes**:\n- 200: Merchant record created or updated successfully\n- 401: HMAC authentication failed","operationId":"initMerchantSession_v2_giftcards_merchants_session_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitMerchantSessionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/merchants/session/validate":{"post":{"tags":["Gift Card Merchants"],"summary":"Validatemerchantsession","description":"### Validate Merchant Session\n\nCheck if a merchant session token is still valid.","operationId":"validateMerchantSession_v2_giftcards_merchants_session_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateMerchantSessionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateMerchantSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/merchants/settings":{"put":{"tags":["Gift Card Merchants"],"summary":"Savemerchantsettings","description":"### Save Per-Location Merchant Settings\n\nSaves the `programId` for a specific merchant location.  Merchant identity\nis resolved from the validated `X-Eposn-Merchant-Token` session, so\nownership is checked by confirming the programme belongs to that user.\n\nValidation steps:\n1. Parse and look up the `programId` — must exist in the Programme collection.\n2. Confirm the programme type is ``GIFT_CARD``.\n3. Confirm the programme's ``userId`` matches the authenticated user.\n4. Upsert the `programId` onto the target location of the matching\n   ``GiftCardMerchant`` document (matched by ``merchantId == str(user.id)``).\n\n**Status Codes**:\n- 200: Settings saved successfully\n- 400: programId is invalid or wrong type\n- 401: Not authenticated\n- 403: Programme does not belong to this user\n- 404: Programme or merchant not found","operationId":"saveMerchantSettings_v2_giftcards_merchants_settings_put","parameters":[{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveMerchantSettingsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/merchants/theme":{"get":{"tags":["Gift Card Merchants"],"summary":"Getmerchanttheme","description":"Fetch the authenticated merchant's persisted portal theme.","operationId":"getMerchantTheme_v2_giftcards_merchants_theme_get","parameters":[{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantThemeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Gift Card Merchants"],"summary":"Savemerchanttheme","description":"Validate and persist the authenticated merchant's portal theme.","operationId":"saveMerchantTheme_v2_giftcards_merchants_theme_put","parameters":[{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftCardMerchantTheme"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveMerchantThemeResponse"}}}},"422":{"description":"Theme validation failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"$ref":"#/components/schemas/ThemeValidationIssue"}},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/ThemeValidationIssue"}}}}}}}}}},"/v2/giftcards/audit-logs":{"get":{"tags":["Audit Logs"],"summary":"Query Audit Logs","description":"### Query Audit Logs\n\nPaginated query of audit log entries. Scoped by the authenticated user's\nmerchant context. Supports filtering by:\n\n- `merchantId` — merchant identifier\n- `subjectId` — customer/subject identifier (exact)\n- `actorId` — the user who performed the action (exact)\n- `subjectName` — customer/subject name or email (partial, case-insensitive)\n- `actorName` — actor's name, email, or username (partial, case-insensitive)\n- `merchantName` — merchant program name (partial, case-insensitive)\n- `action` — one or more `AuditAction` values (e.g. `pii_access`, `login_failed`)\n- `resourceType` — one or more `AuditResourceType` values\n- `from` / `to` — ISO 8601 datetime range\n- `page` / `limit` — pagination (max 200 per page)\n\nMERCHANT_ADMIN and MERCHANT_STAFF can query. If `merchantId` is omitted,\ndefaults to the program ID from the authenticated session.","operationId":"query_audit_logs_v2_giftcards_audit_logs_get","parameters":[{"name":"merchantId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchantid"}},{"name":"subjectId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subjectid"}},{"name":"actorId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actorid"}},{"name":"subjectName","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subjectname"}},{"name":"actorName","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actorname"}},{"name":"merchantName","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchantname"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Action"}},{"name":"resourceType","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Resourcetype"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"To"}},{"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":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLogPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/audit-logs/export":{"post":{"tags":["Audit Logs"],"summary":"Export Audit Logs","description":"### Export Audit Logs (async bulk export)\n\nTriggers a background task to export audit log entries matching the given\nfilters as CSV or JSON. Only MERCHANT_ADMIN can trigger exports.\n\nReturns immediately with a `taskId`. Poll\n`GET /giftcards/audit-logs/export/{taskId}` to check status and get the download URL.","operationId":"export_audit_logs_v2_giftcards_audit_logs_export_post","parameters":[{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/audit-logs/export/{task_id}":{"get":{"tags":["Audit Logs"],"summary":"Get Export Status","description":"### Poll Audit Log Export Status\n\nReturns the current status of a background export task.\nWhen `status` is `\"success\"`, `downloadUrl` contains a presigned S3 URL\nvalid for 1 hour.","operationId":"get_export_status_v2_giftcards_audit_logs_export__task_id__get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/fraud/metrics":{"get":{"tags":["fraud"],"summary":"Get Fraud Metrics","operationId":"get_fraud_metrics_v2_giftcards_programs__programId__fraud_metrics_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/fraud/alerts":{"get":{"tags":["fraud"],"summary":"Get Fraud Alerts","operationId":"get_fraud_alerts_v2_giftcards_programs__programId__fraud_alerts_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Severity"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Status"}},{"name":"patternType","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Patterntype"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"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":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/fraud/alerts/{alert_id}/acknowledge":{"post":{"tags":["fraud"],"summary":"Acknowledge Fraud Alert","operationId":"acknowledge_fraud_alert_v2_giftcards_programs__programId__fraud_alerts__alert_id__acknowledge_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgeAlertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/fraud/patterns":{"get":{"tags":["fraud"],"summary":"Get Fraud Patterns","operationId":"get_fraud_patterns_v2_giftcards_programs__programId__fraud_patterns_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/fraud/blocked-ips":{"get":{"tags":["fraud"],"summary":"Get Blocked Ips","operationId":"get_blocked_ips_v2_giftcards_programs__programId__fraud_blocked_ips_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/fraud/block-ip":{"post":{"tags":["fraud"],"summary":"Block Ip","operationId":"block_ip_v2_giftcards_programs__programId__fraud_block_ip_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockIPRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/fraud/block-ip/{ip}":{"delete":{"tags":["fraud"],"summary":"Unblock Ip","operationId":"unblock_ip_v2_giftcards_programs__programId__fraud_block_ip__ip__delete","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"ip","in":"path","required":true,"schema":{"type":"string","title":"Ip"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/fraud/velocity-checks":{"get":{"tags":["fraud"],"summary":"Get Velocity Checks","operationId":"get_velocity_checks_v2_giftcards_programs__programId__fraud_velocity_checks_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/fraud/rules":{"get":{"tags":["fraud"],"summary":"Get Fraud Rules","operationId":"get_fraud_rules_v2_giftcards_programs__programId__fraud_rules_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["fraud"],"summary":"Create Fraud Rule","operationId":"create_fraud_rule_v2_giftcards_programs__programId__fraud_rules_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFraudRuleRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/fraud/rules/{rule_id}":{"put":{"tags":["fraud"],"summary":"Update Fraud Rule","operationId":"update_fraud_rule_v2_giftcards_programs__programId__fraud_rules__rule_id__put","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFraudRuleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["fraud"],"summary":"Delete Fraud Rule","operationId":"delete_fraud_rule_v2_giftcards_programs__programId__fraud_rules__rule_id__delete","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/anomalies/alerts":{"get":{"tags":["anomalies"],"summary":"Get Anomaly Alerts","operationId":"get_anomaly_alerts_v2_giftcards_programs__programId__anomalies_alerts_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/AnomalyAlertSeverity"}},{"type":"null"}],"title":"Severity"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/AnomalyAlertType"}},{"type":"null"}],"title":"Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/AnomalyAlertStatus"}},{"type":"null"}],"title":"Status"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"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":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/anomalies/metrics":{"get":{"tags":["anomalies"],"summary":"Get Anomaly Metrics","operationId":"get_anomaly_metrics_v2_giftcards_programs__programId__anomalies_metrics_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":7,"title":"Days"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/anomalies/alerts/{alert_id}/acknowledge":{"post":{"tags":["anomalies"],"summary":"Acknowledge Anomaly Alert","operationId":"acknowledge_anomaly_alert_v2_giftcards_programs__programId__anomalies_alerts__alert_id__acknowledge_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/analytics/overview":{"get":{"tags":["Gift Card Analytics"],"summary":"Get Analytics Overview","description":"Return a KPI snapshot for the programme over the requested period.\n\nComputes period-over-period deltas against the immediately preceding window\nof the same duration.  Monetary values are returned as ``\"0.00\"`` strings to\npreserve decimal precision across JSON serialisation.","operationId":"get_analytics_overview_v2_giftcards_programs__programId__analytics_overview_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(7d|30d|90d|12m|custom)$"},{"type":"null"}],"title":"Period"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/analytics/trends":{"get":{"tags":["Gift Card Analytics"],"summary":"Get Analytics Trends","description":"Return time-series transaction data bucketed by *granularity*.\n\nThe aggregation groups transactions by day in MongoDB, then Python\nre-buckets the daily totals into week/month windows.  This avoids\nMongoDB version-specific ``$dateTrunc`` syntax.","operationId":"get_analytics_trends_v2_giftcards_programs__programId__analytics_trends_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(7d|30d|90d|12m|custom)$"},{"type":"null"}],"title":"Period"}},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","default":"daily","title":"Granularity"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/analytics/export":{"post":{"tags":["Gift Card Analytics"],"summary":"Export Analytics","description":"Export analytics data for the period.\n\nGenerates the report synchronously, uploads to S3, and returns a\npre-signed download URL (or a ``data:`` URI if S3 is unavailable).","operationId":"export_analytics_v2_giftcards_programs__programId__analytics_export_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsExportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/reports/schedule":{"post":{"tags":["Gift Card Reports"],"summary":"Create Schedule","description":"Create an automated report schedule for the programme.","operationId":"create_schedule_v2_giftcards_programs__programId__reports_schedule_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/reports/scheduled":{"get":{"tags":["Gift Card Reports"],"summary":"List Scheduled Reports","description":"List all scheduled reports for the programme, newest first.","operationId":"list_scheduled_reports_v2_giftcards_programs__programId__reports_scheduled_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Pagesize"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/reports/scheduled/{scheduleId}":{"delete":{"tags":["Gift Card Reports"],"summary":"Delete Scheduled Report","description":"Delete a scheduled report by its UUID.\n\nReturns ``{\"success\": true}`` on success, 404 if not found.\nThe ``scheduleId`` value is URL-decoded to support the ``%2F``-encoded\nform that some HTTP clients send.","operationId":"delete_scheduled_report_v2_giftcards_programs__programId__reports_scheduled__scheduleId__delete","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"scheduleId","in":"path","required":true,"schema":{"type":"string","title":"Scheduleid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/reports/scheduled/{scheduleId}/download":{"get":{"tags":["Gift Card Reports"],"summary":"Download Scheduled Report","description":"Generate and stream the latest report data for a schedule.\n\nDefaults to the last 30 days of transactions regardless of the schedule's\nconfigured period.  The response ``Content-Disposition`` header carries the\nsuggested filename derived from the schedule name and current date.","operationId":"download_scheduled_report_v2_giftcards_programs__programId__reports_scheduled__scheduleId__download_get","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"scheduleId","in":"path","required":true,"schema":{"type":"string","title":"Scheduleid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/giftcards/programs/{programId}/reports/validate":{"post":{"tags":["Gift Card Reports"],"summary":"Validate Report Data","description":"Run data-integrity checks against the programme's gift card collection.\n\nChecks include balance consistency, status transitions, future-dated\ntransactions, and revenue reconciliation.  Returns a list of issues\nwith severity (``\"error\"`` | ``\"warning\"``) so the caller can surface\nthem in the UI.","operationId":"validate_report_data_v2_giftcards_programs__programId__reports_validate_post","parameters":[{"name":"programId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Programid"}},{"name":"cardId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Cardid"}},{"name":"X-Eposn-Customer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Customer-Token"}},{"name":"X-Eposn-Merchant-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Eposn-Merchant-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passtypes":{"get":{"tags":["Pass Type IDs"],"summary":"Get All Available Passtypes","description":"Retrieves a list of all available pass type IDs for the current user.\n\n- **user**: The authenticated user instance.\n\n### Returns\n- **list**: A list of pass type IDs serialized into `PassTypeRead` schema.","operationId":"get_all_available_passtypes_v2_passtypes_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Pass Type IDs"],"summary":"Create Passtype","description":"Creates a new pass type ID using either a certificate or a PKCS12 file.\n\n- **user**: The authenticated user instance.\n- **password**: Optional password for PKCS12 file decryption.\n- **certificate**: Optional uploaded certificate file.\n- **pkcs12**: Optional uploaded PKCS12 file.\n\n### Returns\n- **PassTypeRead**: The newly created pass type information or an error message.","operationId":"create_passtype_v2_passtypes_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_passtype_v2_passtypes_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passtypes/{passTypeIdentifier}":{"get":{"tags":["Pass Type IDs"],"summary":"Get Passtype Information","description":"Fetches detailed information about a specific pass type ID associated with the current user.\n\n- **passTypeIdentifier**: The unique identifier for the pass type.\n- **user**: The authenticated user instance.\n\n### Returns\n- **dict**: Detailed pass type information or an error message if not found.","operationId":"get_passtype_information_v2_passtypes__passTypeIdentifier__get","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"type":"string","title":"Passtypeidentifier"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Pass Type IDs"],"summary":"Delete Passtype","description":"Deletes a pass type ID and all related resources asynchronously.\n\n- **passTypeIdentifier**: The unique identifier for the pass type to be deleted.\n- **user**: The authenticated user instance.\n- **background_tasks**: Background tasks for asynchronous execution of related resource deletion.\n\n### Returns\n- **PassTypeRead**: The deleted pass type information.","operationId":"delete_passtype_v2_passtypes__passTypeIdentifier__delete","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"type":"string","title":"Passtypeidentifier"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passtypes/new/csr":{"get":{"tags":["Pass Type IDs"],"summary":"Create Passtype Csr","description":"Generates a new Certificate Signing Request (CSR) for the user.\n\n- **user**: The authenticated user instance.\n\n### Returns\n- **Response**: A CSR file download response.","operationId":"create_passtype_csr_v2_passtypes_new_csr_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates":{"get":{"tags":["Pass Templates"],"summary":"Get Pass Templates","description":"### Get Pass Templates\n\nRetrieves a list of pass templates based on search criteria.\n\n**Parameters:**\n- `search` (dict): Search parameters including pagination options.\n- `user` (User): The currently authenticated user.\n\n**Returns:**\n- `list`: A list of pass templates serialized into dictionaries.","operationId":"get_pass_templates_v2_templates_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Pass Templates"],"summary":"Create Pass Template","description":"### Create Pass Template\n\nCreates a new pass template based on the provided data.\n\n**Parameters:**\n- `input` (dict): The template data.\n- `user` (User): The currently authenticated user.\n- `background_tasks` (BackgroundTasks): Background tasks for asynchronous execution.\n\n**Returns:**\n- `dict`: The newly created pass template.","operationId":"create_pass_template_v2_templates_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Input"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/{templateId}":{"get":{"tags":["Pass Templates > Information"],"summary":"Get Pass Template Information","description":"### Get Pass Template Information\n\nRetrieves detailed information for a specific pass template.\n\n**Parameters:**\n- `templateId` (str): The ID of the pass template.\n\n**Returns:**\n- `dict`: Detailed information of the pass template.","operationId":"get_pass_template_information_v2_templates__templateId__get","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Pass Templates > Information"],"summary":"Update Pass Template Information","description":"### Update Pass Template Information\n\nUpdates the information of a specific pass template.\n\n**Parameters:**\n- `data` (UpdateTemplatePayload): The updated template data.\n- `template` (Template): The template to update.\n\n**Returns:**\n- `dict`: The updated pass template information.","operationId":"update_pass_template_information_v2_templates__templateId__put","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTemplatePayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Pass Templates > Information"],"summary":"Delete Pass Template Information","description":"### Delete Pass Template Information\n\nDeletes a specific pass template and handles related clean-up.\n\n**Parameters:**\n- `template` (Template): The template to delete.\n- `background_tasks` (BackgroundTasks): Background tasks for asynchronous execution.\n\n**Returns:**\n- `Response`: Standard HTTP response indicating success or failure.","operationId":"delete_pass_template_information_v2_templates__templateId__delete","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/{templateId}/walletclass":{"get":{"tags":["Templates"],"summary":"Get Pass Json","operationId":"get_pass_json_v2_templates__templateId__walletclass_get","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/{templateId}/url":{"get":{"tags":["Pass Templates > Link"],"summary":"Get Pass Template Link","description":"### Get Pass Template Link\n\nRetrieves the URL for a specific pass template.\n\n**Parameters:**\n- `template` (Template): The pass template.\n\n**Returns:**\n- `dict`: A dictionary containing the template URL.","operationId":"get_pass_template_link_v2_templates__templateId__url_get","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/{templateId}/pass":{"post":{"tags":["Pass Templates > Pass Generation"],"summary":"Create Pass From Template With Values Images","description":"### Create Pass from Template with Values and Images\n\nCreates a pass from a template with provided values and images.\n\n**Parameters:**\n- `request` (Request): The incoming request.\n- `template` (Template): The pass template.\n- `user` (User): The currently authenticated user.\n- `background_tasks` (BackgroundTasks): Background tasks for asynchronous execution.\n\n**Returns:**\n- `dict`: A dictionary containing the created pass information.","operationId":"create_pass_from_template_with_values_images_v2_templates__templateId__pass_post","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/names/{name}/pass":{"post":{"tags":["Pass Templates > Pass Generation"],"summary":"Create Pass From Template With Values Images By Name","description":"### Create Pass from Template with Values and Images by Name\n\nCreates a pass from a template with provided values and images, identified by the template name.\n\n**Parameters:**\n- `request` (Request): The incoming request.\n- `name` (str): The name of the pass template.\n- `user` (User): The currently authenticated user.\n- `background_tasks` (BackgroundTasks): Background tasks for asynchronous execution.\n\n**Returns:**\n- `dict`: A dictionary containing the created pass information.","operationId":"create_pass_from_template_with_values_images_by_name_v2_templates_names__name__pass_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/{templateId}/images":{"get":{"tags":["Pass Templates > Images"],"summary":"Get All Images Of Pass Template","description":"### Get All Images of Pass Template\n\nRetrieves all images associated with a specific pass template.\n\n**Parameters:**\n- `template` (Template): The pass template.\n\n**Returns:**\n- `list`: A list of images serialized into dictionaries.","operationId":"get_all_images_of_pass_template_v2_templates__templateId__images_get","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Pass Templates > Images"],"summary":"Delete All Images Of Pass Template","description":"### Delete All Images of Pass Template\n\nDeletes all images associated with a specific pass template.\n\n**Parameters:**\n- `template` (Template): The pass template.\n\n**Returns:**\n- `Response`: Standard HTTP response indicating success or failure.","operationId":"delete_all_images_of_pass_template_v2_templates__templateId__images_delete","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/{templateId}/images/{type}":{"get":{"tags":["Pass Templates > Images"],"summary":"Get All Images Of Pass Template Of Type","description":"### Get All Images of Pass Template of Type\n\nRetrieves all images of a specific type associated with a pass template.\n\n**Parameters:**\n- `type` (PassImageType): The type of the images.\n- `template` (Template): The pass template.\n\n**Returns:**\n- `list`: A list of images of the specified type serialized into dictionaries.","operationId":"get_all_images_of_pass_template_of_type_v2_templates__templateId__images__type__get","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Pass Templates > Images"],"summary":"Delete All Images Of Pass Template Of Type","description":"### Delete All Images of Pass Template of Type\n\nDeletes all images of a specific type associated with a pass template.\n\n**Parameters:**\n- `type` (PassImageType): The type of the images.\n- `template` (Template): The pass template.\n\n**Returns:**\n- `Response`: Standard HTTP response indicating success or failure.","operationId":"delete_all_images_of_pass_template_of_type_v2_templates__templateId__images__type__delete","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/{templateId}/images/{type}/{resolution}":{"get":{"tags":["Pass Templates > Images"],"summary":"Get Image From Pass Template Of Type And Resolution","description":"### Get Image from Pass Template of Type and Resolution\n\nRetrieves an image of a specific type and resolution associated with a pass template.\n\n**Parameters:**\n- `type` (PassImageType): The type of the image.\n- `resolution` (PassImageResolution): The resolution of the image.\n- `template` (Template): The pass template.\n- `temp_file` (IO): A temporary file object for image storage.\n\n**Returns:**\n- `FileResponse`: The image file response.","operationId":"get_image_from_pass_template_of_type_and_resolution_v2_templates__templateId__images__type___resolution__get","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"resolution","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageResolution"}},{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Pass Templates > Images"],"summary":"Create Or Update Image Of Pass Template Of Type And Resolution","description":"### Create or Update Image of Pass Template of Type and Resolution\n\nCreates or updates an image of a specific type and resolution for a pass template.\n\n**Parameters:**\n- `type` (PassImageType): The type of the image.\n- `resolution` (PassImageResolution): The resolution of the image.\n- `image` (UploadFile): The image file to upload.\n- `template` (Template): The pass template.\n- `user` (User): The currently authenticated user.\n\n**Returns:**\n- `dict`: The serialized image data.","operationId":"create_or_update_image_of_pass_template_of_type_and_resolution_v2_templates__templateId__images__type___resolution__post","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"resolution","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageResolution"}},{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_or_update_image_of_pass_template_of_type_and_resolution_v2_templates__templateId__images__type___resolution__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Pass Templates > Images"],"summary":"Delete Image Of Pass Template Of Type And Resolution","description":"### Delete Image of Pass Template of Type and Resolution\n\nDeletes an image of a specific type and resolution associated with a pass template.\n\n**Parameters:**\n- `type` (PassImageType): The type of the image.\n- `resolution` (PassImageResolution): The resolution of the image.\n- `template` (Template): The pass template.\n\n**Returns:**\n- `Response`: Standard HTTP response indicating success or failure.","operationId":"delete_image_of_pass_template_of_type_and_resolution_v2_templates__templateId__images__type___resolution__delete","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"resolution","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageResolution"}},{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/{templateId}/actions":{"get":{"tags":["Pass Templates > Actions"],"summary":"Get Pass Template Actions","description":"### Get Pass Template Actions\n\nReturns all actions of the pass template.\n\n**Parameters:**\n- `template` (Template): The pass template.\n\n**Returns:**\n- `dict`: All actions of the pass template.","operationId":"get_pass_template_actions_v2_templates__templateId__actions_get","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Pass Templates > Actions"],"summary":"Update Pass Template Actions","description":"### Update Pass Template Actions\n\nUpdate the actions of the pass template.\n\n**Parameters:**\n- `actions` (TemplateAction): The updated actions data.\n- `template` (Template): The pass template.\n\n**Returns:**\n- `dict`: The updated actions of the pass template.","operationId":"update_pass_template_actions_v2_templates__templateId__actions_put","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/{templateId}/branding":{"get":{"tags":["Pass Templates > Branding"],"summary":"Get Branding Settings Of Pass Template","description":"### Get Branding Settings of Pass Template\n\nReturns the branding settings of the pass template.\n\n**Parameters:**\n- `template` (Template): The pass template.\n\n**Returns:**\n- `dict`: The branding settings of the pass template.","operationId":"get_branding_settings_of_pass_template_v2_templates__templateId__branding_get","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Pass Templates > Branding"],"summary":"Update Branding Settings Of Pass Template","description":"### Update Branding Settings of Pass Template\n\nUpdate the branding settings of the pass template.\n\n**Parameters:**\n- `branding` (TemplateBranding): The updated branding settings data.\n- `template` (Template): The pass template.\n\n**Returns:**\n- `dict`: The updated branding settings of the pass template.","operationId":"update_branding_settings_of_pass_template_v2_templates__templateId__branding_put","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateBranding"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/{templateId}/branding/footer":{"put":{"tags":["Pass Templates > Branding"],"summary":"Update Branding Footer Image","description":"### Update Branding Footer Image\n\nUpdate the branding footer image for a pass template.\n\n**Parameters:**\n- `image` (UploadFile): The image file to upload.\n- `template` (Template): The pass template.\n\n**Returns:**\n- `dict`: The updated branding settings of the pass template.","operationId":"update_branding_footer_image_v2_templates__templateId__branding_footer_put","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_update_branding_footer_image_v2_templates__templateId__branding_footer_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Pass Templates > Branding"],"summary":"Delete Branding Footer Image","description":"### Delete Branding Footer Image\n\nDelete the branding footer image for a pass template.\n\n**Parameters:**\n- `template` (Template): The pass template.\n\n**Returns:**\n- `dict`: The updated branding settings of the pass template.","operationId":"delete_branding_footer_image_v2_templates__templateId__branding_footer_delete","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/{templateId}/restrictions":{"get":{"tags":["Pass Templates > Distribution Restrictions"],"summary":"Get Pass Template Distribution Restrictions","description":"### Get Pass Template Distribution Restrictions\n\nReturns the distribution restrictions of the pass template.\n\n**Parameters:**\n- `template` (Template): The pass template.\n\n**Returns:**\n- `dict`: The distribution restrictions of the pass template.","operationId":"get_pass_template_distribution_restrictions_v2_templates__templateId__restrictions_get","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Pass Templates > Distribution Restrictions"],"summary":"Update Pass Template Distribution Restrictions","description":"### Update Pass Template Distribution Restrictions\n\nUpdate the distribution restrictions of the pass template.\n\n**Parameters:**\n- `restrictions` (TemplateRestrictions): The updated distribution restrictions data.\n- `template` (Template): The pass template.\n\n**Returns:**\n- `dict`: The updated distribution restrictions of the pass template.","operationId":"update_pass_template_distribution_restrictions_v2_templates__templateId__restrictions_put","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateRestrictions"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/templates/{templateId}/payment":{"get":{"tags":["Pass Templates > Payment Settings"],"summary":"Get Payment Settings For Pass Template","description":"### Get Payment Settings for Pass Template\n\nReturns the payment settings of the pass template.\n\n**Parameters:**\n- `template` (Template): The pass template.\n\n**Returns:**\n- `dict`: The payment settings of the pass template.","operationId":"get_payment_settings_for_pass_template_v2_templates__templateId__payment_get","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Pass Templates > Payment"],"summary":"Update Payment Settings For Pass Template","description":"### Update Payment Settings for Pass Template\n\nUpdate the payment settings of the pass template.\n\n**Parameters:**\n- `payment` (TemplatePayment): The updated payment settings data.\n- `template` (Template): The pass template.\n\n**Returns:**\n- `dict`: The updated payment settings of the pass template.","operationId":"update_payment_settings_for_pass_template_v2_templates__templateId__payment_put","parameters":[{"name":"templateId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Templateid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePayment"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes":{"get":{"tags":["Passes"],"summary":"Get Passes","description":"Retrieve all passes associated with the current user.\n\n**Parameters:**\n- `user`: User object, automatically resolved from the request.\n- `search`: Dictionary containing search parameters.\n\n**Returns:**\n- `list`: A list of serialized pass data.","operationId":"get_passes_v2_passes_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}":{"get":{"tags":["Passes"],"summary":"Get Pass Type Identifier","description":"Fetch information about passes with a specific type identifier for the current user.\n\n**Parameters:**\n- `passTypeIdentifier`: The unique identifier for the pass type.\n- `user`: User object, automatically resolved from the request.\n- `search`: Dictionary containing search parameters.\n\n**Returns:**\n- `list`: A list of passes matching the pass type identifier.","operationId":"get_pass_type_identifier_v2_passes__passTypeIdentifier__get","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"type":"string","title":"Passtypeidentifier"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}":{"get":{"tags":["Passes"],"summary":"Get Pass","description":"Retrieve a specific pass by its type identifier and serial number.\n\n**Parameters:**\n- `lpass`: Pass object, automatically resolved from the request.\n- `temp_dir`: Temporary directory path, automatically resolved.\n- `background_tasks`: BackgroundTasks object for scheduling tasks.\n\n**Returns:**\n- `FileResponse`: A file response containing the pass file.","operationId":"get_pass_v2_passes__passTypeIdentifier___serialNumber__get","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Passes"],"summary":"Delete Pass","description":"Delete a specific pass by its type identifier and serial number.\n\n**Parameters:**\n- `lpass`: Pass object, automatically resolved from the request.\n- `background_tasks`: BackgroundTasks object for scheduling tasks.\n\n**Returns:**\n- `Response`: A standard response indicating success or failure.","operationId":"delete_pass_v2_passes__passTypeIdentifier___serialNumber__delete","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/url":{"get":{"tags":["Passes"],"summary":"Get Pass Url","description":"Retrieve the URL of a specific pass by its type identifier and serial number.\n\n**Parameters:**\n- `lpass`: Pass object, automatically resolved from the request.\n\n**Returns:**\n- `dict`: A dictionary containing the URL of the pass.","operationId":"get_pass_url_v2_passes__passTypeIdentifier___serialNumber__url_get","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/walletobject":{"get":{"tags":["Passes"],"summary":"Get Pass Wallet Object","operationId":"get_pass_wallet_object_v2_passes__passTypeIdentifier___serialNumber__walletobject_get","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/savetowallet":{"get":{"tags":["Passes"],"summary":"Get Save Pass To Wallet Url","operationId":"get_save_pass_to_wallet_url_v2_passes__passTypeIdentifier___serialNumber__savetowallet_get","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/passjson":{"get":{"tags":["Passes"],"summary":"Get Pass Json","description":"Retrieve detailed information of a specific pass in JSON format.\n\n**Parameters:**\n- `lpass`: Pass object, automatically resolved from the request.\n- `ifModifiedSince`: Optional datetime to check for modifications.\n\n**Returns:**\n- `Response`: A JSON response containing detailed pass information or a not modified status.","operationId":"get_pass_json_v2_passes__passTypeIdentifier___serialNumber__passjson_get","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"if-modified-since","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Modified-Since"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/email":{"post":{"tags":["Passes"],"summary":"Send Pass To Email","description":"Send a specific pass to a user's email.\n\n**Parameters:**\n- `lpass`: Pass object, automatically resolved from the request.\n- `temp_dir`: Temporary directory path, automatically resolved.\n- `email`: Email address to send the pass to.\n- `subject`: Optional subject line for the email.\n- `message`: Optional message body for the email.\n\n**Returns:**\n- `JSONResponse`: A response indicating the success of the email sending operation.","operationId":"send_pass_to_email_v2_passes__passTypeIdentifier___serialNumber__email_post","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_send_pass_to_email_v2_passes__passTypeIdentifier___serialNumber__email_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/push":{"post":{"tags":["Passes"],"summary":"Push Update To Pass","description":"Send a push notification update for a specific pass.\n\n**Parameters:**\n- `lpass`: Pass object, automatically resolved from the request.\n\n**Returns:**\n- `Response`: A standard response indicating the push notification was sent.","operationId":"push_update_to_pass_v2_passes__passTypeIdentifier___serialNumber__push_post","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/values":{"get":{"tags":["Passes > Pass Values"],"summary":"Get Pass Values","description":"Retrieve the placeholder values of a specific pass.\n\n**Parameters:**\n- `lpass`: Pass object, automatically resolved from the request.\n\n**Returns:**\n- `dict`: A dictionary containing the placeholder values of the pass.","operationId":"get_pass_values_v2_passes__passTypeIdentifier___serialNumber__values_get","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Passes > Pass Values"],"summary":"Put Pass Values","description":"Update the placeholder values of a specific pass.\n\n**Parameters:**\n- `data`: Dictionary containing the new placeholder values.\n- `lpass`: Pass object, automatically resolved from the request.\n- `background_tasks`: BackgroundTasks object for scheduling tasks.\n\n**Returns:**\n- `dict`: A dictionary containing the updated placeholder values of the pass.","operationId":"put_pass_values_v2_passes__passTypeIdentifier___serialNumber__values_put","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/values/{placeholderName}":{"put":{"tags":["Passes > Pass Values"],"summary":"Update Pass Placeholder","description":"Update a single placeholder value of a specific pass.\n\n**Parameters:**\n- `placeholderName`: The name of the placeholder to update.\n- `value`: The new value for the placeholder.\n- `lpass`: Pass object, automatically resolved from the request.\n\n**Returns:**\n- `dict`: A dictionary containing the updated placeholder values of the pass.","operationId":"update_pass_placeholder_v2_passes__passTypeIdentifier___serialNumber__values__placeholderName__put","parameters":[{"name":"placeholderName","in":"path","required":true,"schema":{"type":"string","title":"Placeholdername"}},{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_pass_placeholder_v2_passes__passTypeIdentifier___serialNumber__values__placeholderName__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/images":{"get":{"tags":["Passes > Pass Images"],"summary":"Get Pass Images","description":"Retrieve all images associated with a specific pass.\n\n**Parameters:**\n- `lpass`: Pass object, automatically resolved from the request.\n\n**Returns:**\n- `list`: A list of serialized image data.","operationId":"get_pass_images_v2_passes__passTypeIdentifier___serialNumber__images_get","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Passes > Pass Images"],"summary":"Delete Pass Images","description":"Delete all images associated with a specific pass.\n\n**Parameters:**\n- `lpass`: Pass object, automatically resolved from the request.\n- `background_tasks`: BackgroundTasks object for scheduling tasks.\n\n**Returns:**\n- `Response`: A standard response indicating the images were deleted.","operationId":"delete_pass_images_v2_passes__passTypeIdentifier___serialNumber__images_delete","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/images/{type}":{"get":{"tags":["Passes > Pass Images"],"summary":"Get Pass Images By Type","description":"Retrieve all images of a specific type associated with a pass.\n\n**Parameters:**\n- `type`: The type of images to retrieve.\n- `lpass`: Pass object, automatically resolved from the request.\n\n**Returns:**\n- `list`: A list of serialized image data.","operationId":"get_pass_images_by_type_v2_passes__passTypeIdentifier___serialNumber__images__type__get","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Passes > Pass Images"],"summary":"Delete All Pass Images Type","description":"Delete all images of a specific type associated with a pass.\n\n**Parameters:**\n- `type`: The type of images to delete.\n- `lpass`: Pass object, automatically resolved from the request.\n- `background_tasks`: BackgroundTasks object for scheduling tasks.\n\n**Returns:**\n- `Response`: A standard response indicating the images were deleted.","operationId":"delete_all_pass_images_type_v2_passes__passTypeIdentifier___serialNumber__images__type__delete","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/images/{type}/{resolution}":{"get":{"tags":["Passes > Pass Images"],"summary":"Get Pass Images Type Resolution","description":"Retrieve all images of a specific type and resolution associated with a pass.\n\n**Parameters:**\n- `type`: The type of images to retrieve.\n- `resolution`: The resolution of the images to retrieve.\n- `lpass`: Pass object, automatically resolved from the request.\n- `temp_file`: Temporary file object, automatically resolved.\n\n**Returns:**\n- `FileResponse`: A file response containing the requested image.","operationId":"get_pass_images_type_resolution_v2_passes__passTypeIdentifier___serialNumber__images__type___resolution__get","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"resolution","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageResolution"}},{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Passes > Pass Images"],"summary":"Create Update Pass Images Type Resolution","description":"### Create or Update Image of Pass of Type and Resolution\n\nCreate or update an image associated with a specific pass, identified by type and resolution.\n\n**Parameters:**\n- `type`: Type of the image (e.g., logo, background).\n- `resolution`: Resolution of the image (e.g., normal, high).\n- `image`: Image file to be uploaded.\n- `lpass`: Pass object, automatically resolved from the request.\n- `user`: User object, automatically resolved from the request.\n\n**Returns:**\n- `JSONResponse`: A response with the image details or an error message.","operationId":"create_update_pass_images_type_resolution_v2_passes__passTypeIdentifier___serialNumber__images__type___resolution__post","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"resolution","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageResolution"}},{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_update_pass_images_type_resolution_v2_passes__passTypeIdentifier___serialNumber__images__type___resolution__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Passes > Pass Images"],"summary":"Delete All Pass Images Type Resolution","description":"### Delete all images with the given type and resolution of the Wallet pass\n\nDelete all images of a specific type and resolution associated with a pass. Template images are not included.\n\n**Parameters:**\n- `type`: Type of the image (e.g., logo, background).\n- `resolution`: Resolution of the image (e.g., normal, high).\n- `lpass`: Pass object, automatically resolved from the request.\n\n**Returns:**\n- `JSONResponse`: A response indicating the success or failure of the deletion.","operationId":"delete_all_pass_images_type_resolution_v2_passes__passTypeIdentifier___serialNumber__images__type___resolution__delete","parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageType"}},{"name":"resolution","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PassImageResolution"}},{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/status":{"get":{"tags":["Passes > Pass Images"],"summary":"Get Pass Status","description":"### Get the status of the Wallet pass\n\nRetrieve the current status of a specific Wallet pass.\n\n**Parameters:**\n- `lpass`: Pass object, automatically resolved from the request.\n\n**Returns:**\n- `str`: The current status of the Wallet pass.","operationId":"get_pass_status_v2_passes__passTypeIdentifier___serialNumber__status_get","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Passes > Pass Images"],"summary":"Update Pass Status","description":"### Update the status of the Wallet pass\n\nUpdate the status of a specific Wallet pass.\n\n**Parameters:**\n- `status`: New status to be set.\n- `lpass`: Pass object, automatically resolved from the request.\n\n**Returns:**\n- `JSONResponse`: A response indicating the success of the update.","operationId":"update_pass_status_v2_passes__passTypeIdentifier___serialNumber__status_put","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_pass_status_v2_passes__passTypeIdentifier___serialNumber__status_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/passes/{passTypeIdentifier}/{serialNumber}/price":{"get":{"tags":["Passes > Pass Payment"],"summary":"Get Pass Price","description":"### Get pass custom price\n\nRetrieve the custom price of a pass with the given pass type identifier and serial number.\n\n**Parameters:**\n- `lpass`: Pass object, automatically resolved from the request.\n\n**Returns:**\n- `float`: The price of the pass.","operationId":"get_pass_price_v2_passes__passTypeIdentifier___serialNumber__price_get","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Passes > Pass Payment"],"summary":"Update Custom Price","description":"### Update pass custom price\n\nUpdate the custom price of a pass with the given pass type identifier and serial number.\n\n**Parameters:**\n- `price`: New price to be set.\n- `lpass`: Pass object, automatically resolved from the request.\n\n**Returns:**\n- `JSONResponse`: A response indicating the success of the price update.","operationId":"update_custom_price_v2_passes__passTypeIdentifier___serialNumber__price_put","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_custom_price_v2_passes__passTypeIdentifier___serialNumber__price_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Passes > Pass Payment"],"summary":"Delete Custom Price","description":"### Delete pass custom price\n\nDelete the custom price of a pass with the given pass type identifier and serial number.\n\n**Parameters:**\n- `lpass`: Pass object, automatically resolved from the request.\n\n**Returns:**\n- `JSONResponse`: A response indicating the success of the deletion.","operationId":"delete_custom_price_v2_passes__passTypeIdentifier___serialNumber__price_delete","parameters":[{"name":"passTypeIdentifier","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtypeidentifier"}},{"name":"serialNumber","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serialnumber"}},{"name":"passId","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Passid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/scanners":{"get":{"tags":["Scanners"],"summary":"Get All Scanners","description":"Retrieves a paginated list of all scanners associated with the current user.\n\n### Parameters:\n- `search` (dict): Pagination parameters including 'skip' and 'limit'.\n- `user` (User): The current authenticated user.\n\n### Returns:\n- `List[dict]`: A list of scanner data dictionaries.","operationId":"get_all_scanners_v2_scanners_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Scanners"],"summary":"Create Scanner","description":"Creates a new scanner with the provided data under the current user's account.\n\n### Parameters:\n- `data` (CreatePassScannerPayload): The data required to create a scanner.\n- `user` (User): The current authenticated user.\n\n### Returns:\n- `dict`: The newly created scanner data.","operationId":"create_scanner_v2_scanners_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePassScannerPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/scanners/{scannerId}":{"get":{"tags":["Scanners"],"summary":"Get Scanner Information","description":"Retrieves detailed information about a specific scanner by its ID.\n\n### Parameters:\n- `scannerId` (str): The unique identifier of the scanner.\n\n### Returns:\n- `dict`: Detailed scanner information.","operationId":"get_scanner_information_v2_scanners__scannerId__get","parameters":[{"name":"scannerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Scannerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Scanners"],"summary":"Update Scanner Information","description":"Updates the specified scanner with new data.\n\n### Parameters:\n- `scannerId` (str): The unique identifier of the scanner to update.\n- `data` (UpdatePassScannerPayload): The data to update the scanner with.\n\n### Returns:\n- `dict`: The updated scanner data.","operationId":"update_scanner_information_v2_scanners__scannerId__put","parameters":[{"name":"scannerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Scannerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePassScannerPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Scanners"],"summary":"Delete Scanner","description":"Deletes a scanner and all associated events.\n\n### Parameters:\n- `scannerId` (str): The unique identifier of the scanner to be deleted.\n\n### Returns:\n- `Response`: A standard HTTP response indicating success or failure.","operationId":"delete_scanner_v2_scanners__scannerId__delete","parameters":[{"name":"scannerId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Scannerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/webhooks":{"get":{"tags":["Webhooks"],"summary":"Get All Webhooks","description":"Retrieve all webhooks associated with the current user based on search parameters.\n\n- **search**: `dict` - Search parameters including 'skip' and 'limit' for pagination.\n- **user**: `User` - The current authenticated user.\n\n**Returns**: `list` - A list of webhooks with selected fields (id, url, sharedSecret, enabled).","operationId":"get_all_webhooks_v2_webhooks_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Webhooks"],"summary":"Create Webhook","description":"Create a new webhook for the current user.\n\n- **data**: `CreateWebhookPayload` - The data for creating the webhook.\n- **user**: `User` - The current authenticated user.\n\n**Returns**: `dict` - The created webhook data.","operationId":"create_webhook_v2_webhooks_post","parameters":[{"name":"user-agent","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User-Agent"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/webhooks/{webhookId}":{"get":{"tags":["Webhooks"],"summary":"Get Webhook Information","description":"Retrieve information for a specific webhook by ID.\n\n- **webhook**: `Webhook` - The webhook instance loaded by webhook ID.\n\n**Returns**: `dict` - The information of the specified webhook.","operationId":"get_webhook_information_v2_webhooks__webhookId__get","parameters":[{"name":"webhookId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Webhookid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Webhooks"],"summary":"Update Webhook Information","description":"Update the information of a specific webhook.\n\n- **data**: `CreateWebhookPayload` - The updated data for the webhook.\n- **webhook**: `Webhook` - The webhook instance loaded by webhook ID.\n\n**Returns**: `dict` - The updated webhook information.","operationId":"update_webhook_information_v2_webhooks__webhookId__put","parameters":[{"name":"webhookId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Webhookid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Webhooks"],"summary":"Delete Webhook","description":"Delete a specific webhook by ID.\n\n- **webhook**: `Webhook` - The webhook instance loaded by webhook ID.\n\n**Returns**: `Response` - A JSON response indicating successful deletion.","operationId":"delete_webhook_v2_webhooks__webhookId__delete","parameters":[{"name":"webhookId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Webhookid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/webhooks/{webhookId}/enable":{"post":{"tags":["Webhooks"],"summary":"Enable Webhook","description":"Enable a webhook and verify its endpoint by sending a verification token.\n\n- **webhook**: `Webhook` - The webhook instance loaded by webhook ID.\n\n**Returns**: `dict` - The updated webhook information if enabled successfully, otherwise an error message.","operationId":"enable_webhook_v2_webhooks__webhookId__enable_post","parameters":[{"name":"webhookId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Webhookid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/webhooks/{webhookId}/disable":{"post":{"tags":["Webhooks"],"summary":"Disable Webhook","description":"Disable a specific webhook by ID.\n\n- **webhook**: `Webhook` - The webhook instance loaded by webhook ID.\n\n**Returns**: `dict` - The updated webhook information showing it as disabled.","operationId":"disable_webhook_v2_webhooks__webhookId__disable_post","parameters":[{"name":"webhookId","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"string"}],"title":"Webhookid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/localization/health":{"get":{"tags":["Localization"],"summary":"Localization pipeline health","description":"Reports whether real translations loaded from the @loyaltydog/i18n package (vs. the empty fallback) and the en-US 'common' key count. Use to detect the raw-key degradation mode in any environment.","operationId":"localization_health_v2_localization_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocalizationHealthResponse"}}}}}}},"/v2/localization/languages":{"get":{"tags":["Localization"],"summary":"List available languages","description":"Returns a list of all supported languages with their codes, names, flags, and native names.","operationId":"get_languages_v2_localization_languages_get","parameters":[{"name":"Accept-Language","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Accept-Language header","title":"Accept-Language"},"description":"Accept-Language header"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LanguageResponse"},"title":"Response Get Languages V2 Localization Languages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/localization/translations/{language_code}":{"get":{"tags":["Localization"],"summary":"Get translations for a language","description":"Returns all translations for the specified language code.","operationId":"get_translations_v2_localization_translations__language_code__get","parameters":[{"name":"language_code","in":"path","required":true,"schema":{"type":"string","title":"Language Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranslationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/localization/detect-language":{"get":{"tags":["Localization"],"summary":"Detect language from Accept-Language header","description":"Detects the preferred language from the browser's Accept-Language header.","operationId":"detect_language_v2_localization_detect_language_get","parameters":[{"name":"Accept-Language","in":"header","required":false,"schema":{"type":"string","maxLength":200,"description":"Accept-Language header from browser","title":"Accept-Language"},"description":"Accept-Language header from browser"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectedLanguageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/localization/merchants/{merchant_id}/language":{"patch":{"tags":["Localization"],"summary":"Update merchant default language","description":"Updates the default language for a merchant (program).","operationId":"update_merchant_language_v2_localization_merchants__merchant_id__language_patch","parameters":[{"name":"merchant_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguagePreferenceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantLanguageUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Localization"],"summary":"Get merchant default language","description":"Returns the current default language for a merchant (program).","operationId":"get_merchant_language_v2_localization_merchants__merchant_id__language_get","parameters":[{"name":"merchant_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantLanguageUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/localization/customers/{customer_id}/language":{"patch":{"tags":["Localization"],"summary":"Update customer preferred language","description":"Updates the preferred language for a customer.","operationId":"update_customer_language_v2_localization_customers__customer_id__language_patch","parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguagePreferenceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerLanguageUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Localization"],"summary":"Get customer preferred language","description":"Returns the current preferred language for a customer.","operationId":"get_customer_language_v2_localization_customers__customer_id__language_get","parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerLanguageUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/devices/register":{"post":{"tags":["Devices"],"summary":"Register Device","description":"Register a new tablet/kiosk device.\n\nThis endpoint creates a new device record and generates a JWT token for device authentication.\nThe token has limited scope (earn, redeem, balance_check) and expires in 24 hours.\n\n### Parameters:\n- `request` (DeviceRegisterRequest): Device registration details\n- `current_user` (User): Authenticated user making the request\n\n### Returns:\n- `DeviceRegisterResponse`: Device ID, SID, and authentication token\n\n### Raises:\n- 404: If the specified program doesn't exist","operationId":"register_device_v2_devices_register_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceRegisterRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceRegisterResponse"}}}},"404":{"description":"Program not found."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/devices/{device_id}":{"get":{"tags":["Devices"],"summary":"Get Device","description":"Get device information by ID.\n\n### Parameters:\n- `device_id` (PydanticObjectId): Device ID\n- `current_user` (User): Authenticated user making the request\n\n### Returns:\n- `DeviceInfo`: Device details\n\n### Raises:\n- 404: If device not found or not owned by the current user","operationId":"get_device_v2_devices__device_id__get","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceInfo"}}}},"404":{"description":"Device not found."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Devices"],"summary":"Update Device","description":"Update device information.\n\n### Parameters:\n- `device_id` (PydanticObjectId): Device ID\n- `request` (DeviceUpdateRequest): Update data\n- `current_user` (User): Authenticated user making the request\n\n### Returns:\n- `DeviceInfo`: Updated device details\n\n### Raises:\n- 404: If device not found or not owned by the current user","operationId":"update_device_v2_devices__device_id__patch","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceInfo"}}}},"404":{"description":"Device not found."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/devices/{device_id}/health":{"get":{"tags":["Devices"],"summary":"Device Health Check","description":"Health check endpoint for device monitoring.\n\nCalled by the device itself using its device-specific JWT token.\nThe `current_device` dependency handles authentication and updates\nlastSeenAt before this handler runs.\n\n### Parameters:\n- `device_id` (PydanticObjectId): Must match the device ID in the JWT token\n- `device` (Device): Authenticated device from JWT (via current_device)\n\n### Returns:\n- `DeviceHealthResponse`: Device health status\n\n### Raises:\n- 404: If device_id does not match the authenticated device's ID","operationId":"device_health_check_v2_devices__device_id__health_get","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceHealthResponse"}}}},"404":{"description":"Device not found."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/signup/pending":{"post":{"summary":"Post Signup Pending","description":"Create or resume a pending signup. Returns the User's id as `pendingId`.\n\nMaps service-layer ValueErrors to 400 with the error code in the body so\nthe frontend can show a localized message based on the code, not the\nEnglish error string. Rate-limited to 20 req/min/IP via slowapi —\nsufficient for legitimate retries while throttling enumeration attempts.\n\nReturns 201 Created for fresh inserts; 200 OK when a live-pending or\nabandoned row is resumed (the row already existed).","operationId":"post_signup_pending_v2_signup_pending_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePendingSignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePendingSignupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/v2/signup/pending/{pending_id}/integration":{"post":{"summary":"Post Signup Integration Choice","description":"Step 2 of the dash signup funnel: record the merchant's wordpress|standalone\npick on a `pending` User row and bump the TTL.\n\nAuth is implicit — the row must already be in `pending` status (rejected\nvia `pending_not_found` otherwise). Active/abandoned/cancelled rows can't\nadvance through this endpoint. Rate-limited per IP via slowapi.","operationId":"post_signup_integration_choice_v2_signup_pending__pending_id__integration_post","parameters":[{"name":"pending_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId","description":"The pending User id from POST /signup/pending"},"description":"The pending User id from POST /signup/pending"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetIntegrationChoiceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetIntegrationChoiceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/v2/signup/pending/{pending_id}/setup-intent":{"post":{"summary":"Post Signup Setup Intent","description":"Step 3 (mount): create a Stripe SetupIntent for the pending row and\nreturn the `clientSecret` the frontend uses to mount Stripe's\nPaymentElement. The `pending_user_id` is stamped into the SetupIntent's\nmetadata so the Phase 11 webhook can correlate Stripe events back to the\nUser.\n\nOnly pending rows can advance — active/abandoned/cancelled rows would\ncreate orphan SetupIntents on retry. The Stripe SDK call is wrapped in\n`asyncio.to_thread` (it's sync; we don't want to block the event loop).","operationId":"post_signup_setup_intent_v2_signup_pending__pending_id__setup_intent_post","parameters":[{"name":"pending_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId","description":"The pending User id from POST /signup/pending"},"description":"The pending User id from POST /signup/pending"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSetupIntentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/v2/signup/pending/{pending_id}/activate":{"post":{"summary":"Post Signup Activate","description":"Step 3 (confirm): verify the Stripe SetupIntent succeeded, create\nthe Stripe Customer + trial Subscription, and atomically flip the User\nto status='active'. Wraps `services/signup.py::activate_user_from_setup_intent`\n(which already handles idempotency, the `pending`-only status guard,\nSetupIntent status check, and Stripe error rollback).\n\nReplays with the same `pending_id` are idempotent — a second call after\nthe row is already active returns the same userId without re-calling\nStripe.\n\nLower rate-limit (10/minute vs 20/minute on setup-intent) since each\nactivate call potentially creates Stripe resources.","operationId":"post_signup_activate_v2_signup_pending__pending_id__activate_post","parameters":[{"name":"pending_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId","description":"The pending User id from POST /signup/pending"},"description":"The pending User id from POST /signup/pending"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/api/ai-advisor":{"get":{"tags":["AI Advisor"],"summary":"Health Check","description":"Report AI Advisor health and Mistral configuration status.\n\nReturns:\n    dict: Health report with keys:\n        - status (str): \"healthy\" if MISTRAL_API_KEY is set, otherwise \"configuration_needed\".\n        - services (dict): Service configuration statuses; includes key \"mistral\" with value \"configured\" or \"not_configured\".\n        - message (str): Human-readable guidance: \"AI Advisor backend is ready\" if configured, otherwise \"Please configure MISTRAL_API_KEY\".","operationId":"health_check_api_ai_advisor_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["AI Advisor"],"summary":"Chat With Advisor","description":"Handle a chat request and return a structured AI advisor response.\n\nUses Mistral AI with the Scout personality to provide business insights.\n\nReturns:\n    AIAdvisorResponse: Advisor message, transaction metrics and summary, date range, optional warning, and timestamp.\n\nRaises:\n    HTTPException: with status 503 if AI backend (MISTRAL_API_KEY) is not configured; with status 500 for other internal errors.","operationId":"chat_with_advisor_api_ai_advisor_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIAdvisorRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIAdvisorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AIAdvisorRequest":{"properties":{"message":{"type":"string","maxLength":2000,"minLength":1,"title":"Message"},"conversationHistory":{"items":{"$ref":"#/components/schemas/Message"},"type":"array","maxItems":20,"title":"Conversationhistory"},"dateRangeOverride":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Daterangeoverride"},"userId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userid"},"programId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Programid"},"transactionSummary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Transactionsummary"},"transactionDetails":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":100},{"type":"null"}],"title":"Transactiondetails"},"currencyCode":{"type":"string","title":"Currencycode","default":"USD"},"currencySymbol":{"type":"string","title":"Currencysymbol","default":"$"}},"type":"object","required":["message"],"title":"AIAdvisorRequest"},"AIAdvisorResponse":{"properties":{"response":{"type":"string","title":"Response"},"transactionCount":{"type":"integer","title":"Transactioncount"},"transactionSummary":{"additionalProperties":true,"type":"object","title":"Transactionsummary"},"dateRange":{"additionalProperties":{"type":"string"},"type":"object","title":"Daterange"},"warning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Warning"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["response","transactionCount","transactionSummary","dateRange","timestamp"],"title":"AIAdvisorResponse"},"AMLAcknowledgeRequest":{"properties":{"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes"}},"type":"object","title":"AMLAcknowledgeRequest"},"AMLAlertResponse":{"properties":{"alertId":{"type":"string","title":"Alertid"},"flagType":{"type":"string","title":"Flagtype"},"severity":{"type":"string","title":"Severity"},"cardId":{"type":"string","title":"Cardid"},"cardNumber":{"type":"string","title":"Cardnumber"},"customerEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customeremail"},"transactionIds":{"items":{"type":"string"},"type":"array","title":"Transactionids"},"detectedAt":{"type":"string","format":"date-time","title":"Detectedat"},"acknowledged":{"type":"boolean","title":"Acknowledged"},"acknowledgedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Acknowledgedat"},"acknowledgedBy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acknowledgedby"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"amount":{"type":"string","title":"Amount"}},"type":"object","required":["alertId","flagType","severity","cardId","cardNumber","customerEmail","transactionIds","detectedAt","acknowledged","amount"],"title":"AMLAlertResponse"},"AMLReportResponse":{"properties":{"reportId":{"type":"string","title":"Reportid"},"generatedAt":{"type":"string","format":"date-time","title":"Generatedat"},"alerts":{"items":{"$ref":"#/components/schemas/AMLAlertResponse"},"type":"array","title":"Alerts"},"highSeverityCount":{"type":"integer","title":"Highseveritycount"},"mediumSeverityCount":{"type":"integer","title":"Mediumseveritycount"},"lowSeverityCount":{"type":"integer","title":"Lowseveritycount"},"unacknowledgedCount":{"type":"integer","title":"Unacknowledgedcount"}},"type":"object","required":["reportId","generatedAt","alerts","highSeverityCount","mediumSeverityCount","lowSeverityCount","unacknowledgedCount"],"title":"AMLReportResponse"},"AcceptTermsRequest":{"properties":{"acceptTos":{"type":"boolean","title":"Accepttos"},"acceptDpa":{"type":"boolean","title":"Acceptdpa"},"acceptPrivacy":{"type":"boolean","title":"Acceptprivacy"},"tosVersion":{"type":"string","maxLength":50,"minLength":1,"title":"Tosversion"},"dpaVersion":{"type":"string","maxLength":50,"minLength":1,"title":"Dpaversion"},"privacyVersion":{"type":"string","maxLength":50,"minLength":1,"title":"Privacyversion"}},"type":"object","required":["acceptTos","acceptDpa","acceptPrivacy","tosVersion","dpaVersion","privacyVersion"],"title":"AcceptTermsRequest"},"AcceptTermsResponse":{"properties":{"tosAcceptedAt":{"type":"string","format":"date-time","title":"Tosacceptedat"},"dpaAcceptedAt":{"type":"string","format":"date-time","title":"Dpaacceptedat"},"privacyAcceptedAt":{"type":"string","format":"date-time","title":"Privacyacceptedat"}},"type":"object","required":["tosAcceptedAt","dpaAcceptedAt","privacyAcceptedAt"],"title":"AcceptTermsResponse"},"AcknowledgeAlertRequest":{"properties":{"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"isFalsePositive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Isfalsepositive"},"suspendCard":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Suspendcard"},"suspendReason":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Suspendreason"},"suspendExpiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Suspendexpiresat"}},"type":"object","title":"AcknowledgeAlertRequest"},"ActivateGiftCardRequest":{"properties":{"customerEmail":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Customeremail"},"customerPhone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Customerphone"},"customerName":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Customername"},"securityCode":{"anyOf":[{"type":"string","maxLength":6},{"type":"null"}],"title":"Securitycode","description":"Security code required for customer self-activation"}},"type":"object","title":"ActivateGiftCardRequest"},"ActivateRequest":{"properties":{"setupIntentId":{"type":"string","maxLength":200,"minLength":1,"title":"Setupintentid"}},"type":"object","required":["setupIntentId"],"title":"ActivateRequest"},"ActivateResponse":{"properties":{"userId":{"type":"string","title":"Userid"},"email":{"type":"string","title":"Email"}},"type":"object","required":["userId","email"],"title":"ActivateResponse"},"AdoptionDataPoint":{"properties":{"label":{"type":"string","title":"Label"},"value":{"type":"integer","title":"Value"},"secondaryValue":{"type":"integer","title":"Secondaryvalue"}},"type":"object","required":["label","value","secondaryValue"],"title":"AdoptionDataPoint"},"AnalyticsExportRequest":{"properties":{"format":{"type":"string","pattern":"^(csv|excel|json|pdf)$","title":"Format","default":"csv"},"period":{"anyOf":[{"type":"string","pattern":"^(7d|30d|90d|12m|custom)$"},{"type":"null"}],"title":"Period"},"from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"},"to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"},"metrics":{"items":{"type":"string"},"type":"array","title":"Metrics"},"includePrivacyNotice":{"type":"boolean","title":"Includeprivacynotice","default":false}},"type":"object","title":"AnalyticsExportRequest"},"AnomalyAlertSeverity":{"type":"string","enum":["warning","critical"],"title":"AnomalyAlertSeverity"},"AnomalyAlertStatus":{"type":"string","enum":["open","acknowledged","resolved"],"title":"AnomalyAlertStatus"},"AnomalyAlertType":{"type":"string","enum":["VOLUME_SPIKE","ERROR_RATE","AUTH_FAILURE_SPIKE"],"title":"AnomalyAlertType"},"AppKeyCreate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"fullAccess":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Fullaccess"},"expires":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires"},"allowedTemplates":{"anyOf":[{"items":{"$ref":"#/components/schemas/PydanticObjectId"},"type":"array"},{"type":"null"}],"title":"Allowedtemplates"}},"type":"object","title":"AppKeyCreate"},"AuditLogPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AuditLogResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"pages":{"type":"integer","title":"Pages"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["items","total","page","pages","limit"],"title":"AuditLogPage"},"AuditLogResponse":{"properties":{"id":{"type":"string","title":"Id"},"action":{"type":"string","title":"Action"},"resourceType":{"type":"string","title":"Resourcetype"},"resourceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resourceid"},"actorId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actorid"},"actorType":{"type":"string","title":"Actortype"},"subjectId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subjectid"},"merchantId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchantid"},"ipAddress":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ipaddress"},"userAgent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Useragent"},"requestId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requestid"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"actorName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actorname"},"subjectName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subjectname"},"merchantName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchantname"},"resourceName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resourcename"}},"type":"object","required":["id","action","resourceType","actorType","timestamp"],"title":"AuditLogResponse"},"BalanceCheckRequest":{"properties":{"cardNumber":{"type":"string","maxLength":20,"title":"Cardnumber"},"securityCode":{"type":"string","maxLength":6,"title":"Securitycode"},"captchaToken":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Captchatoken"}},"type":"object","required":["cardNumber","securityCode"],"title":"BalanceCheckRequest"},"BalanceCheckResponse":{"properties":{"id":{"$ref":"#/components/schemas/PydanticObjectId"},"programId":{"$ref":"#/components/schemas/PydanticObjectId"},"cardNumber":{"type":"string","title":"Cardnumber"},"lastFourDigits":{"type":"string","title":"Lastfourdigits"},"balance":{"type":"string","title":"Balance"},"status":{"$ref":"#/components/schemas/GiftCardStatus"},"expiresAt":{"type":"string","format":"date-time","title":"Expiresat"},"isActive":{"type":"boolean","title":"Isactive"}},"type":"object","required":["id","programId","cardNumber","lastFourDigits","balance","status","expiresAt","isActive"],"title":"BalanceCheckResponse"},"BasicProgramRead":{"properties":{"id":{"$ref":"#/components/schemas/PydanticObjectId"},"name":{"type":"string","title":"Name"},"shareUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shareurl","readOnly":true}},"type":"object","required":["id","name","shareUrl"],"title":"BasicProgramRead"},"BlockIPRequest":{"properties":{"ipAddress":{"type":"string","title":"Ipaddress"},"reason":{"type":"string","title":"Reason","default":"Manual block"},"isPermanent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ispermanent"},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiresat"},"cidrRange":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cidrrange"}},"type":"object","required":["ipAddress"],"title":"BlockIPRequest"},"Body_change_loyalty_program_pass_type_v2_loyalty_programs__programId__passtype_put":{"properties":{"passType":{"type":"string","title":"Passtype"}},"type":"object","required":["passType"],"title":"Body_change_loyalty_program_pass_type_v2_loyalty_programs__programId__passtype_put"},"Body_create_or_update_image_of_pass_template_of_type_and_resolution_v2_templates__templateId__images__type___resolution__post":{"properties":{"image":{"type":"string","contentMediaType":"application/octet-stream","title":"Image"}},"type":"object","required":["image"],"title":"Body_create_or_update_image_of_pass_template_of_type_and_resolution_v2_templates__templateId__images__type___resolution__post"},"Body_create_or_update_loyalty_program_offer_card_image_v2_loyalty_programs__programId__offers__offerId__card_images__type__post":{"properties":{"image":{"type":"string","contentMediaType":"application/octet-stream","title":"Image"}},"type":"object","required":["image"],"title":"Body_create_or_update_loyalty_program_offer_card_image_v2_loyalty_programs__programId__offers__offerId__card_images__type__post"},"Body_create_or_update_loyalty_program_voucher_card_image_v2_loyalty_programs__programId__vouchers__voucherId__card_images__type__post":{"properties":{"image":{"type":"string","contentMediaType":"application/octet-stream","title":"Image"}},"type":"object","required":["image"],"title":"Body_create_or_update_loyalty_program_voucher_card_image_v2_loyalty_programs__programId__vouchers__voucherId__card_images__type__post"},"Body_create_passtype_v2_passtypes_post":{"properties":{"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"certificate":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Certificate"},"pkcs12":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Pkcs12"}},"type":"object","title":"Body_create_passtype_v2_passtypes_post"},"Body_create_update_pass_images_type_resolution_v2_passes__passTypeIdentifier___serialNumber__images__type___resolution__post":{"properties":{"image":{"type":"string","contentMediaType":"application/octet-stream","title":"Image"}},"type":"object","required":["image"],"title":"Body_create_update_pass_images_type_resolution_v2_passes__passTypeIdentifier___serialNumber__images__type___resolution__post"},"Body_login_for_access_token_v2_token_post":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"^password$"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","format":"password","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"password","title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_login_for_access_token_v2_token_post"},"Body_post_loyalty_program_customer_push_v2_loyalty_programs__programId__customers__customerId__push_post":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"Body_post_loyalty_program_customer_push_v2_loyalty_programs__programId__customers__customerId__push_post"},"Body_post_loyalty_program_customers_push_v2_loyalty_programs__programId__customers_push_post":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"Body_post_loyalty_program_customers_push_v2_loyalty_programs__programId__customers_push_post"},"Body_publish_loyalty_program_voucher_v2_loyalty_programs__programId__vouchers__voucherId__issue_post":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"Body_publish_loyalty_program_voucher_v2_loyalty_programs__programId__vouchers__voucherId__issue_post"},"Body_send_pass_to_email_v2_passes__passTypeIdentifier___serialNumber__email_post":{"properties":{"email":{"type":"string","title":"Email"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["email"],"title":"Body_send_pass_to_email_v2_passes__passTypeIdentifier___serialNumber__email_post"},"Body_update_branding_footer_image_v2_templates__templateId__branding_footer_put":{"properties":{"image":{"type":"string","contentMediaType":"application/octet-stream","title":"Image"}},"type":"object","required":["image"],"title":"Body_update_branding_footer_image_v2_templates__templateId__branding_footer_put"},"Body_update_custom_price_v2_passes__passTypeIdentifier___serialNumber__price_put":{"properties":{"price":{"type":"number","title":"Price"}},"type":"object","required":["price"],"title":"Body_update_custom_price_v2_passes__passTypeIdentifier___serialNumber__price_put"},"Body_update_loyalty_program_card_image_v2_loyalty_programs__programId__card_images__type__post":{"properties":{"image":{"type":"string","contentMediaType":"application/octet-stream","title":"Image"}},"type":"object","required":["image"],"title":"Body_update_loyalty_program_card_image_v2_loyalty_programs__programId__card_images__type__post"},"Body_update_loyalty_program_customer_points_v2_loyalty_programs__programId__customers__customerId__points_add_post":{"properties":{"points":{"type":"integer","title":"Points"}},"type":"object","required":["points"],"title":"Body_update_loyalty_program_customer_points_v2_loyalty_programs__programId__customers__customerId__points_add_post"},"Body_update_loyalty_program_icon_v2_loyalty_programs__programId__icon_put":{"properties":{"image":{"type":"string","contentMediaType":"application/octet-stream","title":"Image"},"crop":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Crop"}},"type":"object","required":["image"],"title":"Body_update_loyalty_program_icon_v2_loyalty_programs__programId__icon_put"},"Body_update_pass_placeholder_v2_passes__passTypeIdentifier___serialNumber__values__placeholderName__put":{"properties":{"value":{"anyOf":[{"type":"string"},{"type":"integer"}],"title":"Value"}},"type":"object","required":["value"],"title":"Body_update_pass_placeholder_v2_passes__passTypeIdentifier___serialNumber__values__placeholderName__put"},"Body_update_pass_status_v2_passes__passTypeIdentifier___serialNumber__status_put":{"properties":{"status":{"$ref":"#/components/schemas/PassStatus"}},"type":"object","required":["status"],"title":"Body_update_pass_status_v2_passes__passTypeIdentifier___serialNumber__status_put"},"BreachStatus":{"type":"string","enum":["investigating","contained","closed"],"title":"BreachStatus"},"BreakageData":{"properties":{"value":{"type":"integer","title":"Value"},"total":{"type":"integer","title":"Total"},"centerText":{"type":"string","title":"Centertext"},"label":{"type":"string","title":"Label"}},"type":"object","required":["value","total","centerText","label"],"title":"BreakageData"},"BulkIssuanceAsyncResponse":{"properties":{"taskId":{"type":"string","title":"Taskid"},"status":{"type":"string","title":"Status","default":"pending"}},"type":"object","required":["taskId"],"title":"BulkIssuanceAsyncResponse"},"BulkIssuanceSyncResponse":{"properties":{"issuedCount":{"type":"integer","title":"Issuedcount"},"cards":{"items":{"$ref":"#/components/schemas/BulkIssuedCardSummary"},"type":"array","title":"Cards"},"csvDownloadUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Csvdownloadurl"},"failedCount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Failedcount"}},"type":"object","required":["issuedCount","cards"],"title":"BulkIssuanceSyncResponse"},"BulkIssuanceTaskStatus":{"properties":{"taskId":{"type":"string","title":"Taskid"},"status":{"type":"string","title":"Status"},"issuedCount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Issuedcount"},"cards":{"anyOf":[{"items":{"$ref":"#/components/schemas/BulkIssuedCardSummary"},"type":"array"},{"type":"null"}],"title":"Cards"},"csvDownloadUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Csvdownloadurl"},"failedCount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Failedcount"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completedat"}},"type":"object","required":["taskId","status"],"title":"BulkIssuanceTaskStatus"},"BulkIssueGiftCardRequest":{"properties":{"initialValue":{"anyOf":[{"type":"number","maximum":10000.0,"minimum":0.01},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Initialvalue"},"isPhysical":{"type":"boolean","title":"Isphysical","default":false},"designTemplate":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Designtemplate"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiresat"},"count":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Count"},"recipients":{"anyOf":[{"items":{"$ref":"#/components/schemas/BulkIssueRecipient"},"type":"array"},{"type":"null"}],"title":"Recipients"}},"type":"object","required":["initialValue"],"title":"BulkIssueGiftCardRequest"},"BulkIssueRecipient":{"properties":{"customerEmail":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Customeremail"},"customerPhone":{"anyOf":[{"type":"string","format":"phone"},{"type":"null"}],"title":"Customerphone"},"customerName":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Customername"},"senderName":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Sendername"},"customMessage":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Custommessage"}},"type":"object","title":"BulkIssueRecipient"},"BulkIssuedCardSummary":{"properties":{"id":{"type":"string","title":"Id"},"cardNumber":{"type":"string","title":"Cardnumber"},"lastFourDigits":{"type":"string","title":"Lastfourdigits"}},"type":"object","required":["id","cardNumber","lastFourDigits"],"title":"BulkIssuedCardSummary"},"BusinessReportResponse":{"properties":{"totalCards":{"type":"integer","title":"Totalcards"},"activeCards":{"type":"integer","title":"Activecards"},"pendingCards":{"type":"integer","title":"Pendingcards"},"depletedCards":{"type":"integer","title":"Depletedcards"},"expiredCards":{"type":"integer","title":"Expiredcards"},"voidedCards":{"type":"integer","title":"Voidedcards"},"totalSold":{"type":"string","title":"Totalsold"},"totalRedeemed":{"type":"string","title":"Totalredeemed"},"totalBalance":{"type":"string","title":"Totalbalance"},"cardsSoldThisMonth":{"type":"integer","title":"Cardssoldthismonth"},"salesThisMonth":{"type":"string","title":"Salesthismonth"}},"type":"object","required":["totalCards","activeCards","pendingCards","depletedCards","expiredCards","voidedCards","totalSold","totalRedeemed","totalBalance","cardsSoldThisMonth","salesThisMonth"],"title":"BusinessReportResponse"},"ChartDataPoint":{"properties":{"date":{"type":"string","title":"Date"},"value":{"type":"number","title":"Value"}},"type":"object","required":["date","value"],"title":"ChartDataPoint"},"ChartDataResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ChartDataPoint"},"type":"array","title":"Data"},"events":{"items":{"$ref":"#/components/schemas/EventMarker"},"type":"array","title":"Events"}},"type":"object","required":["data","events"],"title":"ChartDataResponse"},"ConsentInput":{"properties":{"consentType":{"$ref":"#/components/schemas/ConsentType"},"granted":{"type":"boolean","title":"Granted"},"method":{"$ref":"#/components/schemas/ConsentMethod"}},"type":"object","required":["consentType","granted","method"],"title":"ConsentInput","description":"A single consent decision for one consent type."},"ConsentMethod":{"type":"string","enum":["checkbox","api","paper","verbal","pos_terminal","migration"],"title":"ConsentMethod"},"ConsentPayload":{"properties":{"tosAt":{"type":"string","format":"date-time","title":"Tosat"},"dpaAt":{"type":"string","format":"date-time","title":"Dpaat"},"privacyAt":{"type":"string","format":"date-time","title":"Privacyat"},"ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip"}},"type":"object","required":["tosAt","dpaAt","privacyAt"],"title":"ConsentPayload","description":"ToS / DPA / Privacy timestamps captured at the moment the merchant\nticked the checkboxes on Step 1. The IP, if present, is truncated to\n/24 (IPv4) / /48 (IPv6) inside the service layer for GDPR minimization."},"ConsentRecordResponse":{"properties":{"customerId":{"type":"string","title":"Customerid"},"purposes":{"items":{"type":"string"},"type":"array","title":"Purposes"},"consentedAt":{"type":"string","format":"date-time","title":"Consentedat"},"ipAddress":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ipaddress"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiresat"},"updatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updatedat"}},"type":"object","required":["customerId","purposes","consentedAt","ipAddress","expiresAt","updatedAt"],"title":"ConsentRecordResponse"},"ConsentRequest":{"properties":{"purposes":{"items":{"type":"string"},"type":"array","title":"Purposes","default":[]},"ipAddress":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ipaddress"},"customerEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customeremail"},"customerPhone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customerphone"}},"type":"object","title":"ConsentRequest"},"ConsentType":{"type":"string","enum":["marketing_email","marketing_sms","analytics","data_sharing"],"title":"ConsentType"},"ConsolidatableMerchantResponse":{"properties":{"merchantId":{"$ref":"#/components/schemas/PydanticObjectId"},"merchantName":{"type":"string","title":"Merchantname"},"cardCount":{"type":"integer","title":"Cardcount"},"totalBalance":{"type":"string","title":"Totalbalance"}},"type":"object","required":["merchantId","merchantName","cardCount","totalBalance"],"title":"ConsolidatableMerchantResponse"},"ConsolidateGiftCardsRequest":{"properties":{"cardNumbers":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":2,"title":"Cardnumbers"},"customerEmail":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Customeremail"},"customerName":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Customername"},"senderName":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Sendername"},"merchantId":{"$ref":"#/components/schemas/PydanticObjectId"},"referenceId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Referenceid"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"isPhysical":{"type":"boolean","title":"Isphysical","default":false},"designTemplate":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Designtemplate"},"customMessage":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Custommessage"}},"type":"object","required":["cardNumbers","merchantId"],"title":"ConsolidateGiftCardsRequest"},"ConsolidateResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"newCard":{"$ref":"#/components/schemas/GiftCardResponse"},"voidedCards":{"items":{"type":"string"},"type":"array","title":"Voidedcards"},"totalConsolidatedAmount":{"type":"string","title":"Totalconsolidatedamount"},"consolidationTransactions":{"items":{"type":"string"},"type":"array","title":"Consolidationtransactions"},"referenceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referenceid"}},"type":"object","required":["success","message","newCard","voidedCards","totalConsolidatedAmount","consolidationTransactions","referenceId"],"title":"ConsolidateResponse"},"CreateBreachPayload":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"dataCategories":{"items":{"type":"string"},"type":"array","title":"Datacategories","default":[]},"sourceAlertId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sourcealertid"}},"type":"object","title":"CreateBreachPayload"},"CreateCustomerPayload":{"properties":{"firstName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","format":"phone"},{"type":"null"}],"title":"Phone"},"points":{"type":"integer","title":"Points","default":0},"referrerId":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}]},"customFields":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Customfields"},"initialConsentGranted":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Initialconsentgranted"}},"type":"object","title":"CreateCustomerPayload","description":"The customer creation payload\n\nAttributes:\n    firstName (str | None, optional): The first name of the customer. Defaults to None\n    lastName (str | None, optional): The last name of the customer. Defaults to None\n    email (str | None, optional): The email address of the customer. Defaults to None\n    phone (str | None, optional): The E164 phone number of the customer. Defaults to None\n    customFields (Dict | None, optional): The values of the custom fields. Defaults to {}\n\n    referrerId (PydanticObjectId | None, optional): The ID of the referrer customer. Defaults to None"},"CreateDSARRequestPayload":{"properties":{"customerId":{"$ref":"#/components/schemas/PydanticObjectId"},"requestType":{"$ref":"#/components/schemas/DSARRequestType","default":"access"},"requestedBy":{"type":"string","title":"Requestedby"}},"type":"object","required":["customerId","requestedBy"],"title":"CreateDSARRequestPayload","description":"Payload for creating a new DSAR request."},"CreateFraudRuleRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""},"ruleType":{"$ref":"#/components/schemas/FraudRuleType"},"action":{"$ref":"#/components/schemas/FraudRuleAction","default":"block"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiresat"}},"type":"object","required":["name","ruleType"],"title":"CreateFraudRuleRequest"},"CreateGiftCardRequest":{"properties":{"initialValue":{"anyOf":[{"type":"number","maximum":10000.0,"minimum":0.01},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Initialvalue"},"customerEmail":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Customeremail"},"customerPhone":{"anyOf":[{"type":"string","format":"phone"},{"type":"null"}],"title":"Customerphone"},"customerName":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Customername"},"senderName":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Sendername"},"merchantId":{"$ref":"#/components/schemas/PydanticObjectId"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiresat"},"isPhysical":{"type":"boolean","title":"Isphysical","default":false},"designTemplate":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Designtemplate"},"customMessage":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Custommessage"},"deliverAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deliverat"}},"type":"object","required":["initialValue","merchantId"],"title":"CreateGiftCardRequest"},"CreateOfferPayload":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"startDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Startdate"},"endDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Enddate"},"autoClaim":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Autoclaim","default":false},"autoClaimOverwrite":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Autoclaimoverwrite","default":false},"notify":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify"},"notifyMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notifymessage"},"pointsMin":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointsmin"},"pointsMax":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointsmax"},"pointsCost":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointscost"},"limitPerCustomer":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limitpercustomer"},"availabilityCount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Availabilitycount"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"type":{"anyOf":[{"$ref":"#/components/schemas/OfferType"},{"type":"null"}]},"categories":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Categories"},"products":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Products"},"priceRule":{"anyOf":[{"$ref":"#/components/schemas/OfferPriceRule"},{"type":"null"}]}},"type":"object","required":["name"],"title":"CreateOfferPayload"},"CreatePassScannerPayload":{"properties":{"name":{"type":"string","title":"Name"},"type":{"$ref":"#/components/schemas/PassScannerType"},"fullAccess":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Fullaccess"},"pin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pin"},"allowedTemplates":{"anyOf":[{"items":{"$ref":"#/components/schemas/PydanticObjectId"},"type":"array"},{"type":"null"}],"title":"Allowedtemplates"}},"type":"object","required":["name","type"],"title":"CreatePassScannerPayload"},"CreatePendingSignupRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"passwordHash":{"type":"string","maxLength":200,"minLength":10,"title":"Passwordhash"},"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"company":{"type":"string","maxLength":200,"minLength":1,"title":"Company"},"country":{"type":"string","maxLength":2,"minLength":2,"title":"Country"},"consent":{"$ref":"#/components/schemas/ConsentPayload"},"utm":{"anyOf":[{"$ref":"#/components/schemas/UtmPayload"},{"type":"null"}]}},"type":"object","required":["email","passwordHash","name","company","country","consent"],"title":"CreatePendingSignupRequest"},"CreatePendingSignupResponse":{"properties":{"pendingId":{"type":"string","title":"Pendingid"}},"type":"object","required":["pendingId"],"title":"CreatePendingSignupResponse"},"CreateProgramPayload":{"properties":{"passTypeIdentifier":{"type":"string","pattern":"^pass\\..*","title":"Passtypeidentifier"},"schema":{"$ref":"#/components/schemas/ProgramSchemaType","default":"tieredMembership"},"programType":{"$ref":"#/components/schemas/ProgramType","default":"loyalty"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"website":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Website"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"terms":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms"},"pointsAddEmail":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointsaddemail"},"pointsAddPhone":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointsaddphone"},"pointsInstallPass":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointsinstallpass"},"pointsScanPass":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointsscanpass"},"dynamicScanPoints":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Dynamicscanpoints"},"pointsReferral":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointsreferral"},"referralRequiredPoints":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Referralrequiredpoints"},"scannerType":{"anyOf":[{"$ref":"#/components/schemas/PassScannerType"},{"type":"null"}],"default":"None"},"customPointsChangeMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custompointschangemessage"},"disableCustomPointsChangeMessage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Disablecustompointschangemessage"},"customPointName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custompointname"},"customPointsName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custompointsname"},"customFields":{"items":{"$ref":"#/components/schemas/TemplatePlaceholder"},"type":"array","title":"Customfields","default":[]},"requiredFields":{"items":{"type":"string"},"type":"array","title":"Requiredfields","default":[]},"retention_period_days":{"type":"integer","maximum":365.0,"minimum":0.0,"title":"Retention Period Days","description":"Days to retain deleted data (0-365)","default":30}},"type":"object","required":["passTypeIdentifier","name"],"title":"CreateProgramPayload"},"CreateSetupIntentResponse":{"properties":{"clientSecret":{"type":"string","title":"Clientsecret"},"setupIntentId":{"type":"string","title":"Setupintentid"}},"type":"object","required":["clientSecret","setupIntentId"],"title":"CreateSetupIntentResponse"},"CreateVoucherPayload":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"startDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Startdate"},"endDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Enddate"},"type":{"anyOf":[{"$ref":"#/components/schemas/VoucherType"},{"type":"null"}]},"expiresIn":{"anyOf":[{"type":"number"},{"type":"integer"},{"type":"null"}],"title":"Expiresin"},"limitPerCustomer":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limitpercustomer"},"availabilityCount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Availabilitycount"},"requireFields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Requirefields"},"issueBeforeBirthday":{"anyOf":[{"type":"number"},{"type":"integer"},{"type":"null"}],"title":"Issuebeforebirthday"},"discountValue":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Discountvalue"},"discountCurrency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discountcurrency"},"discountType":{"anyOf":[{"$ref":"#/components/schemas/OfferType"},{"type":"null"}]},"categories":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Categories"},"products":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Products"},"priceRule":{"anyOf":[{"$ref":"#/components/schemas/OfferPriceRule"},{"type":"null"}]}},"type":"object","required":["name"],"title":"CreateVoucherPayload"},"CreateWebhookPayload":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"sharedSecret":{"anyOf":[{"type":"string","minLength":8},{"type":"null"}],"title":"Sharedsecret"},"allPassTemplates":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allpasstemplates"},"allowedTemplates":{"anyOf":[{"items":{"$ref":"#/components/schemas/PydanticObjectId"},"type":"array"},{"type":"null"}],"title":"Allowedtemplates"},"allEventTypes":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Alleventtypes"},"allowedEvents":{"anyOf":[{"items":{"anyOf":[{"$ref":"#/components/schemas/WebhookEventType"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Allowedevents"}},"type":"object","required":["url"],"title":"CreateWebhookPayload","description":"The webhook creation payload\n\nAttributes:\n    url (str): The webhook URL\n    sharedSecret (str | None, optional): A random string to handshake to verify the URL and hmac the event payload data. Defaults to None\n    allowedTemplates (List[PydanticObjectId] | None, optional): A list ID of the allowed templates. Defaults to None\n    allowedEvents (List[WebhookEventType] | None, optional): A list of allowed webhook types. Defaults to None"},"CustomerIdentityResponse":{"properties":{"id":{"$ref":"#/components/schemas/PydanticObjectId"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"verified":{"type":"boolean","title":"Verified"},"verifiedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verifiedat"},"trustLevel":{"type":"string","title":"Trustlevel"}},"type":"object","required":["id","email","phone","name","verified","verifiedAt","trustLevel"],"title":"CustomerIdentityResponse","description":"Customer identity information returned after successful verification."},"CustomerLanguageUpdateResponse":{"properties":{"id":{"$ref":"#/components/schemas/PydanticObjectId"},"sid":{"type":"string","title":"Sid"},"preferredLanguage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferredlanguage"},"languagePreference":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Languagepreference","description":"Language preference info"}},"type":"object","required":["id","sid","preferredLanguage"],"title":"CustomerLanguageUpdateResponse","description":"Response model for customer language update."},"CustomerReportResponse":{"properties":{"totalCards":{"type":"integer","title":"Totalcards"},"activeCards":{"type":"integer","title":"Activecards"},"expiringSoonCards":{"type":"integer","title":"Expiringsooncards"},"totalSpent":{"type":"string","title":"Totalspent"},"totalBalance":{"type":"string","title":"Totalbalance"}},"type":"object","required":["totalCards","activeCards","expiringSoonCards","totalSpent","totalBalance"],"title":"CustomerReportResponse"},"DSARRequestResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"$ref":"#/components/schemas/DSARRequestStatus"},"deadline":{"type":"string","format":"date-time","title":"Deadline"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"}},"type":"object","required":["id","status","deadline","createdAt"],"title":"DSARRequestResponse","description":"Response containing DSAR request details."},"DSARRequestStatus":{"type":"string","enum":["pending","processing","completed","failed","denied"],"title":"DSARRequestStatus","description":"Status of DSAR request processing."},"DSARRequestType":{"type":"string","enum":["access","deletion","portability","rectification"],"title":"DSARRequestType","description":"Type of Data Subject Access Request."},"DSARStatusResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"$ref":"#/components/schemas/DSARRequestStatus"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"deadline":{"type":"string","format":"date-time","title":"Deadline"},"processedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Processedat"},"exportExpiry":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Exportexpiry"},"encryptionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Encryptionkey"}},"type":"object","required":["id","status","createdAt","deadline"],"title":"DSARStatusResponse","description":"Response containing DSAR status and export information."},"DSARVerifyResponse":{"properties":{"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"}},"type":"object","required":["status","message"],"title":"DSARVerifyResponse","description":"Response after verification."},"DetectedLanguageResponse":{"properties":{"detectedLanguage":{"type":"string","title":"Detectedlanguage"},"fallback":{"type":"boolean","title":"Fallback","description":"True if fell back to default language","default":false}},"type":"object","required":["detectedLanguage"],"title":"DetectedLanguageResponse","description":"Response model for detected language from Accept-Language header."},"DeviceHealthResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Health status (ok/error)"},"deviceId":{"type":"string","title":"Deviceid","description":"Device ID"},"lastSeenAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Lastseenat","description":"Last time the device was active"},"deviceStatus":{"$ref":"#/components/schemas/DeviceStatus","description":"Current device status"}},"type":"object","required":["status","deviceId","deviceStatus"],"title":"DeviceHealthResponse","description":"Response schema for device health check."},"DeviceInfo":{"properties":{"deviceId":{"type":"string","title":"Deviceid","description":"Device ID"},"deviceSid":{"type":"string","title":"Devicesid","description":"Device SID"},"deviceType":{"$ref":"#/components/schemas/DeviceType","description":"Type of device"},"deviceName":{"type":"string","title":"Devicename","description":"Device name"},"status":{"$ref":"#/components/schemas/DeviceStatus","description":"Device status"},"programId":{"type":"string","title":"Programid","description":"Loyalty program ID"},"lastSeenAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Lastseenat","description":"Last time the device was active"},"activatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activatedat","description":"When the device was activated"},"locationName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locationname","description":"Physical location of device"}},"type":"object","required":["deviceId","deviceSid","deviceType","deviceName","status","programId"],"title":"DeviceInfo","description":"Basic device information response."},"DeviceRegisterRequest":{"properties":{"deviceType":{"$ref":"#/components/schemas/DeviceType","description":"Type of device (tablet, kiosk, or tablet_kiosk)"},"deviceName":{"type":"string","title":"Devicename","description":"Human-readable name for the device"},"programId":{"$ref":"#/components/schemas/PydanticObjectId","description":"Loyalty program this device belongs to"},"hardwareInfo":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Hardwareinfo","description":"Hardware information (model, OS version, etc.)"},"locationName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locationname","description":"Physical location of device"},"locationAddress":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locationaddress","description":"Address of device location"}},"type":"object","required":["deviceType","deviceName","programId"],"title":"DeviceRegisterRequest","description":"Request schema for device registration."},"DeviceRegisterResponse":{"properties":{"deviceId":{"type":"string","title":"Deviceid","description":"Device ID"},"deviceSid":{"type":"string","title":"Devicesid","description":"Device SID (human-readable identifier)"},"deviceToken":{"type":"string","title":"Devicetoken","description":"JWT token for device authentication"},"expiresAt":{"type":"string","format":"date-time","title":"Expiresat","description":"Token expiration timestamp"},"status":{"$ref":"#/components/schemas/DeviceStatus","description":"Initial device status"}},"type":"object","required":["deviceId","deviceSid","deviceToken","expiresAt","status"],"title":"DeviceRegisterResponse","description":"Response schema for successful device registration."},"DeviceStatus":{"type":"string","enum":["active","inactive","blocked","pending_activation"],"title":"DeviceStatus","description":"Device status enumeration."},"DeviceType":{"type":"string","enum":["tablet_kiosk","tablet","kiosk"],"title":"DeviceType","description":"Device type enumeration for tablet/kiosk devices."},"DeviceUpdateRequest":{"properties":{"deviceName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Devicename","description":"New device name"},"locationName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locationname","description":"New location name"},"locationAddress":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locationaddress","description":"New location address"},"status":{"anyOf":[{"$ref":"#/components/schemas/DeviceStatus"},{"type":"null"}],"description":"New device status"}},"type":"object","title":"DeviceUpdateRequest","description":"Request schema for updating device information."},"EscheatmentReportEntryResponse":{"properties":{"cardId":{"type":"string","title":"Cardid"},"cardNumber":{"type":"string","title":"Cardnumber"},"balance":{"type":"string","title":"Balance"},"lastActivityDate":{"type":"string","format":"date-time","title":"Lastactivitydate"},"dormancyDays":{"type":"integer","title":"Dormancydays"},"jurisdiction":{"type":"string","title":"Jurisdiction"},"liabilityAmount":{"type":"string","title":"Liabilityamount"},"customerEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customeremail"},"merchantId":{"type":"string","title":"Merchantid"}},"type":"object","required":["cardId","cardNumber","balance","lastActivityDate","dormancyDays","jurisdiction","liabilityAmount","customerEmail","merchantId"],"title":"EscheatmentReportEntryResponse"},"EscheatmentReportResponse":{"properties":{"reportId":{"type":"string","title":"Reportid"},"generatedAt":{"type":"string","format":"date-time","title":"Generatedat"},"jurisdiction":{"type":"string","title":"Jurisdiction"},"dormancyThresholdDays":{"type":"integer","title":"Dormancythresholddays"},"entries":{"items":{"$ref":"#/components/schemas/EscheatmentReportEntryResponse"},"type":"array","title":"Entries"},"totalLiability":{"type":"string","title":"Totalliability"},"entriesCount":{"type":"integer","title":"Entriescount"}},"type":"object","required":["reportId","generatedAt","jurisdiction","dormancyThresholdDays","entries","totalLiability","entriesCount"],"title":"EscheatmentReportResponse"},"EventMarker":{"properties":{"date":{"type":"string","title":"Date"},"label":{"type":"string","title":"Label"},"type":{"type":"string","title":"Type"}},"type":"object","required":["date","label","type"],"title":"EventMarker"},"ExpirationWarningReportResponse":{"properties":{"reportId":{"type":"string","title":"Reportid"},"generatedAt":{"type":"string","format":"date-time","title":"Generatedat"},"warnings":{"items":{"$ref":"#/components/schemas/ExpirationWarningResponse"},"type":"array","title":"Warnings"},"count30d":{"type":"integer","title":"Count30D"},"count60d":{"type":"integer","title":"Count60D"},"count90d":{"type":"integer","title":"Count90D"}},"type":"object","required":["reportId","generatedAt","warnings","count30d","count60d","count90d"],"title":"ExpirationWarningReportResponse"},"ExpirationWarningResponse":{"properties":{"cardId":{"type":"string","title":"Cardid"},"cardNumber":{"type":"string","title":"Cardnumber"},"customerEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customeremail"},"customerName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customername"},"daysUntilExpiry":{"type":"integer","title":"Daysuntilexpiry"},"warningLevel":{"type":"string","title":"Warninglevel"},"expiresAt":{"type":"string","format":"date-time","title":"Expiresat"},"balance":{"type":"string","title":"Balance"}},"type":"object","required":["cardId","cardNumber","customerEmail","customerName","daysUntilExpiry","warningLevel","expiresAt","balance"],"title":"ExpirationWarningResponse"},"ExpiredCardProcessingRequest":{"properties":{"action":{"type":"string","pattern":"^(extend|refund|void)$","title":"Action"},"extensionDays":{"anyOf":[{"type":"integer","maximum":730.0,"minimum":1.0},{"type":"null"}],"title":"Extensiondays"},"refundReference":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Refundreference"}},"type":"object","required":["action"],"title":"ExpiredCardProcessingRequest"},"ExpiredCardProcessingResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"cardId":{"type":"string","title":"Cardid"},"action":{"type":"string","title":"Action"},"message":{"type":"string","title":"Message"},"newExpiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Newexpiresat"},"transactionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transactionid"}},"type":"object","required":["success","cardId","action","message"],"title":"ExpiredCardProcessingResponse"},"ExportRequest":{"properties":{"format":{"type":"string","title":"Format","default":"csv"},"merchantId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchantid"},"subjectId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subjectid"},"actorId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actorid"},"subjectName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subjectname"},"actorName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actorname"},"merchantName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchantname"},"actions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Actions"},"resourceTypes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Resourcetypes"},"fromDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Fromdate"},"toDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Todate"}},"type":"object","title":"ExportRequest"},"ExportStatusResponse":{"properties":{"taskId":{"type":"string","title":"Taskid"},"status":{"type":"string","title":"Status"},"downloadUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Downloadurl"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["taskId","status"],"title":"ExportStatusResponse"},"FraudRuleAction":{"type":"string","enum":["block","flag","require_review"],"title":"FraudRuleAction"},"FraudRuleType":{"type":"string","enum":["VELOCITY_LIMIT","GEOGRAPHIC_RESTRICTION","IP_BLOCK","USER_AGENT_BLOCK","TRANSACTION_LIMIT","TIME_RESTRICTION","CUSTOM"],"title":"FraudRuleType"},"GDPRExportRequest":{"properties":{"customerId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customerid"},"customerEmail":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Customeremail"},"format":{"type":"string","pattern":"^(json|csv)$","title":"Format"}},"type":"object","required":["format"],"title":"GDPRExportRequest"},"GDPRExportResponse":{"properties":{"exportId":{"type":"string","title":"Exportid"},"downloadUrl":{"type":"string","title":"Downloadurl"},"format":{"type":"string","title":"Format"},"requestedAt":{"type":"string","format":"date-time","title":"Requestedat"},"expiresAt":{"type":"string","format":"date-time","title":"Expiresat"},"status":{"type":"string","title":"Status"}},"type":"object","required":["exportId","downloadUrl","format","requestedAt","expiresAt","status"],"title":"GDPRExportResponse"},"GiftCardMerchantTheme":{"properties":{"presetId":{"type":"string","maxLength":100,"minLength":1,"title":"Presetid","default":"eposn-default"},"primary":{"type":"string","maxLength":7,"title":"Primary","default":"#15803d"},"primaryFg":{"type":"string","maxLength":7,"title":"Primaryfg","default":"#ffffff"},"sidebarBg":{"type":"string","maxLength":7,"title":"Sidebarbg","default":"#ffffff"},"sidebarText":{"type":"string","maxLength":7,"title":"Sidebartext","default":"#4b5563"},"sidebarActiveBg":{"type":"string","maxLength":7,"title":"Sidebaractivebg","default":"#f0fdf4"},"sidebarActiveText":{"type":"string","maxLength":7,"title":"Sidebaractivetext","default":"#15803d"},"sidebarBadge":{"type":"string","maxLength":7,"title":"Sidebarbadge","default":"#15803d"},"background":{"type":"string","maxLength":7,"title":"Background","default":"#f9fafb"},"foreground":{"type":"string","maxLength":7,"title":"Foreground","default":"#111827"},"surface":{"type":"string","maxLength":7,"title":"Surface","default":"#ffffff"},"border":{"type":"string","maxLength":7,"title":"Border","default":"#e5e7eb"},"muted":{"type":"string","maxLength":7,"title":"Muted","default":"#6b7280"},"logoUrl":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Logourl"},"logoAlt":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Logoalt"},"fontFamily":{"anyOf":[{"type":"string","maxLength":255,"pattern":"^[A-Za-z0-9 ,'\\\"._\\-]+$"},{"type":"null"}],"title":"Fontfamily"},"borderRadius":{"$ref":"#/components/schemas/GiftCardMerchantThemeBorderRadius","default":"lg"}},"type":"object","title":"GiftCardMerchantTheme","description":"Persisted merchant-facing theme configuration for the EPOSN portal."},"GiftCardMerchantThemeBorderRadius":{"type":"string","enum":["none","sm","md","lg","full"],"title":"GiftCardMerchantThemeBorderRadius"},"GiftCardResponse":{"properties":{"id":{"$ref":"#/components/schemas/PydanticObjectId"},"cardNumber":{"type":"string","title":"Cardnumber"},"balance":{"type":"string","title":"Balance"},"initialValue":{"type":"string","title":"Initialvalue"},"status":{"$ref":"#/components/schemas/GiftCardStatus"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updatedat"},"activatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activatedat"},"expiresAt":{"type":"string","format":"date-time","title":"Expiresat"},"suspendedReason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suspendedreason"},"suspendedUntil":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Suspendeduntil"},"suspendedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Suspendedat"},"customerId":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}]},"customerEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customeremail"},"customerPhone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customerphone"},"customerName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customername"},"senderName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sendername"},"merchantId":{"$ref":"#/components/schemas/PydanticObjectId"},"merchantName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchantname"},"isPhysical":{"type":"boolean","title":"Isphysical"},"designTemplate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Designtemplate"},"customMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custommessage"},"lastFourDigits":{"type":"string","title":"Lastfourdigits"},"programId":{"$ref":"#/components/schemas/PydanticObjectId"},"deliverAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deliverat"},"delivered":{"type":"boolean","title":"Delivered","default":false},"card":{"anyOf":[{"$ref":"#/components/schemas/PassCard"},{"type":"null"}]}},"type":"object","required":["id","cardNumber","balance","initialValue","status","createdAt","updatedAt","activatedAt","expiresAt","suspendedReason","suspendedUntil","suspendedAt","customerId","customerEmail","customerPhone","customerName","merchantId","isPhysical","designTemplate","customMessage","lastFourDigits","programId","card"],"title":"GiftCardResponse"},"GiftCardStatus":{"type":"string","enum":["pending","active","suspended","expired","voided","depleted"],"title":"GiftCardStatus","description":"Gift card status enumeration."},"GiftCardTransactionType":{"type":"string","enum":["PURCHASE","ACTIVATION","RELOAD","REDEMPTION","CONSOLIDATION","VOID","TRANSFER_OUT","TRANSFER_IN","OWNERSHIP_TRANSFER","RESEND_CODE","REFUND"],"title":"GiftCardTransactionType","description":"Gift card transaction type enumeration."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImageObject":{"properties":{"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","title":"ImageObject"},"InitMerchantSessionRequest":{"properties":{"appToken":{"type":"string","maxLength":512,"minLength":1,"title":"Apptoken"},"merchantId":{"type":"string","maxLength":100,"minLength":1,"title":"Merchantid","description":"Platform-specific merchant/company identifier"},"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name","description":"Human-readable merchant/company name"},"platform":{"$ref":"#/components/schemas/PlatformProvider","default":"eposnow"},"locationId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Locationid","description":"Platform-specific location identifier"},"locationName":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Locationname"},"programId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Programid","description":"Linked LoyaltyDog programme ID (per location)"},"userId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Userid","description":"Optional LoyaltyDog User ID to link/onboard this merchant"},"role":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Role","description":"Role of the merchant"},"cashierId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Cashierid","description":"Platform-specific cashier identifier"},"terminalId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Terminalid","description":"Platform-specific terminal identifier"}},"type":"object","required":["appToken","merchantId"],"title":"InitMerchantSessionRequest","description":"Payload sent by eposn-giftcards after resolving a platform token.\n\nFields are intentionally generic so that EPOS Now, Shopify, and future\nplatforms all use the same endpoint."},"LanguagePreferenceUpdate":{"properties":{"languageCode":{"type":"string","maxLength":10,"minLength":2,"title":"Languagecode","description":"Language code (e.g., 'en-US', 'es-ES')"}},"type":"object","required":["languageCode"],"title":"LanguagePreferenceUpdate","description":"Request model for updating language preference."},"LanguageResponse":{"properties":{"code":{"type":"string","title":"Code","description":"Language code (e.g., 'en-US', 'es-ES')"},"name":{"type":"string","title":"Name","description":"Language name (e.g., 'English (US)', 'Spanish (Spain)')"},"flag":{"type":"string","title":"Flag","description":"Flag emoji"},"nativeName":{"type":"string","title":"Nativename","description":"Native language name"}},"type":"object","required":["code","name","flag","nativeName"],"title":"LanguageResponse","description":"Language information for API responses."},"LocalizationHealthResponse":{"properties":{"i18nLoaded":{"type":"boolean","title":"I18Nloaded","description":"True if the real @loyaltydog/i18n package loaded (not the empty fallback)"},"enUSCommonKeyCount":{"type":"integer","title":"Enuscommonkeycount","description":"Number of top-level keys in en-US 'common' (0 if not loaded)"}},"type":"object","required":["i18nLoaded","enUSCommonKeyCount"],"title":"LocalizationHealthResponse","description":"Health signal for the translation-delivery pipeline."},"LogoutRequest":{"properties":{"sessionToken":{"type":"string","maxLength":128,"minLength":1,"title":"Sessiontoken","description":"Session token to invalidate"}},"type":"object","required":["sessionToken"],"title":"LogoutRequest","description":"Request to logout (invalidate a session)."},"LogoutResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["success"],"title":"LogoutResponse"},"MerchantCardStats":{"properties":{"merchantId":{"$ref":"#/components/schemas/PydanticObjectId"},"merchantName":{"type":"string","title":"Merchantname"},"cardCount":{"type":"integer","title":"Cardcount"},"transactionVolume":{"type":"string","title":"Transactionvolume"}},"type":"object","required":["merchantId","merchantName","cardCount","transactionVolume"],"title":"MerchantCardStats"},"MerchantLanguageUpdateResponse":{"properties":{"id":{"$ref":"#/components/schemas/PydanticObjectId"},"sid":{"type":"string","title":"Sid"},"defaultLanguage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Defaultlanguage"},"languagePreference":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Languagepreference","description":"Language preference info"}},"type":"object","required":["id","sid","defaultLanguage"],"title":"MerchantLanguageUpdateResponse","description":"Response model for merchant language update."},"MerchantLocationResponse":{"properties":{"locationId":{"type":"string","title":"Locationid"},"locationName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locationname"},"lastSeenAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastseenat"},"programId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Programid"}},"type":"object","required":["locationId","locationName","lastSeenAt","programId"],"title":"MerchantLocationResponse"},"MerchantSessionResponse":{"properties":{"id":{"type":"string","title":"Id"},"merchantId":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"platform":{"type":"string","title":"Platform"},"programId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Programid"},"active":{"type":"boolean","title":"Active"},"locationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locationid"},"locationName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locationname"},"locations":{"items":{"$ref":"#/components/schemas/MerchantLocationResponse"},"type":"array","title":"Locations"},"cashierId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cashierid"},"terminalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terminalid"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"sessionToken":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sessiontoken"}},"type":"object","required":["id","merchantId","name","platform","programId","active","locationId","locationName","locations"],"title":"MerchantSessionResponse","description":"Returned after a successful merchant session init or validation.\n\nContains everything needed to populate the eposn-giftcards session\nwithout an additional core_api round-trip."},"MerchantThemeResponse":{"properties":{"theme":{"$ref":"#/components/schemas/GiftCardMerchantTheme"}},"type":"object","required":["theme"],"title":"MerchantThemeResponse"},"Message":{"properties":{"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"}},"type":"object","required":["role","content"],"title":"Message"},"MetricsResponse":{"properties":{"activeMembers":{"type":"integer","title":"Activemembers"},"redemptions":{"type":"integer","title":"Redemptions"},"engagementRate":{"type":"number","title":"Engagementrate"},"pointsIssued":{"type":"integer","title":"Pointsissued"},"currencyEquivalent":{"type":"number","title":"Currencyequivalent"},"trends":{"$ref":"#/components/schemas/MetricsTrend"}},"type":"object","required":["activeMembers","redemptions","engagementRate","pointsIssued","currencyEquivalent","trends"],"title":"MetricsResponse"},"MetricsTrend":{"properties":{"activeMembers":{"type":"number","title":"Activemembers"},"redemptions":{"type":"number","title":"Redemptions"},"engagementRate":{"type":"number","title":"Engagementrate"},"pointsIssued":{"type":"number","title":"Pointsissued"}},"type":"object","required":["activeMembers","redemptions","engagementRate","pointsIssued"],"title":"MetricsTrend"},"MfaCodeRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"MfaCodeRequest"},"MfaLoginVerifyRequest":{"properties":{"pendingToken":{"type":"string","title":"Pendingtoken"},"code":{"type":"string","title":"Code"}},"type":"object","required":["pendingToken","code"],"title":"MfaLoginVerifyRequest"},"MfaSetupResponse":{"properties":{"secret":{"type":"string","title":"Secret"},"otpUri":{"type":"string","title":"Otpuri"}},"type":"object","required":["secret","otpUri"],"title":"MfaSetupResponse"},"MfaStatusResponse":{"properties":{"mfaEnabled":{"type":"boolean","title":"Mfaenabled"},"mfaEnrolledAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mfaenrolledat"}},"type":"object","required":["mfaEnabled"],"title":"MfaStatusResponse"},"NetworkOverviewResponse":{"properties":{"totalMerchants":{"type":"integer","title":"Totalmerchants"},"totalCards":{"type":"integer","title":"Totalcards"},"totalTransactionVolume":{"type":"string","title":"Totaltransactionvolume"},"activeCards":{"type":"integer","title":"Activecards"},"totalTransactions":{"type":"integer","title":"Totaltransactions"},"merchantBreakdowns":{"items":{"$ref":"#/components/schemas/MerchantCardStats"},"type":"array","title":"Merchantbreakdowns"},"salesGrowth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salesgrowth"},"salesGrowthType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salesgrowthtype"},"merchantGrowth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchantgrowth"},"merchantGrowthType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchantgrowthtype"},"cardGrowth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cardgrowth"},"cardGrowthType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cardgrowthtype"},"txGrowth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Txgrowth"},"txGrowthType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Txgrowthtype"},"adoptionData":{"items":{"$ref":"#/components/schemas/AdoptionDataPoint"},"type":"array","title":"Adoptiondata"},"revenueData":{"items":{"$ref":"#/components/schemas/RevenueDataPoint"},"type":"array","title":"Revenuedata"},"breakage":{"anyOf":[{"$ref":"#/components/schemas/BreakageData"},{"type":"null"}]},"txFeeRevenue":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Txfeerevenue"},"ltvUplift":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ltvuplift"},"healthTxSuccessRate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Healthtxsuccessrate"},"healthFraudAlerts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Healthfraudalerts"},"healthSupportTickets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Healthsupporttickets"}},"type":"object","required":["totalMerchants","totalCards","totalTransactionVolume","activeCards","totalTransactions","merchantBreakdowns"],"title":"NetworkOverviewResponse"},"OAuth2Token":{"properties":{"accessToken":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accesstoken"},"tokenType":{"type":"string","title":"Tokentype","default":"bearer"},"mfaPending":{"type":"boolean","title":"Mfapending","default":false},"pendingToken":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pendingtoken"}},"type":"object","title":"OAuth2Token"},"OfferPriceRule":{"type":"string","enum":["min","max","none"],"title":"OfferPriceRule"},"OfferType":{"type":"string","enum":["fixed","percent","other"],"title":"OfferType"},"PassBarcode":{"properties":{"format":{"$ref":"#/components/schemas/PassBarcodeFormat"},"message":{"type":"string","title":"Message"},"messageEncoding":{"type":"string","title":"Messageencoding","default":"iso-8859-1"},"altText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alttext"},"verifier":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Verifier"},"disabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Disabled"}},"type":"object","required":["format","message"],"title":"PassBarcode"},"PassBarcodeFormat":{"type":"string","enum":["PKBarcodeFormatPDF417","PKBarcodeFormatQR","PKBarcodeFormatAztec","PKBarcodeFormatCode128"],"title":"PassBarcodeFormat","description":"The pass barcodes have 2 fields, 'barcode' is legacy so limit it to the legacy formats, 'barcodes' supports all.\nLegacy formats: PDF417, QR, and AZTEC"},"PassBeacon":{"properties":{"proximityUUID":{"type":"string","title":"Proximityuuid"},"major":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Major"},"minor":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minor"},"relevantText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Relevanttext"}},"type":"object","required":["proximityUUID"],"title":"PassBeacon"},"PassCard":{"properties":{"serialNumber":{"type":"string","title":"Serialnumber"},"passTypeIdentifier":{"type":"string","title":"Passtypeidentifier"},"url":{"type":"string","minLength":1,"format":"uri","title":"Url"}},"type":"object","required":["serialNumber","passTypeIdentifier","url"],"title":"PassCard","description":"The customer card object\n\nAttributes:\n    serialNumber (str): The serial number of the customer pass\n    passTypeIdentifier (str): The pass type identifier of the customer pass\n    url (str): The shareable URL of the customer pass"},"PassDataDetectorType":{"type":"string","enum":["PKDataDetectorTypePhoneNumber","PKDataDetectorTypeLink","PKDataDetectorTypeAddress","PKDataDetectorTypeCalendarEvent"],"title":"PassDataDetectorType"},"PassDateStyle":{"type":"string","enum":["PKDateStyleNone","PKDateStyleShort","PKDateStyleMedium","PKDateStyleLong","PKDateStyleFull"],"title":"PassDateStyle"},"PassField":{"properties":{"key":{"type":"string","title":"Key"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"}],"title":"Value"},"attributedValue":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Attributedvalue"},"changeMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Changemessage"},"textAlignment":{"anyOf":[{"$ref":"#/components/schemas/PassTextAlignment"},{"type":"null"}]},"dataDetectorTypes":{"anyOf":[{"items":{"$ref":"#/components/schemas/PassDataDetectorType"},"type":"array"},{"type":"null"}],"title":"Datadetectortypes"},"dateStyle":{"anyOf":[{"$ref":"#/components/schemas/PassDateStyle"},{"type":"null"}]},"timeStyle":{"anyOf":[{"$ref":"#/components/schemas/PassDateStyle"},{"type":"null"}]},"isRelative":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Isrelative"},"ignoresTimeZone":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ignorestimezone"},"numberStyle":{"anyOf":[{"$ref":"#/components/schemas/PassNumberStyle"},{"type":"null"}]},"currencyCode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currencycode"},"googleHideOnCard":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Googlehideoncard"},"googleHideOnBack":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Googlehideonback"},"googleFieldType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Googlefieldtype"},"googleUri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Googleuri"},"googleLabel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Googlelabel"},"googleValue":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Googlevalue"}},"type":"object","required":["key","value"],"title":"PassField"},"PassImageResolution":{"type":"string","enum":["normal","high","ultra"],"title":"PassImageResolution"},"PassImageType":{"type":"string","enum":["logo","icon","strip","footer","background","thumbnail"],"title":"PassImageType","description":"Supported images\n    Boarding pass:  logo, icon, footer\n    Coupon:         logo, icon, strip\n    Event ticket:   logo, icon, strip, background, thumbnail\n                    If you specify a strip image, do not specify a background image or a thumbnail.\n    Generic:        logo, icon, thumbnail\n    Store card:     logo, icon, strip\n\nArgs:\n    StrEnum (_type_): _description_"},"PassInformation":{"properties":{"headerFields":{"items":{"$ref":"#/components/schemas/PassField"},"type":"array","title":"Headerfields"},"primaryFields":{"items":{"$ref":"#/components/schemas/PassField"},"type":"array","title":"Primaryfields"},"secondaryFields":{"items":{"$ref":"#/components/schemas/PassField"},"type":"array","title":"Secondaryfields"},"backFields":{"items":{"$ref":"#/components/schemas/PassField"},"type":"array","title":"Backfields"},"auxiliaryFields":{"items":{"$ref":"#/components/schemas/PassField"},"type":"array","title":"Auxiliaryfields"},"transitType":{"anyOf":[{"$ref":"#/components/schemas/PassTransitType"},{"type":"null"}]}},"type":"object","title":"PassInformation"},"PassLocation":{"properties":{"latitude":{"type":"number","title":"Latitude","default":0.0},"longitude":{"type":"number","title":"Longitude","default":0.0},"altitude":{"type":"number","title":"Altitude","default":0.0},"distance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance"},"relevantText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Relevanttext"}},"type":"object","title":"PassLocation"},"PassNumberStyle":{"type":"string","enum":["PKNumberStyleDecimal","PKNumberStylePercent","PKNumberStyleScientific","PKNumberStyleSpellOut"],"title":"PassNumberStyle"},"PassScannerType":{"type":"string","enum":["Browser","PassVerifier","CodeReadr","None"],"title":"PassScannerType"},"PassSharing":{"properties":{"method":{"$ref":"#/components/schemas/PassSharingMethod","default":"PKPassSharingMethodDisabled"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"}},"type":"object","title":"PassSharing"},"PassSharingMethod":{"type":"string","enum":["PKPassSharingMethodURL","PKPassSharingMethodDisabled"],"title":"PassSharingMethod"},"PassStatus":{"type":"string","enum":["valid","invalid","redeemed","expired","unpaid","locked","incomplete"],"title":"PassStatus"},"PassTextAlignment":{"type":"string","enum":["PKTextAlignmentLeft","PKTextAlignmentCenter","PKTextAlignmentRight","PKTextAlignmentJustified","PKTextAlignmentNatural"],"title":"PassTextAlignment"},"PassTransitType":{"type":"string","enum":["PKTransitTypeAir","PKTransitTypeTrain","PKTransitTypeBus","PKTransitTypeBoat","PKTransitTypeGeneric"],"title":"PassTransitType"},"PlatformProvider":{"type":"string","enum":["eposnow","shopify","clover","wordpress"],"title":"PlatformProvider"},"ProgramSchemaType":{"type":"string","enum":["stampCard","tieredMembership","specialOffers","custom"],"title":"ProgramSchemaType"},"ProgramType":{"type":"string","enum":["loyalty","giftcard"],"title":"ProgramType"},"PublishTermsVersionPayload":{"properties":{"documentType":{"$ref":"#/components/schemas/TermsDocumentType"},"version":{"type":"string","maxLength":50,"minLength":1,"title":"Version"},"effectiveDate":{"type":"string","format":"date-time","title":"Effectivedate"},"contentUrl":{"type":"string","minLength":1,"title":"Contenturl"},"summaryOfChanges":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summaryofchanges"}},"type":"object","required":["documentType","version","effectiveDate","contentUrl"],"title":"PublishTermsVersionPayload"},"PydanticObjectId":{"type":"string","maxLength":24,"minLength":24,"pattern":"^[0-9a-f]{24}$","example":"5eb7cf5a86d9755df3a6c593"},"RecordConsentsPayload":{"properties":{"consents":{"items":{"$ref":"#/components/schemas/ConsentInput"},"type":"array","minItems":1,"title":"Consents"},"policyVersion":{"type":"string","minLength":1,"title":"Policyversion"}},"type":"object","required":["consents","policyVersion"],"title":"RecordConsentsPayload","description":"Request body for POST /customers/{id}/consents.\n\nAttributes:\n    consents: One or more consent decisions to record.\n    policyVersion: Version of the policy document the customer is consenting to."},"RedeemGiftCardRequest":{"properties":{"amount":{"anyOf":[{"type":"number","minimum":0.01},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Amount"},"posTransactionId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Postransactionid"},"cashierId":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Cashierid"},"terminalId":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Terminalid"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"}},"type":"object","required":["amount"],"title":"RedeemGiftCardRequest"},"RedeemResponse":{"properties":{"transactionId":{"$ref":"#/components/schemas/PydanticObjectId"},"giftCardId":{"$ref":"#/components/schemas/PydanticObjectId"},"amountRedeemed":{"type":"string","title":"Amountredeemed"},"remainingBalance":{"type":"string","title":"Remainingbalance"},"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["transactionId","giftCardId","amountRedeemed","remainingBalance","success","message"],"title":"RedeemResponse"},"RefundGiftCardRequest":{"properties":{"amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Amount"},"reason":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Reason"},"posTransactionId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Postransactionid"}},"type":"object","title":"RefundGiftCardRequest"},"RefundResponse":{"properties":{"transactionId":{"$ref":"#/components/schemas/PydanticObjectId"},"giftCardId":{"$ref":"#/components/schemas/PydanticObjectId"},"refundedAmount":{"type":"string","title":"Refundedamount"},"remainingBalance":{"type":"string","title":"Remainingbalance"},"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["transactionId","giftCardId","refundedAmount","remainingBalance","success","message"],"title":"RefundResponse"},"ReloadByCardNumberRequest":{"properties":{"cardNumber":{"type":"string","maxLength":20,"title":"Cardnumber"},"amount":{"anyOf":[{"type":"number","maximum":5000.0,"minimum":0.01},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Amount"},"referenceId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Referenceid"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"}},"type":"object","required":["cardNumber","amount"],"title":"ReloadByCardNumberRequest"},"ReloadGiftCardRequest":{"properties":{"amount":{"anyOf":[{"type":"number","maximum":5000.0,"minimum":0.01},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Amount"},"referenceId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Referenceid"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"}},"type":"object","required":["amount"],"title":"ReloadGiftCardRequest"},"ResendSecurityCodeRequest":{"properties":{"customerEmail":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Customeremail"},"customerPhone":{"anyOf":[{"type":"string","format":"phone"},{"type":"null"}],"title":"Customerphone"},"senderName":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Sendername"},"customMessage":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Custommessage"}},"type":"object","title":"ResendSecurityCodeRequest"},"ReturningUserRestrictionType":{"type":"string","enum":["user_decides","show_existing","create_new"],"title":"ReturningUserRestrictionType"},"RevenueDataPoint":{"properties":{"label":{"type":"string","title":"Label"},"value":{"type":"integer","title":"Value"}},"type":"object","required":["label","value"],"title":"RevenueDataPoint"},"RightToErasureRequest":{"properties":{"customerId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customerid"},"customerEmail":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Customeremail"},"reason":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Reason"}},"type":"object","title":"RightToErasureRequest"},"RightToErasureResponse":{"properties":{"requestId":{"type":"string","title":"Requestid"},"status":{"type":"string","title":"Status"},"affectedCards":{"items":{"type":"string"},"type":"array","title":"Affectedcards"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completedat"},"message":{"type":"string","title":"Message"}},"type":"object","required":["requestId","status","affectedCards","message"],"title":"RightToErasureResponse"},"SaveMerchantSettingsRequest":{"properties":{"programId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Programid","description":"LoyaltyDog programme ID to link to the active location"},"locationId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Locationid","description":"Location to update; defaults to the first location if omitted"},"merchantId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Merchantid","description":"User ID of the merchant"}},"type":"object","title":"SaveMerchantSettingsRequest","description":"Payload for saving per-location merchant settings."},"SaveMerchantThemeResponse":{"properties":{"theme":{"$ref":"#/components/schemas/GiftCardMerchantTheme"},"validation":{"additionalProperties":{"items":{"$ref":"#/components/schemas/ThemeValidationIssue"},"type":"array"},"type":"object","title":"Validation"},"performance":{"$ref":"#/components/schemas/ThemePerformanceReport"}},"type":"object","required":["theme","validation","performance"],"title":"SaveMerchantThemeResponse"},"ScheduleGiftCardDeliveryRequest":{"properties":{"deliverAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deliverat"}},"type":"object","title":"ScheduleGiftCardDeliveryRequest"},"ScheduleReportRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"frequency":{"type":"string","pattern":"^(daily|weekly|monthly)$","title":"Frequency"},"dayOfWeek":{"anyOf":[{"type":"integer","maximum":6.0,"minimum":0.0},{"type":"null"}],"title":"Dayofweek"},"dayOfMonth":{"anyOf":[{"type":"integer","maximum":28.0,"minimum":1.0},{"type":"null"}],"title":"Dayofmonth"},"hourUtc":{"type":"integer","maximum":23.0,"minimum":0.0,"title":"Hourutc","default":0},"format":{"type":"string","pattern":"^(csv|excel|json|pdf)$","title":"Format"},"recipients":{"items":{"type":"string","format":"email"},"type":"array","maxItems":20,"minItems":1,"title":"Recipients"},"metrics":{"items":{"type":"string"},"type":"array","title":"Metrics"},"includePrivacyNotice":{"type":"boolean","title":"Includeprivacynotice","default":false}},"type":"object","required":["name","frequency","format","recipients"],"title":"ScheduleReportRequest"},"SendOTPRequest":{"properties":{"target":{"type":"string","maxLength":255,"minLength":1,"title":"Target","description":"Email address or phone number to send OTP to"}},"type":"object","required":["target"],"title":"SendOTPRequest","description":"Request to send an OTP to an email or phone number."},"SendOTPResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"otpType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Otptype"},"mockCode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mockcode"}},"type":"object","required":["success"],"title":"SendOTPResponse"},"SetIntegrationChoiceRequest":{"properties":{"integration":{"type":"string","enum":["wordpress","standalone"],"title":"Integration"}},"type":"object","required":["integration"],"title":"SetIntegrationChoiceRequest"},"SetIntegrationChoiceResponse":{"properties":{"integrationChoice":{"type":"string","title":"Integrationchoice"},"signupExpiresAt":{"type":"string","format":"date-time","title":"Signupexpiresat"}},"type":"object","required":["integrationChoice","signupExpiresAt"],"title":"SetIntegrationChoiceResponse"},"SuspendGiftCardRequest":{"properties":{"reason":{"type":"string","maxLength":500,"minLength":1,"title":"Reason"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiresat"}},"type":"object","required":["reason"],"title":"SuspendGiftCardRequest"},"TemplateAction":{"properties":{"redeem":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Redeem"},"reactivate":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reactivate"},"updateFields":{"items":{"type":"string"},"type":"array","title":"Updatefields"}},"type":"object","title":"TemplateAction"},"TemplateBranding":{"properties":{"titleText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Titletext"},"headerText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headertext"},"bodyTextColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bodytextcolor"},"footerTextColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Footertextcolor"},"footerBackgroundColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Footerbackgroundcolor"},"footerImage":{"anyOf":[{"$ref":"#/components/schemas/ImageObject"},{"type":"null"}]}},"type":"object","title":"TemplateBranding"},"TemplatePass":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","default":""},"suppressStripShine":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Suppressstripshine"},"sharing":{"anyOf":[{"$ref":"#/components/schemas/PassSharing"},{"type":"null"}]},"appLaunchURL":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applaunchurl"},"associatedApps":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Associatedapps"},"associatedStoreIdentifiers":{"items":{"type":"integer"},"type":"array","title":"Associatedstoreidentifiers"},"associatedPlayIdentifiers":{"items":{"type":"string"},"type":"array","title":"Associatedplayidentifiers"},"beacons":{"items":{"$ref":"#/components/schemas/PassBeacon"},"type":"array","title":"Beacons"},"locations":{"items":{"$ref":"#/components/schemas/PassLocation"},"type":"array","title":"Locations"},"barcodes":{"items":{"$ref":"#/components/schemas/PassBarcode"},"type":"array","title":"Barcodes"},"barcode":{"anyOf":[{"$ref":"#/components/schemas/PassBarcode"},{"type":"null"}]},"labelColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Labelcolor"},"backgroundColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backgroundcolor"},"foregroundColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Foregroundcolor"},"logoText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logotext"},"relevantDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Relevantdate"},"expirationDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expirationdate"},"voided":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Voided"},"userInfo":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Userinfo"},"generic":{"anyOf":[{"$ref":"#/components/schemas/PassInformation"},{"type":"null"}]},"coupon":{"anyOf":[{"$ref":"#/components/schemas/PassInformation"},{"type":"null"}]},"storeCard":{"anyOf":[{"$ref":"#/components/schemas/PassInformation"},{"type":"null"}]},"eventTicket":{"anyOf":[{"$ref":"#/components/schemas/PassInformation"},{"type":"null"}]},"boardingPass":{"anyOf":[{"$ref":"#/components/schemas/PassInformation"},{"type":"null"}]}},"type":"object","title":"TemplatePass"},"TemplatePayment":{"properties":{"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"provider":{"anyOf":[{"$ref":"#/components/schemas/TemplatePaymentProvider"},{"type":"null"}]},"providerSettings":{"anyOf":[{"$ref":"#/components/schemas/TemplatePaymentSettings"},{"type":"null"}]}},"type":"object","title":"TemplatePayment"},"TemplatePaymentProvider":{"type":"string","enum":["PayPalNVP","Stripe","PAYMILL"],"title":"TemplatePaymentProvider"},"TemplatePaymentSettings":{"properties":{"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature"},"sandbox":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sandbox"},"itemName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Itemname"},"publishableKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publishablekey"},"secretKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secretkey"},"publicKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publickey"},"privateKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privatekey"}},"type":"object","title":"TemplatePaymentSettings"},"TemplatePlaceholder":{"properties":{"name":{"type":"string","title":"Name"},"type":{"$ref":"#/components/schemas/TemplatePlaceholderType","default":"text"},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayname"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Defaultvalue"},"points":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Points"},"options":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Options"},"required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Required"}},"type":"object","required":["name"],"title":"TemplatePlaceholder"},"TemplatePlaceholderType":{"type":"string","enum":["text","email","number","date","selection","json"],"title":"TemplatePlaceholderType"},"TemplateRestrictions":{"properties":{"quantityRestriction":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantityrestriction"},"redemptionRestriction":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Redemptionrestriction"},"passwordProtection":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passwordprotection"},"sharingRestriction":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sharingrestriction"},"dateRestriction":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Daterestriction"},"returningUserRestriction":{"anyOf":[{"$ref":"#/components/schemas/ReturningUserRestrictionType"},{"type":"null"}]},"passSharingMethod":{"anyOf":[{"$ref":"#/components/schemas/TemplateSharingMethod"},{"type":"null"}]}},"type":"object","title":"TemplateRestrictions"},"TemplateSharingMethod":{"type":"string","enum":["pass","url","disabled"],"title":"TemplateSharingMethod"},"TemplateStripImage":{"properties":{"generator":{"anyOf":[{"$ref":"#/components/schemas/TemplateStripImageGenerator"},{"type":"null"}]},"placeholder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Placeholder"},"stamps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stamps"},"backgroundColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backgroundcolor"},"backgroundImage":{"anyOf":[{"$ref":"#/components/schemas/ImageObject"},{"type":"null"}]},"stampedColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stampedcolor"},"stampedImage":{"anyOf":[{"$ref":"#/components/schemas/ImageObject"},{"type":"null"}]},"unstampedColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unstampedcolor"},"unstampedImage":{"anyOf":[{"$ref":"#/components/schemas/ImageObject"},{"type":"null"}]}},"type":"object","title":"TemplateStripImage"},"TemplateStripImageGenerator":{"type":"string","enum":["stamp"],"title":"TemplateStripImageGenerator"},"TemplateTranslation":{"properties":{"baseLanguage":{"type":"string","title":"Baselanguage","default":"en"},"strings":{"additionalProperties":{"additionalProperties":{"type":"string"},"type":"object"},"type":"object","title":"Strings"}},"type":"object","title":"TemplateTranslation"},"TermsDocumentType":{"type":"string","enum":["tos","dpa","privacy"],"title":"TermsDocumentType"},"ThemePerformanceIssue":{"properties":{"severity":{"type":"string","title":"Severity"},"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"estimatedMs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimatedms"}},"type":"object","required":["severity","code","message"],"title":"ThemePerformanceIssue"},"ThemePerformanceReport":{"properties":{"cssVarChanges":{"type":"integer","title":"Cssvarchanges"},"hasCustomFont":{"type":"boolean","title":"Hascustomfont"},"hasLargeLogo":{"type":"boolean","title":"Haslargelogo"},"issues":{"items":{"$ref":"#/components/schemas/ThemePerformanceIssue"},"type":"array","title":"Issues"},"score":{"type":"integer","title":"Score"}},"type":"object","required":["cssVarChanges","hasCustomFont","hasLargeLogo","issues","score"],"title":"ThemePerformanceReport"},"ThemeValidationIssue":{"properties":{"field":{"type":"string","title":"Field"},"severity":{"type":"string","title":"Severity"},"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"}},"type":"object","required":["field","severity","code","message"],"title":"ThemeValidationIssue"},"TransactionResponse":{"properties":{"id":{"$ref":"#/components/schemas/PydanticObjectId"},"transactionType":{"$ref":"#/components/schemas/GiftCardTransactionType"},"amount":{"type":"string","title":"Amount"},"balanceBefore":{"type":"string","title":"Balancebefore"},"balanceAfter":{"type":"string","title":"Balanceafter"},"referenceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referenceid"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"processedAt":{"type":"string","format":"date-time","title":"Processedat"},"merchantId":{"$ref":"#/components/schemas/PydanticObjectId"},"posTransactionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postransactionid"},"cashierId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cashierid"},"terminalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terminalid"}},"type":"object","required":["id","transactionType","amount","balanceBefore","balanceAfter","referenceId","description","createdAt","processedAt","merchantId","posTransactionId","cashierId","terminalId"],"title":"TransactionResponse"},"TransferBalanceDestCard":{"properties":{"id":{"$ref":"#/components/schemas/PydanticObjectId"},"cardNumber":{"type":"string","title":"Cardnumber"},"newBalance":{"type":"string","title":"Newbalance"}},"type":"object","required":["id","cardNumber","newBalance"],"title":"TransferBalanceDestCard"},"TransferBalanceRequest":{"properties":{"securityCode":{"type":"string","maxLength":6,"minLength":6,"title":"Securitycode"},"destinationCardNumber":{"type":"string","maxLength":20,"title":"Destinationcardnumber"},"amount":{"anyOf":[{"type":"number","maximum":5000.0,"minimum":0.01},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Amount"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"referenceId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Referenceid"}},"type":"object","required":["securityCode","destinationCardNumber","amount"],"title":"TransferBalanceRequest"},"TransferBalanceResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"transferId":{"type":"string","title":"Transferid"},"sourceCard":{"$ref":"#/components/schemas/TransferBalanceSourceCard"},"destinationCard":{"$ref":"#/components/schemas/TransferBalanceDestCard"},"amountTransferred":{"type":"string","title":"Amounttransferred"}},"type":"object","required":["success","message","transferId","sourceCard","destinationCard","amountTransferred"],"title":"TransferBalanceResponse"},"TransferBalanceSourceCard":{"properties":{"id":{"$ref":"#/components/schemas/PydanticObjectId"},"cardNumber":{"type":"string","title":"Cardnumber"},"remainingBalance":{"type":"string","title":"Remainingbalance"},"status":{"$ref":"#/components/schemas/GiftCardStatus"}},"type":"object","required":["id","cardNumber","remainingBalance","status"],"title":"TransferBalanceSourceCard"},"TransferOwnershipRequest":{"properties":{"newOwnerName":{"type":"string","maxLength":255,"minLength":1,"title":"Newownername"},"newOwnerEmail":{"type":"string","format":"email","title":"Newowneremail"},"newCustomerId":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}]},"referenceId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Referenceid"}},"type":"object","required":["newOwnerName","newOwnerEmail"],"title":"TransferOwnershipRequest"},"TranslationsResponse":{"properties":{"languageCode":{"type":"string","title":"Languagecode"},"common":{"additionalProperties":true,"type":"object","title":"Common"},"errors":{"additionalProperties":true,"type":"object","title":"Errors"},"validation":{"additionalProperties":true,"type":"object","title":"Validation"},"notifications":{"additionalProperties":true,"type":"object","title":"Notifications"},"emails":{"additionalProperties":true,"type":"object","title":"Emails"}},"type":"object","required":["languageCode"],"title":"TranslationsResponse","description":"Response model for translations."},"UnsuspendGiftCardRequest":{"properties":{},"type":"object","title":"UnsuspendGiftCardRequest"},"UpdateBreachPayload":{"properties":{"affectedRecords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Affectedrecords"},"dataCategories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Datacategories"},"measuresTaken":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measurestaken"},"status":{"anyOf":[{"$ref":"#/components/schemas/BreachStatus"},{"type":"null"}]}},"type":"object","title":"UpdateBreachPayload"},"UpdateCustomerPayload":{"properties":{"firstName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","format":"phone"},{"type":"null"}],"title":"Phone"},"points":{"type":"integer","title":"Points","default":0},"currentMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currentmessage"},"customFields":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Customfields"}},"type":"object","title":"UpdateCustomerPayload","description":"The customer updating payload\n\nAttributes:\n    firstName (str | None, optional): The first name of the customer. Defaults to None\n    lastName (str | None, optional): The last name of the customer. Defaults to None\n    email (str | None, optional): The email address of the customer. Defaults to None\n    phone (str | None, optional): The E164 phone number of the customer. Defaults to None\n    customFields (Dict | None, optional): The values of the custom fields. Defaults to None"},"UpdateFraudRuleRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"action":{"anyOf":[{"$ref":"#/components/schemas/FraudRuleAction"},{"type":"null"}]},"isActive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Isactive"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiresat"}},"type":"object","title":"UpdateFraudRuleRequest"},"UpdatePassScannerPayload":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"type":{"anyOf":[{"$ref":"#/components/schemas/PassScannerType"},{"type":"null"}]},"fullAccess":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Fullaccess"},"pin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pin"},"allowedTemplates":{"anyOf":[{"items":{"$ref":"#/components/schemas/PydanticObjectId"},"type":"array"},{"type":"null"}],"title":"Allowedtemplates"}},"type":"object","title":"UpdatePassScannerPayload"},"UpdateProgramPayload":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"website":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Website"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"terms":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms"},"pointsAddEmail":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointsaddemail"},"pointsAddPhone":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointsaddphone"},"pointsInstallPass":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointsinstallpass"},"pointsScanPass":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointsscanpass"},"dynamicScanPoints":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Dynamicscanpoints"},"pointsReferral":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pointsreferral"},"referralRequiredPoints":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Referralrequiredpoints"},"scannerType":{"anyOf":[{"$ref":"#/components/schemas/PassScannerType"},{"type":"null"}]},"customPointsChangeMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custompointschangemessage"},"disableCustomPointsChangeMessage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Disablecustompointschangemessage"},"customPointName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custompointname"},"customPointsName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custompointsname"},"customFields":{"items":{"$ref":"#/components/schemas/TemplatePlaceholder"},"type":"array","title":"Customfields","default":[]},"requiredFields":{"items":{"type":"string"},"type":"array","title":"Requiredfields","default":[]},"retention_period_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":0.0},{"type":"null"}],"title":"Retention Period Days","description":"Days to retain deleted data (0-365)"}},"type":"object","title":"UpdateProgramPayload"},"UpdateTemplatePayload":{"properties":{"name":{"type":"string","title":"Name"},"passType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passtype"},"description":{"anyOf":[{"$ref":"#/components/schemas/TemplatePass"},{"type":"null"}]},"disablePush":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Disablepush"},"placeholders":{"anyOf":[{"items":{"$ref":"#/components/schemas/TemplatePlaceholder"},"type":"array"},{"type":"null"}],"title":"Placeholders"},"branding":{"anyOf":[{"$ref":"#/components/schemas/TemplateBranding"},{"type":"null"}]},"payment":{"anyOf":[{"$ref":"#/components/schemas/TemplatePayment"},{"type":"null"}]},"restrictions":{"anyOf":[{"$ref":"#/components/schemas/TemplateRestrictions"},{"type":"null"}]},"actions":{"anyOf":[{"$ref":"#/components/schemas/TemplateAction"},{"type":"null"}]},"translations":{"anyOf":[{"$ref":"#/components/schemas/TemplateTranslation"},{"type":"null"}]},"allowPassImages":{"anyOf":[{"items":{"$ref":"#/components/schemas/PassImageType"},"type":"array"},{"type":"null"}],"title":"Allowpassimages"},"stripImage":{"anyOf":[{"$ref":"#/components/schemas/TemplateStripImage"},{"type":"null"}]}},"type":"object","required":["name"],"title":"UpdateTemplatePayload"},"UserRead":{"properties":{"id":{"$ref":"#/components/schemas/PydanticObjectId"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"type":"string","format":"email","title":"Email"},"emailVerified":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Emailverified"},"active":{"type":"boolean","title":"Active","default":true},"admin":{"type":"boolean","title":"Admin","default":false},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"}},"type":"object","required":["id","email"],"title":"UserRead"},"UtmPayload":{"properties":{"source":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Source"},"medium":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Medium"},"campaign":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Campaign"}},"type":"object","title":"UtmPayload"},"ValidateMerchantSessionRequest":{"properties":{"sessionToken":{"type":"string","title":"Sessiontoken"}},"type":"object","required":["sessionToken"],"title":"ValidateMerchantSessionRequest"},"ValidateMerchantSessionResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"merchant":{"anyOf":[{"$ref":"#/components/schemas/MerchantSessionResponse"},{"type":"null"}]}},"type":"object","required":["valid"],"title":"ValidateMerchantSessionResponse"},"ValidateReportRequest":{"properties":{"reportType":{"type":"string","maxLength":50,"title":"Reporttype","default":"analytics"},"from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"},"to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},"type":"object","title":"ValidateReportRequest"},"ValidateSessionRequest":{"properties":{"sessionToken":{"type":"string","maxLength":128,"minLength":1,"title":"Sessiontoken","description":"Session token to validate"}},"type":"object","required":["sessionToken"],"title":"ValidateSessionRequest","description":"Request to validate a session token."},"ValidateSessionResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"identity":{"anyOf":[{"$ref":"#/components/schemas/CustomerIdentityResponse"},{"type":"null"}]}},"type":"object","required":["valid"],"title":"ValidateSessionResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyOTPRequest":{"properties":{"target":{"type":"string","maxLength":255,"minLength":1,"title":"Target","description":"Email address or phone number the OTP was sent to"},"code":{"type":"string","maxLength":6,"minLength":6,"pattern":"^\\d{6}$","title":"Code","description":"6-digit OTP code"},"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name","description":"Customer name (used during registration)"}},"type":"object","required":["target","code"],"title":"VerifyOTPRequest","description":"Request to verify an OTP code."},"VerifyOTPResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"verifiedTarget":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verifiedtarget"},"otpType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Otptype"},"sessionToken":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sessiontoken"},"identity":{"anyOf":[{"$ref":"#/components/schemas/CustomerIdentityResponse"},{"type":"null"}]}},"type":"object","required":["success"],"title":"VerifyOTPResponse"},"VoidGiftCardRequest":{"properties":{"reason":{"type":"string","maxLength":1000,"minLength":1,"title":"Reason"},"refundReference":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Refundreference"}},"type":"object","required":["reason"],"title":"VoidGiftCardRequest"},"VoucherType":{"type":"string","enum":["welcome","birthday","other"],"title":"VoucherType"},"WebhookEventType":{"type":"string","enum":["pass.created","pass.updated","pass.downloaded","pass.installed","pass.deleted","registration.created","registration.deleted","scan.performed","webhook.verify","transaction.completed","loyalty.activity.performed","loyalty.activity.reward.redeemed","loyalty.activity.points.redeemed","loyalty.activity.offer.received","loyalty.activity.offer.redeemed","loyalty.activity.offer.expired","loyalty.activity.voucher.received","loyalty.activity.voucher.redeemed","loyalty.activity.voucher.expired","loyalty.activity.points.changed","loyalty.activity.email.added","loyalty.activity.phone.added","loyalty.activity.customer.referred","loyalty.activity.custom.field.added","loyalty.activity.card.installed","loyalty.activity.card.scanned","loyalty.customer.created","loyalty.customer.updated","loyalty.customer.deleted"],"title":"WebhookEventType"}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT access token obtained from POST /v2/token."}}},"security":[{"bearerAuth":[]}]}