Owner: Dev Team | Last Updated: 2026-02-21 | Status: Current
Gift certificates -- creation, sale, and usage during booking.
Gift Cards in Booking are implemented as a special type of Experience with the flag is_gift_card = true. Upon purchase, a GiftCardTransaction is created, which can be used as a payment method when booking.
GiftCard (extends Experience, is_gift_card=true)
└── GiftCardDesign (1:N) -- certificate designs
└── GiftCardsAvailableDesign -- available templates
GiftCardTransaction -- transaction record
├── sender (Customer)
├── recipient (Customer)
├── design (GiftCardDesign)
└── orderExperience (OrderExperience)
Create GiftCard (Experience)
→ Customer purchases Gift Card
→ GiftCardTransaction created (status: active)
→ Recipient receives notification
→ Recipient uses code at checkout
→ Amount deducted from gift_card_amount_left
→ If amount_left = 0 or expires_at passed → expired
Gift Card inherits all Experience fields, plus:
| Field | Type | Description |
|---|---|---|
is_gift_card |
boolean | true |
allow_custom_price |
boolean | Allow custom amount |
allow_custom_designs |
boolean | Allow design upload |
min_custom_gift_card_price |
decimal | Minimum amount |
max_custom_gift_card_price |
decimal | Maximum amount |
| Field | Type | Description |
|---|---|---|
sender_id |
integer | Buyer (Customer) |
recipient_id |
integer | Recipient (Customer) |
order_experience_id |
integer | Link to order |
status |
string | Transaction status |
amount |
decimal | Face value |
gift_card_code |
string | Unique code |
gift_card_amount_left |
decimal | Remaining balance |
is_expired |
boolean | Whether expired |
expires_at |
datetime | Expiration date |
design_id |
integer | Selected design |
comment |
text | Comment/message |
By default, a Gift Card is valid for 90 days (configurable in BookingConstants::GIFT_CARD_VALID_DAYS).
GiftCardTransaction::expired() // where expires_at < now()
GiftCardTransaction::notExpired() // where expires_at >= now()
| Field | Type | Description |
|---|---|---|
url |
string | Design image URL |
order |
integer | Display order |
theme |
string | Design theme |
name |
string | Design name |
When booking, the customer enters the gift_card_code:
OrderGiftCard is created (linking the order with the transaction)gift_card_amount_left is decreased| Action | Notification |
|---|---|
| Gift Card purchased | SendGiftCardReceptionAction -- notification to the recipient |
| Amount running low | GiftCardAmountLeftAction -- remaining balance notification |
| File | Purpose |
|---|---|
app/Models/GiftCard.php |
Model (extends Experience) |
app/Models/GiftCardDesign.php |
Certificate designs |
app/Models/GiftCardTransaction.php |
Transactions |
app/Models/GiftCardsAvailableDesign.php |
Available designs |
app/Models/OrderGiftCard.php |
Link to order |
app/Services/GiftCardService.php |
Business logic |
app/Http/Controllers/Web/GiftCardController.php |
Web controller |
resources/js/pages/giftCards/ |
Frontend pages |
| Date | Author | Change |
|---|---|---|
| 2026-02-21 | Documentation Team | Initial creation |
Up: Guides