Promotions
Creating and managing promotions in Calry OTA
Introduction
Promotions allow you to offer discounts on listings within your workspace. A promotion defines a discount percentage, an active date range, and optionally a coupon code. You can assign specific listings to a promotion, either individually or in bulk by integration account.
Creating a Promotion
To create a promotion, you need to provide:
- name — A unique name for the promotion within your workspace
- discountPercentage — The discount percentage (0-100) applied to listing prices
- startDate and endDate — The period during which the promotion is visible/active
- bookingPeriodStart and bookingPeriodEnd — The date range for which bookings can use this promotion
- thumbnailURL — A URL for the promotion's thumbnail image
Optional fields:
- description — A description of the promotion
- city — Geographic scope for the promotion
- couponCode — A unique coupon code that guests can use to apply the promotion
{
"name": "Summer Sale 2025",
"description": "20% off all beachfront properties",
"discountPercentage": 20,
"startDate": "2025-06-01",
"endDate": "2025-08-31",
"bookingPeriodStart": "2025-06-01",
"bookingPeriodEnd": "2025-08-31",
"thumbnailURL": "https://example.com/summer-sale.jpg",
"couponCode": "SUMMER20"
}Date Validation
The following rules apply to promotion dates:
startDatemust be beforeendDatebookingPeriodStartmust be beforebookingPeriodEndstartDateandbookingPeriodStartcannot be in the past
Assigning Listings
Once a promotion is created, you need to assign listings to it. There are two approaches:
Individual Assignment
Assign specific listings by providing an array of listing IDs:
PUT /api/v1/promotions/{promotionId}/listings/assign{
"listingIDs": [
"listing-uuid-1",
"listing-uuid-2"
]
}Duplicate assignments are automatically skipped.
Bulk Assignment by Integration Account
Assign all active listings from one or more integration accounts:
PUT /api/v1/promotions/{promotionId}/integration-account/assign{
"integrationAccountIDs": [
"account-uuid-1",
"account-uuid-2"
]
}This assigns all active listings under the specified integration accounts to the promotion.
Unassigning Listings
Similarly, you can unassign listings individually or in bulk:
- Individual:
PUT /api/v1/promotions/{promotionId}/listings/unassignwith an array of listing IDs - By Integration Account:
DELETE /api/v1/promotions/{promotionId}/integration-account/unassignwith an array of integration account IDs
Viewing Promotion Listings
To see which listings are assigned to a promotion:
GET /api/v1/promotions/{promotionId}/listingsThis returns the listings with basic details including name, description, thumbnail, location, and bedroom/bathroom counts.
Promotion Status
Promotions are created with an ACTIVE status. You can update a promotion's status to INACTIVE to disable it without deleting it.
When listing promotions, use the includeInactive query parameter to include inactive promotions in the results:
GET /api/v1/promotions?includeInactive=trueHow Promotions Affect Pricing
When a promotion is applied to a listing, the discountPercentage is factored into the pricing calculations for search results, quotes, and reservations. The discount appears as a promotionDiscount in the price modifications breakdown.
When creating a reservation, you can pass the promotionID to apply the promotion discount. The system validates that the promotion is active and the listing is included in the promotion.
API Reference
For detailed API documentation, refer to the following endpoints: