curl --request POST \
--url https://api.loyalty.dog/v2/giftcards/programs/{programId}/cards/{cardId}/transfer-ownership \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"newOwnerName": "<string>",
"newOwnerEmail": "[email protected]"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({newOwnerName: '<string>', newOwnerEmail: '[email protected]'})
};
fetch('https://api.loyalty.dog/v2/giftcards/programs/{programId}/cards/{cardId}/transfer-ownership', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.loyalty.dog/v2/giftcards/programs/{programId}/cards/{cardId}/transfer-ownership"
payload = {
"newOwnerName": "<string>",
"newOwnerEmail": "[email protected]"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "5eb7cf5a86d9755df3a6c593",
"cardNumber": "<string>",
"balance": "<string>",
"initialValue": "<string>",
"status": "pending",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"activatedAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z",
"suspendedReason": "<string>",
"suspendedUntil": "2023-11-07T05:31:56Z",
"suspendedAt": "2023-11-07T05:31:56Z",
"customerId": "5eb7cf5a86d9755df3a6c593",
"customerEmail": "<string>",
"customerPhone": "<string>",
"customerName": "<string>",
"merchantId": "5eb7cf5a86d9755df3a6c593",
"isPhysical": true,
"designTemplate": "<string>",
"customMessage": "<string>",
"lastFourDigits": "<string>",
"programId": "5eb7cf5a86d9755df3a6c593",
"card": {
"serialNumber": "<string>",
"passTypeIdentifier": "<string>",
"url": "<string>"
},
"senderName": "<string>",
"merchantName": "<string>",
"deliverAt": "2023-11-07T05:31:56Z",
"delivered": false
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Transfergiftcardownership
Transfer Gift Card Ownership
Updates the cardholder details (name, email, optional customer ID) on an active gift card. Intended for merchant use when a card is gifted or resold to a new owner.
An OWNERSHIP_TRANSFER transaction is recorded for audit trail purposes.
Business Rules:
- Card must be active
- New owner email must be a valid email address (validated by Pydantic
EmailStr) - Name is sanitized to remove HTML/script content
Status Codes:
- 200: Ownership transferred successfully
- 400: Card is not active
- 404: Card not found
- 401: Unauthorized
curl --request POST \
--url https://api.loyalty.dog/v2/giftcards/programs/{programId}/cards/{cardId}/transfer-ownership \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"newOwnerName": "<string>",
"newOwnerEmail": "[email protected]"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({newOwnerName: '<string>', newOwnerEmail: '[email protected]'})
};
fetch('https://api.loyalty.dog/v2/giftcards/programs/{programId}/cards/{cardId}/transfer-ownership', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.loyalty.dog/v2/giftcards/programs/{programId}/cards/{cardId}/transfer-ownership"
payload = {
"newOwnerName": "<string>",
"newOwnerEmail": "[email protected]"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "5eb7cf5a86d9755df3a6c593",
"cardNumber": "<string>",
"balance": "<string>",
"initialValue": "<string>",
"status": "pending",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"activatedAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z",
"suspendedReason": "<string>",
"suspendedUntil": "2023-11-07T05:31:56Z",
"suspendedAt": "2023-11-07T05:31:56Z",
"customerId": "5eb7cf5a86d9755df3a6c593",
"customerEmail": "<string>",
"customerPhone": "<string>",
"customerName": "<string>",
"merchantId": "5eb7cf5a86d9755df3a6c593",
"isPhysical": true,
"designTemplate": "<string>",
"customMessage": "<string>",
"lastFourDigits": "<string>",
"programId": "5eb7cf5a86d9755df3a6c593",
"card": {
"serialNumber": "<string>",
"passTypeIdentifier": "<string>",
"url": "<string>"
},
"senderName": "<string>",
"merchantName": "<string>",
"deliverAt": "2023-11-07T05:31:56Z",
"delivered": false
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
JWT access token obtained from POST /v2/token.
Path Parameters
24^[0-9a-f]{24}$"5eb7cf5a86d9755df3a6c593"
24^[0-9a-f]{24}$"5eb7cf5a86d9755df3a6c593"
Body
Response
Successful Response
24^[0-9a-f]{24}$"5eb7cf5a86d9755df3a6c593"
Gift card status enumeration.
pending, active, suspended, expired, voided, depleted 24^[0-9a-f]{24}$"5eb7cf5a86d9755df3a6c593"
24^[0-9a-f]{24}$"5eb7cf5a86d9755df3a6c593"
24^[0-9a-f]{24}$"5eb7cf5a86d9755df3a6c593"
The customer card object
Attributes: serialNumber (str): The serial number of the customer pass passTypeIdentifier (str): The pass type identifier of the customer pass url (str): The shareable URL of the customer pass
Show child attributes
Show child attributes
