Tiqets API Specification¶
Overview¶
The Tiqets API provides endpoints for browsing and booking activity tickets through the Tiqets.com integration. It includes catalog management for experiences, products, and real-time availability checking.
All catalog endpoints return canonical entities (CCountry, CLocation, CExperience, CProduct, CProductVariant, CTimeslot) that are transformed from native Tiqets data. This ensures consistent data models across all supplier integrations.
Base Path: /tiqets
Content Types:
- Request: application/json
- Response: application/json
Response Format¶
All endpoints return a TlinqApiResponse object:
Date Format: All dates are in ISO 8601 format (yyyy-MM-dd)
Location Endpoints¶
POST /tiqets/countries¶
Lists all countries with Tiqets experiences.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
Request Example:
Response Structure:
Returns an array of CCountry canonical entities.
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": [
{
"countryId": 1,
"countryCode": "AE",
"countryName": "United Arab Emirates",
"countryFullName": "United Arab Emirates"
},
{
"countryId": 2,
"countryCode": "NL",
"countryName": "Netherlands",
"countryFullName": "Netherlands"
},
{
"countryId": 3,
"countryCode": "FR",
"countryName": "France",
"countryFullName": "France"
}
]
}
POST /tiqets/cities¶
Lists cities with Tiqets experiences, optionally filtered by country.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
| countryId | string | No | Filter by country ID |
| enabledOnly | boolean | No | Only show enabled cities (default: false) |
Request Example:
Response Structure:
Returns an array of CLocation canonical entities.
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": [
{
"cityCode": "dubai",
"cityName": "Dubai",
"countryCode": "AE",
"latitude": 25.2048,
"longitude": 55.2708,
"timezone": "Asia/Dubai",
"currency": "AED",
"enabled": true
},
{
"cityCode": "abu-dhabi",
"cityName": "Abu Dhabi",
"countryCode": "AE",
"latitude": 24.4539,
"longitude": 54.3773,
"timezone": "Asia/Dubai",
"currency": "AED",
"enabled": true
}
]
}
POST /tiqets/city/enable¶
Enables a city for display in the catalog.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
| cityId | string | Yes | City ID to enable |
Request Example:
Response Structure:
Error Codes:
- MISSING_PARAMETER - cityId is required
POST /tiqets/city/disable¶
Disables a city from display in the catalog.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
| cityId | string | Yes | City ID to disable |
Request Example:
Response Structure:
Error Codes:
- MISSING_PARAMETER - cityId is required
Experience Endpoints¶
POST /tiqets/experiences¶
Lists experiences (activity categories) with optional filters and pagination.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
| cityId | string | No | Filter by city ID |
| countryId | string | No | Filter by country ID |
| categoryId | string | No | Filter by category |
| page | integer | No | Page number (1-based, default: 1) |
| pageSize | integer | No | Results per page (default: 50) |
Request Example:
Response Structure:
Returns an array of CExperience canonical entities.
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": [
{
"experienceId": "145158",
"experienceType": "attraction",
"title": "Burj Khalifa: At the Top (Level 124 & 125)",
"tagline": "Visit the world's tallest building",
"description": "Experience breathtaking views from the observation deck of the iconic Burj Khalifa...",
"cityId": "dubai",
"countryId": "AE",
"streetAddress": "1 Sheikh Mohammed bin Rashid Blvd",
"postalCode": "12345",
"latitude": 25.1972,
"longitude": 55.2744,
"googlePlaceId": "ChIJj3R6sMlDXz4RWLq1O1s3NJk",
"imageSmall": "https://images.tiqets.com/small/burj-khalifa.jpg",
"imageMedium": "https://images.tiqets.com/medium/burj-khalifa.jpg",
"imageLarge": "https://images.tiqets.com/large/burj-khalifa.jpg",
"imageXlarge": "https://images.tiqets.com/xlarge/burj-khalifa.jpg",
"imageAltText": "Burj Khalifa observation deck",
"ratingAverage": 4.7,
"ratingCount": 12500,
"fromPrice": 149.00,
"currency": "AED",
"tagIds": "1,5,12",
"productIds": "234567,234568,234569",
"experienceUrl": "https://www.tiqets.com/burj-khalifa-tickets",
"active": true
},
{
"experienceId": "145159",
"experienceType": "tour",
"title": "Desert Safari with BBQ Dinner",
"tagline": "Experience the Arabian desert adventure",
"description": "Enjoy dune bashing, camel riding, and a traditional BBQ dinner...",
"cityId": "dubai",
"countryId": "AE",
"latitude": 25.0657,
"longitude": 55.5285,
"ratingAverage": 4.5,
"ratingCount": 8500,
"fromPrice": 199.00,
"currency": "AED",
"active": true
}
]
}
POST /tiqets/experience¶
Gets a single experience by ID.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
| experienceId | string | Yes | Experience ID (supplier ID) |
Request Example:
Response Structure:
Returns a single CExperience canonical entity.
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": {
"experienceId": "145158",
"experienceType": "attraction",
"title": "Burj Khalifa: At the Top (Level 124 & 125)",
"tagline": "Visit the world's tallest building",
"description": "Experience breathtaking views from the observation deck of the iconic Burj Khalifa. At 555 meters above ground, levels 124 and 125 offer a stunning 360-degree view of Dubai.",
"cityId": "dubai",
"countryId": "AE",
"streetAddress": "1 Sheikh Mohammed bin Rashid Blvd",
"postalCode": "12345",
"latitude": 25.1972,
"longitude": 55.2744,
"googlePlaceId": "ChIJj3R6sMlDXz4RWLq1O1s3NJk",
"imageSmall": "https://images.tiqets.com/small/burj-khalifa.jpg",
"imageMedium": "https://images.tiqets.com/medium/burj-khalifa.jpg",
"imageLarge": "https://images.tiqets.com/large/burj-khalifa.jpg",
"imageXlarge": "https://images.tiqets.com/xlarge/burj-khalifa.jpg",
"imageAltText": "Burj Khalifa observation deck",
"ratingAverage": 4.7,
"ratingCount": 12500,
"fromPrice": 149.00,
"currency": "AED",
"tagIds": "1,5,12",
"productIds": "234567,234568,234569",
"experienceUrl": "https://www.tiqets.com/burj-khalifa-tickets",
"active": true
}
}
Error Codes:
- MISSING_PARAMETER - experienceId is required
- NOTFOUND - Experience not found
Product Endpoints¶
POST /tiqets/products¶
Lists products (bookable items) for an experience or city.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
| experienceId | string | No* | Filter by experience ID |
| cityId | string | No* | Filter by city ID |
*Either experienceId or cityId must be provided.
Request Example:
Response Structure:
Returns an array of CProduct canonical entities.
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": [
{
"prodCode": "234567",
"prodName": "At the Top - Standard Entry",
"productDescription": "Standard entry to At the Top observation deck on levels 124 & 125...",
"productPrice": 149.00,
"currency": "AED",
"hasTimeSlot": true,
"maxQuantity": 10,
"hasVendorBooking": true,
"productInclusions": "Entry to levels 124 & 125|Multimedia presentation|Audio guide",
"productExclusions": "Food and beverages|SKY lounge access",
"productInfo": "Arrive 30 minutes before your timeslot. Valid ID required.",
"cancelPolicy": "Free cancellation up to 24 hours before",
"prodImgSmall": "https://images.tiqets.com/small/burj-khalifa-standard.jpg",
"prodImgMed": "https://images.tiqets.com/medium/burj-khalifa-standard.jpg",
"prodImgLarge": "https://images.tiqets.com/large/burj-khalifa-standard.jpg"
},
{
"prodCode": "234568",
"prodName": "At the Top SKY - Premium Entry",
"productDescription": "Premium entry including SKY lounge on level 148...",
"productPrice": 379.00,
"currency": "AED",
"hasTimeSlot": true,
"hasVendorBooking": true
}
]
}
Error Codes:
- MISSING_PARAMETER - Either experienceId or cityId must be provided
POST /tiqets/product¶
Gets a single product by ID with full details.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
| productId | string | Yes | Product ID (supplier ID) |
Request Example:
Response Structure:
Returns a single CProduct canonical entity.
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": {
"prodCode": "234567",
"prodName": "At the Top - Standard Entry",
"productDescription": "Standard entry to At the Top observation deck on levels 124 & 125. Enjoy breathtaking views of Dubai from one of the world's tallest buildings.",
"productPrice": 149.00,
"currency": "AED",
"hasTimeSlot": true,
"maxQuantity": 10,
"hasVendorBooking": true,
"productInclusions": "Entry to levels 124 & 125|Multimedia presentation|Audio guide",
"productExclusions": "Food and beverages|SKY lounge access",
"productInfo": "Arrive 30 minutes before your timeslot. Valid ID required. No large bags allowed.",
"cancelPolicy": "Free cancellation up to 24 hours before the visit. No refund for cancellations within 24 hours.",
"prodImgSmall": "https://images.tiqets.com/small/burj-khalifa-standard.jpg",
"prodImgMed": "https://images.tiqets.com/medium/burj-khalifa-standard.jpg",
"prodImgLarge": "https://images.tiqets.com/large/burj-khalifa-standard.jpg"
}
}
Error Codes:
- MISSING_PARAMETER - productId is required
- NOTFOUND - Product not found
POST /tiqets/product/variants¶
Gets product variants (ticket types) for a product.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
| productId | string | Yes | Product ID (supplier ID) |
Request Example:
Response Structure:
Returns an array of CProductVariant canonical entities.
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": [
{
"servcode": "V123456",
"servname": "Adult",
"servdesc": "Visitors aged 13 and above",
"cprice": 149.00,
"currency": "AED",
"maxOccupancy": 1,
"available": true
},
{
"servcode": "V123457",
"servname": "Child (4-12)",
"servdesc": "Children aged 4 to 12 years",
"cprice": 99.00,
"currency": "AED",
"maxOccupancy": 1,
"available": true
},
{
"servcode": "V123458",
"servname": "Infant (0-3)",
"servdesc": "Infants aged 0 to 3 years (free entry)",
"cprice": 0.00,
"currency": "AED",
"maxOccupancy": 1,
"available": true
}
]
}
Error Codes:
- MISSING_PARAMETER - productId is required
Availability Endpoints¶
POST /tiqets/availability¶
Gets real-time availability and pricing for a product within a date range. This endpoint calls the Tiqets API in real-time and returns the native TqAvailability structure with rich nested data.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
| productId | string | Yes | Product ID (supplier ID) |
| dateFrom | string | Yes | Start date (yyyy-MM-dd) |
| dateTo | string | Yes | End date (yyyy-MM-dd) |
Request Example:
{
"session": "user-session-token",
"productId": "234567",
"dateFrom": "2025-07-15",
"dateTo": "2025-07-20"
}
Response Structure:
Returns a TqAvailability native entity with nested availability data.
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": {
"productId": "234567",
"availableDates": [
{
"date": "2025-07-15",
"available": true,
"timeslots": [
{
"timeslotId": "TS001",
"time": "09:00",
"available": true,
"vacancies": 50
},
{
"timeslotId": "TS002",
"time": "10:00",
"available": true,
"vacancies": 45
},
{
"timeslotId": "TS003",
"time": "11:00",
"available": true,
"vacancies": 30
},
{
"timeslotId": "TS004",
"time": "14:00",
"available": true,
"vacancies": 60
},
{
"timeslotId": "TS005",
"time": "17:00",
"available": true,
"vacancies": 25
}
],
"variantPrices": [
{
"variantId": "V123456",
"price": 149.00,
"currency": "AED",
"originalPrice": 169.00,
"availableQuantity": 50
},
{
"variantId": "V123457",
"price": 99.00,
"currency": "AED",
"originalPrice": 119.00,
"availableQuantity": 50
},
{
"variantId": "V123458",
"price": 0.00,
"currency": "AED",
"originalPrice": 0.00,
"availableQuantity": 50
}
]
},
{
"date": "2025-07-16",
"available": true,
"timeslots": [
{
"timeslotId": "TS006",
"time": "09:00",
"available": true,
"vacancies": 55
},
{
"timeslotId": "TS007",
"time": "10:00",
"available": true,
"vacancies": 40
}
],
"variantPrices": [
{
"variantId": "V123456",
"price": 159.00,
"currency": "AED",
"originalPrice": 169.00,
"availableQuantity": 55
}
]
},
{
"date": "2025-07-17",
"available": false,
"timeslots": [],
"variantPrices": []
}
]
}
}
Error Codes:
- MISSING_PARAMETER - Product ID or date range not provided
- API_ERROR - Failed to retrieve availability from Tiqets API
POST /tiqets/timeslots¶
Gets flattened timeslot data for a product within a date range. This is a simplified alternative to /availability that returns canonical CTimeslot entities.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
| productId | string | Yes | Product ID (supplier ID) |
| dateFrom | string | Yes | Start date (yyyy-MM-dd) |
| dateTo | string | Yes | End date (yyyy-MM-dd) |
Request Example:
{
"session": "user-session-token",
"productId": "234567",
"dateFrom": "2025-07-15",
"dateTo": "2025-07-17"
}
Response Structure:
Returns an array of CTimeslot canonical entities.
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": [
{
"timeSlotId": "TS001",
"startTimestamp": "2025-07-15T09:00:00",
"status": "available",
"available": 50,
"adultPrice": 149.00,
"childPrice": 99.00,
"dynamicPrice": true
},
{
"timeSlotId": "TS002",
"startTimestamp": "2025-07-15T10:00:00",
"status": "available",
"available": 45,
"adultPrice": 149.00,
"childPrice": 99.00,
"dynamicPrice": true
},
{
"timeSlotId": "TS003",
"startTimestamp": "2025-07-15T11:00:00",
"status": "available",
"available": 30,
"adultPrice": 149.00,
"childPrice": 99.00,
"dynamicPrice": true
}
]
}
Error Codes:
- MISSING_PARAMETER - Product ID or date range not provided
- API_ERROR - Failed to retrieve timeslots from Tiqets API
Tag Endpoints¶
Tags are used to categorize experiences and products. They are organized into tag types (e.g., "Activity categories", "Amenities", "Accessibility features").
POST /tiqets/tags¶
Lists tags, optionally filtered by type group name.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
| typeGroupName | string | No | Filter by tag type group (e.g., "Activity categories") |
Request Example:
Response Structure:
Returns an array of CTag canonical entities.
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": [
{
"tagId": "1",
"name": "Museums",
"tagTypeId": 101,
"typeName": "Museums & Culture",
"typeGroupName": "Activity categories",
"iconUrl": "https://cdn.tiqets.com/icons/museums.svg"
},
{
"tagId": "2",
"name": "Theme Parks",
"tagTypeId": 102,
"typeName": "Entertainment",
"typeGroupName": "Activity categories",
"iconUrl": "https://cdn.tiqets.com/icons/theme-parks.svg"
},
{
"tagId": "3",
"name": "City Tours",
"tagTypeId": 103,
"typeName": "Tours & Experiences",
"typeGroupName": "Activity categories",
"iconUrl": "https://cdn.tiqets.com/icons/tours.svg"
},
{
"tagId": "4",
"name": "Outdoor Activities",
"tagTypeId": 104,
"typeName": "Nature & Adventure",
"typeGroupName": "Activity categories",
"iconUrl": "https://cdn.tiqets.com/icons/outdoor.svg"
}
]
}
POST /tiqets/tag-types¶
Lists all tag types available in the system.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | User session token |
Request Example:
Response Structure:
Returns an array of CTagType canonical entities.
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": [
{
"tagTypeId": 101,
"name": "Museums & Culture",
"groupName": "Activity categories",
"iconUrl": "https://cdn.tiqets.com/icons/category-museums.svg"
},
{
"tagTypeId": 102,
"name": "Entertainment",
"groupName": "Activity categories",
"iconUrl": "https://cdn.tiqets.com/icons/category-entertainment.svg"
},
{
"tagTypeId": 103,
"name": "Tours & Experiences",
"groupName": "Activity categories",
"iconUrl": "https://cdn.tiqets.com/icons/category-tours.svg"
},
{
"tagTypeId": 201,
"name": "Wheelchair Access",
"groupName": "Accessibility features",
"iconUrl": "https://cdn.tiqets.com/icons/wheelchair.svg"
},
{
"tagTypeId": 301,
"name": "Free WiFi",
"groupName": "Amenities",
"iconUrl": "https://cdn.tiqets.com/icons/wifi.svg"
}
]
}
POST /tiqets/tags/sync¶
Synchronizes tags and tag types from the Tiqets API to the local database. This is an administrative endpoint that fetches all tags and tag types from Tiqets and updates the local cache.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| session | string | No | Admin session token |
Request Example:
Response Structure: Returns a status message with sync counts.
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": "Synced 15 tag types and 127 tags"
}
Error Codes:
- API_ERROR - Failed to sync tags from Tiqets API
Data Models¶
CCountry (Canonical Country Entity)¶
| Field | Type | Description |
|---|---|---|
| countryId | integer | Internal country ID |
| countryCode | string | ISO 2-letter country code |
| countryName | string | Country name |
| countryFullName | string | Full country name |
| countryPhoneCode | integer | International phone code |
CLocation (Canonical Location/City Entity)¶
| Field | Type | Description |
|---|---|---|
| cityCode | string | City identifier (from Tiqets cityId) |
| cityName | string | City name |
| countryCode | string | ISO 2-letter country code |
| countryName | string | Country name |
| latitude | double | City latitude |
| longitude | double | City longitude |
| timezone | string | City timezone (e.g., "Asia/Dubai") |
| currency | string | Default currency code |
| enabled | boolean | Whether city is enabled for display |
| type | string | Location type |
| subType | string | Location subtype |
CExperience (Canonical Experience Entity)¶
| Field | Type | Description |
|---|---|---|
| experienceId | string | Tiqets experience ID |
| experienceType | string | Type (attraction, tour, museum, etc.) |
| title | string | Experience title |
| tagline | string | Short tagline |
| description | string | Full description |
| cityId | string | City ID |
| countryId | string | Country ID |
| streetAddress | string | Street address |
| postalCode | string | Postal code |
| latitude | double | Location latitude |
| longitude | double | Location longitude |
| googlePlaceId | string | Google Place ID |
| imageSmall | string | Small image URL |
| imageMedium | string | Medium image URL |
| imageLarge | string | Large image URL |
| imageXlarge | string | Extra large image URL |
| imageAltText | string | Image alt text |
| ratingAverage | double | Average rating (0-5) |
| ratingCount | integer | Number of ratings |
| fromPrice | double | Starting price |
| currency | string | Currency code |
| tagIds | string | Comma-separated tag IDs |
| productIds | string | Comma-separated product IDs |
| experienceUrl | string | Tiqets experience URL |
| active | boolean | Whether experience is active |
CProduct (Canonical Product Entity)¶
| Field | Type | Description |
|---|---|---|
| prodCode | string | Product code (from Tiqets productId) |
| prodName | string | Product title |
| productDescription | string | Full description |
| productPrice | double | Minimum/base price |
| childPrice | double | Child price if applicable |
| currency | string | Currency code |
| hasTimeSlot | boolean | Whether product has timeslots |
| maxQuantity | integer | Maximum tickets per order |
| hasVendorBooking | boolean | Whether product is active/bookable |
| productInclusions | string | Pipe-separated inclusions |
| productExclusions | string | Pipe-separated exclusions |
| productInfo | string | Important information |
| cancelPolicy | string | Cancellation policy text |
| prodImgSmall | string | Small image URL |
| prodImgMed | string | Medium image URL |
| prodImgLarge | string | Large image URL |
CProductVariant (Canonical Variant Entity)¶
| Field | Type | Description |
|---|---|---|
| servid | integer | Internal variant ID |
| servcode | string | Variant code (from Tiqets variantId) |
| servname | string | Variant label (e.g., "Adult", "Child") |
| servdesc | string | Variant description |
| cprice | double | Current price |
| bprice | double | Base price |
| currency | string | Currency code |
| maxOccupancy | integer | Max visitors per ticket |
| maxAdults | integer | Max adult tickets |
| maxChildren | integer | Max child tickets |
| hasTimeSlots | boolean | Whether variant has timeslots |
| available | boolean | Whether variant is available |
CTimeslot (Canonical Timeslot Entity)¶
| Field | Type | Description |
|---|---|---|
| timeSlotId | string | Timeslot ID |
| optionId | integer | Option/variant ID |
| startTimestamp | string | Start date/time (ISO format) |
| status | string | Availability status |
| available | integer | Number of available spots |
| adultPrice | double | Adult price for this timeslot |
| childPrice | double | Child price for this timeslot |
| dynamicPrice | boolean | Whether pricing is dynamic |
CTag (Canonical Tag Entity)¶
| Field | Type | Description |
|---|---|---|
| tagId | string | Tiqets tag ID |
| name | string | Tag display name |
| tagTypeId | integer | Parent tag type ID |
| typeName | string | Tag type name |
| typeGroupName | string | Tag type group (e.g., "Activity categories") |
| iconUrl | string | Tag icon URL |
CTagType (Canonical Tag Type Entity)¶
| Field | Type | Description |
|---|---|---|
| tagTypeId | integer | Tiqets tag type ID |
| name | string | Tag type name |
| groupName | string | Tag type group (e.g., "Activity categories") |
| iconUrl | string | Tag type icon URL |
TqAvailability (Native Availability Response)¶
The /availability endpoint returns native Tiqets data structure for rich nested availability information:
| Field | Type | Description |
|---|---|---|
| productId | string | Product ID |
| availableDates | array | Array of AvailableDate objects |
TqAvailability.AvailableDate:
| Field | Type | Description |
|---|---|---|
| date | string | Date (yyyy-MM-dd) |
| available | boolean | Whether date is available |
| timeslots | array | Array of Timeslot objects |
| variantPrices | array | Array of VariantPrice objects |
TqAvailability.Timeslot:
| Field | Type | Description |
|---|---|---|
| timeslotId | string | Timeslot ID |
| time | string | Time (HH:mm) |
| available | boolean | Whether timeslot is available |
| vacancies | integer | Number of available spots |
TqAvailability.VariantPrice:
| Field | Type | Description |
|---|---|---|
| variantId | string | Variant ID |
| price | decimal | Current price |
| currency | string | Currency code |
| originalPrice | decimal | Original price (before discount) |
| availableQuantity | integer | Available quantity |
Integration Notes¶
Canonical Entity Model¶
All catalog endpoints (countries, cities, experiences, products, variants, timeslots) return canonical entities that are transformed from native Tiqets data using the EntityFacade pattern. This ensures: - Consistent field names across different supplier integrations - Type-safe data (e.g., BigDecimal to Double conversion) - Decoupled API responses from supplier-specific data models
The /availability endpoint is an exception - it returns the native TqAvailability structure because it contains complex nested data that benefits from the original structure.
Caching Strategy¶
- Static data (countries, cities, experiences, products, variants, tags) is cached in the local database and refreshed periodically via the
StaticDataRefresherservice. - Dynamic data (availability, pricing) is fetched in real-time from the Tiqets API.
Initial Data Sync¶
Before using the API, populate the local cache using:
StaticDataRefresher refresher = new StaticDataRefresher();
refresher.initialSync(5); // Sync 5 pages of experiences
Tag Sync¶
Tags must be synced separately from the main catalog data. Use the /tiqets/tags/sync endpoint or call programmatically:
TiqetsCatalogFacade facade = TiqetsCatalogFacade.instance();
facade.syncTagTypes(); // Sync tag types first
facade.syncTags(); // Then sync tags
Tags are useful for: - Filtering experiences by category (e.g., "Museums", "Theme Parks", "City Tours") - Displaying category chips on experience pages - Building category navigation in the UI
The typeGroupName field distinguishes between different tag categories:
- "Activity categories" - Main experience categories for UI display
- "Amenities" - Venue amenities (WiFi, parking, etc.)
- "Accessibility features" - Accessibility information
ID Conventions¶
All IDs returned by this API are supplier IDs from Tiqets, not internal database IDs. This ensures consistency when making subsequent API calls.
Rate Limiting¶
Real-time availability calls are subject to Tiqets API rate limits. Implement appropriate caching and request throttling for high-traffic scenarios.