Download OpenAPI specification:
Xola booking and experience management platform API.
This API provides comprehensive functionality for managing experiences, bookings, users, events, and all aspects of the booking lifecycle for tour and activity operators.
This API supports two authentication mechanisms:
X-API-KEY
headerUse the Authorization
header for Basic auth or the X-API-KEY
header for API key authentication.
Xola's API uses a versioning scheme based on dates. The latest available version is 2025-07-07.
Specify the desired API version in the x-api-version
header for all requests:
x-api-version: 2025-07-07
Recommended: Always include the x-api-version
header in your requests to ensure consistent and predictable responses.
If the x-api-version
header is not provided, the API will use the version configured for the seller account associated with the request. This default version may differ between seller accounts, which can lead to inconsistent behavior across accounts.
For best results and to avoid unexpected changes, always specify the API version explicitly in your requests.
Retrieve a paginated list of experiences. This endpoint supports various filtering and search options.
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
seller | string Example: seller=507f1f77bcf86cd799439020 Filter by seller ID |
category | string Example: category=Water Sports Filter by category name |
search | string Example: search=kayaking Search experiences by name or description |
geo | string^-?\d+\.?\d*,-?\d+\.?\d*(,-?\d+\.?\d*)?$ Example: geo=36.1069,-112.1129,50 Geographic coordinates for location-based filtering (lat,lng or lat,lng,radius_km) |
priceSchemes_price | string^[\d\.]+(-[\d\.]+)?$ Example: priceSchemes_price=50,200 Price filtering - single value (max price) or range (min,max) |
agent | boolean Example: agent=true Filter experiences available to authenticated agent/delegate |
partnerExperiences | boolean Include experiences from partner sellers |
partnerSeller | string Example: partnerSeller=507f1f77bcf86cd799439090 Filter experiences from specific partner seller |
deleted | boolean Include soft-deleted experiences (admin only) |
sort | string^[a-zA-Z_]+(\[(asc|desc)\])?$ Examples:
Sort field with optional direction. Format: field[asc] or field[desc] |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439011",
- "object": "experience",
- "name": "Grand Canyon Kayaking Adventure",
- "desc": "Join us for an unforgettable kayaking adventure through the stunning Grand Canyon rapids.",
- "price": 149.99,
- "currency": "USD",
- "excerpt": "Thrilling kayaking through stunning canyon rapids",
- "priceType": "person",
- "category": "Water Sports",
- "complete": true,
- "visible": true,
- "seller": {
- "id": "507f1f77bcf86cd799439020"
}, - "createdAt": "2023-08-15T10:30:00Z",
- "updatedAt": "2023-08-16T14:20:00Z"
}
],
}
Create a new experience for the authenticated seller account.
name required | string [ 1 .. 255 ] characters Experience name or title |
desc | string Full description of the experience |
excerpt | string <= 500 characters Short description or summary of the experience |
price | number <float> >= 0 Base price of the experience |
currency | string^[A-Z]{3}$ Currency code (ISO 4217) |
priceType | string Default: "person" Enum: "person" "outing" Pricing scheme (per person or per outing) |
guestType | string Default: "normal" Enum: "normal" "passenger" Type of guests in this experience |
required | ObjectReference (object) or string Seller ID or reference |
category | string Category name for the experience |
duration | integer >= 1 Duration to block inventory in minutes |
eventDuration | integer >= 1 Publicly visible duration of the experience in minutes |
requireAdult | boolean Default: false Whether at least one adult is required for booking |
object (LocationInput) Location input for creating/updating geographic locations | |
pickupAddress | string <= 500 characters Pickup address for the experience |
scheduleType | string Enum: "open" "day" "time" Type of scheduling for this experience |
cancellationPolicy | string The cancellation policy for this experience |
other | string Other considerations or notes |
sortDemographics | boolean Default: false Whether demographics should be sorted by label |
isScheduled | boolean Deprecated Whether this experience uses scheduling (legacy field) |
balanceDueOffset | integer >= 0 Minutes before arrival to send balance due reminder |
balanceDueReminder | boolean Whether to send balance due reminders |
cutoff | integer >= 1 Cutoff time for bookings in minutes |
cutoffType | string Enum: "pre_start" "pre_end" Type of cutoff (before start or end) |
alternateCutoff | integer >= 1 Alternate cutoff when bookings exist |
arrivalOffset | integer Meet X minutes before scheduled time |
visible | boolean Whether the experience is publicly visible |
complete | boolean Whether the experience setup is complete |
reviewed | boolean Whether the experience has been reviewed |
customerNamePreference | string Enum: "required" "optional_confirmation" "optional_no_confirmation" "not_collected" Customer name collection preference |
allowedPrivacies | Array of strings Items Enum: "private" "public" Allowed privacy levels for bookings |
purchaseExpirationOffset | integer >= 0 Minutes from purchase when experience expires (non-scheduled) |
firstCheckinExpirationOffset | integer >= 0 Minutes from first check-in when expires |
businessHours | string Business hours for customer communications |
paymentMethod | string Enum: "cc" "later" Payment method accepted |
requireCCForSources | Array of strings Sources requiring credit card collection |
emailFooter | string Custom email footer |
object (GroupOptionsInput) Group options input for creating/updating | |
object (DownDepositInput) Down deposit input for creating/updating | |
object (FutureCutoffInput) Future cutoff input for creating/updating | |
object (VirtualMeetingPreferenceInput) Virtual meeting preference input for creating/updating | |
object (CatalogPreferenceInput) Catalog preference input | |
object (UpsellPreferenceInput) Upsell preference input for creating/updating experiences | |
Array of objects (ScheduleInput) Schedule configurations | |
included | Array of strings Items included in the experience |
notIncluded | Array of strings Items NOT included in the experience |
Array of objects (MediaInput) Media items to associate with experience | |
Array of objects (MediaInput) PDF attachments for the experience |
{- "name": "Grand Canyon Kayaking Adventure",
- "seller": "507f1f77bcf86cd799439020",
- "desc": "Join us for an unforgettable kayaking adventure through the stunning Grand Canyon rapids. Perfect for beginners and experienced paddlers alike.",
- "excerpt": "Thrilling kayaking through canyon rapids",
- "price": 149.99,
- "currency": "USD",
- "priceType": "person",
- "category": "Water Sports",
- "duration": 180,
- "eventDuration": 150,
- "scheduleType": "time",
- "geo": {
- "lat": 36.1069,
- "lng": -112.1129,
- "address": "Grand Canyon National Park, AZ"
}, - "pickupAddress": "Grand Canyon Village, AZ 86023",
- "requireAdult": false,
- "cancellationPolicy": "Free cancellation up to 24 hours before the experience"
}
{- "id": "507f1f77bcf86cd799439011",
- "object": "experience",
- "name": "Grand Canyon Kayaking Adventure",
- "desc": "Join us for an unforgettable kayaking adventure through the stunning Grand Canyon rapids.",
- "price": 149.99,
- "currency": "USD",
- "priceType": "person",
- "category": "Water Sports",
- "duration": 180,
- "eventDuration": 150,
- "complete": false,
- "visible": false,
- "reviewed": false,
- "seller": {
- "id": "507f1f77bcf86cd799439020"
}, - "createdAt": "2023-08-15T10:30:00Z",
- "updatedAt": "2023-08-15T10:30:00Z"
}
Retrieve detailed information about a specific experience.
Use the expand
parameter to include related data in a single request:
schedules
: Include schedule configurationsseller
: Include detailed seller informationid required | string Example: 507f1f77bcf86cd799439011 Resource ID |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
{- "id": "507f1f77bcf86cd799439011",
- "object": "experience",
- "name": "Grand Canyon Kayaking Adventure",
- "desc": "Join us for an unforgettable kayaking adventure through the stunning Grand Canyon rapids.",
- "excerpt": "Thrilling kayaking through canyon rapids",
- "price": 149.99,
- "currency": "USD",
- "priceType": "person",
- "guestType": "normal",
- "category": "Water Sports",
- "duration": 180,
- "eventDuration": 150,
- "scheduleType": "time",
- "complete": true,
- "visible": true,
- "reviewed": true,
- "requireAdult": false,
- "earlyReturn": false,
- "isScheduled": true,
- "balanceDueOffset": 7,
- "balanceDueReminder": false,
- "geo": {
- "lat": 36.1069,
- "lng": -112.1129,
- "address": "Grand Canyon National Park, AZ"
}, - "pickupAddress": "Grand Canyon Village, AZ 86023",
- "cancellationPolicy": "Free cancellation up to 24 hours before the experience",
- "sortDemographics": false,
- "seller": {
- "id": "507f1f77bcf86cd799439020"
}, - "photo": null,
- "schedules": [
- {
- "id": "507f1f77bcf86cd799439040",
- "type": "available",
- "repeat": "daily",
- "departure": "fixed",
- "times": [
- 540,
- 840
], - "priceDelta": 0
}
], - "demographics": [ ],
- "addOns": [ ],
- "createdAt": "2023-08-15T10:30:00Z",
- "updatedAt": "2023-08-16T14:20:00Z"
}
Update an existing experience. Only the provided fields will be updated; other fields remain unchanged.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
name required | string [ 1 .. 255 ] characters Experience name or title |
desc | string Full description of the experience |
excerpt | string <= 500 characters Short description or summary of the experience |
price | number <float> >= 0 Base price of the experience |
currency | string^[A-Z]{3}$ Currency code (ISO 4217) |
priceType | string Default: "person" Enum: "person" "outing" Pricing scheme (per person or per outing) |
guestType | string Default: "normal" Enum: "normal" "passenger" Type of guests in this experience |
required | ObjectReference (object) or string Seller ID or reference |
category | string Category name for the experience |
duration | integer >= 1 Duration to block inventory in minutes |
eventDuration | integer >= 1 Publicly visible duration of the experience in minutes |
requireAdult | boolean Default: false Whether at least one adult is required for booking |
object (LocationInput) Location input for creating/updating geographic locations | |
pickupAddress | string <= 500 characters Pickup address for the experience |
scheduleType | string Enum: "open" "day" "time" Type of scheduling for this experience |
cancellationPolicy | string The cancellation policy for this experience |
other | string Other considerations or notes |
sortDemographics | boolean Default: false Whether demographics should be sorted by label |
isScheduled | boolean Deprecated Whether this experience uses scheduling (legacy field) |
balanceDueOffset | integer >= 0 Minutes before arrival to send balance due reminder |
balanceDueReminder | boolean Whether to send balance due reminders |
cutoff | integer >= 1 Cutoff time for bookings in minutes |
cutoffType | string Enum: "pre_start" "pre_end" Type of cutoff (before start or end) |
alternateCutoff | integer >= 1 Alternate cutoff when bookings exist |
arrivalOffset | integer Meet X minutes before scheduled time |
visible | boolean Whether the experience is publicly visible |
complete | boolean Whether the experience setup is complete |
reviewed | boolean Whether the experience has been reviewed |
customerNamePreference | string Enum: "required" "optional_confirmation" "optional_no_confirmation" "not_collected" Customer name collection preference |
allowedPrivacies | Array of strings Items Enum: "private" "public" Allowed privacy levels for bookings |
purchaseExpirationOffset | integer >= 0 Minutes from purchase when experience expires (non-scheduled) |
firstCheckinExpirationOffset | integer >= 0 Minutes from first check-in when expires |
businessHours | string Business hours for customer communications |
paymentMethod | string Enum: "cc" "later" Payment method accepted |
requireCCForSources | Array of strings Sources requiring credit card collection |
emailFooter | string Custom email footer |
object (GroupOptionsInput) Group options input for creating/updating | |
object (DownDepositInput) Down deposit input for creating/updating | |
object (FutureCutoffInput) Future cutoff input for creating/updating | |
object (VirtualMeetingPreferenceInput) Virtual meeting preference input for creating/updating | |
object (CatalogPreferenceInput) Catalog preference input | |
object (UpsellPreferenceInput) Upsell preference input for creating/updating experiences | |
Array of objects (ScheduleInput) Schedule configurations | |
included | Array of strings Items included in the experience |
notIncluded | Array of strings Items NOT included in the experience |
Array of objects (MediaInput) Media items to associate with experience | |
Array of objects (MediaInput) PDF attachments for the experience |
{- "name": "Grand Canyon Advanced Kayaking Adventure",
- "seller": "507f1f77bcf86cd799439020",
- "desc": "Updated description with more advanced techniques and longer duration.",
- "price": 179.99,
- "duration": 240,
- "eventDuration": 210,
- "requireAdult": true,
- "cancellationPolicy": "Free cancellation up to 48 hours before the experience"
}
{- "id": "507f1f77bcf86cd799439011",
- "object": "experience",
- "name": "Kayaking Adventure in the Grand Canyon",
- "desc": "Join us for an unforgettable kayaking adventure through the stunning Grand Canyon rapids.",
- "price": 149.99,
- "currency": "USD",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "photo": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}, - "medias": [
- {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "catalog": {
- "items": [
- {
- "object": "global_catalog_item",
- "id": "string",
- "name": "string",
- "type": "quantity",
- "caption": "string",
- "unitType": "demographic",
- "visibility": "public",
- "required": false,
- "photo": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}, - "defaultChoice": "string",
- "sequence": 0,
- "template": {
- "id": "string",
- "code": "adult",
- "type": "demographic"
}, - "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "items": [
- null
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
], - "terms": [
- {
- "object": "catalog_term",
- "type": "products",
- "name": "string",
- "caption": "string",
- "value": 0.1
}
], - "promotions": [
- {
- "object": "catalog_promotion",
- "type": "absolute_discount_per_purchase",
- "name": "string",
- "caption": "string",
- "value": 0.1
}
], - "priceTiers": {
- "property1": {
- "quantityStart": [
- 0
], - "priceType": "per_person"
}, - "property2": {
- "quantityStart": [
- 0
], - "priceType": "per_person"
}
}, - "priceExpiresAt": "2019-08-24T14:15:22Z"
}, - "status": "published",
- "emailFooter": "Thank you for booking with us!",
- "meta": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "reviewPreference": {
- "id": "review_pref_123",
- "destination": "tripadvisor",
- "sendReviewEmailToAllTravelers": true,
- "reviewTemplate": "default_review_template",
}, - "excerpt": "Thrilling kayaking adventure through Grand Canyon rapids",
- "guestType": "normal",
- "paymentMethod": "cc",
- "cancellationPolicy": "Free cancellation up to 24 hours before the experience",
- "other": "Participants should bring sunscreen and water",
- "addOns": [ ],
- "downDeposit": {
- "enabled": true,
- "amountType": "percentage",
- "amount": 50,
- "balanceDueOffset": 7
}, - "sortDemographics": false,
- "cancellation": {
- "refundPercentage": 100,
- "cutoff": {
- "duration": 1440,
- "strategy": "string"
}
}, - "group": {
- "orderMin": 1,
- "orderMax": 8,
- "outingMin": 2,
- "outingMax": 12,
- "outingMinCutoff": 60
}, - "requireCCForSources": [ ],
- "updated": "2023-08-16T14:20:00Z",
- "terms": {
- "id": "507f1f77bcf86cd799439100",
- "termsLegal": "By booking this experience, you agree to our terms...",
- "termsCustomer": "Please arrive 15 minutes early..."
}, - "category": "Water Sports",
- "complete": true,
- "reviewed": true,
- "requireAdult": false,
- "earlyReturn": false,
- "priceSchemes": {
- "data": [
- {
- "id": "507f1f77bcf86cd799439013",
- "demographic": {
- "id": "507f1f77bcf86cd799439011"
}, - "price": 99.99,
- "minQuantity": 1,
- "maxQuantity": 10
}
]
}, - "pickupAddress": "123 Adventure St, Grand Canyon, AZ 86023",
- "isScheduled": true,
- "geo": {
- "lat": 36.1069,
- "lng": -112.1129,
- "address": "Grand Canyon National Park, AZ"
}, - "travelerPreference": {
- "reschedule": { },
- "cancellation": {
- "refundPercentage": 100,
- "cutoff": {
- "duration": 1440,
- "strategy": "string"
}
}, - "questionnaire": { },
- "allowPayment": { }
}, - "included": [
- "Equipment",
- "Guide",
- "Safety briefing"
], - "notIncluded": [
- "Food",
- "Transportation"
], - "attachments": [
- {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "resources": [
- {
- "id": "507f1f77bcf86cd799439200",
- "resource": {
- "id": "507f1f77bcf86cd799439011"
}, - "priority": 100
}
], - "demographics": [ ],
- "schedules": [
- {
- "id": "507f1f77bcf86cd799439012",
- "name": "Morning Tours",
- "type": "available",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "dates": [
- "2023-08-15",
- "2023-08-16"
], - "start": "2023-08-01",
- "end": "2023-12-31",
- "source": "manual",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "expiresAt": "2024-01-01T00:00:00Z",
- "departure": "fixed",
- "times": [
- 900,
- 1400
], - "priceDelta": 0,
- "priceOverride": false,
- "allowedPrivacies": [
- "public"
], - "timeRanges": [
- { }
]
}
], - "waiverPreference": {
- "remoteId": "template_123",
- "multiLinkDayInterval": "P7D",
- "remoteSystem": "waiver_system_123",
}, - "guidePreference": {
- "includeGuideInfo": true,
- "referGuideAs": "tour guide",
- "guideNotAssigned": {
- "enabled": true,
- "offset": 24,
- "type": "guide_not_assigned"
}, - "guideNotConfirmedToGuide": {
- "enabled": true,
- "offset": 24,
- "type": "guide_not_assigned"
}, - "guideNotConfirmedToSeller": {
- "enabled": true,
- "offset": 24,
- "type": "guide_not_assigned"
}, - "requireConfirmation": true
}, - "virtualMeeting": {
- "enabled": true,
- "startOffset": 30,
- "blockEntryOffset": 15,
- "payment": "full"
}, - "checkInPreference": {
- "enabled": true,
- "validations": [ ]
}, - "purchaseExpirationOffset": 10080,
- "firstCheckinExpirationOffset": 1440,
- "businessHours": "Monday-Friday 9AM-5PM PST",
- "customerNamePreference": "required",
- "checkInValiditySummary": {
- "enabled": true,
- "type": "qr_code",
- "timeWindow": {
- "before": 60,
- "after": 15
}, - "requirements": [
- "government_id",
- "waiver_signature"
], - "location": {
- "required": true,
- "radius": 100,
- "coordinates": {
- "lat": 36.1069,
- "lng": -112.1129,
- "address": "Grand Canyon National Park, AZ"
}
}, - "validationRules": [
- {
- "rule": "minimum_age_verification",
- "description": "Guests must be at least 18 years old",
- "required": true
}
]
}, - "balanceDueOffset": 1440,
- "balanceDueReminder": false,
- "inventory": {
- "assignmentOrder": "priority",
- "allowPartialAssignment": true
}, - "duration": 120,
- "eventDuration": 90,
- "allowedPrivacies": [
- "public",
- "private"
], - "cutoff": 60,
- "cutoffType": "pre_start",
- "alternateCutoff": 30,
- "arrivalOffset": 15,
- "futureCutoff": {
- "enabled": true,
- "cutoffType": "days",
- "cutoffValue": 365
}, - "waitlist": {
- "id": "507f1f77bcf86cd799439011",
- "enabled": true,
- "enabledForCheckout": true,
- "enabledForBackOffice": true,
- "enabledForCappedEvents": true,
- "checkoutMessage": "Join our waitlist to be notified when spots become available",
- "inviteDelay": 5,
- "notification": {
- "enabled": true,
- "strategies": [
- "all"
], - "minOpenSeatPercentage": 75
}, - "limit": {
- "enabled": true,
- "max": 20
}
}, - "upsellPreference": {
- "id": "507f1f77bcf86cd799439011",
- "enabled": true,
- "hidePrivacyToggle": false,
- "privacySelector": "upsell",
- "title": "Upgrade to private experience",
- "description": "Your experience may be shared with another party. If you prefer to attend with just your group, use this option to block off the remaining spots"
}, - "catalogPreference": {
- "defaultDemographicQuantity": 1
}, - "scheduleType": "time",
- "qrCodePreference": {
- "enabled": true,
- "ticketGenerationStrategy": "booking",
- "ticketSyntax": "ticketCode"
}, - "visible": true
}
Delete an experience. This is typically a soft delete operation.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Upload photos or videos for an experience. The request body should contain the raw image/video data.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
qqfile | string Example: qqfile=canyon-adventure.jpg Legacy file upload parameter for filename (used by legacy upload clients). When present, indicates file upload via XHR with filename in query parameter. |
caption | string Example: caption=Stunning canyon views during kayaking Optional caption for the uploaded media |
{- "id": "507f1f77bcf86cd799439030",
- "type": "image",
- "caption": "Stunning canyon views during kayaking",
- "size": 1024000,
- "createdAt": "2023-08-16T09:15:00Z"
}
Update metadata for an existing media item (such as caption or display order).
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
mediaId required | string Example: 507f1f77bcf86cd799439030 Media item identifier |
caption | string <= 500 characters Updated caption for the media |
order | integer >= 0 Display order (0 = first) |
{- "caption": "Updated caption - Epic canyon adventures await",
- "order": 1
}
{- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
Remove a media item from the experience. This permanently deletes the media file.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
mediaId required | string Example: 507f1f77bcf86cd799439030 Media item identifier |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Returns the fees that are applicable to this experience, including processing fees, service fees, and any other charges that may apply to bookings.
Used primarily for pricing calculations and displaying total costs to customers.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
[- {
- "id": "507f1f77bcf86cd799439070",
- "name": "Processing Fee",
- "type": "processing",
- "amount": 2.99,
- "percentage": null,
- "currency": "USD",
- "description": "Credit card processing fee"
}, - {
- "id": "507f1f77bcf86cd799439071",
- "name": "Service Fee",
- "type": "service",
- "amount": null,
- "percentage": 3.5,
- "currency": "USD",
- "description": "Platform service fee"
}
]
Get a list of future dates that have availability for the given experience.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
quantity | integer >= 1 Default: 1 Example: quantity=2 Minimum quantity/seats required for availability |
limit | integer [ 1 .. 20 ] Default: 5 Example: limit=10 Maximum number of dates to return |
privacy | string Enum: "public" "private" Example: privacy=public Privacy level for the booking (public/private) |
startDate | string <date> Example: startDate=2023-09-01 Start date for availability search (YYYY-MM-DD) |
overrideFutureCutoff | boolean Default: false Whether to override future booking cutoff restrictions |
[- "2023-09-15",
- "2023-09-16",
- "2023-09-18",
- "2023-09-20",
- "2023-09-22"
]
Returns a static map image showing the pickup location for the experience.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Returns check-in validation rules and requirements for the experience.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
{- "enabled": true,
- "type": "qr_code",
- "timeWindow": {
- "before": 60,
- "after": 15
}, - "requirements": [
- "government_id",
- "waiver_signature"
], - "location": {
- "required": true,
- "radius": 100
}
}
Upload PDF attachments for an experience. These attachments are typically sent as part of order confirmation emails when bookings are created.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
qqfile | string Example: qqfile=booking-instructions.pdf Filename when uploading via XHR |
{- "success": 1,
- "attachment": {
- "id": "507f1f77bcf86cd799439080",
- "type": "document",
- "url": "/uploads/experiences/507f1f77bcf86cd799439011/507f1f77bcf86cd799439080.pdf",
- "size": 245760,
- "caption": "Important information for your booking",
- "createdAt": "2023-08-16T09:15:00Z"
}
}
Update an existing attachment's metadata or replace the file content.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
attachmentId required | string Example: 507f1f77bcf86cd799439080 Attachment identifier |
qqfile | string Filename when uploading via XHR |
caption | string <= 500 characters Updated caption for the attachment |
title | string <= 255 characters Updated title for the attachment |
{- "caption": "Updated booking instructions with new meeting point",
- "title": "Booking Instructions v2"
}
{- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
Delete an attachment and remove it from the experience. This permanently removes the file from storage.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
attachmentId required | string Example: 507f1f77bcf86cd799439080 Attachment identifier |
{- "id": "507f1f77bcf86cd799439080",
- "unlinkResult": true
}
Assigns a pre-existing resource (inventory item) to an experience. Resources are fixed assets that can be utilized across multiple experiences. You must have the Inventory feature enabled for this endpoint to work.
Resource Concepts:
Restrictions:
id required | string Example: 507f191e810c19729de860ea The unique identifier of the experience |
required | object (ObjectReference) Reference to the resource to assign |
{- "resource": {
- "id": "507f1f77bcf86cd799439011"
}
}
{- "id": "507f1f77bcf86cd799439012",
- "resource": {
- "id": "507f1f77bcf86cd799439011",
- "type": "equipment",
- "name": "Kayak",
- "seller": {
- "id": "507f191e810c19729de860ea"
}, - "capacity": 2,
- "count": 5,
- "schedules": [ ],
- "createdAt": "2024-01-01T10:00:00Z"
}, - "priority": 100
}
Remove the assignment of a resource (inventory item) from an experience. This will also remove the resource from all existing events for this experience.
id required | string Example: 507f191e810c19729de860ea The unique identifier of the experience |
resourceId required | string Example: 507f1f77bcf86cd799439011 The unique identifier of the resource to unassign |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Retrieve the questionnaire form that applies to a specific experience. The system will first look for an experience-specific form, and if none exists, it will fall back to the seller's global questionnaire.
id required | string Example: 507f191e810c19729de860eb The unique identifier of the experience |
{- "id": "507f1f77bcf86cd799439011",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "product": {
- "id": "507f1f77bcf86cd799439011"
}, - "productType": "experience",
- "organizerOnly": true,
- "fields": [
- {
- "label": "Full Name",
- "description": "Please enter your full legal name as it appears on your ID",
- "type": "text",
- "width": 3,
- "suffix": "lbs",
- "help": "This information helps us provide proper equipment",
- "required": true,
- "roster": false,
- "readonly": false,
- "organizerOnly": true,
- "displayStep": "afterPayment",
- "visibility": "all",
- "seq": 1,
- "options": [
- "None",
- "Vegetarian",
- "Vegan",
- "Gluten-free"
], - "id": "60f1f7bc5f6d2a3b4c8e9d12"
}
], - "optionalSourcesList": [
- "direct",
- "partner"
], - "deletedAt": "2019-08-24T14:15:22Z"
}
Fetch all events based on specific filters. An event represents a collection of bookings for one experience that departs at a specific time. Events are automatically created when bookings are made or can be manually created.
Supports roster export format when format=roster
parameter is used.
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
seller | string Filter events by seller ID |
experience | string Filter events by experience ID |
guide | string Filter events by assigned guide ID |
start | string <date-time> Filter events starting from this date |
end | string <date-time> Filter events ending before this date |
format | string Default: "json" Enum: "json" "roster" Response format (use 'roster' for Excel export) |
open | integer >= 0 Filter by minimum open capacity |
closed | boolean Default: false Include closed events |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439011",
- "start": "2024-12-15T10:00:00Z",
- "actualStart": "2024-12-15T10:00:00-05:00",
- "end": "2024-12-15T12:00:00Z",
- "title": "Morning Kayak Tour",
- "experience": {
- "id": "507f1f77bcf86cd799439012"
}, - "groupId": null,
- "max": 12,
- "open": 3,
- "private": false,
- "virtualMeeting": false,
- "quantity": {
- "reserved": 0,
- "confirmed": 9,
- "pending": 0,
- "cancelled": 0,
- "total": 9
}, - "seller": {
- "id": "507f1f77bcf86cd799439013"
}, - "orders": [
- "507f1f77bcf86cd799439014"
], - "purchaseItems": [
- "507f1f77bcf86cd799439015"
], - "guides": [
- {
- "id": "507f1f77bcf86cd799439016",
- "guide": {
- "id": "507f1f77bcf86cd799439017"
}, - "confirmed": true,
- "sentAt": "2024-12-14T15:30:00Z"
}
], - "object": "event"
}
], - "paging": {
- "next": null
}
}
Create a new event (trip) for an experience. A trip represents a collection of bookings for one experience that departs at the same time. Events are usually created automatically when bookings are made, but this endpoint allows manual creation for assigning guides or modifying capacity.
You must be authenticated as the seller or an authorized delegate with administrator or reservationist roles.
required | object |
start required | string <date-time> Start date and time for the event |
title | string Optional title override |
max | integer >= 0 Maximum capacity override |
Array of objects | |
Array of objects (ResourceUsageInput) Resources to assign to this event | |
manual | boolean Default: false Flag to create a manual event outside of configured schedules |
{- "experience": {
- "id": "507f1f77bcf86cd799439012"
}, - "start": "2024-12-15T10:00:00Z",
- "max": 12
}
{- "id": "507f1f77bcf86cd799439011",
- "start": "2024-12-15T10:00:00Z",
- "actualStart": "2024-12-15T10:00:00-05:00",
- "end": "2024-12-15T12:00:00Z",
- "title": "Morning Kayak Tour",
- "experience": {
- "id": "507f1f77bcf86cd799439012"
}, - "groupId": null,
- "max": 12,
- "open": 12,
- "private": false,
- "virtualMeeting": false,
- "quantity": {
- "reserved": 0,
- "confirmed": 0,
- "pending": 0,
- "cancelled": 0,
- "total": 0
}, - "seller": {
- "id": "507f1f77bcf86cd799439013"
}, - "orders": [ ],
- "purchaseItems": [ ],
- "guides": [ ],
- "object": "event",
- "createdAt": "2024-12-14T15:30:00Z",
- "createdBy": "507f1f77bcf86cd799439018"
}
Fetch a specific event (trip) by ID. An event represents a collection of bookings for one experience that departs at a specific time.
Supports roster export format when format=roster
parameter is used.
id required | string Event ID |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
format | string Default: "json" Enum: "json" "roster" Response format (use 'roster' for Excel export) |
{- "id": "507f1f77bcf86cd799439011",
- "start": "2024-12-15T10:00:00Z",
- "actualStart": "2024-12-15T10:00:00-05:00",
- "end": "2024-12-15T12:00:00Z",
- "title": "Morning Kayak Tour",
- "experience": {
- "id": "507f1f77bcf86cd799439012"
}, - "groupId": null,
- "max": 12,
- "open": 3,
- "private": false,
- "virtualMeeting": false,
- "quantity": {
- "reserved": 0,
- "confirmed": 9,
- "pending": 0,
- "cancelled": 0,
- "total": 9
}, - "seller": {
- "id": "507f1f77bcf86cd799439013"
}, - "orders": [
- "507f1f77bcf86cd799439014"
], - "purchaseItems": [
- "507f1f77bcf86cd799439015"
], - "guides": [
- {
- "id": "507f1f77bcf86cd799439016",
- "guide": {
- "id": "507f1f77bcf86cd799439017"
}, - "confirmed": true,
- "sentAt": "2024-12-14T15:30:00Z"
}
], - "object": "event"
}
Update an event's properties. Currently only supports updating the max capacity. Updating the max capacity allows you to override the maximum trip capacity configured in the experience configuration.
You must be authenticated as the seller or an authorized delegate with administrator or reservationist roles.
id required | string Event ID |
max required | integer >= 0 Maximum capacity override |
manual | boolean Default: false Flag to reopen a closed event as manual |
{- "max": 15
}
{- "id": "string",
- "start": "2019-08-24T14:15:22Z",
- "actualStart": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z",
- "title": "string",
- "experience": {
- "id": "507f1f77bcf86cd799439011"
}, - "groupId": "string",
- "max": 0,
- "open": 0,
- "private": true,
- "virtualMeeting": true,
- "quantity": {
- "reserved": 0,
- "confirmed": 0,
- "pending": 0,
- "cancelled": 0,
- "total": 0
}, - "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "orders": [
- "string"
], - "purchaseItems": [
- "string"
], - "guides": [
- {
- "id": "string",
- "guide": {
- "id": "507f1f77bcf86cd799439011"
}, - "confirmed": true,
- "sentAt": "2019-08-24T14:15:22Z"
}
], - "object": "event",
- "manual": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": "string",
- "updated": "2019-08-24T14:15:22Z",
- "notes": [
- {
- "id": "string",
- "content": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
], - "aggregation": {
- "demographics": { },
- "addOns": { },
- "guestStatus": { },
- "orderNotes": [
- "string"
]
}, - "resourceUsages": [
- {
- "id": "string",
- "resource": {
- "id": "507f1f77bcf86cd799439011"
}, - "quantity": 1,
- "manuallyAssignedAt": "2019-08-24T14:15:22Z",
- "manuallyAssignedBy": "string"
}
], - "organizer": { }
}
Partially update an event's properties. This is an alias for the PUT operation and supports the same functionality.
id required | string Event ID |
max required | integer >= 0 Maximum capacity override |
manual | boolean Default: false Flag to reopen a closed event as manual |
{- "max": 0,
- "manual": false
}
{- "id": "string",
- "start": "2019-08-24T14:15:22Z",
- "actualStart": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z",
- "title": "string",
- "experience": {
- "id": "507f1f77bcf86cd799439011"
}, - "groupId": "string",
- "max": 0,
- "open": 0,
- "private": true,
- "virtualMeeting": true,
- "quantity": {
- "reserved": 0,
- "confirmed": 0,
- "pending": 0,
- "cancelled": 0,
- "total": 0
}, - "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "orders": [
- "string"
], - "purchaseItems": [
- "string"
], - "guides": [
- {
- "id": "string",
- "guide": {
- "id": "507f1f77bcf86cd799439011"
}, - "confirmed": true,
- "sentAt": "2019-08-24T14:15:22Z"
}
], - "object": "event",
- "manual": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": "string",
- "updated": "2019-08-24T14:15:22Z",
- "notes": [
- {
- "id": "string",
- "content": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
], - "aggregation": {
- "demographics": { },
- "addOns": { },
- "guestStatus": { },
- "orderNotes": [
- "string"
]
}, - "resourceUsages": [
- {
- "id": "string",
- "resource": {
- "id": "507f1f77bcf86cd799439011"
}, - "quantity": 1,
- "manuallyAssignedAt": "2019-08-24T14:15:22Z",
- "manuallyAssignedBy": "string"
}
], - "organizer": { }
}
Delete a manual type event which has no orders. Only events that were manually created and have no associated bookings can be deleted.
You must be authenticated as the seller or an authorized delegate with administrator or reservationist roles.
id required | string Event ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Send the trip roster to the seller and any assigned guides through email. This action triggers email delivery of the event participant list.
You must be authenticated as the seller or an authorized delegate with appropriate permissions.
id required | string Event ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Get all guides currently assigned to an event. Returns basic guide information for each assigned guide.
id required | string Event ID |
[- {
- "id": "6787755aab90821c3b053613",
- "object": "user_profile",
- "bio": "",
- "name": "Guide 1",
- "phone": "5555555",
- "user": {
- "id": "67877559ab90821c3b053612"
}, - "seller": {
- "id": "65bbde2d1b8c18afc407eee6"
}, - "schedules": [
- {
- "id": "678775c41778b1a2da085374",
- "name": "all the time",
- "days": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6
], - "start": "2025-01-15T05:00:00+00:00",
- "repeat": "weekly",
- "type": "available",
- "createdAt": "2025-01-15T08:45:56+00:00",
- "updatedAt": "2025-01-15T08:45:56+00:00"
}
], - "createdBy": {
- "id": "65bbde2d1b8c18afc407eee6"
}, - "updatedAt": "2025-01-15T08:45:56+00:00",
- "guidePermission": {
- "canModifySchedules": true,
- "modifySchedulesOffset": 30
}
}
]
Add a guide to an event. Only users with guide management permissions can add guides to events. The system will check for guide availability conflicts with other events.
id required | string Event ID |
required | object |
{- "guide": {
- "id": "507f1f77bcf86cd799439017"
}
}
{- "id": "507f1f77bcf86cd799439021",
- "guide": {
- "id": "507f1f77bcf86cd799439017"
}, - "confirmed": true,
- "sentAt": "2024-12-14T15:30:00Z"
}
Update an event guide assignment. Currently supports updating the guide assignment itself.
id required | string Event ID |
guideId required | string Guide ID |
required | object |
{- "guide": {
- "id": "string"
}
}
{- "id": "string",
- "guide": {
- "id": "507f1f77bcf86cd799439011"
}, - "confirmed": true,
- "sentAt": "2019-08-24T14:15:22Z"
}
Remove a guide from an event. This will unassign the guide from the specified event.
id required | string Event ID |
guideId required | string Guide ID to remove |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Confirm a guide's assignment to an event. This updates the guide's confirmation status for the event.
id required | string Event ID |
guideId required | string Guide ID to confirm |
{- "id": "507f1f77bcf86cd799439021",
- "guide": {
- "id": "507f1f77bcf86cd799439017"
}, - "confirmed": true,
- "sentAt": "2024-12-14T15:30:00Z"
}
Returns the API key for the authenticated user. This endpoint is for the current user only.
If the user doesn't have an API key, one will be generated automatically. The API key can be
reset by providing the reset=true
query parameter.
reset | boolean Default: false Example: reset=true Whether to reset/regenerate the API key |
[- "my_api_key_1234567890abcdef"
]
Returns details about a specific user account.
Private Access: With the private=true
parameter, private data is returned
based on authorization level. The seller
parameter is required when requesting private data.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
private | boolean Default: false Example: private=true Whether to return private user data (requires authentication and seller parameter) |
seller | string (id) ^[0-9a-fA-F]{24}$ Example: seller=507f1f77bcf86cd799439012 Seller ID (required when private=true, used for authorization) |
{- "id": "507f1f77bcf86cd799439011",
- "name": "John Smith",
- "email": "john.smith@example.com",
- "phone": "+1-555-0123",
- "username": "john.smith@example.com",
- "type": 2,
- "enabled": true,
- "lastLogin": "2024-01-15T10:30:00Z",
- "remoteCards": [
- {
- "id": "card_123456",
- "last4": "4242",
- "brand": "visa",
- "expMonth": 12,
- "expYear": 2025
}
]
}
Records that a user has accepted the Xola Terms of Service for a specific version.
The acceptance is recorded with the IP address from which the request was made and the timestamp of acceptance.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
version required | string^\d{4}\.\d{2}\.\d{2}$ Version identifier of the Terms of Service being accepted (YYYY.MM.DD format) |
{- "version": "2024.01.15"
}
""
Resends the email confirmation message to a user who has not yet activated their account.
This endpoint can only be used for users whose accounts are not yet enabled (activated). If the user's account is already enabled, a validation error will be returned.
A new confirmation token is generated and the confirmation email is sent to the user's registered email address.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
""
Returns the user's profile picture. If the user has uploaded a custom picture, that is returned. Otherwise, the response will redirect to their Gravatar image, or fall back to an initials-based image if no Gravatar exists.
The response is always a redirect (HTTP 302) to the actual image URL, which may be hosted on external services like Gravatar or Xola's media servers.
You can control the size of the returned image using query parameters:
size
parameter for predefined sizeswidth
and height
parameters for custom dimensionsid required | string Example: 507f1f77bcf86cd799439011 Resource ID |
size | string Default: "small_square" Enum: "small" "medium" "large" "small_square" "medium_square" "large_square" "logo" "email" Example: size=small_square Predefined image size |
width | integer [ 1 .. 2000 ] Example: width=150 Custom image width in pixels (used with height parameter) |
height | integer [ 1 .. 2000 ] Example: height=150 Custom image height in pixels (used with width parameter) |
rounded | boolean Default: true Example: rounded=true Whether to return a rounded/circular image |
{- "errors": {
- "size": "Invalid image size"
}
}
Returns the user's unique short code. If the user doesn't have a short code yet, one will be generated automatically.
Short codes are 5-character unique identifiers that can be used for quick user identification or referencing.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
{- "id": "507f1f77bcf86cd799439011",
- "shortCode": "AB1C2"
}
Updates user information including personal details, contact information, and preferences.
Context Handling:
id
is "me" or matches the authenticated user's ID, the user updates their own profileAuthorization Rules:
Special Features:
mergedTo
fieldcard
data is providedValidation:
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
name | string or null User's full name |
string or null <email> User's email address (must be unique within seller context) | |
newEmail | string or null <email> New email address when current user is changing their own email |
phone | string or null User's phone number (updates are seller-scoped) |
username | string or null User's username (typically same as email) |
locale | string or null Enum: "en-US" "es-ES" "fr-FR" "de-DE" "it-IT" "pt-BR" User's preferred locale/language |
timezone | string or null User's timezone |
object (ObjectReference) Reference to the seller context (for traveler updates) | |
object Target user to merge this user account into | |
data | object or null Custom data fields and preferences |
object or null Payment card to associate with user | |
object or null Email sending overrides for specific operations |
{- "name": "John Doe Smith",
- "email": "john.smith.updated@example.com",
- "phone": "+1-555-0199"
}
{- "id": "507f1f77bcf86cd799439011",
- "name": "John Doe Smith",
- "email": "john.smith.updated@example.com",
- "phone": "+1-555-0199",
- "username": "john.smith@example.com",
- "type": 2,
- "enabled": true,
- "lastLogin": "2024-01-15T10:30:00Z",
- "tags": [
- {
- "id": "VIP Customer",
- "system": false,
- "type": "customer"
}
]
}
Returns a paginated list of seller accounts that the authenticated user has delegate access to.
This endpoint provides information about all the seller accounts the current user can act on behalf of, including the seller's name, company information, and basic profile details.
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439012",
- "name": "Adventure Tours LLC",
- "company": "Adventure Tours LLC",
- "type": 1
}, - {
- "id": "507f1f77bcf86cd799439013",
- "name": "City Bike Rentals",
- "company": "City Bike Rentals",
- "type": 1
}
],
}
Retrieve a list of delegates for the specified user. Delegates are users who have been granted specific permissions to act on behalf of the user's account.
Authorization Requirements:
ROLE_USER
or higherVIEW_USER_DELEGATES
permission for the target user, ORROLE_APP_STORE
Permission Filtering:
Use the permission
query parameter to filter delegates by a specific permission role.
id required | string^[0-9a-fA-F]{24}$ Example: 507f1f77bcf86cd799439011 User ID to get delegates for |
permission | string Example: permission=ROLE_BOOKING_ENGINE Filter delegates by specific permission role |
[- {
- "id": "507f1f77bcf86cd799439011",
- "permissions": [
- {
- "name": "ROLE_BOOKING_ENGINE",
- "selectedExperiences": {
- "all": true,
- "experiences": [ ]
}
}
], - "user": {
- "id": "507f1f77bcf86cd799439011",
- "name": "John Smith",
- "email": "john.smith@example.com",
- "phone": "+1-555-123-4567",
- "username": "john.smith@example.com",
- "emailCanonical": "john.smith@example.com",
- "usernameCanonical": "john.smith@example.com",
- "enabled": true,
- "type": 3,
- "lastLogin": "2024-03-12T15:55:31+00:00",
- "roles": [
- "ROLE_USER",
- "ROLE_BOOKING_ENGINE"
], - "remoteCards": [ ],
- "delegates": [ ]
}
}, - {
- "id": "507f1f77bcf86cd799439012",
- "permissions": [
- {
- "name": "ROLE_GUIDE"
}
], - "user": {
- "id": "507f1f77bcf86cd799439012",
- "name": "Jane Doe",
- "email": "jane.doe@example.com",
- "phone": "+1-555-987-6543",
- "username": "jane.doe@example.com",
- "emailCanonical": "jane.doe@example.com",
- "usernameCanonical": "jane.doe@example.com",
- "enabled": true,
- "type": 3,
- "lastLogin": "2024-03-13T10:25:15+00:00",
- "roles": [
- "ROLE_USER",
- "ROLE_GUIDE"
], - "remoteCards": [ ],
- "delegates": [ ]
}
}
]
Add a new delegate to the specified user account. If a user with the provided email already exists in Xola, that user will be added as the delegate. If no user exists with the email, a new user will be created and a verification email will be sent.
Important: This endpoint creates the delegate but does not grant any permissions.
The permissions
array in the response will always be empty. Use the individual
permission endpoints (PUT /users/{id}/delegates/{delegateId}/permissions/{permission}
)
to grant specific permissions to the delegate.
Authorization Requirements:
ROLE_USER
or higher EDIT_USER_DELEGATES
permission for the target userEmail Notifications:
Business Rules:
id required | string^[0-9a-fA-F]{24}$ Example: 507f1f77bcf86cd799439011 User ID to create delegate for |
name | string Full name of the delegate |
email required | string <email> Email address of the delegate |
phone | string Phone number of the delegate |
{- "name": "John Smith",
- "email": "john.smith@example.com",
- "phone": "+1-555-123-4567"
}
{- "id": "507f1f77bcf86cd799439014",
- "permissions": [ ],
- "user": {
- "id": "507f1f77bcf86cd799439014",
- "enabled": true,
- "remoteCards": [ ],
- "name": "Jane Doe",
- "email": "jane.doe@example.com",
- "phone": "+1-555-987-6543",
- "emailCanonical": "jane.doe@example.com",
- "username": "jane.doe@example.com",
- "usernameCanonical": "jane.doe@example.com",
- "delegates": [ ]
}, - "name": "Jane Doe",
- "email": "jane.doe@example.com",
- "enabled": true
}
Retrieve details for a specific delegate of the user account.
Authorization Requirements:
ROLE_USER
or higherVIEW_USER_DELEGATES
permission for the target user, ORROLE_APP_STORE
id required | string^[0-9a-fA-F]{24}$ Example: 507f1f77bcf86cd799439011 User ID that owns the delegate |
delegateId required | string^[0-9a-fA-F]{24}$ Example: 507f1f77bcf86cd799439012 ID of the delegate user to retrieve |
{- "id": "507f1f77bcf86cd799439012",
- "permissions": [
- {
- "name": "ROLE_BOOKING_ENGINE",
- "selectedExperiences": {
- "all": true,
- "experiences": [ ]
}
}
], - "user": {
- "id": "507f1f77bcf86cd799439012",
- "name": "John Smith",
- "email": "john.smith@example.com",
- "phone": "+1-555-123-4567",
- "username": "john.smith@example.com",
- "emailCanonical": "john.smith@example.com",
- "usernameCanonical": "john.smith@example.com",
- "enabled": true,
- "type": 3,
- "lastLogin": "2024-03-12T15:55:31+00:00",
- "roles": [
- "ROLE_USER"
], - "remoteCards": [ ],
- "delegates": [ ]
}
}
Create a new delegate or update permissions for an existing delegate. This endpoint performs an upsert operation - if the delegate doesn't exist, it will be created.
Authorization Requirements:
ROLE_USER
or higherEDIT_USER_DELEGATES
permission for the target user, ORPermission Management:
Special Cases:
id required | string^[0-9a-fA-F]{24}$ Example: 507f1f77bcf86cd799439011 User ID that will own the delegate |
delegateId required | string^[0-9a-fA-F]{24}$ Example: 507f1f77bcf86cd799439012 ID of the user to be added/updated as delegate |
required | Array of objects (PermissionRequest) List of permissions to grant to the delegate (replaces existing permissions) |
{- "permissions": [
- {
- "name": "ROLE_RESERVATION"
}
]
}
{- "id": "507f1f77bcf86cd799439012",
- "permissions": [
- {
- "name": "ROLE_RESERVATION"
}, - {
- "name": "ROLE_ACCOUNTANT"
}
], - "user": {
- "id": "507f1f77bcf86cd799439012",
- "name": "John Smith",
- "email": "john.smith@example.com",
- "phone": "+1-555-123-4567",
- "username": "john.smith@example.com",
- "emailCanonical": "john.smith@example.com",
- "usernameCanonical": "john.smith@example.com",
- "enabled": true,
- "type": 3,
- "lastLogin": "2024-03-12T15:55:31+00:00",
- "roles": [
- "ROLE_USER"
], - "remoteCards": [ ],
- "delegates": [ ]
}
}
Remove a delegate from the user account. This revokes all delegated permissions and access to the account.
Authorization Requirements:
ROLE_USER
or higherEDIT_USER_DELEGATES
permission for the target user, ORSide Effects:
Special Cases:
id required | string^[0-9a-fA-F]{24}$ Example: 507f1f77bcf86cd799439011 User ID that owns the delegate |
delegateId required | string^[0-9a-fA-F]{24}$ Example: 507f1f77bcf86cd799439012 ID of the delegate user to remove |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Grant a specific permission to a delegate or update an existing permission. This is the primary way to manage individual permissions for delegates after they have been created.
Authorization Requirements:
ROLE_USER
or higherEDIT_USER_DELEGATES
permission for the target userPermission Management:
Special Cases:
id required | string^[0-9a-fA-F]{24}$ Example: 65bbde2d1b8c18afc407eee6 User ID that owns the delegate |
delegateId required | string^[0-9a-fA-F]{24}$ Example: 68b86d40fc7a6260d70f44ae ID of the delegate user to grant permission to |
permission required | string Example: ROLE_CURATOR The permission role to grant |
name required | string Name of the permission role (see Permission schema for available roles) |
object (SelectedExperiencesRequest) Request payload for specifying experience-level granularity for permissions |
{- "name": "ROLE_CURATOR"
}
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Creates a new seller account. For internal use or admin creation. Public requests require reCAPTCHA validation. Admin-created accounts require a password.
X-RECAPTCHA-RESPONSE | string reCAPTCHA response token (required for public requests) |
bankAccount | string^[a-zA-Z0-9]+$ Bank account number for payouts |
bankAccountType | string Enum: "checking" "savings" Type of bank account |
bankRouting | string Bank routing number for payouts |
businessType | string Enum: "business" "individual" Type of business entity |
city | string City |
company | string Legal company name |
communicationEmail | string <email> Email address for customer communications |
country | string Country name |
countryCode | string^[A-Z]{2}$ ISO 3166-1 alpha-2 country code |
currency | string^[A-Z]{3}$ ISO 4217 currency code |
string <email> Primary email address | |
emailFooter | string Custom footer text for outgoing emails |
object (Location) Geographic location with coordinates and optional address | |
geoNameId | integer GeoNames database ID for location |
name | string Company or business name |
personName | string Name of the person who created the account (populated during self-registration) |
phone | string Contact phone number |
registrationPath | string Enum: "xola_admin" "self_registration" How the seller account was created |
state | string State or province |
statementDescriptor | string <= 22 characters ^[^><'"]*$ Text that appears on customer credit card statements |
streetAddress | string Street address |
timezone | number <float> Deprecated Timezone offset as a float |
timezoneName | string Timezone identifier |
website | string <uri> Company website URL |
zip | string <= 10 characters ZIP or postal code |
taxId | string EIN (business) or SSN (individual) of the bank account holder (only last 4 digits are stored) |
password | string >= 6 characters Password for new seller account (required for admin-created accounts) |
createStripeAccount | boolean Default: true Whether to create a Stripe managed account |
{- "email": "newbusiness@example.com",
- "name": "Mystic Mountain Tours",
- "company": "Mystic Mountain Tours",
- "businessType": "business",
- "phone": "+1-555-123-4567",
- "country": "United States",
- "countryCode": "US"
}
{- "bankAccount": "1234567890",
- "bankAccountType": "checking",
- "bankRouting": "123456789",
- "businessType": "business",
- "city": "Boulder",
- "company": "Mystic Mountain Tours LLC",
- "communicationEmail": "bookings@mystic-mountain-tours.com",
- "country": "United States",
- "countryCode": "US",
- "currency": "USD",
- "email": "info@mystic-mountain-tours.com",
- "emailFooter": "Thank you for choosing Mystic Mountain Tours!",
- "geo": {
- "lat": 36.1069,
- "lng": -112.1129,
- "address": "Grand Canyon National Park, AZ"
}, - "geoNameId": 5294810,
- "name": "Mystic Mountain Tours",
- "personName": "John Smith",
- "phone": "+1-555-123-4567",
- "registrationPath": "self_registration",
- "state": "Colorado",
- "statementDescriptor": "MYSTIC MOUNTAIN TOURS",
- "streetAddress": "456 Mountain View Road",
- "timezone": -7,
- "timezoneName": "America/Denver",
- "zip": "80301",
- "id": "507f1f77bcf86cd799439011",
- "version": 2,
- "enabled": true,
- "balance": 1250.5,
- "disputedBalance": 0,
- "unrecoveredBalance": 0,
- "locale": "en_US",
- "picture": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}, - "medias": [
- {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "acceptedCards": [
- "visa",
- "mastercard",
- "amex"
], - "allowedGateways": [
- "stripe_xola",
- "stripe_oauth"
], - "defaultGateway": "stripe",
- "fees": [
- {
- "id": "string",
- "name": "string",
- "type": "string",
- "amount": 0,
- "percentage": 0,
- "applicableOn": "string"
}
], - "pluginFees": {
- "property1": { },
- "property2": { }
}, - "processingFeeFormulas": [
- {
- "gateway": "string",
- "percentage": 0,
- "fixed": 0
}
], - "partnerFeeFormulas": [
- {
- "partnerId": "string",
- "percentage": 0,
- "fixed": 0
}
], - "paymentMethods": [
- {
- "id": "string",
- "name": "string",
- "type": "string",
- "enabled": true
}
], - "remoteCards": [
- {
- "id": "string",
- "last4": "string",
- "brand": "string",
- "expiryMonth": 0,
- "expiryYear": 0
}
], - "remoteGateways": [
- {
- "id": "string",
- "gateway": "string",
- "name": "string",
- "enabled": true
}
], - "plans": [
- {
- "id": "string",
- "name": "string",
- "schedule": "string",
- "enabled": true
}
], - "subscriptionPlan": {
- "id": "string",
- "name": "string",
- "package": { },
- "addOns": [
- { }
]
}, - "stripeAccount": {
- "id": "string",
- "remoteId": "string",
- "accountType": "string",
- "country": "string",
- "enabled": true
}, - "topUpSource": {
- "id": "string",
- "type": "string",
- "last4": "string"
}, - "autoAccept": {
- "enabled": true,
- "conditions": { }
}, - "blackoutSchedules": [
- {
- "startDate": "2019-08-24",
- "endDate": "2019-08-24",
- "reason": "string"
}
], - "terms": {
- "termsLegal": "string",
- "termsHuman": "string"
}, - "preferences": {
- "booking": {
- "allowMultiItemOrders": true,
- "reservationLimit": 0
}, - "notifications": [
- {
- "type": "string",
- "channels": [
- {
- "type": "string",
- "enabled": true,
- "offset": "string",
- "negativeOffset": true
}
]
}
], - "google": { },
- "network": { }
}, - "roles": [
- "ROLE_SELLER",
- "ROLE_INVENTORY"
], - "delegates": [
- {
- "id": "string",
- "permissions": [
- "string"
], - "user": {
- "id": "string",
- "name": "string",
- "email": "string",
- "enabled": true
}
}
], - "meta": {
- "createCard": true,
- "xola_domain": "xola.com"
}, - "customerNotes": {
- "property1": {
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}, - "property2": {
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
}, - "bankAccountLast4": "7890",
- "bankRoutingLast4": "6789",
- "taxIdLast4": "1234",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
Searches and retrieves a list of sellers based on various filters. Supports different contexts like agent view, Google Reserve, and partner search.
Results are paginated and can be filtered by various criteria.
agent | boolean Default: false Return sellers for agent context |
filter | string Value: "googleReserve" Example: filter=googleReserve Special filter type |
context | string Default: "public" Enum: "public" "admin" "xolaPartner" Example: context=admin Response context for data formatting |
seller | string Example: seller=507f1f77bcf86cd799439011 Seller ID for context-based filtering |
etl | boolean Default: false ETL mode for higher limits (admin only) |
limit | integer [ 1 .. 100 ] Default: 20 Example: limit=50 Number of results per page |
offset | integer >= 0 Default: 0 Number of results to skip |
q | string Example: q=mystic mountain tours Search query for seller names |
country | string Example: country=United States Filter by country |
enabled | boolean Example: enabled=true Filter by enabled status |
{- "data": [
- {
- "bankAccount": "1234567890",
- "bankAccountType": "checking",
- "bankRouting": "123456789",
- "businessType": "business",
- "city": "Boulder",
- "company": "Mystic Mountain Tours LLC",
- "communicationEmail": "bookings@mystic-mountain-tours.com",
- "country": "United States",
- "countryCode": "US",
- "currency": "USD",
- "email": "info@mystic-mountain-tours.com",
- "emailFooter": "Thank you for choosing Mystic Mountain Tours!",
- "geo": {
- "lat": 36.1069,
- "lng": -112.1129,
- "address": "Grand Canyon National Park, AZ"
}, - "geoNameId": 5294810,
- "name": "Mystic Mountain Tours",
- "personName": "John Smith",
- "phone": "+1-555-123-4567",
- "registrationPath": "self_registration",
- "state": "Colorado",
- "statementDescriptor": "MYSTIC MOUNTAIN TOURS",
- "streetAddress": "456 Mountain View Road",
- "timezone": -7,
- "timezoneName": "America/Denver",
- "zip": "80301",
- "id": "507f1f77bcf86cd799439011",
- "version": 2,
- "enabled": true,
- "balance": 1250.5,
- "disputedBalance": 0,
- "unrecoveredBalance": 0,
- "locale": "en_US",
- "picture": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}, - "medias": [
- {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "acceptedCards": [
- "visa",
- "mastercard",
- "amex"
], - "allowedGateways": [
- "stripe_xola",
- "stripe_oauth"
], - "defaultGateway": "stripe",
- "fees": [
- {
- "id": "string",
- "name": "string",
- "type": "string",
- "amount": 0,
- "percentage": 0,
- "applicableOn": "string"
}
], - "pluginFees": {
- "property1": { },
- "property2": { }
}, - "processingFeeFormulas": [
- {
- "gateway": "string",
- "percentage": 0,
- "fixed": 0
}
], - "partnerFeeFormulas": [
- {
- "partnerId": "string",
- "percentage": 0,
- "fixed": 0
}
], - "paymentMethods": [
- {
- "id": "string",
- "name": "string",
- "type": "string",
- "enabled": true
}
], - "remoteCards": [
- {
- "id": "string",
- "last4": "string",
- "brand": "string",
- "expiryMonth": 0,
- "expiryYear": 0
}
], - "remoteGateways": [
- {
- "id": "string",
- "gateway": "string",
- "name": "string",
- "enabled": true
}
], - "plans": [
- {
- "id": "string",
- "name": "string",
- "schedule": "string",
- "enabled": true
}
], - "subscriptionPlan": {
- "id": "string",
- "name": "string",
- "package": { },
- "addOns": [
- { }
]
}, - "stripeAccount": {
- "id": "string",
- "remoteId": "string",
- "accountType": "string",
- "country": "string",
- "enabled": true
}, - "topUpSource": {
- "id": "string",
- "type": "string",
- "last4": "string"
}, - "autoAccept": {
- "enabled": true,
- "conditions": { }
}, - "blackoutSchedules": [
- {
- "startDate": "2019-08-24",
- "endDate": "2019-08-24",
- "reason": "string"
}
], - "terms": {
- "termsLegal": "string",
- "termsHuman": "string"
}, - "preferences": {
- "booking": {
- "allowMultiItemOrders": true,
- "reservationLimit": 0
}, - "notifications": [
- {
- "type": "string",
- "channels": [
- {
- "type": "string",
- "enabled": true,
- "offset": "string",
- "negativeOffset": true
}
]
}
], - "google": { },
- "network": { }
}, - "roles": [
- "ROLE_SELLER",
- "ROLE_INVENTORY"
], - "delegates": [
- {
- "id": "string",
- "permissions": [
- "string"
], - "user": {
- "id": "string",
- "name": "string",
- "email": "string",
- "enabled": true
}
}
], - "meta": {
- "createCard": true,
- "xola_domain": "xola.com"
}, - "customerNotes": {
- "property1": {
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}, - "property2": {
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
}, - "bankAccountLast4": "7890",
- "bankRoutingLast4": "6789",
- "taxIdLast4": "1234",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "next": "/api/sellers?offset=50&limit=50",
- "_es": true
}
Updates an existing seller's information. Supports both full replacement (PUT) and partial updates (PATCH semantics). Some fields like email changes may require multi-factor authentication.
Version migration from V1 to V2 requires special permissions.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
bankAccount | string^[a-zA-Z0-9]+$ Bank account number for payouts |
bankAccountType | string Enum: "checking" "savings" Type of bank account |
bankRouting | string Bank routing number for payouts |
businessType | string Enum: "business" "individual" Type of business entity |
city | string City |
company | string Legal company name |
communicationEmail | string <email> Email address for customer communications |
country | string Country name |
countryCode | string^[A-Z]{2}$ ISO 3166-1 alpha-2 country code |
currency | string^[A-Z]{3}$ ISO 4217 currency code |
string <email> Primary email address | |
emailFooter | string Custom footer text for outgoing emails |
object (Location) Geographic location with coordinates and optional address | |
geoNameId | integer GeoNames database ID for location |
name | string Company or business name |
personName | string Name of the person who created the account (populated during self-registration) |
phone | string Contact phone number |
registrationPath | string Enum: "xola_admin" "self_registration" How the seller account was created |
state | string State or province |
statementDescriptor | string <= 22 characters ^[^><'"]*$ Text that appears on customer credit card statements |
streetAddress | string Street address |
timezone | number <float> Deprecated Timezone offset as a float |
timezoneName | string Timezone identifier |
website | string <uri> Company website URL |
zip | string <= 10 characters ZIP or postal code |
taxId | string EIN (business) or SSN (individual) of the bank account holder (only last 4 digits are stored) |
password | string >= 6 characters Password for new seller account (required for admin-created accounts) |
createStripeAccount | boolean Default: true Whether to create a Stripe managed account |
{- "name": "Updated Company Name",
- "phone": "+1-555-987-6543",
}
{- "bankAccount": "1234567890",
- "bankAccountType": "checking",
- "bankRouting": "123456789",
- "businessType": "business",
- "city": "Boulder",
- "company": "Mystic Mountain Tours LLC",
- "communicationEmail": "bookings@mystic-mountain-tours.com",
- "country": "United States",
- "countryCode": "US",
- "currency": "USD",
- "email": "info@mystic-mountain-tours.com",
- "emailFooter": "Thank you for choosing Mystic Mountain Tours!",
- "geo": {
- "lat": 36.1069,
- "lng": -112.1129,
- "address": "Grand Canyon National Park, AZ"
}, - "geoNameId": 5294810,
- "name": "Mystic Mountain Tours",
- "personName": "John Smith",
- "phone": "+1-555-123-4567",
- "registrationPath": "self_registration",
- "state": "Colorado",
- "statementDescriptor": "MYSTIC MOUNTAIN TOURS",
- "streetAddress": "456 Mountain View Road",
- "timezone": -7,
- "timezoneName": "America/Denver",
- "zip": "80301",
- "id": "507f1f77bcf86cd799439011",
- "version": 2,
- "enabled": true,
- "balance": 1250.5,
- "disputedBalance": 0,
- "unrecoveredBalance": 0,
- "locale": "en_US",
- "picture": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}, - "medias": [
- {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "acceptedCards": [
- "visa",
- "mastercard",
- "amex"
], - "allowedGateways": [
- "stripe_xola",
- "stripe_oauth"
], - "defaultGateway": "stripe",
- "fees": [
- {
- "id": "string",
- "name": "string",
- "type": "string",
- "amount": 0,
- "percentage": 0,
- "applicableOn": "string"
}
], - "pluginFees": {
- "property1": { },
- "property2": { }
}, - "processingFeeFormulas": [
- {
- "gateway": "string",
- "percentage": 0,
- "fixed": 0
}
], - "partnerFeeFormulas": [
- {
- "partnerId": "string",
- "percentage": 0,
- "fixed": 0
}
], - "paymentMethods": [
- {
- "id": "string",
- "name": "string",
- "type": "string",
- "enabled": true
}
], - "remoteCards": [
- {
- "id": "string",
- "last4": "string",
- "brand": "string",
- "expiryMonth": 0,
- "expiryYear": 0
}
], - "remoteGateways": [
- {
- "id": "string",
- "gateway": "string",
- "name": "string",
- "enabled": true
}
], - "plans": [
- {
- "id": "string",
- "name": "string",
- "schedule": "string",
- "enabled": true
}
], - "subscriptionPlan": {
- "id": "string",
- "name": "string",
- "package": { },
- "addOns": [
- { }
]
}, - "stripeAccount": {
- "id": "string",
- "remoteId": "string",
- "accountType": "string",
- "country": "string",
- "enabled": true
}, - "topUpSource": {
- "id": "string",
- "type": "string",
- "last4": "string"
}, - "autoAccept": {
- "enabled": true,
- "conditions": { }
}, - "blackoutSchedules": [
- {
- "startDate": "2019-08-24",
- "endDate": "2019-08-24",
- "reason": "string"
}
], - "terms": {
- "termsLegal": "string",
- "termsHuman": "string"
}, - "preferences": {
- "booking": {
- "allowMultiItemOrders": true,
- "reservationLimit": 0
}, - "notifications": [
- {
- "type": "string",
- "channels": [
- {
- "type": "string",
- "enabled": true,
- "offset": "string",
- "negativeOffset": true
}
]
}
], - "google": { },
- "network": { }
}, - "roles": [
- "ROLE_SELLER",
- "ROLE_INVENTORY"
], - "delegates": [
- {
- "id": "string",
- "permissions": [
- "string"
], - "user": {
- "id": "string",
- "name": "string",
- "email": "string",
- "enabled": true
}
}
], - "meta": {
- "createCard": true,
- "xola_domain": "xola.com"
}, - "customerNotes": {
- "property1": {
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}, - "property2": {
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
}, - "bankAccountLast4": "7890",
- "bankRoutingLast4": "6789",
- "taxIdLast4": "1234",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
Partially updates a seller's information. Only provided fields are updated, other fields remain unchanged. Alias for PUT with same behavior.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
bankAccount | string^[a-zA-Z0-9]+$ Bank account number for payouts |
bankAccountType | string Enum: "checking" "savings" Type of bank account |
bankRouting | string Bank routing number for payouts |
businessType | string Enum: "business" "individual" Type of business entity |
city | string City |
company | string Legal company name |
communicationEmail | string <email> Email address for customer communications |
country | string Country name |
countryCode | string^[A-Z]{2}$ ISO 3166-1 alpha-2 country code |
currency | string^[A-Z]{3}$ ISO 4217 currency code |
string <email> Primary email address | |
emailFooter | string Custom footer text for outgoing emails |
object (Location) Geographic location with coordinates and optional address | |
geoNameId | integer GeoNames database ID for location |
name | string Company or business name |
personName | string Name of the person who created the account (populated during self-registration) |
phone | string Contact phone number |
registrationPath | string Enum: "xola_admin" "self_registration" How the seller account was created |
state | string State or province |
statementDescriptor | string <= 22 characters ^[^><'"]*$ Text that appears on customer credit card statements |
streetAddress | string Street address |
timezone | number <float> Deprecated Timezone offset as a float |
timezoneName | string Timezone identifier |
website | string <uri> Company website URL |
zip | string <= 10 characters ZIP or postal code |
taxId | string EIN (business) or SSN (individual) of the bank account holder (only last 4 digits are stored) |
password | string >= 6 characters Password for new seller account (required for admin-created accounts) |
createStripeAccount | boolean Default: true Whether to create a Stripe managed account |
{- "bankAccount": "1234567890",
- "bankAccountType": "checking",
- "bankRouting": "123456789",
- "businessType": "business",
- "city": "Boulder",
- "company": "Mystic Mountain Tours LLC",
- "communicationEmail": "bookings@mystic-mountain-tours.com",
- "country": "United States",
- "countryCode": "US",
- "currency": "USD",
- "email": "info@mystic-mountain-tours.com",
- "emailFooter": "Thank you for choosing Mystic Mountain Tours!",
- "geo": {
- "lat": 36.1069,
- "lng": -112.1129,
- "address": "Grand Canyon National Park, AZ"
}, - "geoNameId": 5294810,
- "name": "Mystic Mountain Tours",
- "personName": "John Smith",
- "phone": "+1-555-123-4567",
- "registrationPath": "self_registration",
- "state": "Colorado",
- "statementDescriptor": "MYSTIC MOUNTAIN TOURS",
- "streetAddress": "456 Mountain View Road",
- "timezone": -7,
- "timezoneName": "America/Denver",
- "zip": "80301",
- "taxId": "12-3456789",
- "password": "securePassword123",
- "createStripeAccount": true
}
{- "bankAccount": "1234567890",
- "bankAccountType": "checking",
- "bankRouting": "123456789",
- "businessType": "business",
- "city": "Boulder",
- "company": "Mystic Mountain Tours LLC",
- "communicationEmail": "bookings@mystic-mountain-tours.com",
- "country": "United States",
- "countryCode": "US",
- "currency": "USD",
- "email": "info@mystic-mountain-tours.com",
- "emailFooter": "Thank you for choosing Mystic Mountain Tours!",
- "geo": {
- "lat": 36.1069,
- "lng": -112.1129,
- "address": "Grand Canyon National Park, AZ"
}, - "geoNameId": 5294810,
- "name": "Mystic Mountain Tours",
- "personName": "John Smith",
- "phone": "+1-555-123-4567",
- "registrationPath": "self_registration",
- "state": "Colorado",
- "statementDescriptor": "MYSTIC MOUNTAIN TOURS",
- "streetAddress": "456 Mountain View Road",
- "timezone": -7,
- "timezoneName": "America/Denver",
- "zip": "80301",
- "id": "507f1f77bcf86cd799439011",
- "version": 2,
- "enabled": true,
- "balance": 1250.5,
- "disputedBalance": 0,
- "unrecoveredBalance": 0,
- "locale": "en_US",
- "picture": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}, - "medias": [
- {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "acceptedCards": [
- "visa",
- "mastercard",
- "amex"
], - "allowedGateways": [
- "stripe_xola",
- "stripe_oauth"
], - "defaultGateway": "stripe",
- "fees": [
- {
- "id": "string",
- "name": "string",
- "type": "string",
- "amount": 0,
- "percentage": 0,
- "applicableOn": "string"
}
], - "pluginFees": {
- "property1": { },
- "property2": { }
}, - "processingFeeFormulas": [
- {
- "gateway": "string",
- "percentage": 0,
- "fixed": 0
}
], - "partnerFeeFormulas": [
- {
- "partnerId": "string",
- "percentage": 0,
- "fixed": 0
}
], - "paymentMethods": [
- {
- "id": "string",
- "name": "string",
- "type": "string",
- "enabled": true
}
], - "remoteCards": [
- {
- "id": "string",
- "last4": "string",
- "brand": "string",
- "expiryMonth": 0,
- "expiryYear": 0
}
], - "remoteGateways": [
- {
- "id": "string",
- "gateway": "string",
- "name": "string",
- "enabled": true
}
], - "plans": [
- {
- "id": "string",
- "name": "string",
- "schedule": "string",
- "enabled": true
}
], - "subscriptionPlan": {
- "id": "string",
- "name": "string",
- "package": { },
- "addOns": [
- { }
]
}, - "stripeAccount": {
- "id": "string",
- "remoteId": "string",
- "accountType": "string",
- "country": "string",
- "enabled": true
}, - "topUpSource": {
- "id": "string",
- "type": "string",
- "last4": "string"
}, - "autoAccept": {
- "enabled": true,
- "conditions": { }
}, - "blackoutSchedules": [
- {
- "startDate": "2019-08-24",
- "endDate": "2019-08-24",
- "reason": "string"
}
], - "terms": {
- "termsLegal": "string",
- "termsHuman": "string"
}, - "preferences": {
- "booking": {
- "allowMultiItemOrders": true,
- "reservationLimit": 0
}, - "notifications": [
- {
- "type": "string",
- "channels": [
- {
- "type": "string",
- "enabled": true,
- "offset": "string",
- "negativeOffset": true
}
]
}
], - "google": { },
- "network": { }
}, - "roles": [
- "ROLE_SELLER",
- "ROLE_INVENTORY"
], - "delegates": [
- {
- "id": "string",
- "permissions": [
- "string"
], - "user": {
- "id": "string",
- "name": "string",
- "email": "string",
- "enabled": true
}
}
], - "meta": {
- "createCard": true,
- "xola_domain": "xola.com"
}, - "customerNotes": {
- "property1": {
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}, - "property2": {
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
}, - "bankAccountLast4": "7890",
- "bankRoutingLast4": "6789",
- "taxIdLast4": "1234",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
Retrieves detailed information about a specific seller. Response content varies based on admin access and expand parameters.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
admin | boolean Default: false Example: admin=true Include admin-only fields (requires admin role) |
expand | string Example: expand=defaultGateway,subscriptionPlan Comma-separated list of related objects to expand |
exclude | string Example: exclude=preferences,meta Comma-separated list of fields to exclude from response |
{- "bankAccount": "1234567890",
- "bankAccountType": "checking",
- "bankRouting": "123456789",
- "businessType": "business",
- "city": "Boulder",
- "company": "Mystic Mountain Tours LLC",
- "communicationEmail": "bookings@mystic-mountain-tours.com",
- "country": "United States",
- "countryCode": "US",
- "currency": "USD",
- "email": "info@mystic-mountain-tours.com",
- "emailFooter": "Thank you for choosing Mystic Mountain Tours!",
- "geo": {
- "lat": 36.1069,
- "lng": -112.1129,
- "address": "Grand Canyon National Park, AZ"
}, - "geoNameId": 5294810,
- "name": "Mystic Mountain Tours",
- "personName": "John Smith",
- "phone": "+1-555-123-4567",
- "registrationPath": "self_registration",
- "state": "Colorado",
- "statementDescriptor": "MYSTIC MOUNTAIN TOURS",
- "streetAddress": "456 Mountain View Road",
- "timezone": -7,
- "timezoneName": "America/Denver",
- "zip": "80301",
- "id": "507f1f77bcf86cd799439011",
- "version": 2,
- "enabled": true,
- "balance": 1250.5,
- "disputedBalance": 0,
- "unrecoveredBalance": 0,
- "locale": "en_US",
- "picture": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}, - "medias": [
- {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "acceptedCards": [
- "visa",
- "mastercard",
- "amex"
], - "allowedGateways": [
- "stripe_xola",
- "stripe_oauth"
], - "defaultGateway": "stripe",
- "fees": [
- {
- "id": "string",
- "name": "string",
- "type": "string",
- "amount": 0,
- "percentage": 0,
- "applicableOn": "string"
}
], - "pluginFees": {
- "property1": { },
- "property2": { }
}, - "processingFeeFormulas": [
- {
- "gateway": "string",
- "percentage": 0,
- "fixed": 0
}
], - "partnerFeeFormulas": [
- {
- "partnerId": "string",
- "percentage": 0,
- "fixed": 0
}
], - "paymentMethods": [
- {
- "id": "string",
- "name": "string",
- "type": "string",
- "enabled": true
}
], - "remoteCards": [
- {
- "id": "string",
- "last4": "string",
- "brand": "string",
- "expiryMonth": 0,
- "expiryYear": 0
}
], - "remoteGateways": [
- {
- "id": "string",
- "gateway": "string",
- "name": "string",
- "enabled": true
}
], - "plans": [
- {
- "id": "string",
- "name": "string",
- "schedule": "string",
- "enabled": true
}
], - "subscriptionPlan": {
- "id": "string",
- "name": "string",
- "package": { },
- "addOns": [
- { }
]
}, - "stripeAccount": {
- "id": "string",
- "remoteId": "string",
- "accountType": "string",
- "country": "string",
- "enabled": true
}, - "topUpSource": {
- "id": "string",
- "type": "string",
- "last4": "string"
}, - "autoAccept": {
- "enabled": true,
- "conditions": { }
}, - "blackoutSchedules": [
- {
- "startDate": "2019-08-24",
- "endDate": "2019-08-24",
- "reason": "string"
}
], - "terms": {
- "termsLegal": "string",
- "termsHuman": "string"
}, - "preferences": {
- "booking": {
- "allowMultiItemOrders": true,
- "reservationLimit": 0
}, - "notifications": [
- {
- "type": "string",
- "channels": [
- {
- "type": "string",
- "enabled": true,
- "offset": "string",
- "negativeOffset": true
}
]
}
], - "google": { },
- "network": { }
}, - "roles": [
- "ROLE_SELLER",
- "ROLE_INVENTORY"
], - "delegates": [
- {
- "id": "string",
- "permissions": [
- "string"
], - "user": {
- "id": "string",
- "name": "string",
- "email": "string",
- "enabled": true
}
}
], - "meta": {
- "createCard": true,
- "xola_domain": "xola.com"
}, - "customerNotes": {
- "property1": {
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}, - "property2": {
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
}, - "bankAccountLast4": "7890",
- "bankRoutingLast4": "6789",
- "taxIdLast4": "1234",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
Enables a seller account by setting enabled status to true. Also reactivates associated subscription plans if applicable.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Disables a seller account by setting enabled status to false. Also deactivates the account and associated subscription plans.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Updates the list of payment gateways allowed for a seller. Admin-only endpoint. Automatically creates Stripe managed accounts if Xola Stripe platform gateway is enabled and seller doesn't have one.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
allowedGateways required | Array of strings Items Enum: "stripe_xola" "stripe_xola_canada" "stripe_oauth" "stripe_api_key" "authorize_net_aim" "authorize_net_cim" "cybersource" List of allowed payment gateway types. Available options:
|
{- "allowedGateways": [
- "stripe_xola",
- "stripe_oauth"
]
}
[- "stripe_xola",
- "stripe_oauth"
]
Updates Know Your Customer (KYC) information for a seller. This information is used for payment processing compliance.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
accountHolderName required | string Legal name of the account holder |
dateOfBirth required | string <date> Date of birth of the account holder |
{- "accountHolderName": "John Smith",
- "dateOfBirth": "1985-03-15"
}
[- null
]
Alias for POST /sellers/{id}/kycInfo
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
accountHolderName required | string Legal name of the account holder |
dateOfBirth required | string <date> Date of birth of the account holder |
{- "accountHolderName": "John Smith",
- "dateOfBirth": "1985-03-15"
}
[- null
]
Uploads the primary picture/logo for a seller account. This sets the main profile image displayed for the seller.
Supports both xhr upload (with qqfile parameter) and form upload.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
qqfile | string Example: qqfile=logo.jpg Filename for xhr upload |
qqfile | string <binary> Image file to upload |
target | string Target usage for the media |
{- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "target": "string"
}
Uploads additional media files for a seller account (beyond the primary logo). These can include promotional images, videos, or documents.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
qqfile | string Example: qqfile=promo-image.jpg Filename for xhr upload |
qqfile | string <binary> Media file to upload |
target | string Target usage for the media |
{- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "target": "string"
}
Retrieves all media files associated with a seller account. Results can be filtered by target usage and media type.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
target | string Example: target=checkout_banner Filter by target usage |
type | string Enum: "photo" "video" "document" Example: type=photo Filter by media type |
[- {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "target": "string"
}
]
Retrieves a specific media file for a seller, with optional resizing. Returns a redirect to the actual media file URL.
Parameter Precedence: If both width AND height are specified, they take precedence over the size preset. If only width OR only height is provided (not both), the size preset will be used instead. If neither width/height nor size is provided, the original image is returned.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
mediaId required | string Example: 507f1f77bcf86cd799439012 Media file ID |
width | integer [ 1 .. 2000 ] Example: width=300 Desired image width in pixels |
height | integer [ 1 .. 2000 ] Example: height=200 Desired image height in pixels |
size | string Enum: "small" "medium" "large" "thumbnail" Example: size=medium Predefined size preset with specific dimensions:
|
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Create a new check-in rule for ticket validation during guest check-in process. Rules can be mandatory or optional and can display validation results on tickets.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
name required | string Name of the check-in rule |
required | boolean Whether this rule must be validated during guest check-in |
showOnTicket | boolean Whether validation result appears on the ticket |
passText | string Text to show on ticket if the rule passes validation |
failText | string Text to show on ticket if the rule fails validation |
{- "name": "Age Verification",
- "required": true,
- "showOnTicket": true,
- "passText": "Age verified ✓",
- "failText": "Age verification required"
}
{- "name": "Age Verification",
- "required": true,
- "showOnTicket": true,
- "passText": "Age verified ✓",
- "failText": "Age verification required",
- "id": "507f1f77bcf86cd799439011"
}
Update an existing check-in rule by ID
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
ruleId required | string Example: 507f1f77bcf86cd799439012 Check-in rule ID |
name required | string Name of the check-in rule |
required | boolean Whether this rule must be validated during guest check-in |
showOnTicket | boolean Whether validation result appears on the ticket |
passText | string Text to show on ticket if the rule passes validation |
failText | string Text to show on ticket if the rule fails validation |
{- "name": "Age Verification",
- "required": true,
- "showOnTicket": true,
- "passText": "Age verified ✓",
- "failText": "Age verification required"
}
{- "name": "Age Verification",
- "required": true,
- "showOnTicket": true,
- "passText": "Age verified ✓",
- "failText": "Age verification required",
- "id": "507f1f77bcf86cd799439011"
}
Remove a check-in rule by ID
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
ruleId required | string Example: 507f1f77bcf86cd799439012 Check-in rule ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Configure custom styling preferences for user interface customization. Requires admin role permissions.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
seller | string or null <uri> URL pointing to a remote CSS file for seller interface customization |
checkout | string or null <uri> URL pointing to a remote CSS file for checkout page customization |
traveler | string or null <uri> URL pointing to a remote CSS file for traveler interface customization |
ticket | string or null <uri> URL pointing to a remote CSS file for order ticket page customization |
{
}
{
}
Configure custom styling preferences for user interface customization. Requires admin role permissions.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
seller | string or null <uri> URL pointing to a remote CSS file for seller interface customization |
checkout | string or null <uri> URL pointing to a remote CSS file for checkout page customization |
traveler | string or null <uri> URL pointing to a remote CSS file for traveler interface customization |
ticket | string or null <uri> URL pointing to a remote CSS file for order ticket page customization |
{
}
{
}
Configure booking behavior preferences including post-booking actions, order limitations, and itemization settings.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
postBookingAction | string or null Action to be performed post booking |
allowMultiItemOrders | boolean or null Whether to allow multiple items in a single order (deprecated) |
allowMultiplePrivateEvents | boolean or null Whether multiple private events can be created for the same timeslot |
allowPastDates | boolean or null Whether past dates are available when making a booking or switching arrival/experience |
allowBookingEngineOrderModification | boolean or null Whether booking engine orders can be modified by the seller |
timeslotReservationLimit | integer or null >= 1 Maximum number of reserved reservations allowed for any given time slot, across all experiences |
reservationLimit | integer or null >= 1 Maximum number of experience items an order should be limited to in case of MIST booking |
object or null Order itemization settings | |
defaultPriceStrategyForPurchaseEdit | string or null Default strategy for the retain price toggle in all purchase modification screens |
{- "postBookingAction": "goToDashboard",
- "allowMultiItemOrders": true,
- "allowMultiplePrivateEvents": false,
- "allowPastDates": false,
- "allowBookingEngineOrderModification": false,
- "timeslotReservationLimit": 10,
- "reservationLimit": 5,
- "orderItemization": {
- "enabled": false
}, - "defaultPriceStrategyForPurchaseEdit": "retain"
}
{- "postBookingAction": "goToDashboard",
- "allowMultiItemOrders": true,
- "allowMultiplePrivateEvents": false,
- "allowPastDates": false,
- "allowBookingEngineOrderModification": false,
- "timeslotReservationLimit": 10,
- "reservationLimit": 5,
- "orderItemization": {
- "enabled": true
}, - "defaultPriceStrategyForPurchaseEdit": "retain"
}
Configure payment processing preferences including billing requirements, 3D Secure settings, tax calculation, and fraud prevention.
Note: V2 sellers cannot disable 3D Secure - contact support for assistance.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
requireAdditionalBillingInfo | boolean Whether to require additional billing information during card payment |
threeDSecureEnabled | boolean Whether 3D Secure transactions are enabled |
taxAssessedOn | string Enum: "promotional_value" "purchase_value" How tax is calculated when voucher is applied |
refundProcessingFee | boolean Whether CC processing fee is returned upon full order refund |
enforcePostalCode | boolean Whether postal code is required during billing |
object Fraud prevention settings |
{- "requireAdditionalBillingInfo": true,
- "threeDSecureEnabled": true,
- "taxAssessedOn": "purchase_value",
- "refundProcessingFee": false,
- "fraud": {
- "threeDSecureTriggerAmount": 100
}
}
{- "requireAdditionalBillingInfo": true,
- "threeDSecureEnabled": true,
- "taxAssessedOn": "purchase_value",
- "refundProcessingFee": false,
- "enforcePostalCode": true,
- "fraud": {
- "threeDSecureTriggerAmount": 100
}
}
Configure custom branding preferences including SMTP settings for branded emails. All SMTP fields are required when configuring custom email branding.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
emailFooter | string or null Custom footer text for email templates |
receiptFooter | string or null Custom footer text for receipt emails |
object or null Custom SMTP configuration for branded emails (all fields required when configuring) |
{- "customSmtp": {
- "host": "smtp.example.com",
- "port": 587,
- "userName": "noreply@example.com",
- "password": "password123"
}
}
{- "emailFooter": "Thank you for choosing our service!",
- "receiptFooter": "Visit our website for more information",
- "customSmtp": {
- "host": "smtp.example.com",
- "port": 587,
- "userName": "noreply@example.com",
- "password": "password123",
- "encryption": "tls"
}
}
Configure custom branding preferences including SMTP settings for branded emails. All SMTP fields are required when configuring custom email branding.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
emailFooter | string or null Custom footer text for email templates |
receiptFooter | string or null Custom footer text for receipt emails |
object or null Custom SMTP configuration for branded emails (all fields required when configuring) |
{- "emailFooter": "Thank you for choosing our service!",
- "receiptFooter": "Visit our website for more information",
- "customSmtp": {
- "host": "smtp.example.com",
- "port": 587,
- "userName": "noreply@example.com",
- "password": "password123",
- "encryption": "tls"
}
}
{- "emailFooter": "Thank you for choosing our service!",
- "receiptFooter": "Visit our website for more information",
- "customSmtp": {
- "host": "smtp.example.com",
- "port": 587,
- "userName": "noreply@example.com",
- "password": "password123",
- "encryption": "tls"
}
}
Configure checkout process preferences including price display options and themes.
Price display options:
Some options require specific permissions (embedded checkout, X2 checkout).
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
priceDisplay | string Enum: "hide" "range" "lowest" "base" How pricing information is displayed during checkout:
|
includeFees | boolean Include taxes and fees in the final price displayed on checkout |
displayEventDuration | boolean Display duration of event on checkout |
showTaxesAndFeesBreakdown | boolean Show a taxes and fees breakdown in the checkout app |
showExcerptInTile | boolean Show the product excerpt in the multi-item checkout tile |
object or null Checkout theme configuration (requires embedded checkout permission) | |
x2Probability | number [ 0 .. 1 ] X2 checkout probability (requires X2 checkout permission) |
object or null Checkout flow weights configuration | |
Array of objects Footer links configuration |
{- "priceDisplay": "range"
}
{- "priceDisplay": "range",
- "includeFees": false,
- "displayEventDuration": true,
- "showTaxesAndFeesBreakdown": true,
- "showExcerptInTile": false,
- "theme": {
- "id": "507f1f77bcf86cd799439011"
}, - "x2Probability": 1,
- "flowWeights": {
- "property1": 0,
- "property2": 0
},
}
Configure checkout process preferences including price display options and themes.
Price display options:
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
priceDisplay | string Enum: "hide" "range" "lowest" "base" How pricing information is displayed during checkout:
|
includeFees | boolean Include taxes and fees in the final price displayed on checkout |
displayEventDuration | boolean Display duration of event on checkout |
showTaxesAndFeesBreakdown | boolean Show a taxes and fees breakdown in the checkout app |
showExcerptInTile | boolean Show the product excerpt in the multi-item checkout tile |
object or null Checkout theme configuration (requires embedded checkout permission) | |
x2Probability | number [ 0 .. 1 ] X2 checkout probability (requires X2 checkout permission) |
object or null Checkout flow weights configuration | |
Array of objects Footer links configuration |
{- "priceDisplay": "range",
- "includeFees": false,
- "displayEventDuration": true,
- "showTaxesAndFeesBreakdown": true,
- "showExcerptInTile": false,
- "theme": {
- "id": "507f1f77bcf86cd799439011"
}, - "x2Probability": 1,
- "flowWeights": {
- "property1": 0,
- "property2": 0
},
}
{- "priceDisplay": "range",
- "includeFees": false,
- "displayEventDuration": true,
- "showTaxesAndFeesBreakdown": true,
- "showExcerptInTile": false,
- "theme": {
- "id": "507f1f77bcf86cd799439011"
}, - "x2Probability": 1,
- "flowWeights": {
- "property1": 0,
- "property2": 0
},
}
Configure date picker widget preferences including theme, format, and locale settings
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
displayType | string Enum: "none" "price" "count" Type of information to display on date picker:
|
priceDisplay | string Enum: "lowest" "highest" Which price to display when displayType is 'price':
|
unavailableMessage | string or null <= 15 characters Custom message to show when a date is unavailable (max 15 characters) |
unavailableScheduleMessage | string or null Custom message to show when a schedule is not available for the date |
showUnavailableTimes | boolean or null Whether to show unavailable time slots in front-office datepicker |
displayCountMax | integer or null >= 0 Show availability count only if below this value |
showNextDayTimeslotsTill | integer or null [ 0 .. 2359 ] Time in military format - show next day timeslots until this time |
showCurrentDayTimeslotsAfter | integer or null [ 0 .. 2359 ] Time in military format - hide current day timeslots before this time |
{- "displayType": "price",
- "priceDisplay": "highest",
- "unavailableMessage": "Sold Out",
- "unavailableScheduleMessage": "No times available",
- "showUnavailableTimes": false,
- "displayCountMax": 10,
- "showNextDayTimeslotsTill": 200,
- "showCurrentDayTimeslotsAfter": 600
}
{- "displayType": "price",
- "priceDisplay": "highest",
- "unavailableMessage": "Sold Out",
- "unavailableScheduleMessage": "No times available",
- "showUnavailableTimes": false,
- "displayCountMax": 10,
- "showNextDayTimeslotsTill": 200,
- "showCurrentDayTimeslotsAfter": 600
}
Configure gift certificate preferences including email templates and additional experience visibility
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
enabled | boolean or null Whether gift feature is enabled |
showAdditionalExperiences | boolean or null Whether additional bookable experiences are included in gift emails |
customerPhoneRequired | boolean or null Whether customer phone number is mandatory upon purchase |
captchaEnabled | boolean or null Whether captcha is enabled for gift purchases |
allowMultiItemGifts | boolean or null Whether to allow multiple items in gift purchases (deprecated) |
showDemographics | boolean or null Whether to show demographics in gift purchase flow (deprecated) |
{- "showAdditionalExperiences": true
}
{- "enabled": true,
- "showAdditionalExperiences": true,
- "customerPhoneRequired": true,
- "captchaEnabled": true,
- "allowMultiItemGifts": true,
- "showDemographics": true
}
Configure notification preferences for all notification types. Updates the complete notification preferences configuration.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
Array of objects (NotificationPreferenceRequest) Array of notification preferences |
{- "preferences": [
- {
- "type": "booking_confirmation",
- "channels": [
- {
- "type": "email",
- "enabled": true,
- "offset": "PT0S",
- "negativeOffset": false
}
]
}, - {
- "type": "booking_reminder",
- "channels": [
- {
- "type": "email",
- "enabled": true,
- "offset": "PT1H",
- "negativeOffset": true
}
]
}
]
}
{- "preferences": [
- {
- "type": "booking_confirmation",
- "channels": [
- {
- "type": "email",
- "enabled": true,
- "offset": "PT1H",
- "negativeOffset": false
}
]
}
]
}
Configure notification preferences for all notification types. Updates the complete notification preferences configuration.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
Array of objects (NotificationPreferenceRequest) Array of notification preferences |
{- "preferences": [
- {
- "type": "booking_confirmation",
- "channels": [
- {
- "type": "email",
- "enabled": true,
- "offset": "PT1H",
- "negativeOffset": false
}
]
}
]
}
{- "preferences": [
- {
- "type": "booking_confirmation",
- "channels": [
- {
- "type": "email",
- "enabled": true,
- "offset": "PT1H",
- "negativeOffset": false
}
]
}
]
}
Update a specific notification preference by notification type. The notification type in the URL must match the type field in the request body.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
notificationType required | string Example: booking_confirmation Notification type to update |
type required | string Type of notification |
required | Array of objects Notification channels and their settings |
{- "type": "booking_confirmation",
- "channels": [
- {
- "type": "email",
- "enabled": true,
- "offset": "PT0S",
- "negativeOffset": false
}
]
}
{- "preferences": [
- {
- "type": "booking_confirmation",
- "channels": [
- {
- "type": "email",
- "enabled": true,
- "offset": "PT1H",
- "negativeOffset": false
}
]
}
]
}
Configure Google Analytics, Tag Manager, and advertising integration preferences
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
gtmId | string or null Google Tag Manager ID specified for this user |
Array of objects Array of Google Places associated with the user |
{- "gtmId": "GTM-XXXXXXX",
- "places": [
- {
- "placeId": "ChIJN1t_tDeuEmsRUsoyG83frY4",
- "name": "Google Sydney",
- "address": "48 Pirrama Rd, Pyrmont NSW 2009, Australia"
}
]
}
{- "gtmId": "GTM-XXXXXXX",
- "places": [
- {
- "placeId": "string",
- "name": "string",
- "address": "string"
}
]
}
Create a new conversion tracking configuration for marketing platforms
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
enabled | boolean or null Whether this conversion tracking is enabled |
label | string or null Label/name for this tracking configuration |
code | string or null Code template with variables for conversion tracking. Available variables: order.amount, order.purchaseAmount, order.currency, order.id, order.productId, order.productName, order.productType, order.quantity, order.arrival, order.couponCode, session, order.seller.id, order.seller.name, order.seller.city, order.seller.state, order.seller.country, order.seller.countryCode |
{- "enabled": false,
- "label": "Facebook Conversion Tracking",
- "code": "fbq('track', 'Purchase');"
}
{- "enabled": true,
- "label": "Facebook Conversion Tracking",
- "code": "gtag('event', 'purchase', { value: {{order.amount}}, currency: '{{order.currency}}' });",
- "id": "507f1f77bcf86cd799439011"
}
Update an existing conversion tracking configuration
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
trackingId required | string Example: 507f1f77bcf86cd799439012 Conversion tracking ID |
enabled | boolean or null Whether this conversion tracking is enabled |
label | string or null Label/name for this tracking configuration |
code | string or null Code template with variables for conversion tracking. Available variables: order.amount, order.purchaseAmount, order.currency, order.id, order.productId, order.productName, order.productType, order.quantity, order.arrival, order.couponCode, session, order.seller.id, order.seller.name, order.seller.city, order.seller.state, order.seller.country, order.seller.countryCode |
{- "enabled": true,
- "label": "Facebook Conversion Tracking",
- "code": "gtag('event', 'purchase', { value: {{order.amount}}, currency: '{{order.currency}}' });"
}
{- "enabled": true,
- "label": "Facebook Conversion Tracking",
- "code": "gtag('event', 'purchase', { value: {{order.amount}}, currency: '{{order.currency}}' });",
- "id": "507f1f77bcf86cd799439011"
}
Configure Facebook Pixel tracking for conversion monitoring and remarketing
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
enabled | boolean Whether Facebook Pixel tracking is enabled |
facebookPixelId | string Facebook Pixel ID |
allowAdvancedConversionTracking | boolean Whether to allow advanced conversion tracking |
accessToken | string Facebook access token for advanced features |
{- "enabled": false,
- "facebookPixelId": "123456789012345",
- "allowAdvancedConversionTracking": false,
- "accessToken": "EAABwzLixnjYBAJWY5OlkUF3..."
}
{- "enabled": false,
- "facebookPixelId": "123456789012345",
- "allowAdvancedConversionTracking": false,
- "accessToken": "EAABwzLixnjYBAJWY5OlkUF3..."
}
Configure affiliate program settings including commission rates and cookie duration
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
allowLogin | boolean Whether affiliates should be allowed to login into Xola |
object Affiliate credit line configuration |
{- "allowLogin": false,
- "affiliateCreditLine": {
- "enabled": false,
- "enableLowBalanceWarning": false,
- "creditLimitPercentageForWarning": 20,
- "lowBalanceReminderInterval": "P2D"
}
}
{- "allowLogin": false,
- "affiliateCreditLine": {
- "enabled": false,
- "enableLowBalanceWarning": false,
- "creditLimitPercentageForWarning": 20,
- "lowBalanceReminderInterval": "P2D"
}
}
Configure inventory and booking automation preferences
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
allocationStrategy | string Enum: "smallest_first" "largest_first" "custom_assignment" Strategy to be used while assigning resources to events:
|
Array of objects Sorted list of resources (only for custom_assignment strategy) |
{- "allocationStrategy": "largest_first",
- "prioritizedResources": [ ]
}
{- "allocationStrategy": "largest_first",
- "prioritizedResources": [
- {
- "resourceId": "507f1f77bcf86cd799439011",
- "priority": 1
}, - {
- "resourceId": "507f1f77bcf86cd799439012",
- "priority": 2
}
]
}
Configure customer review and rating collection preferences
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
destination | string Enum: "off" "xola" "googlePlus" "tripAdvisor" "yelp" "custom" Review destination platform |
reviewTemplate | string or null Custom review template (required when destination is 'custom') |
reviewLink | string or null <uri> Custom review link URL (required when destination is 'googlePlus') |
sendReviewEmailToAllTravelers | boolean Whether to send review email to all travelers in the booking |
{- "destination": "xola",
- "reviewTemplate": null,
- "reviewLink": null,
- "sendReviewEmailToAllTravelers": false
}
{- "destination": "xola",
- "reviewTemplate": "Please leave us a review at our custom platform",
- "sendReviewEmailToAllTravelers": false
}
Update customer review and rating collection preferences
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
destination | string Enum: "off" "xola" "googlePlus" "tripAdvisor" "yelp" "custom" Review destination platform |
reviewTemplate | string or null Custom review template (required when destination is 'custom') |
reviewLink | string or null <uri> Custom review link URL (required when destination is 'googlePlus') |
sendReviewEmailToAllTravelers | boolean Whether to send review email to all travelers in the booking |
{- "destination": "xola",
- "reviewTemplate": "Please leave us a review at our custom platform",
- "sendReviewEmailToAllTravelers": false
}
{- "destination": "xola",
- "reviewTemplate": "Please leave us a review at our custom platform",
- "sendReviewEmailToAllTravelers": false
}
Remove review and rating collection preferences
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Configure split payment preferences for a specific user. Split payment allows customers to pay in multiple installments with configurable deadlines.
Key Features:
id required | string Example: 507f1f77bcf86cd799439011 User ID |
isEnabled | boolean Whether split payment option is enabled for this user |
paymentDeadline | integer >= 1 Payment deadline in minutes after booking creation |
autoChargeOnDeadline | boolean Whether to automatically charge the remaining balance when payment deadline is reached |
{- "isEnabled": true,
- "paymentDeadline": 1440,
- "autoChargeOnDeadline": false
}
{- "isEnabled": true,
- "paymentDeadline": 1440,
- "autoChargeOnDeadline": false
}
Configure availability timeline display preferences for a specific user. Controls how availability information is shown in calendar and booking widgets.
Display Options:
id required | string Example: 507f1f77bcf86cd799439011 User ID |
showUnavailable | boolean Whether to display unavailable dates/times on the timeline |
unavailableMessage | string or null <= 15 characters Custom message to display for unavailable dates (maximum 15 characters) |
showPrice | boolean Whether to display pricing information on timeline items |
showOpen | boolean Whether to show available/open slots on the timeline |
maxDays | integer or null >= 1 Maximum number of days to display in the timeline |
showOpenMax | integer or null >= 1 Maximum number of open slots to display per day |
showExcerpt | boolean Whether to display additional excerpt/description information |
{- "showUnavailable": true,
- "unavailableMessage": "Sold Out",
- "showPrice": true,
- "showOpen": true,
- "maxDays": 365,
- "showOpenMax": 10,
- "showExcerpt": false
}
{- "showUnavailable": true,
- "unavailableMessage": "Sold Out",
- "showPrice": true,
- "showOpen": true,
- "maxDays": 365,
- "showOpenMax": 10,
- "showExcerpt": false
}
Retrieve the global questionnaire form for a seller. This form applies to all experiences when no experience-specific form exists.
id required | string Example: 507f191e810c19729de860ea The unique identifier of the seller |
{- "id": "507f1f77bcf86cd799439011",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "product": {
- "id": "507f1f77bcf86cd799439011"
}, - "productType": "experience",
- "organizerOnly": true,
- "fields": [
- {
- "label": "Full Name",
- "description": "Please enter your full legal name as it appears on your ID",
- "type": "text",
- "width": 3,
- "suffix": "lbs",
- "help": "This information helps us provide proper equipment",
- "required": true,
- "roster": false,
- "readonly": false,
- "organizerOnly": true,
- "displayStep": "afterPayment",
- "visibility": "all",
- "seq": 1,
- "options": [
- "None",
- "Vegetarian",
- "Vegan",
- "Gluten-free"
], - "id": "60f1f7bc5f6d2a3b4c8e9d12"
}
], - "optionalSourcesList": [
- "direct",
- "partner"
], - "deletedAt": "2019-08-24T14:15:22Z"
}
Retrieve a paginated list of purchases. Supports filtering, searching, and various query parameters.
Supports two modes:
search
, kiosk
, or dashboard
parameters are provided along with seller
For export functionality, include a format
parameter to receive a job ID for asynchronous processing.
seller | string Example: seller=60f7b3c4e4b0a1234567890a Filter purchases by seller ID |
organizer | string Example: organizer=60f7b3c4e4b0a1234567890b Filter purchases by organizer/customer ID |
status | Array of strings Items Enum: "draft" "waitlist" "abandon" "hold" "committed" Example: status=committed,hold Filter by purchase status(es) |
search | string Example: search=john@example.com Search query for customer names, emails, or purchase details |
kiosk | boolean Enable kiosk mode for simplified UI (triggers Elasticsearch) |
dashboard | boolean Enable dashboard mode (triggers Elasticsearch) |
object (DateTimeFilterSchema) Examples: createdAt[summary]=Find records where field exists (not null)&createdAt[value]=[object Object] createdAt[summary]=Find records where field is null/missing&createdAt[value]=[object Object] createdAt[summary]=Date range filtering&createdAt[value]=[object Object] createdAt[summary]=Range using comma-separated string&createdAt[value]=[object Object] createdAt[summary]=Using period for today&createdAt[value]=[object Object] createdAt[summary]=Using period for last week&createdAt[value]=[object Object] createdAt[summary]=Exact date-time match&createdAt[value]=[object Object] createdAt[summary]=After specific date&createdAt[value]=[object Object] Filter by creation timestamp. Supports date-time filtering operations. | |
object (DateTimeFilterSchema) Examples: updatedAt[summary]=Find records where field exists (not null)&updatedAt[value]=[object Object] updatedAt[summary]=Find records where field is null/missing&updatedAt[value]=[object Object] updatedAt[summary]=Date range filtering&updatedAt[value]=[object Object] updatedAt[summary]=Range using comma-separated string&updatedAt[value]=[object Object] updatedAt[summary]=Using period for today&updatedAt[value]=[object Object] updatedAt[summary]=Using period for last week&updatedAt[value]=[object Object] updatedAt[summary]=Exact date-time match&updatedAt[value]=[object Object] updatedAt[summary]=After specific date&updatedAt[value]=[object Object] Filter by last update timestamp. Supports date-time filtering operations. | |
object Example: id[gt]=60f7b3c4e4b0a1234567890a Filter by purchase ID using MongoDB query operators | |
sort | string Example: sort=createdAt,-updatedAt Sort field(s). Multiple fields can be comma-separated.
Prefix with |
limit | integer [ 1 .. 100 ] Example: limit=25 Number of results per page |
offset | integer >= 0 Number of results to skip |
expand | Array of strings Items Enum: "items" "seller" "organizer" "travelers" "conversation" "breakdown" Example: expand=items,seller Additional resources to include in response:
|
include | Array of strings Additional fields to include in response |
format | string Enum: "csv" "xlsx" Example: format=csv Export format - returns job ID for async processing instead of data |
etl | boolean Enable ETL mode for data extraction (admin only) |
{- "data": [
- {
- "id": "60f7b3c4e4b0a1234567890a",
- "object": "purchase",
- "status": "committed",
- "customerName": "John Doe",
- "customerEmail": "john.doe@example.com",
- "currency": "USD",
- "amount": 150,
- "balance": 0,
- "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "organizer": {
- "id": "60f7b3c4e4b0a1234567890c"
}, - "createdAt": "2023-12-07T10:30:00Z",
- "updatedAt": "2023-12-07T11:45:00Z",
- "items": [
- {
- "id": "60f7b3c4e4b0a1234567890d",
- "object": "scheduled_experience_purchase_item",
- "status": "confirmed",
- "amount": 150,
- "arrivalDateTime": "2023-12-15T14:00:00Z"
}
]
}
], - "paging": {
- "next": null
}
}
Create a new purchase. Supports both regular purchases and partner purchases.
The system automatically detects partner purchases based on payload content.
Use the dryRun
parameter to validate purchase data without persisting.
The validationLevel
parameter controls validation strictness:
error
: Full validationinfo
: Basic validation onlywarning
: Skip validationignore
: No validationdryRun | boolean Default: false Validate purchase without persisting (returns 200 instead of 201) |
validationLevel | string Default: "ignore" Enum: "error" "info" "warning" "ignore" Level of validation to apply |
expand | Array of strings Items Enum: "items" "seller" "organizer" "travelers" "breakdown" Example: expand=items,seller Additional resources to include in response |
id | string or null Purchase ID (null for new purchases) |
status | string Enum: "draft" "waitlist" "abandon" "hold" "committed" Purchase status |
customerName required | string Name of the customer |
customerEmail required | string <email> Email address of the customer |
customerLocale | string Customer's preferred locale |
customerTimezoneName | string Customer's timezone |
phone | string Customer's phone number |
currency | string Currency code (ISO 4217) |
payNow | number or null <float> Deposit amount to pay now |
referenceId | string External booking reference |
source | string Source where purchase originated |
required | object (ObjectReference) Seller ID reference |
object (ObjectReference) Customer/organizer ID reference | |
required | Array of objects (PurchaseItemRequest) Purchase items to include |
Array of any (PurchaseLineItemRequest) Top-level line items for the purchase (payment and refund line items) | |
object (purchases_SplitPaymentPreferenceRequest) Split payment configuration | |
Array of objects (PaymentReminder) Payment reminder configuration | |
releaseHoldAt | string <date-time> When to release hold (for draft purchases) |
object Additional metadata |
Creates a purchase for a day-scheduled experience with adult demographics
{- "lineItems": [ ],
- "items": [
- {
- "arrivalDate": "2025-09-01",
- "privacy": "public",
- "product": {
- "id": "68596b702ef9757f080a59ae"
}, - "quantity": 1,
- "lineItems": [
- {
- "object": "line_item",
- "type": "demographic",
- "quantity": 1,
- "template": {
- "id": "68592497b76cfaee140484b8"
}, - "amount": 100
}, - {
- "object": "line_item",
- "type": "demographic",
- "quantity": 0,
- "template": {
- "id": "68592497b76cfaee140484bb"
}, - "amount": 0
}, - {
- "object": "line_item",
- "type": "demographic",
- "quantity": 0,
- "template": {
- "id": "68592497b76cfaee140484be"
}, - "amount": 0
}
], - "balanceDueOffset": 0,
- "guests": [ ],
- "status": "draft",
- "object": "scheduled_experience_purchase_item",
- "guestStatus": "pending",
- "timeslot": {
- "product": "68596b702ef9757f080a59ae",
- "time": null,
- "scheduleType": "day",
- "date": "2025-09-01",
- "arrivalDatetime": "2025-09-01T00:00:00-04:00",
- "end": "2025-09-02T23:59:59-04:00",
- "privacy": "public",
- "id": "68596b702ef9757f080a59ae_2025-09-01_685bb85cc6c0e91eea92abe4",
- "capacity": {
- "open": 448,
- "max": 449
}, - "canBook": true,
- "units": [
- {
- "price": 100,
- "id": "68592497b76cfaee140484b7",
- "type": "demographic",
- "code": "adult",
- "template": {
- "id": "68592497b76cfaee140484b8"
}, - "priceType": "person"
}, - {
- "price": 12,
- "id": "68592497b76cfaee140484ba",
- "type": "demographic",
- "code": "child",
- "template": {
- "id": "68592497b76cfaee140484bb"
}, - "priceType": "person"
}, - {
- "price": 14,
- "id": "68592497b76cfaee140484bd",
- "type": "demographic",
- "code": "senior",
- "template": {
- "id": "68592497b76cfaee140484be"
}, - "priceType": "person"
}
]
}, - "purchase": {
- "id": null
}
}
], - "seller": {
- "id": "68592497b76cfaee140484b6"
}, - "splitPayment": {
- "enabled": false
}, - "currency": "USD",
- "status": "draft",
- "id": null,
- "payNow": null,
- "customerName": "John Doe",
- "customerEmail": "customer@example.com",
- "phone": ""
}
{- "id": "60f7b3c4e4b0a1234567890a",
- "object": "purchase",
- "status": "committed",
- "internalStatus": "committed",
- "customerName": "John Doe",
- "customerEmail": "john.doe@example.com",
- "customerLocale": "en-US",
- "customerTimezoneName": "America/New_York",
- "phone": "+1234567890",
- "phoneCanonical": "1234567890",
- "currency": "USD",
- "amount": 150,
- "amounts": {
- "property1": 0.1,
- "property2": 0.1
}, - "balances": {
- "property1": 0.1,
- "property2": 0.1
}, - "balance": 0,
- "payNow": 50,
- "dueNow": 50,
- "affiliatePayment": 15,
- "referenceId": "EXT-BOOKING-123",
- "source": "website",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "organizer": {
- "id": "507f1f77bcf86cd799439011"
}, - "partnerSeller": {
- "id": "507f1f77bcf86cd799439011"
}, - "partner": {
- "id": "string",
- "object": "string"
}, - "affiliate": {
- "id": "507f1f77bcf86cd799439011"
}, - "conversation": {
- "id": "507f1f77bcf86cd799439011"
}, - "waitlist": {
- "id": "507f1f77bcf86cd799439011"
}, - "travelers": [
- {
- "id": "507f1f77bcf86cd799439011"
}
], - "items": [
- {
- "id": "60f7b3c4e4b0a1234567890b",
- "object": "experience_purchase_item",
- "status": "confirmed",
- "amount": 75,
- "currency": "USD",
- "quantity": 2,
- "product": {
- "id": "507f1f77bcf86cd799439011"
}, - "productName": "City Walking Tour",
- "purchase": {
- "id": "507f1f77bcf86cd799439011"
}, - "source": "website",
- "lineItems": [
- {
- "id": "60f7b3c4e4b0a1234567890c",
- "object": "line_item",
- "type": "fee",
- "name": "Service Fee",
- "code": "SERVICE_FEE_001",
- "price": 25,
- "amount": 50,
- "quantity": 2,
- "destination": "seller",
- "visibility": "all",
- "visible": true,
- "system": false,
- "includeInAmount": true,
- "unit": {
- "id": "507f1f77bcf86cd799439011"
}, - "template": {
- "id": "507f1f77bcf86cd799439011"
}, - "meta": { }
}
], - "createdAt": "2023-12-07T10:30:00Z",
- "updatedAt": "2023-12-07T11:45:00Z"
}
], - "lineItems": [
- {
- "id": "60f7b3c4e4b0a1234567890c",
- "object": "line_item",
- "type": "fee",
- "name": "Service Fee",
- "code": "SERVICE_FEE_001",
- "price": 25,
- "amount": 50,
- "quantity": 2,
- "destination": "seller",
- "visibility": "all",
- "visible": true,
- "system": false,
- "includeInAmount": true,
- "unit": {
- "id": "507f1f77bcf86cd799439011"
}, - "template": {
- "id": "507f1f77bcf86cd799439011"
}, - "meta": { }
}
], - "tags": [
- {
- "id": "string",
- "system": false,
- "type": "string"
}
], - "notes": [
- {
- "id": "60f7b3c4e4b0a1234567890a",
- "text": "Customer requested window seat",
- "type": "general",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
], - "reminders": [
- {
- "id": "60f7b3c4e4b0a1234567890a",
- "type": "follow_up",
- "title": "Follow up with customer",
- "description": "Customer asked about group discounts",
- "remindAt": "2023-12-08T10:00:00Z",
- "completed": false,
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
], - "paymentReminders": [
- {
- "id": "60f7b3c4e4b0a1234567890d",
- "type": "invoice_traveler",
- "amount": 100,
- "dueAt": "2023-12-08T10:00:00Z",
- "sentAt": "2019-08-24T14:15:22Z",
- "status": "pending"
}
], - "splitPayment": {
- "enabled": false
}, - "trackingData": {
- "source": "string",
- "medium": "string",
- "campaign": "string",
- "referrer": "string",
- "ip": "string"
}, - "telemetry": {
- "sessionId": "string",
- "userAgent": "string",
- "screenResolution": "string",
- "timezone": "string"
}, - "meta": { },
- "createdAt": "2023-12-07T10:30:00Z",
- "updatedAt": "2023-12-07T11:45:00Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "termsAgreedAt": "2023-12-07T10:25:00Z",
- "releaseHoldAt": "2023-12-07T12:00:00Z",
- "notifyAt": "2023-12-07T09:00:00Z",
- "migratedAt": "2023-12-07T08:00:00Z",
- "commissionRefundProcessedAt": "2023-12-07T16:00:00Z"
}
Retrieve a specific purchase by its ID.
Special handling for ticket exports: When context=tickets
and format
is specified,
returns a job ID for asynchronous ticket generation instead of purchase data.
Response context varies based on user type:
id required | string Example: 60f7b3c4e4b0a1234567890a Purchase ID |
expand | Array of strings Items Enum: "items" "seller" "organizer" "travelers" "conversation" "breakdown" Example: expand=items,seller Additional resources to include in response |
include | Array of strings Additional fields to include in response |
context | string Value: "tickets" Special context for different response formats |
format | string Enum: "pdf" "csv" Export format for tickets (requires context=tickets) |
{- "id": "60f7b3c4e4b0a1234567890a",
- "object": "purchase",
- "status": "committed",
- "customerName": "John Doe",
- "customerEmail": "john.doe@example.com",
- "phone": "+1234567890",
- "currency": "USD",
- "amount": 150,
- "balance": 0,
- "payNow": 50,
- "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "organizer": {
- "id": "60f7b3c4e4b0a1234567890c"
}, - "createdAt": "2023-12-07T10:30:00Z",
- "updatedAt": "2023-12-07T11:45:00Z",
- "items": [
- {
- "id": "60f7b3c4e4b0a1234567890d",
- "object": "scheduled_experience_purchase_item",
- "status": "confirmed",
- "amount": 150,
- "productName": "City Walking Tour",
- "arrivalDateTime": "2023-12-15T14:00:00Z",
- "lineItems": [
- {
- "id": "60f7b3c4e4b0a123456789a0",
- "object": "line_item",
- "type": "demographic",
- "name": "Adult",
- "quantity": 2,
- "price": 75,
- "amount": 150
}
]
}
], - "lineItems": [
- {
- "id": "60f7b3c4e4b0a123456789a1",
- "object": "line_item",
- "type": "payment",
- "name": "Credit Card Payment",
- "amount": 50,
- "destination": "seller"
}
]
}
Update an existing purchase using partial data (PATCH semantics).
Supports two update modes:
Standard PATCH with 'items' property: Update purchase properties and items directly (customerName, status, guests, etc.)
Operations-based PATCH with 'ops' property: Use the ops
array to perform specific operations
addLineItem
, addLineItemWithPayment
, addCode
, removeLineItem
Operations-based updates support:
addLineItem
: Add a line item to a purchase or specific purchase itemaddLineItemWithPayment
: Add a line item with associated payment processing addCode
: Apply discount codes, coupons, or other promotional codesremoveLineItem
: Remove existing line items (limited to specific types)Path format for operations:
/lineItems
for purchase-level operations/items/{itemId}/lineItems
for item-specific operationsAutomatically acquires a lock on the purchase during update to prevent concurrent modifications.
Use dryRun
parameter to validate changes without persisting them.
The validationLevel
parameter controls validation strictness during updates.
id required | string Example: 60f7b3c4e4b0a1234567890a Purchase ID |
dryRun | boolean Default: false Validate update without persisting changes |
validationLevel | string Default: "ignore" Enum: "error" "info" "warning" "ignore" Level of validation to apply |
expand | Array of strings Items Enum: "items" "seller" "organizer" "travelers" "breakdown" Additional resources to include in response |
customerName | string |
customerEmail | string <email> |
phone | string |
status | string Enum: "draft" "waitlist" "abandon" "hold" "committed" |
payNow | number <float> |
Array of objects Purchase items to update | |
Array of objects Line items to update | |
object Additional metadata to update | |
Array of any (PatchOperation) non-empty Array of operations to perform on the purchase, Use this when adding or removing lineItems |
Updates purchase items with new guest information and ticket codes
{- "items": [
- {
- "id": "68b1a8a99e5927ad94049442",
- "guests": [
- {
- "name": "Seniors #1",
- "unit": {
- "id": "68592497b76cfaee140484bd"
}, - "source": "default"
}, - {
- "name": "Children #2",
- "unit": {
- "id": "68592497b76cfaee140484ba"
}, - "source": "default"
}, - {
- "id": "68b1a8a99e5927ad94049407",
- "name": "Tester18 Test",
- "formResponse": {
- "id": "68b1a8aad8bbf7d46706d7d5",
- "name": "Tester18 Test",
- "fields": [
- {
- "type": "textarea",
- "label": "Medical conditions",
- "value": "",
- "roster": false,
- "displayStep": null
}
], - "source": "xola"
}, - "unit": {
- "id": "68592497b76cfaee140484b7"
}, - "template": {
- "id": "68592497b76cfaee140484b8"
}, - "ticketCode": "c628wuxydpck",
- "primary": true,
- "guestStatus": "pending",
- "checkIns": [ ]
}, - {
- "id": "68b1a8ac3754c131850053a5",
- "name": "Children #1",
- "unit": {
- "id": "68592497b76cfaee140484ba"
}, - "template": {
- "id": "68592497b76cfaee140484bb"
}, - "ticketCode": "5rfjw7o3ybgg",
- "primary": false,
- "guestStatus": "pending",
- "checkIns": [ ]
}
]
}
]
}
{- "id": "60f7b3c4e4b0a1234567890a",
- "object": "purchase",
- "status": "committed",
- "customerName": "John Updated Doe",
- "customerEmail": "john.updated@example.com",
- "phone": "+1987654321",
- "currency": "USD",
- "items": [ ],
- "amount": 155,
- "balance": 0,
- "updatedAt": "2023-12-07T12:00:00Z"
}
Create or completely replace a draft purchase (PUT semantics).
This endpoint is specifically for draft purchases only. For updating other purchase statuses, use PATCH /api/purchases/{id} instead.
If the purchase doesn't exist, creates a new one. If it exists and is in draft status, replaces it entirely with the provided data.
Automatically acquires a lock during operation to prevent concurrent modifications.
id required | string Example: 60f7b3c4e4b0a1234567890a Purchase ID |
validationLevel | string Default: "ignore" Enum: "error" "info" "warning" "ignore" Level of validation to apply |
expand | Array of strings Items Enum: "items" "seller" "organizer" "travelers" "breakdown" Additional resources to include in response |
id | string or null Purchase ID (null for new purchases) |
status | string Enum: "draft" "waitlist" "abandon" "hold" "committed" Purchase status |
customerName required | string Name of the customer |
customerEmail required | string <email> Email address of the customer |
customerLocale | string Customer's preferred locale |
customerTimezoneName | string Customer's timezone |
phone | string Customer's phone number |
currency | string Currency code (ISO 4217) |
payNow | number or null <float> Deposit amount to pay now |
referenceId | string External booking reference |
source | string Source where purchase originated |
required | object (ObjectReference) Seller ID reference |
object (ObjectReference) Customer/organizer ID reference | |
required | Array of objects (PurchaseItemRequest) Purchase items to include |
Array of any (PurchaseLineItemRequest) Top-level line items for the purchase (payment and refund line items) | |
object (purchases_SplitPaymentPreferenceRequest) Split payment configuration | |
Array of objects (PaymentReminder) Payment reminder configuration | |
releaseHoldAt | string <date-time> When to release hold (for draft purchases) |
object Additional metadata |
Replace draft purchase with complete experience booking including multiple guests
{- "lineItems": [ ],
- "items": [
- {
- "arrivalDate": "2025-09-01",
- "arrivalTime": 2000,
- "privacy": "public",
- "product": {
- "id": "68a9d4b1564b84624f08b304"
}, - "quantity": 2,
- "lineItems": [
- {
- "object": "line_item",
- "type": "demographic",
- "quantity": 2,
- "template": {
- "id": "68592497b76cfaee140484b8"
}, - "amount": 200
}, - {
- "object": "line_item",
- "type": "demographic",
- "quantity": 0,
- "template": {
- "id": "68592497b76cfaee140484bb"
}, - "amount": 0
}
], - "balanceDueOffset": 0,
- "guests": [
- {
- "id": "68b5b603da7ed5c60b0d0d77",
- "name": "sachin",
- "unit": {
- "id": "68592497b76cfaee140484b7"
}, - "template": {
- "id": "68592497b76cfaee140484b8"
}, - "primary": true,
- "guestStatus": "pending",
- "checkInCount": 0,
- "checkIns": [ ]
}, - {
- "id": "68b5b611a11f3ba68604b3f1",
- "name": "Adults #2",
- "unit": {
- "id": "68592497b76cfaee140484b7"
}, - "template": {
- "id": "68592497b76cfaee140484b8"
}, - "primary": false,
- "guestStatus": "pending",
- "checkInCount": 0,
- "checkIns": [ ]
}
], - "status": "draft",
- "object": "scheduled_experience_purchase_item",
- "guestStatus": "pending",
- "timeslot": {
- "product": "68a9d4b1564b84624f08b304",
- "time": 2000,
- "scheduleType": "time",
- "date": "2025-09-01",
- "arrivalDatetime": "2025-09-01T20:00:00-04:00",
- "end": "2025-09-01T20:59:59-04:00",
- "privacy": "public",
- "id": "68a9d4b1564b84624f08b304_2025-09-01_2000_68a9d4f4346644ef904b1518",
- "capacity": {
- "open": 5,
- "max": 5
}, - "canBook": true,
- "units": [
- {
- "price": 50,
- "id": "68592497b76cfaee140484ba",
- "type": "demographic",
- "code": "child",
- "template": {
- "id": "68592497b76cfaee140484bb"
}, - "priceType": "person"
}, - {
- "price": 100,
- "id": "68592497b76cfaee140484b7",
- "type": "demographic",
- "code": "adult",
- "template": {
- "id": "68592497b76cfaee140484b8"
}, - "priceType": "person"
}
]
}, - "id": "68b5b603da7ed5c60b0d0dab",
- "purchase": {
- "id": "68b5b603da7ed5c60b0d0daa"
}
}
], - "seller": {
- "id": "68592497b76cfaee140484b6"
}, - "splitPayment": {
- "enabled": false
}, - "paymentReminders": [ ],
- "currency": "USD",
- "status": "draft",
- "id": "68b5b603da7ed5c60b0d0daa",
- "payNow": null,
- "customerEmail": "sachin@xola.com",
- "customerName": "sachin",
- "phone": ""
}
{- "id": "60f7b3c4e4b0a1234567890a",
- "object": "purchase",
- "status": "draft",
- "customerName": "Jane Smith",
- "customerEmail": "jane.smith@example.com",
- "currency": "USD",
- "amount": 100,
- "payNow": 100,
- "items": [ ],
- "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "organizer": {
- "id": "60f7b3c4e4b0a123456789a0"
}, - "updatedAt": "2023-12-07T12:30:00Z"
}
Release or rollback a purchase that is in HOLD status.
This operation is only allowed for purchases with STATUS_HOLD. It effectively cancels the purchase and releases any inventory holds or temporary reservations.
Automatically acquires a lock during operation to prevent concurrent modifications.
id required | string Example: 60f7b3c4e4b0a1234567890a Purchase ID |
{- "error": {
- "code": "status_not_hold",
- "message": "Purchase not in HOLD state"
}
}
Retrieve remote card summaries associated with a purchase.
Remote cards are external payment methods or cards associated with the purchase, typically from third-party payment processors or gift card systems.
id required | string Example: 60f7b3c4e4b0a1234567890a Purchase ID |
[- {
- "id": "gc_1234567890abcdef",
- "type": "gift_card",
- "balance": 50,
- "currency": "USD",
- "lastFour": "5678",
- "expiresAt": "2024-12-31T23:59:59Z"
}, - {
- "id": "sc_abcdef1234567890",
- "type": "store_credit",
- "balance": 25.5,
- "currency": "USD",
- "lastFour": "0000",
- "expiresAt": null
}
]
Retrieve the questionnaire that applies to a specific item within a purchase. This is useful for purchases with multiple items that may have different questionnaires.
id required | string Example: 507f191e810c19729de860ec The unique identifier of the purchase |
itemId required | string Example: 507f191e810c19729de860ed The unique identifier of the purchase item |
{- "id": "507f1f77bcf86cd799439011",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "product": {
- "id": "507f1f77bcf86cd799439011"
}, - "productType": "experience",
- "organizerOnly": true,
- "fields": [
- {
- "label": "Full Name",
- "description": "Please enter your full legal name as it appears on your ID",
- "type": "text",
- "width": 3,
- "suffix": "lbs",
- "help": "This information helps us provide proper equipment",
- "required": true,
- "roster": false,
- "readonly": false,
- "organizerOnly": true,
- "displayStep": "afterPayment",
- "visibility": "all",
- "seq": 1,
- "options": [
- "None",
- "Vegetarian",
- "Vegan",
- "Gluten-free"
], - "id": "60f1f7bc5f6d2a3b4c8e9d12"
}
], - "optionalSourcesList": [
- "direct",
- "partner"
], - "deletedAt": "2019-08-24T14:15:22Z"
}
Fetches a paginated list of abandoned purchases for the authenticated seller.
Abandoned purchases are draft purchases that customers started but didn't complete. They're automatically filtered to exclude soft-deleted purchases.
Results are ordered by creation date (newest first).
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
object (DateTimeFilterSchema) Examples: createdAt[summary]=Find records where field exists (not null)&createdAt[value]=[object Object] createdAt[summary]=Find records where field is null/missing&createdAt[value]=[object Object] createdAt[summary]=Date range filtering&createdAt[value]=[object Object] createdAt[summary]=Range using comma-separated string&createdAt[value]=[object Object] createdAt[summary]=Using period for today&createdAt[value]=[object Object] createdAt[summary]=Using period for last week&createdAt[value]=[object Object] createdAt[summary]=Exact date-time match&createdAt[value]=[object Object] createdAt[summary]=After specific date&createdAt[value]=[object Object] Filter by creation timestamp. Supports date-time filtering operations. | |
object (DateTimeFilterSchema) Examples: updatedAt[summary]=Find records where field exists (not null)&updatedAt[value]=[object Object] updatedAt[summary]=Find records where field is null/missing&updatedAt[value]=[object Object] updatedAt[summary]=Date range filtering&updatedAt[value]=[object Object] updatedAt[summary]=Range using comma-separated string&updatedAt[value]=[object Object] updatedAt[summary]=Using period for today&updatedAt[value]=[object Object] updatedAt[summary]=Using period for last week&updatedAt[value]=[object Object] updatedAt[summary]=Exact date-time match&updatedAt[value]=[object Object] updatedAt[summary]=After specific date&updatedAt[value]=[object Object] Filter by last update timestamp. Supports date-time filtering operations. | |
customerEmail | string <email> Example: customerEmail=john.doe@example.com Filter by customer email address |
customerName | string Example: customerName=John Doe Filter by customer name (partial match) |
status | string Default: "abandon" Value: "abandon" Example: status=abandon Filter by purchase status |
expand | string Example: expand=items,reminders Comma-separated list of fields to expand in response |
include | string Example: include=audits Comma-separated list of additional fields to include |
sort | string Example: sort=createdAt,-updatedAt Sort order (comma-separated fields) |
{- "data": [
- {
- "id": "60f7b3c4e4b0a1234567890a",
- "object": "purchase",
- "status": "abandon",
- "customerName": "John Doe",
- "customerEmail": "john.doe@example.com",
- "currency": "USD",
- "amount": 150,
- "baseAmount": 150,
- "balance": 150,
- "rollbackReason": "payment_timeout",
- "draftCreatedAt": "2024-01-15T09:30:00Z",
- "convertedAt": null,
- "deletedAt": null,
- "deletedBy": null,
- "createdAt": "2024-01-15T09:30:00Z",
- "updatedAt": "2024-01-15T09:35:00Z",
- "seller": {
- "id": "60f7b3c4e4b0a1234567890d"
}, - "organizer": {
- "id": "60f7b3c4e4b0a1234567890c"
}, - "items": [
- {
- "id": "60f7b3c4e4b0a1234567890b",
- "object": "scheduled_experience_purchase_item",
- "status": "abandoned",
- "amount": 150,
- "name": "Sunset Mountain Hiking Tour",
- "arrivalDate": "2024-02-15",
- "arrivalTime": "17:00",
- "product": {
- "id": "60f7b3c4e4b0a1234567890e"
}
}
]
}
], - "paging": {
- "next": null
}
}
Fetches a specific abandoned purchase by its unique identifier.
This endpoint provides detailed information about an abandoned purchase, including all items, customer information, and associated reminders.
Authentication: Requires either seller authentication OR customer authentication using client secret. When authenticated as a customer, only purchases belonging to that customer are accessible.
id required | string Example: 60f7b3c4e4b0a1234567890a Unique identifier of the abandoned purchase |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
{- "id": "60f7b3c4e4b0a1234567890a",
- "object": "purchase",
- "status": "abandon",
- "customerName": "John Doe",
- "customerEmail": "john.doe@example.com",
- "customerPhone": "+1-555-123-4567",
- "currency": "USD",
- "amount": 150,
- "created": "2024-01-15T14:30:00Z",
- "updated": "2024-01-15T15:45:00Z",
- "seller": {
- "id": "60f7b3c4e4b0a1234567890d"
}, - "organizer": {
- "id": "60f7b3c4e4b0a1234567890c"
}, - "items": [
- {
- "id": "60f7b3c4e4b0a1234567890b",
- "object": "scheduled_experience_purchase_item",
- "status": "abandoned",
- "amount": 150,
- "baseAmount": 150,
- "name": "Sunset Mountain Hiking Tour",
- "desc": "Experience the beauty of a mountain sunset on this guided hiking tour",
- "arrivalDate": "2024-02-15",
- "arrivalTime": "17:00",
- "product": {
- "id": "60f7b3c4e4b0a1234567890e"
}
}
], - "reminders": [ ]
}
Updates specific properties of an abandoned purchase.
This endpoint supports updating the status of individual purchase items, particularly for marking items as "emailed" or "dismissed" for tracking recovery campaign effectiveness.
Authentication: Requires seller authentication only.
id required | string Example: 60f7b3c4e4b0a1234567890a Unique identifier of the abandoned purchase |
required | Array of objects non-empty Items to update with new status |
{- "items": [
- {
- "id": "60f7b3c4e4b0a1234567890b",
- "status": "emailed"
}
]
}
{- "id": "60f7b3c4e4b0a1234567890a",
- "object": "purchase",
- "status": "abandon",
- "internalStatus": "committed",
- "customerName": "John Doe",
- "customerEmail": "john.doe@example.com",
- "customerLocale": "en-US",
- "customerTimezoneName": "America/New_York",
- "phone": "+1234567890",
- "phoneCanonical": "1234567890",
- "currency": "USD",
- "amount": 150,
- "amounts": {
- "property1": 0.1,
- "property2": 0.1
}, - "balances": {
- "property1": 0.1,
- "property2": 0.1
}, - "balance": 0,
- "payNow": 50,
- "dueNow": 50,
- "affiliatePayment": 15,
- "referenceId": "EXT-BOOKING-123",
- "source": "website",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "organizer": {
- "id": "507f1f77bcf86cd799439011"
}, - "partnerSeller": {
- "id": "507f1f77bcf86cd799439011"
}, - "partner": {
- "id": "string",
- "object": "string"
}, - "affiliate": {
- "id": "507f1f77bcf86cd799439011"
}, - "conversation": {
- "id": "507f1f77bcf86cd799439011"
}, - "waitlist": {
- "id": "507f1f77bcf86cd799439011"
}, - "travelers": [
- {
- "id": "507f1f77bcf86cd799439011"
}
], - "items": [
- {
- "id": "60f7b3c4e4b0a1234567890b",
- "object": "experience_purchase_item",
- "status": "confirmed",
- "amount": 75,
- "currency": "USD",
- "quantity": 2,
- "product": {
- "id": "507f1f77bcf86cd799439011"
}, - "productName": "City Walking Tour",
- "purchase": {
- "id": "507f1f77bcf86cd799439011"
}, - "source": "website",
- "lineItems": [
- {
- "id": "60f7b3c4e4b0a1234567890c",
- "object": "line_item",
- "type": "fee",
- "name": "Service Fee",
- "code": "SERVICE_FEE_001",
- "price": 25,
- "amount": 50,
- "quantity": 2,
- "destination": "seller",
- "visibility": "all",
- "visible": true,
- "system": false,
- "includeInAmount": true,
- "unit": {
- "id": "507f1f77bcf86cd799439011"
}, - "template": {
- "id": "507f1f77bcf86cd799439011"
}, - "meta": { }
}
], - "createdAt": "2023-12-07T10:30:00Z",
- "updatedAt": "2023-12-07T11:45:00Z"
}
], - "lineItems": [
- {
- "id": "60f7b3c4e4b0a1234567890c",
- "object": "line_item",
- "type": "fee",
- "name": "Service Fee",
- "code": "SERVICE_FEE_001",
- "price": 25,
- "amount": 50,
- "quantity": 2,
- "destination": "seller",
- "visibility": "all",
- "visible": true,
- "system": false,
- "includeInAmount": true,
- "unit": {
- "id": "507f1f77bcf86cd799439011"
}, - "template": {
- "id": "507f1f77bcf86cd799439011"
}, - "meta": { }
}
], - "tags": [
- {
- "id": "string",
- "system": false,
- "type": "string"
}
], - "notes": [
- {
- "id": "60f7b3c4e4b0a1234567890a",
- "text": "Customer requested window seat",
- "type": "general",
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
], - "reminders": [
- {
- "id": "60f7b3c4e4b0a1234567890a",
- "type": "follow_up",
- "title": "Follow up with customer",
- "description": "Customer asked about group discounts",
- "remindAt": "2023-12-08T10:00:00Z",
- "completed": false,
- "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
], - "paymentReminders": [
- {
- "id": "60f7b3c4e4b0a1234567890d",
- "type": "invoice_traveler",
- "amount": 100,
- "dueAt": "2023-12-08T10:00:00Z",
- "sentAt": "2019-08-24T14:15:22Z",
- "status": "pending"
}
], - "splitPayment": {
- "enabled": false
}, - "trackingData": {
- "source": "string",
- "medium": "string",
- "campaign": "string",
- "referrer": "string",
- "ip": "string"
}, - "telemetry": {
- "sessionId": "string",
- "userAgent": "string",
- "screenResolution": "string",
- "timezone": "string"
}, - "meta": { },
- "createdAt": "2023-12-07T10:30:00Z",
- "updatedAt": "2023-12-07T11:45:00Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "termsAgreedAt": "2023-12-07T10:25:00Z",
- "releaseHoldAt": "2023-12-07T12:00:00Z",
- "notifyAt": "2023-12-07T09:00:00Z",
- "migratedAt": "2023-12-07T08:00:00Z",
- "commissionRefundProcessedAt": "2023-12-07T16:00:00Z",
- "rollbackReason": "payment_failed",
- "draftCreatedAt": "2024-01-15T09:30:00Z",
- "convertedAt": "2024-01-15T10:45:00Z",
- "deletedAt": "2024-01-15T11:00:00Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
Retrieve all gift offers with optional filtering and pagination
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
skip | integer >= 0 Default: 0 Number of items to skip |
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
seller | string Filter by seller ID |
system | boolean Filter by system generated gift offers. This typically includes one gift offer per experience. |
baseGiftProduct | boolean Filter for "Choose an amount" type gift offers. |
{- "data": [
- {
- "name": "string",
- "desc": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "price": 0.1,
- "minimumPrice": 0.1,
- "currency": "string",
- "type": "fixed",
- "status": "string",
- "system": true,
- "baseGiftProduct": true,
- "emailReminder": true,
- "emailReminderDays": 0,
- "id": "string",
- "photo": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}, - "medias": [
- {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "experience": {
- "id": "507f1f77bcf86cd799439011"
}, - "purchaseRule": {
- "id": "string"
}, - "redemptionPurchaseRule": {
- "id": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2019-08-24T14:15:22Z",
- "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
], - "paging": {
- "next": "string",
- "_es": true
}
}
Create a new gift offer for a seller
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
name required | string |
desc | string Description of the gift offer |
required | object (ObjectReference) A reference to another object containing only its ID. Use the |
price | number <float> Price of the gift offer |
minimumPrice | number <float> Minimum price for variable gift offers |
currency | string Currency code (e.g., USD) |
type | string Enum: "fixed" "variable" Type of gift offer |
status | string |
system | boolean Whether this is a system gift offer |
baseGiftProduct | boolean Whether this is a base gift product |
emailReminder | boolean Whether to send email reminders |
emailReminderDays | integer Days before expiry to send reminder |
experience | string Experience ID to associate with this gift offer |
photo | string Media ID for the gift offer photo |
{- "name": "string",
- "desc": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "price": 0.1,
- "minimumPrice": 0.1,
- "currency": "string",
- "type": "fixed",
- "status": "string",
- "system": true,
- "baseGiftProduct": true,
- "emailReminder": true,
- "emailReminderDays": 0,
- "experience": "string",
- "photo": "string"
}
{- "name": "string",
- "desc": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "price": 0.1,
- "minimumPrice": 0.1,
- "currency": "string",
- "type": "fixed",
- "status": "string",
- "system": true,
- "baseGiftProduct": true,
- "emailReminder": true,
- "emailReminderDays": 0,
- "id": "string",
- "photo": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}, - "medias": [
- {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "experience": {
- "id": "507f1f77bcf86cd799439011"
}, - "purchaseRule": {
- "id": "string"
}, - "redemptionPurchaseRule": {
- "id": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2019-08-24T14:15:22Z",
- "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
Retrieve a gift offer by its ID
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
{- "name": "string",
- "desc": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "price": 0.1,
- "minimumPrice": 0.1,
- "currency": "string",
- "type": "fixed",
- "status": "string",
- "system": true,
- "baseGiftProduct": true,
- "emailReminder": true,
- "emailReminderDays": 0,
- "id": "string",
- "photo": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}, - "medias": [
- {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "experience": {
- "id": "507f1f77bcf86cd799439011"
}, - "purchaseRule": {
- "id": "string"
}, - "redemptionPurchaseRule": {
- "id": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2019-08-24T14:15:22Z",
- "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
Update an existing gift offer
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
name required | string |
desc | string Description of the gift offer |
required | object (ObjectReference) A reference to another object containing only its ID. Use the |
price | number <float> Price of the gift offer |
minimumPrice | number <float> Minimum price for variable gift offers |
currency | string Currency code (e.g., USD) |
type | string Enum: "fixed" "variable" Type of gift offer |
status | string |
system | boolean Whether this is a system gift offer |
baseGiftProduct | boolean Whether this is a base gift product |
emailReminder | boolean Whether to send email reminders |
emailReminderDays | integer Days before expiry to send reminder |
experience | string Experience ID to associate with this gift offer |
photo | string Media ID for the gift offer photo |
{- "name": "string",
- "desc": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "price": 0.1,
- "minimumPrice": 0.1,
- "currency": "string",
- "type": "fixed",
- "status": "string",
- "system": true,
- "baseGiftProduct": true,
- "emailReminder": true,
- "emailReminderDays": 0,
- "experience": "string",
- "photo": "string"
}
{- "name": "string",
- "desc": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "price": 0.1,
- "minimumPrice": 0.1,
- "currency": "string",
- "type": "fixed",
- "status": "string",
- "system": true,
- "baseGiftProduct": true,
- "emailReminder": true,
- "emailReminderDays": 0,
- "id": "string",
- "photo": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}, - "medias": [
- {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "experience": {
- "id": "507f1f77bcf86cd799439011"
}, - "purchaseRule": {
- "id": "string"
}, - "redemptionPurchaseRule": {
- "id": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2019-08-24T14:15:22Z",
- "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
Upload a photo/media file for a gift offer
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
file | string <binary> The image file to upload |
{- "success": 1,
- "media": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}, - "photo": {
- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
}
Retrieve a media file for a gift offer with optional resizing
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
mediaId required | string Media ID or "default" for the default image |
size | string Image size filter (bg for background, or other size options) |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Update the caption for a specific media item
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
mediaId required | string The media ID to update |
caption | string New caption for the media |
{- "caption": "string"
}
{- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
Retrieve a paginated list of purchase rules
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
active | boolean Filter by active status |
required | boolean Filter by required status |
system | boolean Filter by system status |
object | string Enum: "purchase_rule" "purchase_item_rule" Filter by rule type |
{- "data": [
- {
- "name": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "system": true,
- "required": true,
- "sequence": 0,
- "processActionsForIgnoredValidations": true,
- "shouldCheckFieldValueForIgnoredValidations": true,
- "tags": [
- {
- "id": "string",
- "system": false,
- "type": "string"
}
], - "meta": { },
- "id": "string",
- "object": "purchase_rule",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "filter": {
- "id": "string",
- "object": "all_filter",
- "operator": "string",
- "errorCode": "string",
- "errorMessage": "string",
- "validationLevel": "ignore",
- "parameterizedErrorMessage": "string",
- "field": "string",
- "operand": [ ],
- "aggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}, - "operandAggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}
}, - "actions": [
- {
- "_remove": true,
- "id": "string",
- "object": "copy_line_item_action",
- "template": {
- "id": "string",
- "object": "line_item_template",
- "name": "string",
- "description": "string",
- "type": "string",
- "amount": 0.1,
- "amountType": "string"
}, - "shortcut": { },
- "modifiers": [
- {
- "id": "string",
- "field": "string",
- "operation": "set",
- "aggregator": {
- "id": "string",
- "object": "bxgy_discount_aggregator",
- "operator": "string",
- "operand": null
}
}
]
}
]
}
], - "paging": {
- "next": "string",
- "_es": true
}
}
Create a new purchase rule with filters and actions
name required | string Name of the purchase rule |
required | object (ObjectReference) Seller this rule belongs to |
system | boolean Whether this is a system purchase rule |
required | boolean If set to true, this rule has to pass for the purchase to be created |
sequence | integer The sequence in which this rule should apply |
processActionsForIgnoredValidations | boolean Indicates if the action can still be processed if this rule validation fails |
shouldCheckFieldValueForIgnoredValidations | boolean Indicates if a more granular error compare should be performed for ignored errors |
Array of objects Tags associated with this rule | |
object Additional metadata for the rule | |
object required | string Must be purchase_item_rule for demographic pricing Value: "purchase_item_rule" |
required | Array of objects (DemographicPricingAction) List of demographic pricing actions for different templates |
{- "name": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "system": true,
- "required": true,
- "sequence": 0,
- "processActionsForIgnoredValidations": true,
- "shouldCheckFieldValueForIgnoredValidations": true,
- "tags": [
- {
- "id": "public",
- "system": false
}, - {
- "id": "per_person",
- "system": false
}, - {
- "id": "flat",
- "system": false
}
], - "meta": { },
- "object": "purchase_item_rule",
- "actions": [
- {
- "id": "string",
- "object": "update_line_item_action",
- "template": {
- "id": "507f1f77bcf86cd799439011",
- "object": "line_item_template",
- "name": "string",
- "description": "string",
- "type": "string",
- "amount": 0.1,
- "amountType": "string"
}, - "shortcut": { },
- "modifiers": [
- {
- "id": "string",
- "field": "price",
- "operation": "set",
- "aggregator": {
- "id": "string",
- "object": "return_value_aggregator",
- "operator": "string",
- "operand": null
}
}
], - "filter": {
- "id": "string",
- "object": "equals_filter",
- "operator": "string",
- "errorCode": "string",
- "errorMessage": "string",
- "validationLevel": "ignore",
- "parameterizedErrorMessage": "string",
- "field": "template.id",
- "operand": "string",
- "aggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}, - "operandAggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}
}
}
]
}
{- "name": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "system": true,
- "required": true,
- "sequence": 0,
- "processActionsForIgnoredValidations": true,
- "shouldCheckFieldValueForIgnoredValidations": true,
- "tags": [
- {
- "id": "string",
- "system": false,
- "type": "string"
}
], - "meta": { },
- "id": "string",
- "object": "purchase_rule",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "filter": {
- "id": "string",
- "object": "all_filter",
- "operator": "string",
- "errorCode": "string",
- "errorMessage": "string",
- "validationLevel": "ignore",
- "parameterizedErrorMessage": "string",
- "field": "string",
- "operand": [ ],
- "aggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}, - "operandAggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}
}, - "actions": [
- {
- "_remove": true,
- "id": "string",
- "object": "copy_line_item_action",
- "template": {
- "id": "string",
- "object": "line_item_template",
- "name": "string",
- "description": "string",
- "type": "string",
- "amount": 0.1,
- "amountType": "string"
}, - "shortcut": { },
- "modifiers": [
- {
- "id": "string",
- "field": "string",
- "operation": "set",
- "aggregator": {
- "id": "string",
- "object": "bxgy_discount_aggregator",
- "operator": "string",
- "operand": null
}
}
]
}
]
}
Retrieve a specific purchase rule by its ID
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
{- "name": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "system": true,
- "required": true,
- "sequence": 0,
- "processActionsForIgnoredValidations": true,
- "shouldCheckFieldValueForIgnoredValidations": true,
- "tags": [
- {
- "id": "string",
- "system": false,
- "type": "string"
}
], - "meta": { },
- "id": "string",
- "object": "purchase_rule",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "filter": {
- "id": "string",
- "object": "all_filter",
- "operator": "string",
- "errorCode": "string",
- "errorMessage": "string",
- "validationLevel": "ignore",
- "parameterizedErrorMessage": "string",
- "field": "string",
- "operand": [ ],
- "aggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}, - "operandAggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}
}, - "actions": [
- {
- "_remove": true,
- "id": "string",
- "object": "copy_line_item_action",
- "template": {
- "id": "string",
- "object": "line_item_template",
- "name": "string",
- "description": "string",
- "type": "string",
- "amount": 0.1,
- "amountType": "string"
}, - "shortcut": { },
- "modifiers": [
- {
- "id": "string",
- "field": "string",
- "operation": "set",
- "aggregator": {
- "id": "string",
- "object": "bxgy_discount_aggregator",
- "operator": "string",
- "operand": null
}
}
]
}
]
}
Update an existing purchase rule
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
name required | string Name of the purchase rule |
required | object (ObjectReference) Seller this rule belongs to |
system | boolean Whether this is a system purchase rule |
required | boolean If set to true, this rule has to pass for the purchase to be created |
sequence | integer The sequence in which this rule should apply |
processActionsForIgnoredValidations | boolean Indicates if the action can still be processed if this rule validation fails |
shouldCheckFieldValueForIgnoredValidations | boolean Indicates if a more granular error compare should be performed for ignored errors |
Array of objects Tags associated with this rule | |
object Additional metadata for the rule | |
object required | string Must be purchase_item_rule for demographic pricing Value: "purchase_item_rule" |
required | Array of objects (DemographicPricingAction) List of demographic pricing actions for different templates |
{- "name": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "system": true,
- "required": true,
- "sequence": 0,
- "processActionsForIgnoredValidations": true,
- "shouldCheckFieldValueForIgnoredValidations": true,
- "tags": [
- {
- "id": "public",
- "system": false
}, - {
- "id": "per_person",
- "system": false
}, - {
- "id": "flat",
- "system": false
}
], - "meta": { },
- "object": "purchase_item_rule",
- "actions": [
- {
- "id": "string",
- "object": "update_line_item_action",
- "template": {
- "id": "507f1f77bcf86cd799439011",
- "object": "line_item_template",
- "name": "string",
- "description": "string",
- "type": "string",
- "amount": 0.1,
- "amountType": "string"
}, - "shortcut": { },
- "modifiers": [
- {
- "id": "string",
- "field": "price",
- "operation": "set",
- "aggregator": {
- "id": "string",
- "object": "return_value_aggregator",
- "operator": "string",
- "operand": null
}
}
], - "filter": {
- "id": "string",
- "object": "equals_filter",
- "operator": "string",
- "errorCode": "string",
- "errorMessage": "string",
- "validationLevel": "ignore",
- "parameterizedErrorMessage": "string",
- "field": "template.id",
- "operand": "string",
- "aggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}, - "operandAggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}
}
}
]
}
{- "name": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "system": true,
- "required": true,
- "sequence": 0,
- "processActionsForIgnoredValidations": true,
- "shouldCheckFieldValueForIgnoredValidations": true,
- "tags": [
- {
- "id": "string",
- "system": false,
- "type": "string"
}
], - "meta": { },
- "id": "string",
- "object": "purchase_rule",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "filter": {
- "id": "string",
- "object": "all_filter",
- "operator": "string",
- "errorCode": "string",
- "errorMessage": "string",
- "validationLevel": "ignore",
- "parameterizedErrorMessage": "string",
- "field": "string",
- "operand": [ ],
- "aggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}, - "operandAggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}
}, - "actions": [
- {
- "_remove": true,
- "id": "string",
- "object": "copy_line_item_action",
- "template": {
- "id": "string",
- "object": "line_item_template",
- "name": "string",
- "description": "string",
- "type": "string",
- "amount": 0.1,
- "amountType": "string"
}, - "shortcut": { },
- "modifiers": [
- {
- "id": "string",
- "field": "string",
- "operation": "set",
- "aggregator": {
- "id": "string",
- "object": "bxgy_discount_aggregator",
- "operator": "string",
- "operand": null
}
}
]
}
]
}
Delete a purchase rule by marking it as deleted
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Retrieve a paginated list of purchase rule links with optional filtering. Supports filtering by entities, purchase rules, tags, and other criteria.
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
expand | string Example: expand=purchaseRule Comma-separated list of fields to expand in the response.
Available expansions: |
purchaseRules.purchaseRulePermanentId | string^[a-f\d]{24}$ Example: purchaseRules.purchaseRulePermanentId=507f1f77bcf86cd799439014 Filter by purchase rule permanent ID |
entities.id | string Example: entities.id=507f1f77bcf86cd799439012 Filter by entity ID |
entities.object | string Enum: "experience" "seller" Example: entities.object=experience Filter by entity type |
tags._id | string Example: tags._id=507f1f77bcf86cd799439015 Filter by tag ID |
object (DateTimeFilterSchema) Examples: createdAt[summary]=Find records where field exists (not null)&createdAt[value]=[object Object] createdAt[summary]=Find records where field is null/missing&createdAt[value]=[object Object] createdAt[summary]=Date range filtering&createdAt[value]=[object Object] createdAt[summary]=Range using comma-separated string&createdAt[value]=[object Object] createdAt[summary]=Using period for today&createdAt[value]=[object Object] createdAt[summary]=Using period for last week&createdAt[value]=[object Object] createdAt[summary]=Exact date-time match&createdAt[value]=[object Object] createdAt[summary]=After specific date&createdAt[value]=[object Object] Filter by creation timestamp. Supports date-time filtering operations. | |
object (DateTimeFilterSchema) Examples: updatedAt[summary]=Find records where field exists (not null)&updatedAt[value]=[object Object] updatedAt[summary]=Find records where field is null/missing&updatedAt[value]=[object Object] updatedAt[summary]=Date range filtering&updatedAt[value]=[object Object] updatedAt[summary]=Range using comma-separated string&updatedAt[value]=[object Object] updatedAt[summary]=Using period for today&updatedAt[value]=[object Object] updatedAt[summary]=Using period for last week&updatedAt[value]=[object Object] updatedAt[summary]=Exact date-time match&updatedAt[value]=[object Object] updatedAt[summary]=After specific date&updatedAt[value]=[object Object] Filter by last update timestamp. Supports date-time filtering operations. | |
object (DateTimeFilterSchema) Examples: deletedAt[summary]=Find records where field exists (not null)&deletedAt[value]=[object Object] deletedAt[summary]=Find records where field is null/missing&deletedAt[value]=[object Object] deletedAt[summary]=Date range filtering&deletedAt[value]=[object Object] deletedAt[summary]=Range using comma-separated string&deletedAt[value]=[object Object] deletedAt[summary]=Using period for today&deletedAt[value]=[object Object] deletedAt[summary]=Using period for last week&deletedAt[value]=[object Object] deletedAt[summary]=Exact date-time match&deletedAt[value]=[object Object] deletedAt[summary]=After specific date&deletedAt[value]=[object Object] Filter by deletion timestamp. Supports date-time filtering operations. |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439011",
- "name": "VIP Experience Rules",
- "purchaseRules": [
- {
- "id": "507f1f77bcf86cd799439013",
- "purchaseRulePermanentId": "507f1f77bcf86cd799439014",
- "purchaseRule": {
- "id": "507f1f77bcf86cd799439014"
}, - "sequence": 0,
- "createdAt": "2023-12-07T10:00:00Z",
- "updatedAt": "2023-12-07T12:00:00Z"
}
], - "entities": [
- {
- "id": "507f1f77bcf86cd799439012",
- "object": "experience"
}
], - "seller": {
- "id": "507f1f77bcf86cd799439010"
}, - "createdBy": {
- "id": "507f1f77bcf86cd799439016"
}, - "tags": [ ],
- "createdAt": "2023-12-07T10:00:00Z",
- "updatedAt": "2023-12-07T12:00:00Z",
- "deletedAt": null
}
], - "count": 1,
- "paging": {
- "next": null
}
}
Create a new purchase rule link that associates purchase rules with entities in a specific sequence.
name | string Human-readable name for the purchase rule link |
required | Array of objects (SequencedPurchaseRuleRequest) Array of sequenced purchase rules to associate |
required | Array of objects Entities (experiences, sellers) this rule link should apply to |
object (ObjectReference) A reference to another object containing only its ID. Use the | |
Array of objects Tags to associate with this purchase rule link |
{- "name": "VIP Experience Rules",
- "entities": [
- {
- "id": "507f1f77bcf86cd799439012",
- "object": "experience"
}
], - "purchaseRules": [
- {
- "purchaseRulePermanentId": "507f1f77bcf86cd799439014",
- "sequence": 0
}
], - "seller": {
- "id": "507f1f77bcf86cd799439010"
}
}
{- "id": "507f1f77bcf86cd799439011",
- "name": "VIP Experience Rules",
- "purchaseRules": [
- {
- "id": "507f1f77bcf86cd799439013",
- "purchaseRulePermanentId": "507f1f77bcf86cd799439014",
- "purchaseRule": {
- "id": "507f1f77bcf86cd799439014"
}, - "sequence": 0,
- "createdAt": "2023-12-07T10:00:00Z",
- "updatedAt": "2023-12-07T12:00:00Z"
}
], - "entities": [
- {
- "id": "507f1f77bcf86cd799439012",
- "object": "experience"
}
], - "seller": {
- "id": "507f1f77bcf86cd799439010"
}, - "createdBy": {
- "id": "507f1f77bcf86cd799439016"
}, - "tags": [ ],
- "createdAt": "2023-12-07T10:00:00Z",
- "updatedAt": "2023-12-07T12:00:00Z",
- "deletedAt": null
}
Retrieve a specific purchase rule link by its ID with optional field expansion.
id required | string^[a-f\d]{24}$ Example: 507f1f77bcf86cd799439011 Purchase rule link identifier |
expand | string Example: expand=purchaseRule Comma-separated list of fields to expand in the response.
Available expansions: |
{- "id": "507f1f77bcf86cd799439011",
- "name": "VIP Experience Rules",
- "purchaseRules": [
- {
- "id": "507f1f77bcf86cd799439013",
- "purchaseRulePermanentId": "507f1f77bcf86cd799439014",
- "purchaseRule": {
- "id": "507f1f77bcf86cd799439014"
}, - "sequence": 0,
- "createdAt": "2023-12-07T10:00:00Z",
- "updatedAt": "2023-12-07T12:00:00Z"
}
], - "entities": [
- {
- "id": "507f1f77bcf86cd799439012",
- "object": "experience"
}
], - "seller": {
- "id": "507f1f77bcf86cd799439010"
}, - "createdBy": {
- "id": "507f1f77bcf86cd799439016"
}, - "tags": [ ],
- "createdAt": "2023-12-07T10:00:00Z",
- "updatedAt": "2023-12-07T12:00:00Z",
- "deletedAt": null
}
Update a specific purchase rule link. This operation replaces the entire resource. Use PATCH for partial updates if supported.
id required | string^[a-f\d]{24}$ Example: 507f1f77bcf86cd799439011 Purchase rule link identifier |
name | string Human-readable name for the purchase rule link |
required | Array of objects (SequencedPurchaseRuleRequest) Array of sequenced purchase rules to associate |
required | Array of objects Entities (experiences, sellers) this rule link should apply to |
object (ObjectReference) A reference to another object containing only its ID. Use the | |
Array of objects Tags to associate with this purchase rule link |
{- "name": "Updated VIP Experience Rules",
- "entities": [
- {
- "id": "507f1f77bcf86cd799439012",
- "object": "experience"
}
], - "purchaseRules": [
- {
- "purchaseRulePermanentId": "507f1f77bcf86cd799439014",
- "sequence": 0
}
]
}
{- "id": "507f1f77bcf86cd799439011",
- "name": "Updated VIP Experience Rules",
- "purchaseRules": [
- {
- "id": "507f1f77bcf86cd799439013",
- "purchaseRulePermanentId": "507f1f77bcf86cd799439014",
- "purchaseRule": {
- "id": "507f1f77bcf86cd799439014"
}, - "sequence": 0,
- "createdAt": "2023-12-07T10:00:00Z",
- "updatedAt": "2023-12-07T15:30:00Z"
}
], - "entities": [
- {
- "id": "507f1f77bcf86cd799439012",
- "object": "experience"
}
], - "seller": {
- "id": "507f1f77bcf86cd799439010"
}, - "createdBy": {
- "id": "507f1f77bcf86cd799439016"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439016"
}, - "tags": [ ],
- "createdAt": "2023-12-07T10:00:00Z",
- "updatedAt": "2023-12-07T15:30:00Z",
- "deletedAt": null
}
Delete a specific purchase rule link. This operation soft-deletes the resource by setting the deletedAt timestamp.
id required | string^[a-f\d]{24}$ Example: 507f1f77bcf86cd799439011 Purchase rule link identifier |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Retrieve a paginated list of line item templates for the authenticated seller.
Supports filtering and pagination. Returns both LineItemTemplate and UnitLineItemTemplate objects depending on the template type.
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=unit Comma-separated list of related objects to expand in the response.
Supported values: |
{- "data": [
- {
- "id": "60f7b3c4e4b0a1234567890a",
- "object": "line_item_template",
- "type": "fee",
- "name": "Service Fee",
- "destination": "seller",
- "visible": true,
- "system": false,
- "includeInAmount": false,
- "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "createdAt": "2023-12-07T10:30:00Z",
- "updatedAt": "2023-12-07T11:45:00Z"
}, - {
- "id": "60f7b3c4e4b0a1234567890c",
- "object": "unit_line_item_template",
- "type": "fee",
- "name": "Adult",
- "destination": "seller",
- "visible": true,
- "system": false,
- "includeInAmount": true,
- "unit": {
- "id": "60f7b3c4e4b0a1234567890d"
}, - "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "createdAt": "2023-12-07T12:00:00Z",
- "updatedAt": "2023-12-07T12:30:00Z"
}
], - "paging": {
- "next": null
}
}
Create a new line item template. The template type determines whether a basic LineItemTemplate or UnitLineItemTemplate is created.
For unit-based templates, include the object
field set to "unit_line_item_template" and
provide a unit
reference.
type required | string Enum: "tax" "fee" "discount" "coupon_discount" "partner_fee" "processing_fee" "sub_total" "package_discount" "affiliate_discount" "affiliate_commission" "affiliate_deposit" "feeable_taxable_adjustment" Type of the line item template |
destination required | string Enum: "seller" "xola" Where the line item is directed |
visible required | boolean Whether the line item is visible to customers |
includeInAmount required | boolean Whether to include this line item in the total amount calculation |
required | object (ObjectReference) Reference to the seller who owns this template |
source | string Enum: "seller" "traveler" Source of the line item template (for partner fee items) |
visibility | string Enum: "all" "none" "xola" "seller" "traveler" "affiliate" "guide" Visibility setting for the line item |
lineItemObject | string Default: "line_item" The object type for line items created from this template |
name | string Human-readable name of the line item template |
code | string Unique code identifier for the template |
refundToTraveler | boolean Whether the partner fee can be refunded to traveler (valid only if paid by traveler) |
refundToSeller | boolean Whether the partner fee can be refunded to seller |
excludeFromUnitPrice | boolean Whether to exclude from tax calculation for prices shown during checkout |
{- "type": "fee",
- "destination": "seller",
- "visible": true,
- "includeInAmount": false,
- "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "name": "Service Fee"
}
{- "id": "60f7b3c4e4b0a1234567890a",
- "object": "unit_line_item_template",
- "type": "fee",
- "name": "Adult",
- "destination": "seller",
- "visible": true,
- "system": false,
- "includeInAmount": true,
- "unit": {
- "id": "60f7b3c4e4b0a1234567890d"
}, - "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "createdBy": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "createdAt": "2023-12-07T10:30:00Z",
- "updatedAt": "2023-12-07T10:30:00Z"
}
Retrieve a specific line item template by its unique identifier.
Returns either a LineItemTemplate or UnitLineItemTemplate object depending on the template type.
id required | string Example: 507f1f77bcf86cd799439011 Unique identifier of the line item template |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=unit Comma-separated list of related objects to expand in the response.
Supported values: |
{- "id": "60f7b3c4e4b0a1234567890a",
- "object": "unit_line_item_template",
- "type": "fee",
- "name": "Adult",
- "code": "ADULT_001",
- "destination": "seller",
- "visibility": "all",
- "visible": true,
- "system": false,
- "includeInAmount": true,
- "lineItemObject": "line_item",
- "unit": {
- "id": "60f7b3c4e4b0a1234567890d"
}, - "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "createdBy": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "createdAt": "2023-12-07T10:30:00Z",
- "updatedAt": "2023-12-07T11:45:00Z"
}
Update an existing line item template with new data.
Only provided fields will be updated. Immutable fields like object
and id
cannot be changed.
id required | string Example: 507f1f77bcf86cd799439011 Unique identifier of the line item template |
type required | string Enum: "tax" "fee" "discount" "coupon_discount" "partner_fee" "processing_fee" "sub_total" "package_discount" "affiliate_discount" "affiliate_commission" "affiliate_deposit" "feeable_taxable_adjustment" Type of the line item template |
destination required | string Enum: "seller" "xola" Where the line item is directed |
visible required | boolean Whether the line item is visible to customers |
includeInAmount required | boolean Whether to include this line item in the total amount calculation |
required | object (ObjectReference) Reference to the seller who owns this template |
source | string Enum: "seller" "traveler" Source of the line item template (for partner fee items) |
visibility | string Enum: "all" "none" "xola" "seller" "traveler" "affiliate" "guide" Visibility setting for the line item |
lineItemObject | string Default: "line_item" The object type for line items created from this template |
name | string Human-readable name of the line item template |
code | string Unique code identifier for the template |
refundToTraveler | boolean Whether the partner fee can be refunded to traveler (valid only if paid by traveler) |
refundToSeller | boolean Whether the partner fee can be refunded to seller |
excludeFromUnitPrice | boolean Whether to exclude from tax calculation for prices shown during checkout |
{- "type": "fee",
- "destination": "xola",
- "visible": false,
- "includeInAmount": true,
- "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}
}
{- "id": "60f7b3c4e4b0a1234567890a",
- "object": "unit_line_item_template",
- "type": "fee",
- "name": "Adult",
- "destination": "seller",
- "visible": true,
- "system": false,
- "includeInAmount": false,
- "unit": {
- "id": "60f7b3c4e4b0a1234567890d"
}, - "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "createdAt": "2023-12-07T10:30:00Z",
- "updatedAt": "2023-12-07T15:45:00Z"
}
Soft delete a line item template. The template will be marked as deleted but preserved in the database for audit purposes.
Deleted templates will not appear in list responses unless specifically requested.
id required | string Example: 507f1f77bcf86cd799439011 Unique identifier of the line item template |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Retrieve available timeslots for experiences. This is a public endpoint that provides detailed schedule information including available time slots, capacity, pricing, and additional data based on included fields.
This endpoint does not require authentication.
Supports comma-separated values for array parameters and comprehensive filtering options for capacity, guides, resources, and schedule types.
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
string or Array of strings Example: product=507f1f77bcf86cd799439011,507f1f77bcf86cd799439012 Filter by product/experience ID(s). Can be a single ID or comma-separated list. | |
seller | string Example: seller=507f1f77bcf86cd799439013 Filter by seller ID |
string or string or Array of strings Examples:
Start date/time for timeslots. Can be:
| |
end | string <date> Example: end=2024-12-20 End date for timeslots (used with start parameter) |
timezone | string Example: timezone=America/New_York Timezone for the timeslots (IANA timezone identifier) |
string or Array of strings Example: scheduleType=time,day Filter by schedule type(s). Can be comma-separated list. | |
capacity.open[gt] | integer >= 0 Example: capacity.open[gt]=5 Filter timeslots with open capacity greater than specified value |
capacity_open[gt] | integer >= 0 Example: capacity_open[gt]=5 Alternative syntax for capacity.open[gt] (underscores instead of dots) |
capacity_reserved | integer >= 0 Example: capacity_reserved=10 Filter by reserved capacity |
string or Array of strings Example: guide=507f1f77bcf86cd799439015 Filter by assigned guide ID(s). Can be comma-separated list. | |
string or Array of strings Example: resource=507f1f77bcf86cd799439016 Filter by resource ID(s). Can be comma-separated list. | |
event | string Example: event=507f1f77bcf86cd799439017 Filter by event ID |
waitlistCount[gt] | integer >= 0 Filter timeslots with waitlist count greater than specified value |
privacy | string Default: "public" Enum: "public" "private" Example: privacy=public Filter by privacy level |
allowPastSlots | boolean Default: false Include past time slots in results |
package | string Example: package=507f1f77bcf86cd799439018 Package ID for package-specific availability |
id[gt] | string Example: id[gt]=507f1f77bcf86cd799439011_2024-12-15_900 Pagination cursor - get timeslots with ID greater than specified value |
{- "data": [
- {
- "id": "65bb71b277c4c31b7c0cdcba_2025-05-13_1500",
- "product": "65bb71b277c4c31b7c0cdcba",
- "date": "2025-05-13",
- "time": 1500,
- "scheduleType": "time",
- "arrivalDatetime": "2025-05-13T15:00:00-04:00",
- "end": "2025-05-13T15:59:59-04:00",
- "capacity": {
- "open": 5,
- "max": 10
}, - "privacy": "public",
- "canBook": true,
- "units": [
- {
- "id": "65798d7f7d106453ee05c767",
- "type": "demographic",
- "code": "adult",
- "price": 100,
- "priceType": "person"
}, - {
- "id": "65798d7f7d106453ee05c768",
- "type": "demographic",
- "code": "child",
- "price": 50,
- "priceType": "person"
}
]
}, - {
- "id": "65bb71b277c4c31b7c0cdcba_2025-05-13_1700",
- "product": "65bb71b277c4c31b7c0cdcba",
- "date": "2025-05-13",
- "time": 1700,
- "scheduleType": "time",
- "arrivalDatetime": "2025-05-13T17:00:00-04:00",
- "end": "2025-05-13T17:59:59-04:00",
- "capacity": {
- "open": 0,
- "max": 10
}, - "privacy": "public",
- "canBook": false,
- "canWaitlist": true,
- "units": [
- {
- "id": "65798d7f7d106453ee05c767",
- "type": "demographic",
- "code": "adult",
- "price": 100,
- "priceType": "person"
}
]
}
], - "expand": { },
- "paging": {
- "next": null
}, - "_hasCachedData": false
}
Retrieve a paginated list of forms.
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
seller | string Filter forms by seller ID |
productType | string Enum: "experience" "package" "membership" Filter forms by product type |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439011",
- "seller": {
- "id": "507f191e810c19729de860ea"
}, - "product": {
- "id": "507f191e810c19729de860eb"
}, - "productType": "experience",
- "organizerOnly": true,
- "fields": [
- {
- "id": "60f1f7bc5f6d2a3b4c8e9d12",
- "label": "Full Name",
- "type": "text",
- "width": 3,
- "required": true,
- "organizerOnly": true,
- "displayStep": "beforePayment",
- "visibility": "all"
}, - {
- "id": "60f1f7bc5f6d2a3b4c8e9d13",
- "label": "Phone Number",
- "type": "phone",
- "width": 3,
- "required": true,
- "organizerOnly": true,
- "displayStep": "afterPayment",
- "visibility": "all"
}
], - "optionalSourcesList": [ ]
}
], - "next": null
}
Create a new questionnaire form. Forms can be either:
Only one form can exist per product. If a product-specific form already exists, a conflict error will be returned.
required | object (ObjectReference) Reference to the seller who will own this form |
ObjectReference (object) or null Reference to specific product. Omit for global forms. | |
productType | string Default: "experience" Enum: "experience" "package" "membership" Type of product this form is designed for |
required | Array of objects (FormFieldBase) List of form fields to create |
optionalSourcesList | Array of strings Default: [] List of booking sources for which questionnaire completion is optional |
{- "seller": {
- "id": "507f191e810c19729de860ea"
}, - "productType": "experience",
- "optionalSourcesList": [ ],
- "fields": [
- {
- "label": "Full Name",
- "type": "text",
- "width": 3,
- "required": true,
- "organizerOnly": true,
- "displayStep": "beforePayment",
- "visibility": "all"
}, - {
- "label": "Phone Number",
- "type": "phone",
- "width": 3,
- "required": true,
- "organizerOnly": true,
- "displayStep": "afterPayment",
- "visibility": "all"
}
]
}
{- "id": "507f1f77bcf86cd799439011",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "product": {
- "id": "507f1f77bcf86cd799439011"
}, - "productType": "experience",
- "organizerOnly": true,
- "fields": [
- {
- "label": "Full Name",
- "description": "Please enter your full legal name as it appears on your ID",
- "type": "text",
- "width": 3,
- "suffix": "lbs",
- "help": "This information helps us provide proper equipment",
- "required": true,
- "roster": false,
- "readonly": false,
- "organizerOnly": true,
- "displayStep": "afterPayment",
- "visibility": "all",
- "seq": 1,
- "options": [
- "None",
- "Vegetarian",
- "Vegan",
- "Gluten-free"
], - "id": "60f1f7bc5f6d2a3b4c8e9d12"
}
], - "optionalSourcesList": [
- "direct",
- "partner"
], - "deletedAt": "2019-08-24T14:15:22Z"
}
Get detailed information about a specific form by its ID
id required | string Example: 507f1f77bcf86cd799439011 The unique identifier of the form |
{- "id": "507f1f77bcf86cd799439011",
- "seller": {
- "id": "507f191e810c19729de860ea"
}, - "product": {
- "id": "507f191e810c19729de860eb"
}, - "productType": "experience",
- "organizerOnly": false,
- "fields": [
- {
- "id": "60f1f7bc5f6d2a3b4c8e9d12",
- "label": "Full Name",
- "type": "text",
- "width": 3,
- "required": true,
- "organizerOnly": true,
- "displayStep": "beforePayment",
- "visibility": "all",
- "seq": 1
}, - {
- "id": "60f1f7bc5f6d2a3b4c8e9d13",
- "label": "Emergency Contact",
- "type": "phone",
- "width": 3,
- "required": true,
- "organizerOnly": true,
- "displayStep": "afterPayment",
- "visibility": "all",
- "seq": 2,
- "description": "Please provide an emergency contact number"
}, - {
- "id": "60f1f7bc5f6d2a3b4c8e9d14",
- "label": "Dietary Restrictions",
- "type": "select",
- "width": 4,
- "required": false,
- "organizerOnly": false,
- "displayStep": "afterPayment",
- "visibility": "all",
- "seq": 3,
- "options": [
- "None",
- "Vegetarian",
- "Vegan",
- "Gluten-free",
- "Other"
], - "description": "Please select any dietary restrictions"
}
], - "optionalSourcesList": [
- "direct"
]
}
Update an existing form. This endpoint allows updating:
Field types cannot be changed through this endpoint. If a field type needs to be changed, the field must be removed and recreated.
id required | string Example: 507f1f77bcf86cd799439011 The unique identifier of the form |
Array of objects (FormFieldUpdate) List of fields to update. Include 'id' for existing fields to update them, or omit 'id' to create new fields. Fields not included will be removed. | |
optionalSourcesList | Array of strings Updated list of optional booking sources |
{- "fields": [
- {
- "id": "60f1f7bc5f6d2a3b4c8e9d12",
- "label": "Updated Full Name",
- "description": "Please enter your full legal name",
- "type": "text",
- "width": 3,
- "required": true,
- "organizerOnly": true,
- "displayStep": "beforePayment",
- "visibility": "all"
}, - {
- "label": "New Emergency Contact",
- "type": "phone",
- "width": 3,
- "required": true,
- "organizerOnly": true,
- "displayStep": "afterPayment",
- "visibility": "all"
}
], - "optionalSourcesList": [
- "direct",
- "partner"
]
}
{- "id": "507f1f77bcf86cd799439011",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "product": {
- "id": "507f1f77bcf86cd799439011"
}, - "productType": "experience",
- "organizerOnly": true,
- "fields": [
- {
- "label": "Full Name",
- "description": "Please enter your full legal name as it appears on your ID",
- "type": "text",
- "width": 3,
- "suffix": "lbs",
- "help": "This information helps us provide proper equipment",
- "required": true,
- "roster": false,
- "readonly": false,
- "organizerOnly": true,
- "displayStep": "afterPayment",
- "visibility": "all",
- "seq": 1,
- "options": [
- "None",
- "Vegetarian",
- "Vegan",
- "Gluten-free"
], - "id": "60f1f7bc5f6d2a3b4c8e9d12"
}
], - "optionalSourcesList": [
- "direct",
- "partner"
], - "deletedAt": "2019-08-24T14:15:22Z"
}
Soft delete a form. The form will be marked as deleted but not physically removed from the database. Once deleted, the form will no longer appear in API responses and cannot be used for new bookings.
id required | string Example: 507f1f77bcf86cd799439011 The unique identifier of the form |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Retrieve the questionnaire form that applies to a specific experience. The system will first look for an experience-specific form, and if none exists, it will fall back to the seller's global questionnaire.
id required | string Example: 507f191e810c19729de860eb The unique identifier of the experience |
{- "id": "507f1f77bcf86cd799439011",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "product": {
- "id": "507f1f77bcf86cd799439011"
}, - "productType": "experience",
- "organizerOnly": true,
- "fields": [
- {
- "label": "Full Name",
- "description": "Please enter your full legal name as it appears on your ID",
- "type": "text",
- "width": 3,
- "suffix": "lbs",
- "help": "This information helps us provide proper equipment",
- "required": true,
- "roster": false,
- "readonly": false,
- "organizerOnly": true,
- "displayStep": "afterPayment",
- "visibility": "all",
- "seq": 1,
- "options": [
- "None",
- "Vegetarian",
- "Vegan",
- "Gluten-free"
], - "id": "60f1f7bc5f6d2a3b4c8e9d12"
}
], - "optionalSourcesList": [
- "direct",
- "partner"
], - "deletedAt": "2019-08-24T14:15:22Z"
}
Retrieve the global questionnaire form for a seller. This form applies to all experiences when no experience-specific form exists.
id required | string Example: 507f191e810c19729de860ea The unique identifier of the seller |
{- "id": "507f1f77bcf86cd799439011",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "product": {
- "id": "507f1f77bcf86cd799439011"
}, - "productType": "experience",
- "organizerOnly": true,
- "fields": [
- {
- "label": "Full Name",
- "description": "Please enter your full legal name as it appears on your ID",
- "type": "text",
- "width": 3,
- "suffix": "lbs",
- "help": "This information helps us provide proper equipment",
- "required": true,
- "roster": false,
- "readonly": false,
- "organizerOnly": true,
- "displayStep": "afterPayment",
- "visibility": "all",
- "seq": 1,
- "options": [
- "None",
- "Vegetarian",
- "Vegan",
- "Gluten-free"
], - "id": "60f1f7bc5f6d2a3b4c8e9d12"
}
], - "optionalSourcesList": [
- "direct",
- "partner"
], - "deletedAt": "2019-08-24T14:15:22Z"
}
Retrieve the questionnaire that applies to a specific item within a purchase. This is useful for purchases with multiple items that may have different questionnaires.
id required | string Example: 507f191e810c19729de860ec The unique identifier of the purchase |
itemId required | string Example: 507f191e810c19729de860ed The unique identifier of the purchase item |
{- "id": "507f1f77bcf86cd799439011",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "product": {
- "id": "507f1f77bcf86cd799439011"
}, - "productType": "experience",
- "organizerOnly": true,
- "fields": [
- {
- "label": "Full Name",
- "description": "Please enter your full legal name as it appears on your ID",
- "type": "text",
- "width": 3,
- "suffix": "lbs",
- "help": "This information helps us provide proper equipment",
- "required": true,
- "roster": false,
- "readonly": false,
- "organizerOnly": true,
- "displayStep": "afterPayment",
- "visibility": "all",
- "seq": 1,
- "options": [
- "None",
- "Vegetarian",
- "Vegan",
- "Gluten-free"
], - "id": "60f1f7bc5f6d2a3b4c8e9d12"
}
], - "optionalSourcesList": [
- "direct",
- "partner"
], - "deletedAt": "2019-08-24T14:15:22Z"
}
Retrieve a paginated list of resources.
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
event | string Get resources for a specific event ID with availability information |
product | string Get resources for a specific product/experience ID with availability information |
start | string <date-time> Example: start=2024-01-15T09:00:00 Start time for product resource availability (valid only when 'product' is specified) |
seller | string Filter resources by seller ID (required if neither |
name | string Example: name=kayak Filter resources by name (partial match) |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439011",
- "type": "equipment",
- "name": "Kayak",
- "seller": {
- "id": "507f191e810c19729de860ea"
}, - "capacity": 2,
- "count": 5,
- "schedules": [ ],
- "createdAt": "2024-01-01T10:00:00Z"
}
], - "paging": {
- "next": null
}
}
Create a new resource (equipment or guide). The resource will be automatically associated with the authenticated user's seller account unless a different seller is specified.
For equipment resources with custom allocation strategy, the resource will be automatically added to the prioritized resource list.
type required | string Enum: "equipment" "guide" Type of resource to create |
name required | string Name of the resource |
seller | string Seller ID (will default to authenticated user if not provided) |
capacity | integer >= 1 Capacity per unit (equipment only) |
count | integer >= 1 Number of units available (equipment only) |
{- "type": "equipment",
- "name": "Double Kayak",
- "capacity": 2,
- "count": 3
}
{- "id": "507f1f77bcf86cd799439011",
- "type": "equipment",
- "name": "Double Kayak",
- "seller": {
- "id": "507f191e810c19729de860ea"
}, - "capacity": 2,
- "count": 3,
- "schedules": [ ],
- "createdAt": "2024-01-15T10:30:00Z"
}
Retrieve detailed information about a specific resource
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
{- "id": "507f1f77bcf86cd799439011",
- "type": "equipment",
- "name": "Raft",
- "seller": {
- "id": "507f191e810c19729de860ea"
}, - "capacity": 10,
- "count": 5,
- "schedules": [ ],
- "createdAt": "2024-01-01T10:00:00Z"
}
Update an existing resource. Only provided fields will be updated. This endpoint triggers resource update events for equipment resources.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
name | string Updated name of the resource |
capacity | integer >= 1 Updated capacity per unit (equipment only) |
count | integer >= 1 Updated number of units available (equipment only) |
{- "name": "Premium Kayak"
}
{- "id": "507f1f77bcf86cd799439011",
- "type": "equipment",
- "name": "Premium Kayak",
- "seller": {
- "id": "507f191e810c19729de860ea"
}, - "capacity": 3,
- "count": 2,
- "schedules": [ ],
- "createdAt": "2024-01-01T10:00:00Z"
}
Soft delete a resource by setting the deletedAt timestamp. Resources that are associated with experiences cannot be deleted and will return a conflict error.
For equipment resources with custom allocation strategy, the resource will be automatically removed from the prioritized resource list.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Assigns a pre-existing resource (inventory item) to an experience. Resources are fixed assets that can be utilized across multiple experiences. You must have the Inventory feature enabled for this endpoint to work.
Resource Concepts:
Restrictions:
id required | string Example: 507f191e810c19729de860ea The unique identifier of the experience |
required | object (ObjectReference) Reference to the resource to assign |
{- "resource": {
- "id": "507f1f77bcf86cd799439011"
}
}
{- "id": "507f1f77bcf86cd799439012",
- "resource": {
- "id": "507f1f77bcf86cd799439011",
- "type": "equipment",
- "name": "Kayak",
- "seller": {
- "id": "507f191e810c19729de860ea"
}, - "capacity": 2,
- "count": 5,
- "schedules": [ ],
- "createdAt": "2024-01-01T10:00:00Z"
}, - "priority": 100
}
Remove the assignment of a resource (inventory item) from an experience. This will also remove the resource from all existing events for this experience.
id required | string Example: 507f191e810c19729de860ea The unique identifier of the experience |
resourceId required | string Example: 507f1f77bcf86cd799439011 The unique identifier of the resource to unassign |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Retrieve a paginated list of guides belonging to a specific seller. Supports filtering by availability for events.
id required | string Seller ID |
name | string Example: name=Sarah Filter guides by name (partial match) |
events | string Event ID to check guide availability against |
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439011",
- "object": "user_profile",
- "name": "Sarah Johnson",
- "bio": "Experienced outdoor guide",
- "phone": "+1-617-555-1234",
- "picture": null,
- "user": {
- "id": "507f191e810c19729de860eb"
}, - "seller": {
- "id": "507f191e810c19729de860ea"
}, - "schedules": [ ],
- "createdBy": {
- "id": "507f191e810c19729de860ec"
}, - "updatedAt": "2024-01-15T10:30:00Z",
- "deletedAt": null,
- "deletedBy": null,
- "guidePermission": {
- "canModifySchedules": true,
- "modifySchedulesOffset": 60
}, - "overlappingEvents": {
- "enabled": false,
- "forceConfirm": true
}
}
], - "paging": {
- "next": null
}
}
Create a new guide for a seller. Can create a guide for an existing user or create a new user account.
id required | string Seller ID |
name required | string Full name of the guide |
bio | string or null Biography or description of the guide |
phone | string or null Phone number of the guide |
Media (object) or null Profile picture of the guide | |
Array of objects (BaseSchedule) Guide availability schedules | |
GuidePermissionPreference (object) or null Permissions related to guide schedule modifications | |
OverlappingEventsPreference (object) or null Preferences for handling overlapping event assignments | |
required | object User account information for the guide |
{- "name": "Sarah Johnson",
- "bio": "Experienced outdoor guide with 10 years in adventure tourism",
- "phone": "+1-617-555-1234",
- "user": {
- "email": "sarah@example.com"
}, - "guidePermission": {
- "canModifySchedules": true,
- "modifySchedulesOffset": 60
}, - "overlappingEvents": {
- "enabled": false,
- "forceConfirm": true
}
}
{- "id": "507f1f77bcf86cd799439011",
- "object": "user_profile",
- "name": "Sarah Johnson",
- "bio": "Experienced outdoor guide with 10 years in adventure tourism",
- "phone": "+1-617-555-1234",
- "picture": null,
- "user": {
- "id": "507f191e810c19729de860eb"
}, - "seller": {
- "id": "507f191e810c19729de860ea"
}, - "schedules": [ ],
- "createdBy": {
- "id": "507f191e810c19729de860ec"
}, - "updatedAt": "2024-01-15T10:30:00Z",
- "deletedAt": null,
- "deletedBy": null,
- "guidePermission": {
- "canModifySchedules": true,
- "modifySchedulesOffset": 60
}, - "overlappingEvents": {
- "enabled": false,
- "forceConfirm": true
}
}
Get detailed information about a specific guide.
id required | string Seller ID |
guideId required | string Guide ID |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
{- "id": "507f1f77bcf86cd799439011",
- "object": "user_profile",
- "name": "Sarah Johnson",
- "bio": "Experienced outdoor guide with 10 years in adventure tourism",
- "phone": "+1-617-555-1234",
- "picture": null,
- "user": {
- "id": "507f191e810c19729de860eb"
}, - "seller": {
- "id": "507f191e810c19729de860ea"
}, - "schedules": [ ],
- "createdBy": {
- "id": "507f191e810c19729de860ec"
}, - "updatedAt": "2024-01-15T10:30:00Z",
- "deletedAt": null,
- "deletedBy": null,
- "guidePermission": {
- "canModifySchedules": true,
- "modifySchedulesOffset": 60
}, - "overlappingEvents": {
- "enabled": false,
- "forceConfirm": true
}
}
Update information for an existing guide.
id required | string Seller ID |
guideId required | string Guide ID |
name | string Updated full name of the guide |
bio | string or null Updated biography or description of the guide |
phone | string or null Updated phone number of the guide |
Media (object) or null Updated profile picture of the guide | |
Array of objects (BaseSchedule) Updated guide availability schedules | |
GuidePermissionPreference (object) or null Updated permissions related to guide schedule modifications | |
OverlappingEventsPreference (object) or null Updated preferences for handling overlapping event assignments |
{- "bio": "Senior outdoor guide with 15 years in adventure tourism"
}
{- "id": "507f1f77bcf86cd799439011",
- "object": "user_profile",
- "name": "Sarah Johnson",
- "bio": "Senior outdoor guide with 15 years in adventure tourism",
- "phone": "+1-617-555-1234",
- "picture": null,
- "user": {
- "id": "507f191e810c19729de860eb"
}, - "seller": {
- "id": "507f191e810c19729de860ea"
}, - "schedules": [ ],
- "createdBy": {
- "id": "507f191e810c19729de860ec"
}, - "updatedAt": "2024-01-16T14:20:00Z",
- "deletedAt": null,
- "deletedBy": null,
- "guidePermission": {
- "canModifySchedules": false,
- "modifySchedulesOffset": 120
}, - "overlappingEvents": {
- "enabled": true,
- "forceConfirm": false
}
}
Delete a guide. The guide cannot be deleted if they are assigned to future events.
id required | string Seller ID |
guideId required | string Guide ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Upload a profile picture or other media for a guide.
id required | string Seller ID |
guideId required | string Guide ID |
picture required | string <binary> Profile picture file to upload |
{- "id": "507f1f77bcf86cd799439013",
- "caption": "Guide profile picture",
- "type": "image",
- "size": 1024000,
- "createdAt": "2024-01-15T10:30:00Z"
}
Delete a specific media item (profile picture) from a guide.
id required | string Seller ID |
guideId required | string Guide ID |
mediaId required | string Media ID to delete |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Redirects to the guide's profile picture URL.
id required | string Seller ID |
guideId required | string Guide ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Create schedules for an Experience. This allows you to build activity schedules that define when your trip departs. Combining schedules also allows for dynamic pricing that adjusts based on time or day. You can create as many schedules as you would like.
Sample Request:
// Every weekday 8AM, 12PM, 6PM
{
"name": "Weekdays",
"repeat": "weekly",
"days": [1,2,3,4,5],
"departure": "fixed",
"times": [800, 1200, 1800],
"type": "available",
"priceDelta": 0
}
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
Schedule configuration data
id | string Schedule identifier (for updates) |
name | string Name for this schedule |
type required | string Default: "available" Enum: "available" "blackout" Type of schedule |
repeat | string Enum: "daily" "weekly" "monthly" "custom" "once" How the schedule repeats |
days | Array of integers[ items [ 0 .. 6 ] ] Days of week (0=Sunday, 1=Monday, etc.) for weekly repeats |
dates | Array of strings <date> [ items <date > ] Specific dates when this schedule applies |
start | string <date> Start date for recurring schedules |
end | string <date> End date for recurring schedules |
source | string Source of the schedule |
departure | string Enum: "fixed" "varies" Whether departure time is fixed or varies |
times | Array of integers[ items [ 0 .. 2359 ] ] Start times in HHMM format (e.g., 900 = 9:00 AM, 1800 = 6:00 PM) |
priceDelta | number <float> Default: 0 Price adjustment for this schedule |
priceOverride | boolean Whether this schedule overrides base pricing |
allowedPrivacies | Array of strings Items Enum: "private" "public" Allowed privacy levels |
{- "name": "Weekday Tours",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "departure": "fixed",
- "times": [
- 800,
- 1200,
- 1800
], - "type": "available",
- "priceDelta": 0
}
{- "id": "507f1f77bcf86cd799439014",
- "name": "Weekday Tours",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "departure": "fixed",
- "times": [
- 800,
- 1200,
- 1800
], - "type": "available",
- "priceDelta": 0,
- "priceOverride": false,
- "allowedPrivacies": [
- "public"
], - "start": "2024-01-01",
- "createdAt": "2024-01-15T10:30:00Z",
- "updatedAt": "2024-01-15T10:30:00Z"
}
Update an existing schedule for an experience. All schedule properties can be modified.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
scheduleId required | string Example: 507f1f77bcf86cd799439014 Schedule ID to update |
Updated schedule configuration
id | string Schedule identifier (for updates) |
name | string Name for this schedule |
type required | string Default: "available" Enum: "available" "blackout" Type of schedule |
repeat | string Enum: "daily" "weekly" "monthly" "custom" "once" How the schedule repeats |
days | Array of integers[ items [ 0 .. 6 ] ] Days of week (0=Sunday, 1=Monday, etc.) for weekly repeats |
dates | Array of strings <date> [ items <date > ] Specific dates when this schedule applies |
start | string <date> Start date for recurring schedules |
end | string <date> End date for recurring schedules |
source | string Source of the schedule |
departure | string Enum: "fixed" "varies" Whether departure time is fixed or varies |
times | Array of integers[ items [ 0 .. 2359 ] ] Start times in HHMM format (e.g., 900 = 9:00 AM, 1800 = 6:00 PM) |
priceDelta | number <float> Default: 0 Price adjustment for this schedule |
priceOverride | boolean Whether this schedule overrides base pricing |
allowedPrivacies | Array of strings Items Enum: "private" "public" Allowed privacy levels |
{- "name": "Updated Weekday Tours",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "departure": "fixed",
- "times": [
- 900,
- 1300,
- 1700
], - "type": "available",
- "priceDelta": 5
}
{- "id": "507f1f77bcf86cd799439012",
- "name": "Morning Tours",
- "type": "available",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "dates": [
- "2023-08-15",
- "2023-08-16"
], - "start": "2023-08-01",
- "end": "2023-12-31",
- "source": "manual",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "expiresAt": "2024-01-01T00:00:00Z",
- "departure": "fixed",
- "times": [
- 900,
- 1400
], - "priceDelta": 0,
- "priceOverride": false,
- "allowedPrivacies": [
- "public"
], - "timeRanges": [
- { }
]
}
Delete a schedule from an experience. This will remove all future occurrences of the schedule.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
scheduleId required | string Example: 507f1f77bcf86cd799439014 Schedule ID to delete |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Add a new availability schedule to a guide. Guide schedules define when guides are available for assignments.
Required fields: type
, days
, start
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
guideId required | string Example: 507f1f77bcf86cd799439012 Guide ID |
Guide schedule configuration
id | string Schedule identifier (for updates) |
name | string Name for this schedule |
type required | string Type of schedule |
repeat | string Enum: "daily" "weekly" "monthly" "custom" "once" How the schedule repeats |
days | Array of integers[ items [ 0 .. 6 ] ] Days of week (0=Sunday, 1=Monday, etc.) for weekly repeats |
dates | Array of strings <date> [ items <date > ] Specific dates when this schedule applies |
start | string <date> Start date for recurring schedules |
end | string <date> End date for recurring schedules |
source | string Source of the schedule |
Array of objects (baseSchedule_TimeRange) Time ranges when the guide is available |
{- "type": "available",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "start": "2024-01-01",
- "timeRanges": [
- {
- "startTime": 900,
- "endTime": 1700
}
]
}
{- "id": "507f1f77bcf86cd799439012",
- "name": "Morning Tours",
- "type": "available",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "dates": [
- "2023-08-15",
- "2023-08-16"
], - "start": "2023-08-01",
- "end": "2023-12-31",
- "source": "manual",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "expiresAt": "2024-01-01T00:00:00Z"
}
Update an existing schedule for a guide.
Required fields: type
, days
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
guideId required | string Example: 507f1f77bcf86cd799439012 Guide ID |
scheduleId required | string Example: 507f1f77bcf86cd799439015 Schedule ID to update |
Updated guide schedule configuration
id | string Schedule identifier (for updates) |
name | string Name for this schedule |
type required | string Type of schedule |
repeat | string Enum: "daily" "weekly" "monthly" "custom" "once" How the schedule repeats |
days | Array of integers[ items [ 0 .. 6 ] ] Days of week (0=Sunday, 1=Monday, etc.) for weekly repeats |
dates | Array of strings <date> [ items <date > ] Specific dates when this schedule applies |
start | string <date> Start date for recurring schedules |
end | string <date> End date for recurring schedules |
source | string Source of the schedule |
Array of objects (baseSchedule_TimeRange) Updated time ranges when the guide is available |
{- "type": "available",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "timeRanges": [
- {
- "startTime": 800,
- "endTime": 1800
}
]
}
{- "id": "507f1f77bcf86cd799439012",
- "name": "Morning Tours",
- "type": "available",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "dates": [
- "2023-08-15",
- "2023-08-16"
], - "start": "2023-08-01",
- "end": "2023-12-31",
- "source": "manual",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "expiresAt": "2024-01-01T00:00:00Z"
}
Delete a schedule from a guide. Use the force
query parameter to force deletion even if there are conflicts.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
guideId required | string Example: 507f1f77bcf86cd799439012 Guide ID |
scheduleId required | string Example: 507f1f77bcf86cd799439015 Schedule ID to delete |
force | boolean Default: false Example: force=true Force deletion even if there are conflicts |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Add a new schedule to a resource. Resource schedules define when equipment or resources are available for use.
Use the force
query parameter to force creation even if there are conflicts.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
force | boolean Default: false Force creation even if there are conflicts |
Resource schedule configuration
id | string Schedule identifier (for updates) |
name | string Name for this schedule |
type required | string Type of schedule |
repeat | string Enum: "daily" "weekly" "monthly" "custom" "once" How the schedule repeats |
days | Array of integers[ items [ 0 .. 6 ] ] Days of week (0=Sunday, 1=Monday, etc.) for weekly repeats |
dates | Array of strings <date> [ items <date > ] Specific dates when this schedule applies |
start | string <date> Start date for recurring schedules |
end | string <date> End date for recurring schedules |
source | string Source of the schedule |
{- "name": "Summer Kayak Availability",
- "type": "available",
- "repeat": "daily",
- "start": "2024-06-01",
- "end": "2024-08-31"
}
{- "id": "507f1f77bcf86cd799439012",
- "name": "Morning Tours",
- "type": "available",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "dates": [
- "2023-08-15",
- "2023-08-16"
], - "start": "2023-08-01",
- "end": "2023-12-31",
- "source": "manual",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "expiresAt": "2024-01-01T00:00:00Z"
}
Update an existing schedule for a resource.
Use the force
query parameter to force update even if there are conflicts.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
scheduleId required | string Example: 507f1f77bcf86cd799439016 Schedule ID to update |
force | boolean Default: false Force update even if there are conflicts |
Updated resource schedule configuration
id | string Schedule identifier (for updates) |
name | string Name for this schedule |
type required | string Type of schedule |
repeat | string Enum: "daily" "weekly" "monthly" "custom" "once" How the schedule repeats |
days | Array of integers[ items [ 0 .. 6 ] ] Days of week (0=Sunday, 1=Monday, etc.) for weekly repeats |
dates | Array of strings <date> [ items <date > ] Specific dates when this schedule applies |
start | string <date> Start date for recurring schedules |
end | string <date> End date for recurring schedules |
source | string Source of the schedule |
{- "name": "Extended Summer Availability",
- "type": "available",
- "repeat": "daily",
- "start": "2024-05-01",
- "end": "2024-09-30"
}
{- "id": "507f1f77bcf86cd799439012",
- "name": "Morning Tours",
- "type": "available",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "dates": [
- "2023-08-15",
- "2023-08-16"
], - "start": "2023-08-01",
- "end": "2023-12-31",
- "source": "manual",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "expiresAt": "2024-01-01T00:00:00Z"
}
Delete a schedule from a resource.
Use the force
query parameter to force deletion even if there are conflicts.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
scheduleId required | string Example: 507f1f77bcf86cd799439016 Schedule ID to delete |
force | boolean Default: false Force deletion even if there are conflicts |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Retrieve a paginated list of conversations
participant required | string ID of participant to filter conversations by |
seller | string Filter conversations by seller ID |
tag | string Value: "unread" Filter conversations by participant tag (e.g., 'unread') |
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439011",
- "purchase": {
- "id": "507f191e810c19729de860eb"
}, - "seller": {
- "id": "507f191e810c19729de860ea"
}, - "participants": [
- {
- "id": "507f191e810c19729de860ea",
- "name": "Adventure Tours Co",
- "tags": [ ],
- "reminder": 0,
- "type": 1
}, - {
- "id": "507f191e810c19729de860ec",
- "name": "John Doe",
- "tags": [
- "unread"
], - "reminder": 0,
- "type": 2
}
], - "messages": [
- {
- "object": "message",
- "id": "507f1f77bcf86cd799439012",
- "from": "507f191e810c19729de860ea",
- "subject": "Trip Confirmation",
- "body": "Your trip has been confirmed!",
- "type": "email",
- "system": true,
- "to": [ ],
- "createdAt": "2024-01-15T10:30:00Z"
}
], - "createdAt": "2024-01-15T10:00:00Z",
- "updatedAt": "2024-01-15T10:30:00Z"
}
], - "paging": {
}
}
Create a new conversation for a specific purchase. The conversation will automatically include participants based on the purchase (seller and traveler/organizer).
required | object Purchase to associate with the conversation |
{- "purchase": {
- "id": "507f191e810c19729de860eb"
}
}
{- "id": "507f1f77bcf86cd799439011",
- "purchase": {
- "id": "507f191e810c19729de860eb"
}, - "seller": {
- "id": "507f191e810c19729de860ea"
}, - "participants": [
- {
- "id": "507f191e810c19729de860ea",
- "name": "Adventure Tours Co",
- "tags": [ ],
- "reminder": 0,
- "type": 1
}, - {
- "id": "507f191e810c19729de860ec",
- "name": "John Doe",
- "tags": [ ],
- "reminder": 0,
- "type": 2
}
], - "messages": [ ],
- "createdAt": "2024-01-15T10:00:00Z",
- "updatedAt": "2024-01-15T10:00:00Z"
}
Broadcast messages to participants across multiple conversations based on filtering criteria. This endpoint allows sending either email or SMS messages to participants (travelers, guides, etc.) with reservations matching the specified filters.
Filtering Logic:
events
array is provided, messages are sent to participants with reservations for those specific eventsevents
is not provided, date
parameter is required to filter by reservation dateexperiences
array is ignored if events
is providedfuture
flag can include future reservations when using date-based filteringseller required | string Seller ID to send messages from |
subject | string Message subject (required for email messages) |
body required | string Message body content |
type | string Default: "email" Enum: "email" "sms" Message type (defaults to email if not specified) |
includeGuides | boolean Default: false Whether to include guides in the message broadcast |
required | object Filters for selecting which conversations to send messages to. Either 'events' or 'date' must be provided. |
{- "subject": "Important Trip Update",
- "body": "Due to weather conditions, your trip departure time has changed to 9:30 AM.",
- "type": "email",
- "includeGuides": false,
- "filters": {
- "events": [
- "507f1f77bcf86cd799439011",
- "507f1f77bcf86cd799439012"
]
}
}
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Get detailed information about a specific conversation including all messages and participants.
id required | string Conversation ID |
{- "id": "507f1f77bcf86cd799439011",
- "purchase": {
- "id": "507f191e810c19729de860eb"
}, - "seller": {
- "id": "507f191e810c19729de860ea"
}, - "participants": [
- {
- "id": "507f191e810c19729de860ea",
- "name": "Adventure Tours Co",
- "tags": [ ],
- "reminder": 0,
- "type": 1
}, - {
- "id": "507f191e810c19729de860ec",
- "name": "John Doe",
- "tags": [
- "unread"
], - "reminder": 0,
- "type": 2
}
], - "messages": [
- {
- "object": "message",
- "id": "507f1f77bcf86cd799439012",
- "from": "507f191e810c19729de860ea",
- "subject": "Trip Confirmation",
- "body": "Your adventure booking has been confirmed for January 20th!",
- "type": "email",
- "system": true,
- "to": [ ],
- "createdAt": "2024-01-15T10:30:00Z",
- "updatedAt": "2024-01-15T10:30:00Z"
}, - {
- "object": "message",
- "id": "507f1f77bcf86cd799439013",
- "from": "507f191e810c19729de860ec",
- "subject": "Re: Trip Confirmation",
- "body": "Thank you! Looking forward to the trip.",
- "type": "email",
- "system": false,
- "to": [ ],
- "createdAt": "2024-01-15T14:15:00Z",
- "updatedAt": "2024-01-15T14:15:00Z"
}
], - "createdAt": "2024-01-15T10:00:00Z",
- "updatedAt": "2024-01-15T14:15:00Z"
}
Remove a specific tag from a conversation participant. This is commonly used to mark conversations as read by removing the "unread" tag.
id required | string Conversation ID |
participantId required | string Participant ID |
tag required | string Value: "unread" Tag to remove |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Retrieves a list of message templates for the authenticated user's accessible sellers.
Results can be filtered by seller and the existence of specific message channels (email or SMS). Supports pagination and sorting.
seller | string Example: seller=60f7d1234567890abcdef123 Filter templates by seller ID |
exists | string Examples:
Comma-separated list of fields that must exist.
Common values: |
object (DateTimeFilterSchema) Examples: deletedAt[summary]=Find records where field exists (not null)&deletedAt[value]=[object Object] deletedAt[summary]=Find records where field is null/missing&deletedAt[value]=[object Object] deletedAt[summary]=Date range filtering&deletedAt[value]=[object Object] deletedAt[summary]=Range using comma-separated string&deletedAt[value]=[object Object] deletedAt[summary]=Using period for today&deletedAt[value]=[object Object] deletedAt[summary]=Using period for last week&deletedAt[value]=[object Object] deletedAt[summary]=Exact date-time match&deletedAt[value]=[object Object] deletedAt[summary]=After specific date&deletedAt[value]=[object Object] Filter by deletion timestamp. Supports date-time filtering operations. | |
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
{- "data": [
- {
- "id": "60f7d1234567890abcdef123",
- "name": "Booking Confirmation",
- "email": {
- "subject": "Your booking is confirmed!",
- "body": "Hi {{purchase.customerName}}, your booking for {{purchase.productName}} is confirmed."
}, - "sms": {
- "body": "Hi {{purchase.customerName}}, your {{purchase.productName}} booking is confirmed!"
}, - "locale": "en",
- "seller": {
- "id": "60f7d1234567890abcdef456"
}, - "createdBy": {
- "id": "60f7d1234567890abcdef789"
}, - "createdAt": "2024-01-15T10:30:00Z",
- "updatedBy": {
- "id": "60f7d1234567890abcdef789"
}, - "updatedAt": "2024-01-15T14:20:00Z"
}
], - "next": "",
- "_es": false
}
Creates a new message template for the specified seller.
A message template must include at least one message channel (email and/or SMS).
You can specify channels using either the email
/sms
properties or the channels
array.
seller | string Seller ID (can be provided as query parameter or in request body) |
name required | string <= 255 characters Descriptive name for the message template |
object (MessageContentRequest) Email content configuration for this template | |
object (MessageContentRequest) SMS content configuration for this template | |
Array of objects (ChannelRequest) Alternative way to specify multiple message channels (email and/or SMS) | |
locale | string <locale> The locale/language for this message template |
object (ObjectReference) Reference to the seller that will own this message template (required for POST requests) |
{- "name": "Booking Confirmation",
- "email": {
- "subject": "Your booking is confirmed!",
- "body": "Hi {{purchase.customerName|first_name}}, thank you for booking {{purchase.productName}} for {{purchase.quantity}} guests on {{purchase.arrivalDate}}. If you have any questions, give us a call at {{seller.phone}}. Best wishes, {{seller.name}}"
}, - "sms": {
- "body": "Hi {{purchase.customerName|first_name}}, your {{purchase.productName}} booking is confirmed! Questions? Call {{seller.phone}}"
}, - "locale": "en",
- "seller": {
- "id": "60f7d1234567890abcdef456"
}
}
{- "id": "60f7d1234567890abcdef123",
- "name": "Booking Confirmation",
- "email": {
- "subject": "Your booking is confirmed!",
- "body": "Hi {{purchase.customerName|first_name}}, thank you for booking {{purchase.productName}}..."
}, - "sms": {
- "body": "Hi {{purchase.customerName|first_name}}, your {{purchase.productName}} booking is confirmed!"
}, - "locale": "en",
- "seller": {
- "id": "60f7d1234567890abcdef456"
}, - "createdBy": {
- "id": "60f7d1234567890abcdef789"
}, - "createdAt": "2024-01-15T10:30:00Z"
}
Retrieves a specific message template by ID
id required | string Example: 507f1f77bcf86cd799439011 Message template ID |
{- "id": "60f7d1234567890abcdef123",
- "name": "Booking Confirmation",
- "email": {
- "subject": "Your booking is confirmed!",
- "body": "Hi {{purchase.customerName|first_name}}, thank you for booking {{purchase.productName}} for {{purchase.quantity}} guests on {{purchase.arrivalDate}}. If you have any questions, give us a call at {{seller.phone}}. Best wishes, {{seller.name}}"
}, - "sms": {
- "body": "Hi {{purchase.customerName|first_name}}, your {{purchase.productName}} booking is confirmed! Questions? Call {{seller.phone}}"
}, - "locale": "en",
- "seller": {
- "id": "60f7d1234567890abcdef456"
}, - "createdBy": {
- "id": "60f7d1234567890abcdef789"
}, - "createdAt": "2024-01-15T10:30:00Z",
- "updatedBy": {
- "id": "60f7d1234567890abcdef789"
}, - "updatedAt": "2024-01-15T14:20:00Z"
}
Updates an existing message template.
All updatable fields should be provided in the request body. The template cannot be updated if it has been soft-deleted.
id required | string Example: 507f1f77bcf86cd799439011 Message template ID |
name required | string <= 255 characters Descriptive name for the message template |
object (MessageContentRequest) Email content configuration for this template | |
object (MessageContentRequest) SMS content configuration for this template | |
Array of objects (ChannelRequest) Alternative way to specify multiple message channels (email and/or SMS) | |
locale | string <locale> The locale/language for this message template |
object (ObjectReference) Reference to the seller that will own this message template (required for POST requests) |
{- "name": "Updated Booking Confirmation",
- "email": {
- "subject": "Your booking is confirmed! (Updated)",
- "body": "Hi {{purchase.customerName|first_name}}, thank you for booking {{purchase.productName}} for {{purchase.quantity}} guests on {{purchase.arrivalDate}}. Updated message. If you have any questions, give us a call at {{seller.phone}}. Best wishes, {{seller.name}}"
}, - "sms": {
- "body": "Hi {{purchase.customerName|first_name}}, your {{purchase.productName}} booking is confirmed! Updated. Questions? Call {{seller.phone}}"
}, - "locale": "en"
}
{- "id": "60f7d1234567890abcdef123",
- "name": "Updated Booking Confirmation",
- "email": {
- "subject": "Your booking is confirmed! (Updated)",
- "body": "Hi {{purchase.customerName|first_name}}, thank you for booking {{purchase.productName}}... Updated message..."
}, - "sms": {
- "body": "Hi {{purchase.customerName|first_name}}, your {{purchase.productName}} booking is confirmed! Updated."
}, - "locale": "en",
- "seller": {
- "id": "60f7d1234567890abcdef456"
}, - "createdBy": {
- "id": "60f7d1234567890abcdef789"
}, - "createdAt": "2024-01-15T10:30:00Z",
- "updatedBy": {
- "id": "60f7d1234567890abcdef999"
}, - "updatedAt": "2024-01-15T16:45:00Z"
}
Soft-deletes a message template by setting the deletedAt
timestamp.
The template will no longer appear in regular API responses but can still be retrieved
using the deletedAt[exists]=true
filter parameter.
id required | string Example: 507f1f77bcf86cd799439011 Message template ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Sends messages (email and/or SMS) to customers using a message template.
This endpoint can:
The messages will be sent to customers associated with the filtered orders/purchases.
Template Variables: Message content supports Twig template variables like:
{{purchase.customerName}}
- Customer's full name{{purchase.customerName|first_name}}
- Customer's first name{{purchase.productName}}
- Product/experience name(s){{purchase.arrivalDate}}
- Arrival date{{purchase.quantity}}
- Number of guests{{seller.name}}
- Seller name{{seller.phone}}
- Seller phone{{seller.email}}
- Seller emailid required | string Example: 507f1f77bcf86cd799439011 Seller ID |
required | MessageTemplateReference (object) or InlineMessageTemplate (object) Either a reference to an existing template or inline template content |
required | object (MessageFilters) Criteria to select which customers receive the message |
from | string <email> Sender email address (for email messages) |
Array of objects (MessageRecipient) Specific recipients (optional - usually determined by filters) | |
dryRun | boolean Default: false When true, returns a preview without actually sending messages |
{- "messageTemplate": {
- "id": "60f7d1234567890abcdef123"
}, - "filters": {
- "event": "60f7d1234567890abcdef456"
}, - "from": "bookings@example.com",
- "to": [
- {
- "type": "traveler",
- "id": "60f7d1234567890abcdef789"
}
]
}
{- "id": "60f7d1234567890abcdef123",
- "name": "Trip Reminder Template",
- "email": {
- "subject": "Your trip reminder",
- "body": "Hi John, your Adventure Tour experience is tomorrow at 9:00 AM. We're looking forward to seeing you!"
}, - "sms": {
- "body": "Hi John, your Adventure Tour trip is tomorrow at 9:00 AM!"
}, - "locale": "en",
- "seller": {
- "id": "60f7d1234567890abcdef456"
}, - "createdBy": {
- "id": "60f7d1234567890abcdef789"
}, - "createdAt": "2024-01-15T10:30:00Z"
}
Generates a preview of message content using template variables and customer data.
This endpoint renders the message template with actual or dummy data to show how the final message will appear. Returns HTML content suitable for preview display.
Supports the same filtering and template options as the send messages endpoint.
id required | string Example: 507f1f77bcf86cd799439011 Seller ID |
required | MessageTemplateReference (object) or InlineMessageTemplate (object) Either a reference to an existing template or inline template content |
required | object (MessageFilters) Criteria to select sample customer data for the preview |
{- "messageTemplate": {
- "id": "60f7d1234567890abcdef123"
}, - "filters": {
- "order": {
- "id": "60f7d1234567890abcdef456"
}
}
}
<h1>Welcome John!</h1> <p>Thank you for booking Adventure Tour for 2 guests.</p> <p>Date: January 20, 2024</p> <p>Questions? Contact us at (555) 123-4567</p>
Creates a new message within an existing conversation.
Supports two types of messages:
For v2 sellers, messages are handled differently than v1 sellers.
id required | string Example: 507f1f77bcf86cd799439011 Conversation ID |
body required | string <= 10000 characters Message content |
from required | string <email> Sender email address |
{- "body": "Thank you for your inquiry. We'll get back to you shortly.",
- "from": "seller@example.com"
}
{- "id": "60f7d1234567890abcdef456",
- "body": "Thank you for your inquiry. We'll get back to you shortly.",
- "from": "seller@example.com",
- "to": "customer@example.com",
- "createdAt": "2024-01-15T10:30:00Z",
- "status": "sent",
- "locale": "en"
}
Updates a message within a conversation. Currently supports updating message status and error information.
id required | string Example: 507f1f77bcf86cd799439011 Conversation ID |
messageId required | string Example: 60f7d1234567890abcdef456 Message ID |
status required | string Enum: "pending" "sent" "delivered" "failed" "read" Message status |
error | string Error message if applicable |
{- "status": "delivered"
}
{- "id": "60f7d1234567890abcdef456"
}
Updates delivery status and error information for a message. Used by external systems to report delivery status.
id required | string Example: 507f1f77bcf86cd799439011 Conversation ID |
messageId required | string Example: 60f7d1234567890abcdef456 Message ID |
status required | string Enum: "pending" "sent" "delivered" "failed" "read" Delivery status |
error | string Error description if delivery failed |
{- "status": "delivered"
}
{- "id": "60f7d1234567890abcdef456"
}
Retrieve a paginated list of catalog items with optional filtering
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
seller | string Example: seller=507f1f77bcf86cd799439011 Filter by seller ID |
product | string Example: product=507f1f77bcf86cd799439011 Filter by product ID |
unitType | string Enum: "demographic" "merchandise" "pickup" "membership" Example: unitType=demographic Filter by unit type |
type | string Enum: "quantity" "choices" "boolean" Example: type=quantity Filter by catalog item type |
visibility | string Enum: "public" "private" Example: visibility=public Filter by visibility level |
{- "data": [
- {
- "id": "6721deb1accdc7036a0dd34b",
- "object": "product_catalog_item",
- "name": "Adults",
- "type": "quantity",
- "caption": "Caption Adult",
- "unitType": "demographic",
- "template": {
- "id": "65bbde2d1b8c18afc407eee8",
- "code": "adult",
- "type": "demographic"
}, - "seller": {
- "id": "65bbde2d1b8c18afc407eee6"
}, - "required": false,
- "visibility": "public",
- "createdBy": {
- "id": "65bbdc82a7d64cc4710c1b20"
}, - "createdAt": "2024-02-01T18:08:45+00:00",
- "updatedAt": "2025-03-04T13:45:31+00:00",
- "overrideParent": false,
- "parent": {
- "id": "65bbde2d1b8c18afc407eee9"
}, - "product": {
- "id": "6718b46c698afc969806fd92"
}, - "prices": {
- "price": {
- "min": 34,
- "max": 80
}, - "priceWithTaxes": {
- "min": 551,
- "max": 597
}, - "priceWithTaxesAndFees": {
- "min": 567.53,
- "max": 614.91
}
}, - "sequence": 10000
}
], - "next": null
}
Create a new global or product-specific catalog item
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
name required | string Display name of the catalog item |
type required | string Enum: "quantity" "choices" "boolean" Type of catalog item input control |
unitType required | string Enum: "demographic" "merchandise" "pickup" "membership" Unit type classification for the catalog item |
object required | string Discriminator field identifying the catalog item type Value: "global_catalog_item" |
required | object (ObjectReference) A reference to another object containing only its ID. Use the |
required | object (ObjectReference) A reference to another object containing only its ID. Use the |
caption | string Additional descriptive text for the catalog item |
visibility | string Default: "public" Enum: "public" "private" Visibility level of the catalog item |
required | boolean Default: false Whether this catalog item is required for purchase |
sequence | integer >= 0 Sort order sequence for displaying catalog items |
defaultChoice | string Default selection for choice-type catalog items |
{- "name": "Adults",
- "type": "quantity",
- "unitType": "demographic",
- "object": "global_catalog_item",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "template": {
- "id": "65bbde2d1b8c18afc407eee8"
}, - "caption": "Adult participants",
- "required": false,
- "visibility": "public"
}
{- "id": "6721deb1accdc7036a0dd34b",
- "object": "global_catalog_item",
- "name": "Adults",
- "type": "quantity",
- "caption": "Adult participants",
- "unitType": "demographic",
- "template": {
- "id": "65bbde2d1b8c18afc407eee8",
- "code": "adult",
- "type": "demographic"
}, - "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "required": false,
- "visibility": "public",
- "createdBy": {
- "id": "65bbdc82a7d64cc4710c1b20"
}, - "createdAt": "2024-02-01T18:08:45+00:00",
- "updatedAt": "2024-02-01T18:08:45+00:00"
}
Retrieve a specific catalog item by its unique identifier
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
{- "id": "6721deb1accdc7036a0dd34b",
- "object": "product_catalog_item",
- "name": "Adults",
- "type": "quantity",
- "caption": "Caption Adult",
- "unitType": "demographic",
- "template": {
- "id": "65bbde2d1b8c18afc407eee8",
- "code": "adult",
- "type": "demographic"
}, - "seller": {
- "id": "65bbde2d1b8c18afc407eee6"
}, - "required": false,
- "visibility": "public",
- "createdBy": {
- "id": "65bbdc82a7d64cc4710c1b20"
}, - "createdAt": "2024-02-01T18:08:45+00:00",
- "updatedAt": "2025-03-04T13:45:31+00:00",
- "overrideParent": false,
- "parent": {
- "id": "65bbde2d1b8c18afc407eee9"
}, - "product": {
- "id": "6718b46c698afc969806fd92"
}, - "prices": {
- "price": {
- "min": 34,
- "max": 80
}, - "priceWithTaxes": {
- "min": 551,
- "max": 597
}, - "priceWithTaxesAndFees": {
- "min": 567.53,
- "max": 614.91
}
}, - "sequence": 10000
}
Update an existing catalog item by ID
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
name | string Display name of the catalog item |
caption | string Additional descriptive text for the catalog item |
visibility | string Enum: "public" "private" Visibility level of the catalog item |
required | boolean Whether this catalog item is required for purchase |
sequence | integer >= 0 Sort order sequence for displaying catalog items |
defaultChoice | string Default selection for choice-type catalog items |
price | number <float> >= 0 Price override for this catalog item |
overrideParent | boolean Whether this item overrides its global parent |
{- "name": "Adults updated name",
- "caption": "Updated caption",
- "price": 50,
- "sequence": 10050000
}
{- "id": "6721deb1accdc7036a0dd34b",
- "object": "product_catalog_item",
- "name": "Adults updated name",
- "type": "quantity",
- "caption": "Updated caption",
- "unitType": "demographic",
- "template": {
- "id": "65bbde2d1b8c18afc407eee8",
- "code": "adult",
- "type": "demographic"
}, - "seller": {
- "id": "65bbde2d1b8c18afc407eee6"
}, - "required": false,
- "visibility": "public",
- "createdBy": {
- "id": "65bbdc82a7d64cc4710c1b20"
}, - "createdAt": "2024-02-01T18:08:45+00:00",
- "updatedAt": "2025-03-04T13:45:31+00:00",
- "sequence": 10050000
}
Soft delete a catalog item by ID. The item will be marked as deleted but not permanently removed. If the catalog item is linked to products, the deletion will be rejected with a 409 conflict error.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
cascade | boolean Default: false Whether to cascade delete related items |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Upload and attach a photo to a catalog item
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
file required | string <binary> Image file to upload |
{- "id": "string",
- "url": "string",
- "caption": "string",
- "type": "image",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
Retrieve the photo for a catalog item. Returns a redirect to the actual image URL. Supports optional size parameter for image resizing.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
size | string Example: size=bg Image size filter:
|
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Retrieve a specific media item for a catalog item by media ID
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
mediaId required | string Example: 507f1f77bcf86cd799439011 Media ID to retrieve |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Remove a specific media item from a catalog item
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
mediaId required | string Example: 507f1f77bcf86cd799439011 Media ID to delete |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Fetch a list of waivers. By default, only returns waivers that are not linked to any purchases.
If the seller has multi-link day interval configured, waivers created within that interval are included regardless of their link status.
seller | string Example: seller=507f1f77bcf86cd799439011 Seller ID to fetch waivers for. If not provided, uses the authenticated user's account. |
unlinked | boolean Default: true Filter for unlinked waivers. When true (default), returns only waivers that are linkable. |
traveler | string Example: traveler=507f1f77bcf86cd799439012 Filter waivers by participant traveler ID. Returns waivers where any participant is linked to the specified traveler. |
search | string Example: search=john doe Search term to filter waivers. Searches across participant name, email, and phone. |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
sort | string Default: "-id" Enum: "id" "-id" "createdAt" "-createdAt" "signedAt" "-signedAt" Example: sort=-createdAt Sort field and direction. Use minus (-) prefix for descending order. IMPORTANT: Specifying a sort order may impact performance. |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439013",
- "remoteId": "123e4567-e89b-12d3-a456-426614174000",
- "remoteSystem": "507f1f77bcf86cd799439011",
- "customerEmail": "customer@example.com",
- "waiverTypeId": "waiver-template-123",
- "signedAt": "2024-03-15T14:30:00Z",
- "tags": [
- "high-risk",
- "adult"
], - "participants": [
- {
- "id": "507f1f77bcf86cd799439019",
- "customerName": "John Doe",
- "customerEmail": "john.doe@example.com",
- "dateOfBirth": "1990-05-15",
- "phone": "+1-555-123-4567",
- "traveler": {
- "id": "507f1f77bcf86cd799439011"
}, - "answers": [
- {
- "label": "Emergency Contact",
- "type": "text",
- "value": "Emergency contact name"
}
]
}
], - "itemId": "507f1f77bcf86cd799439012",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "experiences": [
- {
- "id": "507f1f77bcf86cd799439011"
}
], - "purchases": [
- {
- "id": "507f1f77bcf86cd799439011"
}
], - "createdAt": "2024-03-15T14:35:00Z",
- "updatedAt": "2024-03-15T16:20:00Z"
}
], - "paging": {
- "next": "string",
- "_es": true
}
}
Endpoint for processing waiver completion from external waiver systems.
This endpoint is typically called by waiver plugins when a customer completes signing a waiver. The waiver will be automatically linked to purchases if participants contact info can be matched.
remoteId required | string ID of the waiver on the remote system |
remoteSystem required | string ID of the remote system (waiver plugin user ID) |
customerEmail required | string <email> Email address of the person who signed the waiver |
url required | string <uri> URL to view the signed waiver |
waiverTypeId | string or null ID of the waiver form template (not the filled waiver, but the blank template) |
signedAt required | string <date-time> Date when the waiver was signed on the remote system |
tags | Array of strings String array of tags associated with the waiver |
Array of objects (WaiverParticipant) Information on waiver participants | |
itemId | string or null Purchase Item ID if sent in waiver payload |
required | object (ObjectReference) Seller account tied to this waiver |
{- "remoteId": "123e4567-e89b-12d3-a456-426614174000",
- "remoteSystem": "507f1f77bcf86cd799439011",
- "customerEmail": "customer@example.com",
- "waiverTypeId": "waiver-template-123",
- "signedAt": "2024-03-15T14:30:00Z",
- "tags": [
- "high-risk",
- "adult"
], - "participants": [
- {
- "id": "507f1f77bcf86cd799439019",
- "customerName": "John Doe",
- "customerEmail": "john.doe@example.com",
- "dateOfBirth": "1990-05-15",
- "phone": "+1-555-123-4567",
- "traveler": {
- "id": "507f1f77bcf86cd799439011"
}, - "answers": [
- {
- "label": "Emergency Contact",
- "type": "text",
- "value": "Emergency contact name"
}
]
}
], - "itemId": "507f1f77bcf86cd799439012",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}
}
{- "id": "507f1f77bcf86cd799439013",
- "remoteId": "123e4567-e89b-12d3-a456-426614174000",
- "remoteSystem": "507f1f77bcf86cd799439011",
- "customerEmail": "customer@example.com",
- "waiverTypeId": "waiver-template-123",
- "signedAt": "2024-03-15T14:30:00Z",
- "tags": [
- "high-risk",
- "adult"
], - "participants": [
- {
- "id": "507f1f77bcf86cd799439019",
- "customerName": "John Doe",
- "customerEmail": "john.doe@example.com",
- "dateOfBirth": "1990-05-15",
- "phone": "+1-555-123-4567",
- "traveler": {
- "id": "507f1f77bcf86cd799439011"
}, - "answers": [
- {
- "label": "Emergency Contact",
- "type": "text",
- "value": "Emergency contact name"
}
]
}
], - "itemId": "507f1f77bcf86cd799439012",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "experiences": [
- {
- "id": "507f1f77bcf86cd799439011"
}
], - "purchases": [
- {
- "id": "507f1f77bcf86cd799439011"
}
], - "createdAt": "2024-03-15T14:35:00Z",
- "updatedAt": "2024-03-15T16:20:00Z"
}
Fetch details for an individual waiver
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
{- "id": "507f1f77bcf86cd799439013",
- "remoteId": "123e4567-e89b-12d3-a456-426614174000",
- "remoteSystem": "507f1f77bcf86cd799439011",
- "customerEmail": "customer@example.com",
- "waiverTypeId": "waiver-template-123",
- "signedAt": "2024-03-15T14:30:00Z",
- "tags": [
- "high-risk",
- "adult"
], - "participants": [
- {
- "id": "507f1f77bcf86cd799439019",
- "customerName": "John Doe",
- "customerEmail": "john.doe@example.com",
- "dateOfBirth": "1990-05-15",
- "phone": "+1-555-123-4567",
- "traveler": {
- "id": "507f1f77bcf86cd799439011"
}, - "answers": [
- {
- "label": "Emergency Contact",
- "type": "text",
- "value": "Emergency contact name"
}
]
}
], - "itemId": "507f1f77bcf86cd799439012",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "experiences": [
- {
- "id": "507f1f77bcf86cd799439011"
}
], - "purchases": [
- {
- "id": "507f1f77bcf86cd799439011"
}
], - "createdAt": "2024-03-15T14:35:00Z",
- "updatedAt": "2024-03-15T16:20:00Z"
}
This endpoint supports linking waivers to purchases. You can link to specific items within a purchase, or link to all items if no specific item is provided.
Use the force
query parameter to override existing links when multi-link is not configured.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
force | boolean Default: false Force the update even if waiver is already linked (when multi-link is not configured) |
purchase | string or null Purchase ID to link/unlink. Set to null to unlink from all purchases. |
item | string or null Specific item ID within the purchase to link/unlink |
object Guest to link | |
object Participant information for linking | |
remove | boolean Default: false Set to true to unlink the waiver |
{- "purchase": "507f1f77bcf86cd799439015",
- "item": "507f1f77bcf86cd799439016",
- "guest": {
- "id": "507f1f77bcf86cd799439017"
}, - "participant": {
- "id": "507f1f77bcf86cd799439018"
}, - "remove": false
}
{- "id": "507f1f77bcf86cd799439013",
- "remoteId": "123e4567-e89b-12d3-a456-426614174000",
- "remoteSystem": "507f1f77bcf86cd799439011",
- "customerEmail": "customer@example.com",
- "waiverTypeId": "waiver-template-123",
- "signedAt": "2024-03-15T14:30:00Z",
- "tags": [
- "high-risk",
- "adult"
], - "participants": [
- {
- "id": "507f1f77bcf86cd799439019",
- "customerName": "John Doe",
- "customerEmail": "john.doe@example.com",
- "dateOfBirth": "1990-05-15",
- "phone": "+1-555-123-4567",
- "traveler": {
- "id": "507f1f77bcf86cd799439011"
}, - "answers": [
- {
- "label": "Emergency Contact",
- "type": "text",
- "value": "Emergency contact name"
}
]
}
], - "itemId": "507f1f77bcf86cd799439012",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "experiences": [
- {
- "id": "507f1f77bcf86cd799439011"
}
], - "purchases": [
- {
- "id": "507f1f77bcf86cd799439011"
}
], - "createdAt": "2024-03-15T14:35:00Z",
- "updatedAt": "2024-03-15T16:20:00Z"
}
Update only the participant information for a waiver. This endpoint allows updating participant details like name, email, date of birth, and form responses without affecting the waiver's link status.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
required | Array of objects (WaiverParticipantUpdate) Array of participant updates |
{- "participants": [
- {
- "id": "507f1f77bcf86cd799439019",
- "customerName": "John Updated Doe",
- "customerEmail": "john.updated@example.com",
- "dateOfBirth": "1990-05-16",
- "phone": "+1-555-123-4568",
- "answers": [
- {
- "label": "Emergency Contact",
- "type": "text",
- "value": "Emergency contact name"
}
]
}
]
}
{- "id": "507f1f77bcf86cd799439013",
- "remoteId": "123e4567-e89b-12d3-a456-426614174000",
- "remoteSystem": "507f1f77bcf86cd799439011",
- "customerEmail": "customer@example.com",
- "waiverTypeId": "waiver-template-123",
- "signedAt": "2024-03-15T14:30:00Z",
- "tags": [
- "high-risk",
- "adult"
], - "participants": [
- {
- "id": "507f1f77bcf86cd799439019",
- "customerName": "John Doe",
- "customerEmail": "john.doe@example.com",
- "dateOfBirth": "1990-05-15",
- "phone": "+1-555-123-4567",
- "traveler": {
- "id": "507f1f77bcf86cd799439011"
}, - "answers": [
- {
- "label": "Emergency Contact",
- "type": "text",
- "value": "Emergency contact name"
}
]
}
], - "itemId": "507f1f77bcf86cd799439012",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "experiences": [
- {
- "id": "507f1f77bcf86cd799439011"
}
], - "purchases": [
- {
- "id": "507f1f77bcf86cd799439011"
}
], - "createdAt": "2024-03-15T14:35:00Z",
- "updatedAt": "2024-03-15T16:20:00Z"
}
Returns the signed PDF document of the waiver by proxying the request to the external waiver system.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Returns available waiver templates from configured waiver plugins.
Templates represent the blank waiver forms that can be used to create new waivers. This endpoint is used to discover available waiver types for a seller.
seller required | string Example: seller=507f1f77bcf86cd799439011 Seller ID to fetch templates for |
[- {
- "id": "template-123",
- "name": "Standard Liability Waiver",
- "description": "Standard waiver template for high-risk activities",
- "fields": [
- { }
]
}
]
Get all coupons based on filters. This endpoint will NOT return coupon codes but it will return total uses for all codes in this coupon.
To retrieve coupons, either the seller
or experience
must be specified as a filter.
Optionally you may specify arrival
or arrivalTime
filters to restrict the response to
coupons that can only be applied to orders with the specified arrival date & time.
There are two varieties of coupon:
Rules to calculate a discount coupon
Discount coupons rely on the type
and algorithm
attributes that determine how the coupon value is calculated:
amount
as an absolute
value or a percent
valueperson
) or a flat discount for the entire booking (discount
)seller | string Example: seller=65bbde2d1b8c18afc407eee6 Seller ID to filter coupons by (required unless experience is specified) |
experience | string Example: experience=68652ca5ff69705d380c1ef0 Experience ID to filter coupons by (required unless seller is specified) |
code | string Example: code=SUMMER2025 Specific coupon code to search for |
arrival | string <date> Example: arrival=2025-09-15 Arrival date to filter applicable coupons |
arrivalTime | string <date-time> Example: arrivalTime=2025-09-15T14:30:00Z Arrival date and time to filter applicable coupons |
expand | Array of strings Items Value: "purchaseRule" Example: expand=purchaseRule Fields to expand in the response |
limit | integer [ 1 .. 100 ] Default: 20 Maximum number of results to return |
skip | integer >= 0 Default: 0 Number of results to skip for pagination |
{- "data": [
- {
- "id": "68b704c3bc33ee2ba00b07e2",
- "name": "Summer Sale",
- "limit": 100,
- "type": "discount",
- "source": "xola",
- "excludeTaxFee": true,
- "amount": 10,
- "algorithm": "absolute",
- "experiences": {
- "all": false,
- "experiences": [
- "68652ca5ff69705d380c1ef0"
]
}, - "seller": {
- "id": "65bbde2d1b8c18afc407eee6"
}, - "createdAt": "2025-09-02T14:52:51+00:00",
- "createdBy": {
- "id": "65bbde2d1b8c18afc407eee6"
}, - "tags": [ ],
- "triggers": [ ],
- "rewards": [ ],
- "terms": [ ],
- "promotions": [ ]
}
], - "paging": {
- "next": null
}
}
Create a new coupon with purchase rules and optional initial coupon codes.
Sample request for discount coupon:
Purchase Rules: Modern coupons use purchase rules instead of the deprecated triggers/rewards system. Purchase rules define:
name required | string Name of the coupon |
type required | string Enum: "discount" "person" "unlock" "voucher" "bxgy" Type of coupon:
|
algorithm | string Enum: "percent" "absolute" Algorithm used to calculate discount:
|
amount | number <float> >= 0 Discount amount (percentage or absolute value based on algorithm) |
integer or null Maximum number of times the coupon can be used (null for unlimited) | |
source | string Enum: "xola" "gift" "store_credit" "groupon" "membership" Source/origin of the coupon:
|
excludeTaxFee | boolean Default: false Whether to exclude taxes and fees when applying the coupon |
Array of objects (Tag) Tags associated with the coupon | |
object (SelectedExperiences) Experiences this coupon can be applied to | |
required | object (ObjectReference) Seller who owns this coupon |
Discount Coupon Purchase Rule (object) or BXGY Coupon Purchase Rule (object) or Voucher Coupon Purchase Rule (object) Purchase rule configuration for the coupon | |
Array of objects (CouponCodeInput) Initial coupon codes to create with the coupon | |
string or null How to handle duplicate codes:
| |
purchaseAmount | number <float> >= 0 Original purchase amount for voucher coupons |
maxDemographics | integer >= 1 Maximum number of demographics the voucher can be applied to |
paymentMethod | string Payment method used for voucher (e.g., Groupon, Living Social) |
Array of strings or null Permissions required to use this coupon |
{- "type": "discount",
- "name": "Summer Sale 10% Off",
- "limit": 100,
- "tags": [
- {
- "id": "summer-promo"
}
], - "excludeTaxFee": true,
- "seller": {
- "id": "65bbde2d1b8c18afc407eee6"
}, - "algorithm": "absolute",
- "amount": 10,
- "source": "xola",
- "experiences": {
- "all": false,
- "experiences": [
- "68652ca5ff69705d380c1ef0"
]
}, - "codes": [
- {
- "code": "SUMMER10",
- "uses": 0
}
], - "duplicate": null
}
{- "name": "Summer Sale 20% Off",
- "type": "discount",
- "algorithm": "absolute",
- "amount": 10,
- "limit": 100,
- "source": "xola",
- "excludeTaxFee": false,
- "tags": [
- {
- "id": "string",
- "system": false,
- "type": "string"
}
], - "experiences": {
- "all": false,
- "experiences": [
- "68652ca5ff69705d380c1ef0",
- "67ff84b97e19ac1ec80fd362"
]
}, - "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "id": "68b704c3bc33ee2ba00b07e2",
- "purchaseRulePermanentId": "68b704c4bc33ee2ba00b07e5",
- "purchaseRule": {
- "name": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "system": true,
- "required": true,
- "sequence": 0,
- "processActionsForIgnoredValidations": true,
- "shouldCheckFieldValueForIgnoredValidations": true,
- "tags": [
- {
- "id": "string",
- "system": false,
- "type": "string"
}
], - "meta": { },
- "id": "string",
- "object": "purchase_rule",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "filter": {
- "id": "string",
- "object": "all_filter",
- "operator": "string",
- "errorCode": "string",
- "errorMessage": "string",
- "validationLevel": "ignore",
- "parameterizedErrorMessage": "string",
- "field": "string",
- "operand": [ ],
- "aggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}, - "operandAggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}
}, - "actions": [
- {
- "_remove": true,
- "id": "string",
- "object": "copy_line_item_action",
- "template": {
- "id": "string",
- "object": "line_item_template",
- "name": "string",
- "description": "string",
- "type": "string",
- "amount": 0.1,
- "amountType": "string"
}, - "shortcut": { },
- "modifiers": [
- {
- "id": "string",
- "field": "string",
- "operation": "set",
- "aggregator": {
- "id": "string",
- "object": "bxgy_discount_aggregator",
- "operator": "string",
- "operand": null
}
}
]
}
]
}, - "balance": 0.1,
- "triggers": [
- { }
], - "rewards": [
- { }
], - "terms": [
- { }
], - "promotions": [
- { }
], - "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "purchaseAmount": 80,
- "maxDemographics": 2,
- "paymentMethod": "Groupon",
- "permissions": [
- "ROLE_SELLER_ADMIN",
- "ROLE_RESERVATION_LITE"
]
}
Retrieve a specific coupon by its ID. To retrieve a coupon, you must have VIEW_COUPON permission.
The response includes complete coupon details including associated purchase rules (when expanded).
id required | string Example: 68b704c3bc33ee2ba00b07e2 Coupon ID |
expand | Array of strings Items Value: "purchaseRule" Example: expand=purchaseRule Fields to expand in the response |
{- "id": "68b704c3bc33ee2ba00b07e2",
- "name": "Summer Sale",
- "limit": 100,
- "type": "discount",
- "source": "xola",
- "excludeTaxFee": true,
- "amount": 10,
- "algorithm": "absolute",
- "experiences": {
- "all": false,
- "experiences": [
- "68652ca5ff69705d380c1ef0"
]
}, - "seller": {
- "id": "65bbde2d1b8c18afc407eee6"
}, - "purchaseRulePermanentId": "68b704c4bc33ee2ba00b07e5",
- "purchaseRule": {
- "id": "68b704c4bc33ee2ba00b07e5",
- "name": "Purchase rule for coupon Summer Sale",
- "object": "purchase_item_rule",
- "seller": {
- "id": "65bbde2d1b8c18afc407eee6"
}, - "actions": [ ],
- "createdAt": "2025-09-02T14:52:51+00:00",
- "updatedAt": "2025-09-02T14:52:51+00:00",
- "createdBy": {
- "id": "65bbde2d1b8c18afc407eee6"
}
}, - "createdAt": "2025-09-02T14:52:51+00:00",
- "createdBy": {
- "id": "65bbde2d1b8c18afc407eee6"
}, - "tags": [ ],
- "triggers": [ ],
- "rewards": [ ],
- "terms": [ ],
- "promotions": [ ]
}
Update an existing coupon's properties. You must have EDIT_COUPON permission.
Note: Some fields like purchase rules may have restrictions on updates depending on usage.
id required | string Example: 68b704c3bc33ee2ba00b07e2 Coupon ID to update |
name required | string Name of the coupon |
type required | string Enum: "discount" "person" "unlock" "voucher" "bxgy" Type of coupon:
|
algorithm | string Enum: "percent" "absolute" Algorithm used to calculate discount:
|
amount | number <float> >= 0 Discount amount (percentage or absolute value based on algorithm) |
integer or null Maximum number of times the coupon can be used (null for unlimited) | |
source | string Enum: "xola" "gift" "store_credit" "groupon" "membership" Source/origin of the coupon:
|
excludeTaxFee | boolean Default: false Whether to exclude taxes and fees when applying the coupon |
Array of objects (Tag) Tags associated with the coupon | |
object (SelectedExperiences) Experiences this coupon can be applied to | |
required | object (ObjectReference) Seller who owns this coupon |
Discount Coupon Purchase Rule (object) or BXGY Coupon Purchase Rule (object) or Voucher Coupon Purchase Rule (object) Purchase rule configuration for the coupon | |
Array of objects (CouponCodeInput) Initial coupon codes to create with the coupon | |
string or null How to handle duplicate codes:
| |
purchaseAmount | number <float> >= 0 Original purchase amount for voucher coupons |
maxDemographics | integer >= 1 Maximum number of demographics the voucher can be applied to |
paymentMethod | string Payment method used for voucher (e.g., Groupon, Living Social) |
Array of strings or null Permissions required to use this coupon |
{- "name": "Updated Summer Sale",
- "type": "discount",
- "limit": 200,
- "excludeTaxFee": false,
- "algorithm": "percent",
- "amount": 15,
- "seller": {
- "id": "65bbde2d1b8c18afc407eee6"
}
}
{- "name": "Summer Sale 20% Off",
- "type": "discount",
- "algorithm": "absolute",
- "amount": 10,
- "limit": 100,
- "source": "xola",
- "excludeTaxFee": false,
- "tags": [
- {
- "id": "string",
- "system": false,
- "type": "string"
}
], - "experiences": {
- "all": false,
- "experiences": [
- "68652ca5ff69705d380c1ef0",
- "67ff84b97e19ac1ec80fd362"
]
}, - "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "id": "68b704c3bc33ee2ba00b07e2",
- "purchaseRulePermanentId": "68b704c4bc33ee2ba00b07e5",
- "purchaseRule": {
- "name": "string",
- "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "system": true,
- "required": true,
- "sequence": 0,
- "processActionsForIgnoredValidations": true,
- "shouldCheckFieldValueForIgnoredValidations": true,
- "tags": [
- {
- "id": "string",
- "system": false,
- "type": "string"
}
], - "meta": { },
- "id": "string",
- "object": "purchase_rule",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "filter": {
- "id": "string",
- "object": "all_filter",
- "operator": "string",
- "errorCode": "string",
- "errorMessage": "string",
- "validationLevel": "ignore",
- "parameterizedErrorMessage": "string",
- "field": "string",
- "operand": [ ],
- "aggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}, - "operandAggregator": {
- "id": "string",
- "object": "string",
- "operator": "string"
}
}, - "actions": [
- {
- "_remove": true,
- "id": "string",
- "object": "copy_line_item_action",
- "template": {
- "id": "string",
- "object": "line_item_template",
- "name": "string",
- "description": "string",
- "type": "string",
- "amount": 0.1,
- "amountType": "string"
}, - "shortcut": { },
- "modifiers": [
- {
- "id": "string",
- "field": "string",
- "operation": "set",
- "aggregator": {
- "id": "string",
- "object": "bxgy_discount_aggregator",
- "operator": "string",
- "operand": null
}
}
]
}
]
}, - "balance": 0.1,
- "triggers": [
- { }
], - "rewards": [
- { }
], - "terms": [
- { }
], - "promotions": [
- { }
], - "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "purchaseAmount": 80,
- "maxDemographics": 2,
- "paymentMethod": "Groupon",
- "permissions": [
- "ROLE_SELLER_ADMIN",
- "ROLE_RESERVATION_LITE"
]
}
Soft delete a coupon by setting the deletedAt timestamp. You must have EDIT_COUPON permission.
Note: This does not immediately void associated coupon codes.
id required | string Example: 68b704c3bc33ee2ba00b07e2 Coupon ID to delete |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Returns a paginated list of coupon codes associated with a specific coupon. You must have VIEW_COUPON permission for the parent coupon.
id required | string Example: 68b704c3bc33ee2ba00b07e2 Coupon ID |
limit | integer [ 1 .. 100 ] Default: 20 Maximum number of results to return |
skip | integer >= 0 Default: 0 Number of results to skip for pagination |
{- "data": [
- {
- "id": "68b704c5bc33ee2ba00b07e3",
- "code": "SUMMER10",
- "status": 100,
- "uses": 3,
- "limit": null,
- "coupon": {
- "id": "68b704c3bc33ee2ba00b07e2"
}, - "objects": [
- "order1",
- "order2",
- "order3"
], - "createdAt": "2025-09-02T14:52:52+00:00"
}, - {
- "id": "68b704c6bc33ee2ba00b07e4",
- "code": "SUMMER20",
- "status": 100,
- "uses": 0,
- "limit": null,
- "coupon": {
- "id": "68b704c3bc33ee2ba00b07e2"
}, - "objects": [ ],
- "createdAt": "2025-09-02T14:52:52+00:00"
}
], - "paging": {
- "next": null
}
}
Create one or more coupon codes for a specific coupon. You must have EDIT_COUPON permission.
Batch Creation:
batch=true
query parameter to create multiple codes at onceDuplicate Handling:
duplicate
query parameter to control behavior when codes already existid required | string Example: 68b704c3bc33ee2ba00b07e2 Coupon ID |
batch | boolean Default: false Whether to create multiple codes in batch mode |
duplicate | string Enum: "void" "skip" How to handle duplicate codes:
|
code required | string^[^\s<>&"']+$ The coupon code to create |
uses | integer >= 0 Default: 0 Initial usage count (typically 0) |
{- "code": "NEWCODE123",
- "uses": 0
}
""
Retrieve details of a specific coupon code. You must have VIEW_COUPON permission.
id required | string Example: 68b704c3bc33ee2ba00b07e2 Coupon ID |
codeId required | string Example: 68b704c5bc33ee2ba00b07e3 Coupon code ID |
{- "id": "68b704c5bc33ee2ba00b07e3",
- "code": "SUMMER10",
- "status": 100,
- "uses": 3,
- "limit": null,
- "coupon": {
- "id": "68b704c3bc33ee2ba00b07e2"
}, - "objects": [
- "order1",
- "order2",
- "order3"
], - "createdAt": "2025-09-02T14:52:52+00:00",
- "updatedAt": "2025-09-02T15:30:15+00:00"
}
Update a specific coupon code. You must have EDIT_COUPON permission.
Restrictions:
id required | string Example: 68b704c3bc33ee2ba00b07e2 Coupon ID |
codeId required | string Example: 68b704c5bc33ee2ba00b07e3 Coupon code ID to update |
code required | string^[^\s<>&"']+$ Updated coupon code |
status | integer Value: 400 Status can only be set to void (400) |
{- "code": "UPDATEDCODE"
}
{- "code": "SUMMER2025",
- "status": 100,
- "uses": 5,
- "limit": 10,
- "id": "68b704c5bc33ee2ba00b07e3",
- "coupon": {
- "id": "507f1f77bcf86cd799439011"
}, - "objects": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2019-08-24T14:15:22Z",
- "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
Void a specific coupon code to prevent it from being used against future orders. You must have EDIT_COUPON permission.
Note: Cannot void the special 'iin-discount' code.
id required | string Example: 68b704c3bc33ee2ba00b07e2 Coupon ID |
codeId required | string Example: 68b704c5bc33ee2ba00b07e3 Coupon code ID to void |
{- "errors": {
- "property1": "string",
- "property2": "string"
}
}
Search for coupon codes across all coupons. This is a utility endpoint for code lookup. Results depend on user permissions and seller access.
Required Parameters:
seller
must be specified, or code
must be provided for unauthenticated searchesPermissions:
VIEW_COUPON_CODE
permission: Can search all codes for the sellercode | string Example: code=SUMMER10 Specific code to search for (required for unauthenticated searches) |
seller | string Example: seller=65bbde2d1b8c18afc407eee6 Seller ID to filter by (required unless searching by code only) |
coupon | string Example: coupon=68b704c3bc33ee2ba00b07e2 Coupon ID to filter codes by specific coupon |
status | integer Enum: 100 200 400 Example: status=100 Filter by coupon code status:
|
expand | Array of strings Items Value: "coupon" Example: expand=coupon Fields to expand in the response |
limit | integer [ 1 .. 100 ] Default: 20 Maximum number of results to return |
skip | integer >= 0 Default: 0 Number of results to skip for pagination |
{- "data": [
- {
- "code": "SUMMER2025",
- "status": 100,
- "uses": 5,
- "limit": 10,
- "id": "68b704c5bc33ee2ba00b07e3",
- "coupon": {
- "id": "507f1f77bcf86cd799439011"
}, - "objects": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2019-08-24T14:15:22Z",
- "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "deletedAt": "2019-08-24T14:15:22Z",
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
], - "paging": {
- "next": "string",
- "_es": true
}
}
Retrieve a paginated list of purchase items. Supports filtering by various criteria and export functionality.
Supports export functionality - include a format
parameter to receive a job ID for asynchronous processing.
seller required | string Example: seller=60f7b3c4e4b0a1234567890a Filter purchase items by seller ID (required for exports) |
format | string Enum: "csv" "xlsx" Example: format=csv Export format - when provided, returns a job ID for async processing |
limit | integer [ 1 .. 100 ] Default: 20 Example: limit=20 Maximum number of items to return per page |
offset | integer >= 0 Default: 0 Number of items to skip for pagination |
{- "data": [
- {
- "id": "64f7b3c4e4b0a1234567890a",
- "object": "experience_purchase_item",
- "status": "confirmed",
- "amount": 150,
- "currency": "USD",
- "quantity": 2,
- "product": {
- "id": "64f7b3c4e4b0a1234567890b"
}, - "purchase": {
- "id": "64f7b3c4e4b0a1234567890c"
}, - "lineItems": [ ],
- "createdAt": "2024-01-15T10:30:00Z",
- "updatedAt": "2024-01-15T10:30:00Z"
}
], - "paging": {
- "next": null
}
}
Retrieve a specific purchase item by its ID. Supports expanding related objects.
Access control:
id required | string Example: 64f7b3c4e4b0a1234567890a Purchase item ID |
expand | Array of strings Items Enum: "purchase" "product" "traveler" "schedule" Example: expand=purchase,product Comma-separated list of related objects to expand |
{- "id": "64f7b3c4e4b0a1234567890a",
- "object": "experience_purchase_item",
- "status": "confirmed",
- "amount": 150,
- "currency": "USD",
- "quantity": 2,
- "product": {
- "id": "64f7b3c4e4b0a1234567890b"
}, - "purchase": {
- "id": "64f7b3c4e4b0a1234567890c"
}, - "lineItems": [
- {
- "id": "64f7b3c4e4b0a1234567890d",
- "object": "line_item",
- "type": "demographic",
- "amount": 75,
- "name": "Adult",
- "quantity": 2
}
], - "createdAt": "2024-01-15T10:30:00Z",
- "updatedAt": "2024-01-15T10:30:00Z"
}
Add a line item (e.g., discount, fee, adjustment) to a specific purchase item within a purchase.
Common line item types:
adjustment
: Manual price adjustmentdiscount
: Discount applicationfee
: Additional feetax
: Tax calculationUse dryRun=true
to preview changes without persisting them.
id required | string Example: 64f7b3c4e4b0a1234567890c Purchase ID |
itemId required | string Example: 64f7b3c4e4b0a1234567890a Purchase item ID within the purchase |
dryRun | boolean Default: false Preview changes without persisting (returns 200 instead of 201) |
object required | string Standard line item object type Value: "line_item" |
type required | string Enum: "tax" "fee" "discount" "demographic" "merchandise" "equipment" "service" "gift" "pickup" "membership" "adjustment" "feeable_taxable_adjustment" Type of line item |
required | object Line item template reference |
quantity | integer or null Quantity (null for non-unit-based items like fees/taxes) |
price | number or null <float> Price per unit (null for fixed amount items), use this only for taxed_adjustment and adjustment type lineItems |
amount required | number <float> Total amount for this line item, use this only for gift type lineItems |
includeInAmount | boolean Default: true Whether to include this line item in the total amount, use this only for tax and fee type lineItems |
code | string Line item code |
destination | string Enum: "seller" "xola" "affiliate" "xola_partner" Where the line item amount is allocated |
{- "object": "line_item",
- "type": "fee",
- "amount": 30,
- "quantity": 1,
- "template": {
- "id": "68592498b76cfaee14048573"
}
}
{- "id": "64f7b3c4e4b0a1234567890e",
- "object": "line_item",
- "type": "fee",
- "amount": 30,
- "name": "Additional Fee",
- "quantity": 1
}
Remove or void a specific line item from a purchase item. This creates a voiding line item rather than physically deleting the record for audit trail purposes.
Use dryRun=true
to preview changes without persisting them.
Note: Line items that are already voided cannot be voided again.
id required | string Example: 64f7b3c4e4b0a1234567890c Purchase ID |
itemId required | string Example: 64f7b3c4e4b0a1234567890a Purchase item ID within the purchase |
lineItemId required | string Example: 64f7b3c4e4b0a1234567890e Line item ID to delete/void |
dryRun | boolean Default: false Preview changes without persisting |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Retrieve a paginated list of transactions. Transactions track all movement of money in Xola, including customer payments, seller payouts, refunds, and adjustments.
Transactions are returned in descending order of creation date by default.
Supports comprehensive filtering by seller, type, amount, date ranges, payment methods, and more.
For export functionality, include a format
parameter to receive a job ID for asynchronous processing.
ETL Mode: When etl=true
is specified (admin only), the endpoint returns data optimized for
extract-transform-load operations with higher limits and different sorting.
seller | string Example: seller=60f7b3c4e4b0a1234567890a Filter transactions by seller ID |
type | Array of strings Items Enum: "purchase" "purchase_affiliate" "refund" "refund_commission" "deposit" "balance" "payout" "affiliate" "modify" "subscription" "subscription_refund" "payout_adjust" "redeem" "gratuity" "partner_reconcile_auto" "partner_reconcile_manual" "partner_purchase" Example: type=purchase,refund Filter by transaction type(s) |
source | Array of strings Items Enum: "xola" "admin" "checkout" "office" "partner" "affiliate_credit_top_up" "kiosk" "traveler" "refund" "import" "gift" "stripe" "gratuity" Example: source=checkout,office Filter by transaction source(s) |
method | Array of strings Items Enum: "ACH" "Wire" "PayPal" "Check" "Cash" "Other" "Credit Card" "Electronic" "Voucher" "Affiliate Deposit" "Gift" "Store Credit" "Xola Pay" "Plugin" Example: method=Credit Card,PayPal Filter by payment method(s) |
affiliates | string Example: affiliates=60f7b3c4e4b0a1234567890b Filter by affiliate ID |
partners | string Example: partners=60f7b3c4e4b0a1234567890c Filter by partner ID |
payout | string Example: payout=60f7b3c4e4b0a1234567890d Filter by payout ID |
order_id | string Example: order_id=60f7b3c4e4b0a1234567890e Filter by order ID |
items_product | string Example: items_product=60f7b3c4e4b0a1234567890f Filter by product ID in transaction items |
number or object Example: balance=1000 Filter by balance amount. Supports exact match or range operators:
| |
number or object Example: items_gross=150 Filter by gross amount in transaction items | |
number or object Example: items_commission=15 Filter by commission amount in transaction items | |
number or object Example: items_net=135 Filter by net amount in transaction items | |
object (DateTimeFilterSchema) Examples: createdAt[summary]=Find records where field exists (not null)&createdAt[value]=[object Object] createdAt[summary]=Find records where field is null/missing&createdAt[value]=[object Object] createdAt[summary]=Date range filtering&createdAt[value]=[object Object] createdAt[summary]=Range using comma-separated string&createdAt[value]=[object Object] createdAt[summary]=Using period for today&createdAt[value]=[object Object] createdAt[summary]=Using period for last week&createdAt[value]=[object Object] createdAt[summary]=Exact date-time match&createdAt[value]=[object Object] createdAt[summary]=After specific date&createdAt[value]=[object Object] Filter by creation timestamp. Supports date-time filtering operations. | |
object (DateTimeFilterSchema) Examples: updatedAt[summary]=Find records where field exists (not null)&updatedAt[value]=[object Object] updatedAt[summary]=Find records where field is null/missing&updatedAt[value]=[object Object] updatedAt[summary]=Date range filtering&updatedAt[value]=[object Object] updatedAt[summary]=Range using comma-separated string&updatedAt[value]=[object Object] updatedAt[summary]=Using period for today&updatedAt[value]=[object Object] updatedAt[summary]=Using period for last week&updatedAt[value]=[object Object] updatedAt[summary]=Exact date-time match&updatedAt[value]=[object Object] updatedAt[summary]=After specific date&updatedAt[value]=[object Object] Filter by last update timestamp. Supports date-time filtering operations. | |
object (DateTimeFilterSchema) Examples: escrowedAt[summary]=Find records where field exists (not null)&escrowedAt[value]=[object Object] escrowedAt[summary]=Find records where field is null/missing&escrowedAt[value]=[object Object] escrowedAt[summary]=Date range filtering&escrowedAt[value]=[object Object] escrowedAt[summary]=Range using comma-separated string&escrowedAt[value]=[object Object] escrowedAt[summary]=Using period for today&escrowedAt[value]=[object Object] escrowedAt[summary]=Using period for last week&escrowedAt[value]=[object Object] escrowedAt[summary]=Exact date-time match&escrowedAt[value]=[object Object] escrowedAt[summary]=After specific date&escrowedAt[value]=[object Object] Filter by escrow timestamp. Used for payment processing and transaction filtering. | |
object (DateTimeFilterSchema) Examples: arrivalDateTime[summary]=Find records where field exists (not null)&arrivalDateTime[value]=[object Object] arrivalDateTime[summary]=Find records where field is null/missing&arrivalDateTime[value]=[object Object] arrivalDateTime[summary]=Date range filtering&arrivalDateTime[value]=[object Object] arrivalDateTime[summary]=Range using comma-separated string&arrivalDateTime[value]=[object Object] arrivalDateTime[summary]=Using period for today&arrivalDateTime[value]=[object Object] arrivalDateTime[summary]=Using period for last week&arrivalDateTime[value]=[object Object] arrivalDateTime[summary]=Exact date-time match&arrivalDateTime[value]=[object Object] arrivalDateTime[summary]=After specific date&arrivalDateTime[value]=[object Object] Filter by arrival date and time. Commonly used for booking and event filtering. | |
object (DateTimeFilterSchema) Examples: summary=Find records where field exists (not null)&value=[object Object] summary=Find records where field is null/missing&value=[object Object] summary=Date range filtering&value=[object Object] summary=Range using comma-separated string&value=[object Object] summary=Using period for today&value=[object Object] summary=Using period for last week&value=[object Object] summary=Exact date-time match&value=[object Object] summary=After specific date&value=[object Object] Filter by realization date/time from transaction items | |
remoteTransactions_cardSummary_brand | string Example: remoteTransactions_cardSummary_brand=visa Filter by credit card brand |
stripeEvent_remoteSystem | string Example: stripeEvent_remoteSystem=connect Filter by Stripe remote system |
remoteId | string Example: remoteId=ch_1F0v3H4dlNciCrXqxiARO2o3 Filter by remote transaction ID |
object Example: exists[payout]=false&exists[gratuity]=true Check for field existence | |
createdBy | string Example: createdBy=60f7b3c4e4b0a1234567890g Filter by creator user ID |
context | string Value: "report" Special context for data retrieval:
|
etl | boolean Default: false Enable ETL mode for bulk data extraction (admin only) |
format | string Enum: "csv" "excel" "json" Example: format=csv Export format - returns a job ID for asynchronous processing |
include | string Example: include=id,amount,type,createdAt Comma-separated list of fields to include in response |
fields | string Example: fields=id,amount,type,createdAt Alias for 'include' parameter |
exclude | string Example: exclude=meta,remoteTransactions Comma-separated list of fields to exclude from response |
sort | string Example: sort=createdAt,-amount Sort order (comma-separated fields) |
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
{- "data": [
- {
- "id": "60f7b3c4e4b0a1234567890a",
- "amount": 150,
- "earning": 142.5,
- "balance": 1250.75,
- "currency": "USD",
- "type": "purchase",
- "source": "checkout",
- "method": "Credit Card",
- "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "createdAt": "2023-12-07T10:30:00Z",
- "updatedAt": "2023-12-07T10:30:00Z"
}, - {
- "id": "60f7b3c4e4b0a1234567890c",
- "amount": -25,
- "earning": -25,
- "balance": 1225.75,
- "currency": "USD",
- "type": "refund",
- "source": "admin",
- "method": "Credit Card",
- "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "createdAt": "2023-12-06T15:45:00Z",
- "updatedAt": "2023-12-06T15:45:00Z"
}
], - "meta": {
- "balance": 1250.75
}, - "paging": {
- "next": "/api/transactions?limit=20&offset=20"
}
}
Create a new transaction. Only admin users with appropriate permissions can create transactions.
Supports creating various transaction types including:
Transactions created via API are marked with source 'admin'.
amount required | number <float> Transaction amount |
earning | number <float> Seller earnings after commission |
currency required | string Currency code (ISO 4217) |
type required | string Enum: "purchase" "purchase_affiliate" "refund" "refund_commission" "deposit" "balance" "payout" "affiliate" "modify" "subscription" "subscription_refund" "payout_adjust" "redeem" "gratuity" "partner_reconcile_auto" "partner_reconcile_manual" "partner_purchase" Type of transaction |
method | string Enum: "ACH" "Wire" "PayPal" "Check" "Cash" "Other" "Credit Card" "Electronic" "Voucher" "Affiliate Deposit" "Gift" "Store Credit" "Xola Pay" "Plugin" Payment method |
source | string Enum: "xola" "admin" "checkout" "office" "partner" "affiliate_credit_top_up" "kiosk" "traveler" "refund" "import" "gift" "stripe" "gratuity" Transaction source |
comment | string Additional comments |
required | object (ObjectReference) Seller reference |
affiliates | Array of strings Affiliate IDs (for affiliate transactions) |
object Additional metadata |
{- "amount": 150,
- "earning": 142.5,
- "currency": "USD",
- "type": "purchase",
- "method": "Credit Card",
- "source": "checkout",
- "comment": "Booking payment",
- "seller": {
- "id": "60f7b3c4e4b0a1234567890a"
}
}
{- "id": "60f7b3c4e4b0a1234567890d",
- "amount": 150,
- "earning": 142.5,
- "balance": 1393.25,
- "currency": "USD",
- "type": "purchase",
- "source": "admin",
- "method": "Credit Card",
- "seller": {
- "id": "60f7b3c4e4b0a1234567890a"
}, - "createdAt": "2023-12-07T12:00:00Z",
- "updatedAt": "2023-12-07T12:00:00Z"
}
Apply batch operations to update transaction properties. Currently supports updating Stripe gateway fees.
Operations are processed individually, and the endpoint returns HTTP 207 (Multi-Status) if any operations fail. Successful operations are applied immediately, while failed operations are returned with error details.
Supported Operations:
setStripeChargeFee
: Update the gateway fee for a Stripe charge transactionsetStripeRefundFee
: Update the gateway fee for a Stripe refund transactionRequired Permission: ROLE_ADMIN_GATEWAY_FEES
op required | string Enum: "setStripeChargeFee" "setStripeRefundFee" Operation to perform:
|
value required | number <float> Fee amount to set (negative for refunds) |
required | object Filter criteria to identify which transactions to update |
[- {
- "op": "setStripeChargeFee",
- "value": 2.19,
- "filter": {
- "chargeId": "ch_1F0v3H4dlNciCrXqxiARO2o3"
}
}, - {
- "op": "setStripeChargeFee",
- "value": 3.44,
- "filter": {
- "chargeId": "ch_1F0v3H4dlNciCrXqxiARO2o4"
}
}
]
[- {
- "op": "setStripeChargeFee",
- "value": 3.44,
- "filter": {
- "chargeId": "ch_invalid"
}, - "error": {
- "filter": {
- "reason": "no_matching_transaction",
- "message": "No transaction was found matching this filter"
}
}
}, - {
- "op": "setStripeChargeFee",
- "value": 0,
- "filter": {
- "chargeId": "ch_invalid2"
}, - "error": {
- "filter": {
- "reason": "no_matching_transaction",
- "message": "No transaction was found matching this filter"
}
}
}
]
Retrieve a single transaction by its ID. The response includes the complete transaction details with all available fields.
Authorization rules are applied to ensure users can only access transactions they have permission to view.
id required | string Example: 60f7b3c4e4b0a1234567890a Transaction ID |
{- "id": "60f7b3c4e4b0a1234567890a",
- "amount": 150,
- "earning": 142.5,
- "balance": 1250.75,
- "currency": "USD",
- "type": "purchase",
- "source": "checkout",
- "method": "Credit Card",
- "comment": null,
- "coupon": "SAVE10",
- "seller": {
- "id": "60f7b3c4e4b0a1234567890b"
}, - "order": {
- "id": "60f7b3c4e4b0a1234567890c"
}, - "purchase": {
- "id": "60f7b3c4e4b0a1234567890d"
}, - "affiliates": [ ],
- "partners": [ ],
- "items": [
- {
- "id": "60f7b3c4e4b0a1234567890e",
- "gross": 150,
- "net": 142.5,
- "commission": 7.5,
- "name": "Kayak Tour - 2 Adults",
- "quantity": 2,
- "arrivalDateTime": "2023-12-15T09:00:00Z"
}
], - "remoteTransactions": [
- {
- "gateway": "Stripe",
- "remoteId": "ch_1F0v3H4dlNciCrXqxiARO2o3",
- "amount": 150,
- "currency": "USD",
- "status": "succeeded",
- "cardSummary": {
- "brand": "visa",
- "last4": "4242",
- "expMonth": 12,
- "expYear": 2025
}
}
], - "createdAt": "2023-12-07T10:30:00Z",
- "updatedAt": "2023-12-07T10:30:00Z",
- "createdBy": {
- "id": "60f7b3c4e4b0a1234567890f"
}
}
Retrieve aggregated transaction summary data calculated through database aggregation.
Provides totals, averages, and breakdowns by transaction type and payment method. Supports the same filtering parameters as the transaction list endpoint.
Authorization rules are applied to ensure users can only access summary data for transactions they have permission to view.
seller | string Example: seller=60f7b3c4e4b0a1234567890a Filter summary by seller ID |
type | Array of strings Items Enum: "purchase" "purchase_affiliate" "refund" "refund_commission" "deposit" "balance" "payout" "affiliate" "modify" "subscription" "subscription_refund" "payout_adjust" "redeem" "gratuity" "partner_reconcile_auto" "partner_reconcile_manual" "partner_purchase" Filter by transaction type(s) |
source | Array of strings Items Enum: "xola" "admin" "checkout" "office" "partner" "affiliate_credit_top_up" "kiosk" "traveler" "refund" "import" "gift" "stripe" "gratuity" Filter by transaction source(s) |
object (DateTimeFilterSchema) Examples: createdAt[summary]=Find records where field exists (not null)&createdAt[value]=[object Object] createdAt[summary]=Find records where field is null/missing&createdAt[value]=[object Object] createdAt[summary]=Date range filtering&createdAt[value]=[object Object] createdAt[summary]=Range using comma-separated string&createdAt[value]=[object Object] createdAt[summary]=Using period for today&createdAt[value]=[object Object] createdAt[summary]=Using period for last week&createdAt[value]=[object Object] createdAt[summary]=Exact date-time match&createdAt[value]=[object Object] createdAt[summary]=After specific date&createdAt[value]=[object Object] Filter by creation timestamp. Supports date-time filtering operations. | |
method | Array of strings Filter by payment method(s) |
{- "totalAmount": 15750,
- "totalEarnings": 14962.5,
- "transactionCount": 125,
- "averageAmount": 126,
- "byType": {
- "purchase": {
- "count": 98,
- "amount": 14700,
- "earnings": 13965
}, - "refund": {
- "count": 15,
- "amount": -1125,
- "earnings": -1068.75
}, - "payout": {
- "count": 12,
- "amount": 2175,
- "earnings": 2175
}
}, - "byMethod": {
- "Credit Card": {
- "count": 85,
- "amount": 12750
}, - "PayPal": {
- "count": 18,
- "amount": 2700
}, - "Cash": {
- "count": 22,
- "amount": 300
}
}
}
Retrieve all blackout schedules for a specific user. Blackout schedules define periods when experiences are unavailable.
userId required | string Example: 507f1f77bcf86cd799439011 Unique identifier for the user |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439011",
- "name": "Weekend Blackout",
- "repeat": "weekly",
- "days": [
- 0,
- 6
], - "start": "2024-01-01T00:00:00-08:00",
- "end": "2024-12-31T23:59:59-08:00",
- "type": "unavailable",
- "timeRanges": [ ],
- "createdAt": "2024-01-15T10:30:00Z",
- "updatedAt": "2024-01-15T10:30:00Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439012"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439012"
}
}
]
}
Create a new blackout schedule for a user. This is the primary endpoint. Blackout schedules automatically set the type to 'unavailable' and affect all user experiences.
userId required | string Example: 507f1f77bcf86cd799439011 Unique identifier for the user |
Blackout schedule data to create
name | string Human readable name for the blackout schedule |
repeat required | string Enum: "weekly" "custom" The repeating frequency of this blackout schedule |
days | Array of integers[ items [ 0 .. 6 ] ] Days of the week for weekly schedules. 0 = Sunday, 6 = Saturday |
start | string <date> Start date in YYYY-MM-DD format |
end | string or null <date> End date in YYYY-MM-DD format, or null for no end date |
dates | Array of strings <date> [ items <date >^(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9... ] Custom dates in YYYY-MM-DD format (required if repeat = "custom") |
Array of objects (TimeRange) Optional time ranges for more granular blackout control |
{- "name": "Weekday Maintenance",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "start": "2024-12-01",
- "end": "2024-12-31"
}
{- "id": "507f1f77bcf86cd799439014",
- "name": "Weekday Maintenance",
- "repeat": "weekly",
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "start": "2024-12-01T00:00:00-08:00",
- "end": "2024-12-31T23:59:59-08:00",
- "type": "unavailable",
- "timeRanges": [ ],
- "createdAt": "2024-01-16T15:30:00Z",
- "updatedAt": "2024-01-16T15:30:00Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439012"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439012"
}
}
Update an existing blackout schedule for a user. All provided fields will be updated, and any omitted fields will retain their current values.
userId required | string Example: 507f1f77bcf86cd799439011 Unique identifier for the user |
scheduleId required | string Example: 507f1f77bcf86cd799439013 Unique identifier for the blackout schedule |
Blackout schedule data to update
name | string Human readable name for the blackout schedule |
repeat | string Enum: "weekly" "custom" The repeating frequency of this blackout schedule |
days | Array of integers[ items [ 0 .. 6 ] ] Days of the week for weekly schedules. 0 = Sunday, 6 = Saturday |
start | string <date> Start date in YYYY-MM-DD format |
end | string or null <date> End date in YYYY-MM-DD format, or null for no end date |
dates | Array of strings <date> [ items <date >^(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9... ] Custom dates in YYYY-MM-DD format (applicable if repeat = "custom") |
type | string Value: "unavailable" Blackout schedules are always unavailable type (may be included in request) |
Array of objects (TimeRange) Time ranges for granular blackout control |
{- "dates": [
- "2024-12-24",
- "2024-12-25",
- "2024-12-26"
]
}
{- "id": "68a2d4524046afeb370e0e98",
- "name": "Updated Schedule",
- "days": [
- 1,
- 2
], - "start": "2025-08-30T00:00:00-04:00",
- "repeat": "weekly",
- "type": "unavailable",
- "createdAt": "2025-08-18T07:20:50+00:00",
- "updatedAt": "2025-08-29T13:00:02+00:00",
- "timeRanges": [
- {
- "startTime": 1215,
- "endTime": 1630
}
]
}
Delete an existing blackout schedule for a user. This will remove the blackout and make previously blocked times available again according to other schedules.
userId required | string Example: 507f1f77bcf86cd799439011 Unique identifier for the user |
scheduleId required | string Example: 507f1f77bcf86cd799439013 Unique identifier for the blackout schedule to delete |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Alternative endpoint to retrieve all blackout schedules for a specific user. Same functionality as /blackout but with different URL pattern.
userId required | string Example: 507f1f77bcf86cd799439011 Unique identifier for the user |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439011",
- "name": "Weekend Blackout",
- "repeat": "weekly",
- "days": [
- 0,
- 6
], - "start": "2024-01-01T00:00:00-08:00",
- "end": "2024-12-31T23:59:59-08:00",
- "type": "unavailable",
- "timeRanges": [ ],
- "createdAt": "2024-01-15T10:30:00Z",
- "updatedAt": "2024-01-15T10:30:00Z"
}
]
}
Alternative endpoint for creating a new blackout schedule for a user. This endpoint only creates new schedules and does not update existing ones.
userId required | string Example: 507f1f77bcf86cd799439011 Unique identifier for the user |
Blackout schedule data to create
name | string Human readable name for the blackout schedule |
repeat required | string Enum: "weekly" "custom" The repeating frequency of this blackout schedule |
days | Array of integers[ items [ 0 .. 6 ] ] Days of the week for weekly schedules. 0 = Sunday, 6 = Saturday |
start | string <date> Start date in YYYY-MM-DD format |
end | string or null <date> End date in YYYY-MM-DD format, or null for no end date |
dates | Array of strings <date> [ items <date >^(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9... ] Custom dates in YYYY-MM-DD format (required if repeat = "custom") |
Array of objects (TimeRange) Optional time ranges for more granular blackout control |
{- "repeat": "weekly",
- "days": [
- 1
], - "start": "2076-12-14",
- "end": "2076-12-14"
}
{- "id": "507f1f77bcf86cd799439015",
- "repeat": "weekly",
- "days": [
- 1
], - "start": "2076-12-14T00:00:00-10:00",
- "end": "2076-12-14T23:59:59-10:00",
- "type": "unavailable",
- "timeRanges": [ ],
- "createdAt": "2024-01-16T17:00:00Z",
- "updatedAt": "2024-01-16T17:00:00Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439012"
}, - "updatedBy": {
- "id": "507f1f77bcf86cd799439012"
}
}
Alternative endpoint for updating an existing blackout schedule for a user. This endpoint matches the actual API usage pattern with /blackoutSchedules.
userId required | string Example: 65bbde2d1b8c18afc407eee6 Unique identifier for the user |
scheduleId required | string Example: 68a2d4524046afeb370e0e98 Unique identifier for the blackout schedule |
seller | string Example: seller=65bbde2d1b8c18afc407eee6 Seller ID for authorization context |
Blackout schedule data to update
name | string Human readable name for the blackout schedule |
repeat | string Enum: "weekly" "custom" The repeating frequency of this blackout schedule |
days | Array of integers[ items [ 0 .. 6 ] ] Days of the week for weekly schedules. 0 = Sunday, 6 = Saturday |
start | string <date> Start date in YYYY-MM-DD format |
end | string or null <date> End date in YYYY-MM-DD format, or null for no end date |
dates | Array of strings <date> [ items <date >^(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9... ] Custom dates in YYYY-MM-DD format (applicable if repeat = "custom") |
type | string Value: "unavailable" Blackout schedules are always unavailable type (may be included in request) |
Array of objects (TimeRange) Time ranges for granular blackout control |
{- "id": "68a2d4524046afeb370e0e98",
- "days": [
- 1,
- 2
], - "start": "2025-08-30",
- "repeat": "weekly",
- "type": "unavailable",
- "createdAt": "2025-08-18T03:20:50-04:00",
- "updatedAt": "2025-08-29T08:13:15-04:00",
- "name": "name",
- "timeRanges": [
- {
- "startTime": 1215,
- "endTime": 1630
}
], - "end": null
}
{- "id": "68a2d4524046afeb370e0e98",
- "name": "name",
- "days": [
- 1,
- 2
], - "start": "2025-08-30T00:00:00-04:00",
- "repeat": "weekly",
- "type": "unavailable",
- "createdAt": "2025-08-18T07:20:50+00:00",
- "updatedAt": "2025-08-29T13:00:02+00:00",
- "timeRanges": [
- {
- "startTime": 1215,
- "endTime": 1630
}
]
}
Alternative endpoint for deleting an existing blackout schedule for a user. This endpoint matches the /blackoutSchedules URL pattern.
userId required | string Example: 65bbde2d1b8c18afc407eee6 Unique identifier for the user |
scheduleId required | string Example: 68a2d4524046afeb370e0e98 Unique identifier for the blackout schedule to delete |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Retrieve a list of affiliates. Access is controlled based on authentication and authorization.
limit | integer [ 1 .. 100 ] Default: 20 Number of items to return (max 100) |
skip | integer >= 0 Default: 0 Number of items to skip |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
code | string Example: code=JTA001 Filter affiliates by their internal code. This performs a case-insensitive exact match. When used without authentication, only exact matches are returned. When used with authentication, partial matches may be supported. |
status | string Enum: "active" "inactive" "pending" Example: status=active Filter affiliates by their current status |
seller | string Example: seller=507f1f77bcf86cd799439011 Filter affiliates by seller ID (required when using code filter without authentication) |
{- "data": [
- {
- "object": "affiliate",
- "name": "John's Travel Agency",
- "email": "john@travelagency.com",
- "code": "JTA001",
- "status": "active",
- "phone": "+1234567890",
- "address": "123 Main St, City, State 12345",
- "notes": "Preferred partner for corporate bookings",
- "allowChildren": false,
- "children": [
- "60f7b3c4e4b0a1234567890b",
- "60f7b3c4e4b0a1234567890c"
], - "parent": "60f7b3c4e4b0a1234567890d",
- "voucher": false,
- "delegated": true,
- "purchaseRulesPermanentIds": [
- "rule_123",
- "rule_456"
], - "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "id": "60f7b3c4e4b0a1234567890a",
- "createdAt": "2023-07-15T10:30:00Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2023-07-20T14:45:00Z",
- "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "deletedAt": null,
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
], - "paging": {
- "next": "string",
- "_es": true
}
}
Create a new affiliate for the authenticated user's seller account.
Affiliate data to create
object | string Object type identifier Value: "affiliate" |
name required | string Full name of the affiliate |
string or null <email> Email address of the affiliate | |
code | string or null Internal code referring to this affiliate (cannot contain spaces, quotes, <, >, &) |
status required | string Enum: "active" "inactive" "pending" Current status of the affiliate:
|
phone | string or null Phone number of the affiliate |
address | string or null Physical address of the affiliate |
url | string or null <uri> Website URL of the affiliate |
notes | string or null Internal notes about the affiliate |
allowChildren | boolean Whether this affiliate is allowed to create child affiliates |
children | Array of strings or null List of child affiliate IDs that report under this affiliate |
parent | string or null ID of the parent affiliate if this is a child affiliate |
voucher | boolean Whether this affiliate operates as a voucher-based partner |
delegated | boolean Whether this affiliate has delegated access rights |
purchaseRulesPermanentIds | Array of strings or null List of purchase rule permanent IDs associated with this affiliate |
required | object (ObjectReference) Seller this affiliate belongs to |
{- "object": "affiliate",
- "name": "John's Travel Agency",
- "email": "john@travelagency.com",
- "code": "JTA001",
- "status": "active",
- "phone": "+1234567890",
- "address": "123 Main St, City, State 12345",
- "notes": "Preferred partner for corporate bookings",
- "allowChildren": false,
- "children": [
- "60f7b3c4e4b0a1234567890b",
- "60f7b3c4e4b0a1234567890c"
], - "parent": "60f7b3c4e4b0a1234567890d",
- "voucher": false,
- "delegated": true,
- "purchaseRulesPermanentIds": [
- "rule_123",
- "rule_456"
], - "seller": {
- "id": "507f1f77bcf86cd799439011"
}
}
{- "object": "affiliate",
- "name": "John's Travel Agency",
- "email": "john@travelagency.com",
- "code": "JTA001",
- "status": "active",
- "phone": "+1234567890",
- "address": "123 Main St, City, State 12345",
- "notes": "Preferred partner for corporate bookings",
- "allowChildren": false,
- "children": [
- "60f7b3c4e4b0a1234567890b",
- "60f7b3c4e4b0a1234567890c"
], - "parent": "60f7b3c4e4b0a1234567890d",
- "voucher": false,
- "delegated": true,
- "purchaseRulesPermanentIds": [
- "rule_123",
- "rule_456"
], - "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "id": "60f7b3c4e4b0a1234567890a",
- "createdAt": "2023-07-15T10:30:00Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2023-07-20T14:45:00Z",
- "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "deletedAt": null,
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
Retrieve a specific affiliate by ID.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
expand | string Enum: "aggregation" "breakdown" "checkInValiditySummary" "combo" "conversation" "coupon" "demographic" "event" "experience" "experiences" "fundingDestination" "items" "membership" "membershipItem" "membershipPurchaseItem" "notes" "organizer" "package" "partnerPackage" "partnerSeller" "product" "purchase" "purchaseRule" "purchaseRuleLink" "selectedProducts" "seller" "seller.name" "template" "transaction" "travelers" "unit" "updated" "user" "waiver" Example: expand=experience,seller Many objects allow you to request additional information as an expanded response by using the In many cases, an object contains the ID of a related object in its response properties. For example, a You can expand multiple objects at the same time by providing a comma-separated list of values. |
{- "object": "affiliate",
- "name": "John's Travel Agency",
- "email": "john@travelagency.com",
- "code": "JTA001",
- "status": "active",
- "phone": "+1234567890",
- "address": "123 Main St, City, State 12345",
- "notes": "Preferred partner for corporate bookings",
- "allowChildren": false,
- "children": [
- "60f7b3c4e4b0a1234567890b",
- "60f7b3c4e4b0a1234567890c"
], - "parent": "60f7b3c4e4b0a1234567890d",
- "voucher": false,
- "delegated": true,
- "purchaseRulesPermanentIds": [
- "rule_123",
- "rule_456"
], - "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "id": "60f7b3c4e4b0a1234567890a",
- "createdAt": "2023-07-15T10:30:00Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2023-07-20T14:45:00Z",
- "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "deletedAt": null,
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
Update an existing affiliate's information.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
Updated affiliate data
object | string Object type identifier Value: "affiliate" |
name required | string Full name of the affiliate |
string or null <email> Email address of the affiliate | |
code | string or null Internal code referring to this affiliate (cannot contain spaces, quotes, <, >, &) |
status required | string Enum: "active" "inactive" "pending" Current status of the affiliate:
|
phone | string or null Phone number of the affiliate |
address | string or null Physical address of the affiliate |
url | string or null <uri> Website URL of the affiliate |
notes | string or null Internal notes about the affiliate |
allowChildren | boolean Whether this affiliate is allowed to create child affiliates |
children | Array of strings or null List of child affiliate IDs that report under this affiliate |
parent | string or null ID of the parent affiliate if this is a child affiliate |
voucher | boolean Whether this affiliate operates as a voucher-based partner |
delegated | boolean Whether this affiliate has delegated access rights |
purchaseRulesPermanentIds | Array of strings or null List of purchase rule permanent IDs associated with this affiliate |
required | object (ObjectReference) Seller this affiliate belongs to |
{- "object": "affiliate",
- "name": "John's Travel Agency",
- "email": "john@travelagency.com",
- "code": "JTA001",
- "status": "active",
- "phone": "+1234567890",
- "address": "123 Main St, City, State 12345",
- "notes": "Preferred partner for corporate bookings",
- "allowChildren": false,
- "children": [
- "60f7b3c4e4b0a1234567890b",
- "60f7b3c4e4b0a1234567890c"
], - "parent": "60f7b3c4e4b0a1234567890d",
- "voucher": false,
- "delegated": true,
- "purchaseRulesPermanentIds": [
- "rule_123",
- "rule_456"
], - "seller": {
- "id": "507f1f77bcf86cd799439011"
}
}
{- "object": "affiliate",
- "name": "John's Travel Agency",
- "email": "john@travelagency.com",
- "code": "JTA001",
- "status": "active",
- "phone": "+1234567890",
- "address": "123 Main St, City, State 12345",
- "notes": "Preferred partner for corporate bookings",
- "allowChildren": false,
- "children": [
- "60f7b3c4e4b0a1234567890b",
- "60f7b3c4e4b0a1234567890c"
], - "parent": "60f7b3c4e4b0a1234567890d",
- "voucher": false,
- "delegated": true,
- "purchaseRulesPermanentIds": [
- "rule_123",
- "rule_456"
], - "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "id": "60f7b3c4e4b0a1234567890a",
- "createdAt": "2023-07-15T10:30:00Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2023-07-20T14:45:00Z",
- "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "deletedAt": null,
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
Soft delete an affiliate.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
{- "error": {
- "reason": "string",
- "message": "string",
- "details": { }
}, - "message": "string",
- "code": 0
}
Create a payment transaction to pay an affiliate.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
Payment transaction details
amount required | number <float> Transaction amount (positive for collect, will be negated for pay operations) |
description | string or null Description of the transaction |
reference | string or null External reference for the transaction |
{- "amount": 100.5,
- "description": "Commission payment for July bookings",
- "reference": "PAY-2023-001"
}
{- "object": "affiliate",
- "name": "John's Travel Agency",
- "email": "john@travelagency.com",
- "code": "JTA001",
- "status": "active",
- "phone": "+1234567890",
- "address": "123 Main St, City, State 12345",
- "notes": "Preferred partner for corporate bookings",
- "allowChildren": false,
- "children": [
- "60f7b3c4e4b0a1234567890b",
- "60f7b3c4e4b0a1234567890c"
], - "parent": "60f7b3c4e4b0a1234567890d",
- "voucher": false,
- "delegated": true,
- "purchaseRulesPermanentIds": [
- "rule_123",
- "rule_456"
], - "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "id": "60f7b3c4e4b0a1234567890a",
- "createdAt": "2023-07-15T10:30:00Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2023-07-20T14:45:00Z",
- "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "deletedAt": null,
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}
Create a collection transaction to collect money from an affiliate.
id required | string Example: 507f1f77bcf86cd799439011 Resource ID |
Collection transaction details
amount required | number <float> Transaction amount (positive for collect, will be negated for pay operations) |
description | string or null Description of the transaction |
reference | string or null External reference for the transaction |
{- "amount": 100.5,
- "description": "Commission payment for July bookings",
- "reference": "PAY-2023-001"
}
{- "object": "affiliate",
- "name": "John's Travel Agency",
- "email": "john@travelagency.com",
- "code": "JTA001",
- "status": "active",
- "phone": "+1234567890",
- "address": "123 Main St, City, State 12345",
- "notes": "Preferred partner for corporate bookings",
- "allowChildren": false,
- "children": [
- "60f7b3c4e4b0a1234567890b",
- "60f7b3c4e4b0a1234567890c"
], - "parent": "60f7b3c4e4b0a1234567890d",
- "voucher": false,
- "delegated": true,
- "purchaseRulesPermanentIds": [
- "rule_123",
- "rule_456"
], - "seller": {
- "id": "507f1f77bcf86cd799439011"
}, - "id": "60f7b3c4e4b0a1234567890a",
- "createdAt": "2023-07-15T10:30:00Z",
- "createdBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "updatedAt": "2023-07-20T14:45:00Z",
- "updatedBy": {
- "id": "507f1f77bcf86cd799439011"
}, - "deletedAt": null,
- "deletedBy": {
- "id": "507f1f77bcf86cd799439011"
}
}