This is the main place entity. It can be marked as 'offSite' so the app can do the minor differentiation it needs. Although these are different entities in our CMS, they share some common meta data, and the app treats them as a single entity.
Properties below are marked if they are normally respected only by Onsite, Offsite place types. (Singular places are seen as onsite by the app, but have access to some normally offsite only fields - eg contact details)
{
"id": 71,
"title": "The Sports Bar",
"description": "Enjoy a family meal or enjoy live sports TV in our Sports Bar, with 12 HD TVs, a soft play area, an arcade and sun terrace. ",
"copy": "The Sports Bar is a firm family favourite with something for everyone; from sports TV to a soft play area & arcade. #BREAK##BREAK#Open for breakfast, lunch & dinner, on the varied menu you’ll find; pub classics, curry club dishes, freshly made pizzas, wings, nachos & more.#BREAK##BREAK#Booking not required.",
"priority": 10,
"offSite": false,
"imgUrl": "https://your-wordpress-install.com/wp-content/uploads/2021/08/WS-14-Sports-Bar.jpeg?v=1644317846",
"gallery": [
"https://your-wordpress-install.com/wp-content/uploads/2023/07/PA206674_v2000_w620.jpg?v=1688913311",
"https://your-wordpress-install.com/wp-content/uploads/2023/07/PA206688_v2000_w620-1.jpg?v=1688913312",
],
"highlightText": "Booking Recommended",
"dontShowOnMap" : false,
"mapLabel": "SB",
"loc_lat" : 50.71245750791539,
"loc_lng": -2.4619866156242995,
"loc_zoom": 14,
"w3w": "qualified.burglars.digitally",
"w3wUrl": "https://w3w.co/qualified.burglars.digitally",
"directions": "Entrance located opposite the leisure complex, next to the arcade",
"dogFriendly": true,
"accNotes": "Entry is on a ground level, and accessible toilets available",
"linkToWhatsOn": true,
"linkToWhatsOnTitle": "Upcoming events >",
"phone": "012345678",
"email": "info@holidaymakerapp.co.uk",
"website": "https://holidaymakerapp.co.uk",
"address": "Holidaymaker App Ltd#BREAK#Stowey House#BREAK#Bridport Road#BREAK#Dorchester#BREAK#DT12SB",
"alert": {
//Place alert object
},
"menusHeading": "Bar Menus",
"menus": [
{
//Menu or Attachment 1
},
{
//Menu or Attachment 2
}
],
"openingTimes": {
//Opening Times Object
},
"distances": [
{
//Distance definitions for park X
},
{
//Distance definitions for park Y
}
],
"sites": [
"park-one",
"park-two"
],
"categories": [
"food-drink",
"entertainment"
]
}Type : Integer - Required
Unique ID for this place. Even though these entities could contain onsite facilities, and offsite attractions they MUST have a unique ID between them. This however does not need to be unique compared to other entities within the app
Type : Rich Text / Multiline String - Optional
List description. This is rendered as a small amount of text on the place cards within the app surfaces.
Type : Rich Text / Multiline String - Optional
Larger amount of text for the detail section of the app surfaces places section.
Type : Integer - Optional
Defaults to 99 - the lower the priority the higher on the place lists views it will be before alphabetisation.
Type : Boolean - Optional
Include this and set to true to indicate that this is an offsite place
Type : Image Url String - Optional
Landscape hero image used on the place list views and detail view
Type : Array of Image Url String - Optional
A list of image urls to render as a swipable gallery in the place detail. These are a landscape hero style ratio.
Type : String - Optional
This small piece of text is used on the list and details views of a place to highlight something. It is normally the brand accent color in a rounded corner pill text view. Examples may be 'Booking recommended' or 'New for 2023'
Type : Boolean - Optional
ONSITE ONLY - If this is set to true then this item not be shown on the map
Type : String - Optional
ONSITE ONLY - This is an optional small string which is rendered in the round map pin on the park map section. Examples may 2 character labels eg 'SB' for Sports Bar
Type : Floating Point Numeric - Optional
Location latitude of place - used on the park map for onsite places, and to externally load maps app for offsite
Type : Floating Point Numeric - Optional
Location longitude of place - used on the park map for onsite places, and to externally load maps app for offsite
Type : Integer - Optional
Location map zoom of place - used on the park map for onsite places, and to externally load maps app for offsite
Type : Rich Text / Multiline String - Optional
Some textual directions hints to render on the detail view. Examples for an onsite place could be to say best ways to access it from different accommodation areas. For an offsite place it may give a hint to parking choices or may have an entrance which is easy to miss when driving
Type : Boolean - Optional
If set to true, the details record will show the dog friendly icon and heading
Type : Rich Text / Multiline String - Optional
If this is not empty then the 'Accessibility Information' heading will show with this text underneath on the place detail view
Type : Boolean - Optional
ONSITE ONLY - If this is set to true, the detail view will at a call to action button which then navigate you to the what's on area, but filtering to this events at this place record
Type : String - Optional
ONSITE ONLY - You can use this to override the title of the above call to action button if required. The default is "Visit What's On"
Type : String - Optional
OFFSITE ONLY - Contact phone number - This can include spaces as if a call us request is triggered this will have spaces removed from it
Type : Place Alert Box - Optional
Optional alert box to display on the detail page, and title on the list items
Type : String - Optional
If menu/document attachments are used then this optional string can be used to change the heading. Default if not set is "View some of our menus"
Type : Opening Times - Optional
Opening times definitions. If this node doesn't exist, then the default opening time type will be 'na'.
Type : Array of Distance from park - Optional
OFFSITE ONLY - List of distances from park and estimated driving times. Can include either, or both numbers in each definition. If single site install, this should still be an array with the site key 'default'
Type : Array of String - Optional
Only required for multi site installs - can be disregarded for single park systems. This should be a list of valid groupsite keys which this offer should be available for. If this array is missing or empty then the offer will not render for any user.
Type : Array of Integer - Required
List of category IDs to associate with this offer. All offers will render in the 'All' tab, but this array can set which other category tabs the offer also appears in.
As we connect to different systems using a range of different languages, we can interpret several things as a true. Generally speaking holidaymaker will use a standard true/false JSON boolean, however we also read a lower case string and checked if they are "1", "true", "yes", or "on" to then create the positive boolean. Unless explicitly noted, all booleans are defaulted as false if the node doesn't exist.
{
"optionOne": true,
"optionTwo": false,
"allTheseAreValidTrues" : [
1, "1", true, "true", "on", "yes"
]
}A string value which should be a valid 24bit hexadecimal string. For example "#FF0000" for red. This is parsed by the app surfaces and defaults to a brand color if invalid.
{
"color": "#FF00FF"
}A single definition to define how far an entity is from your chosen park in miles and what the estimated car travel time is in minutes. Single site installs still require the site node and should say 'default' - multi park installs should use the groupsite key for this specific distance/travel time.
{
"site": "park-one",
"distance": 2.09,
"time": 6
}Type : String - Required
For single park installs this should be 'default' else it should be the groupsite key this data relates to
Type : Floating Point Numeric - Optional
This is distance from the park in miles. App will truncate floating points to two when rendering. If both points are zero the app will render it as an integer. The app will also prefix with mile or miles. eg "3.25 miles", "1 mile", or "22 miles". Default is 0.0
Type : Integer - Optional
Estimated driving travel time to this location in minutes. This should be an integer as minutes but will be rendered as hrs/mins eg 126 = "2 hrs 6 mins", 58 = "58 mins", 61 = "1 hr 1 min". Default is 0
Float and Double values are handled as normal JSON. Depending on the precision of the language sending/receiving the data can depend on the truncation of the decimal points. However due to the context of our data, only location lat/lng numbers will normally have more than 2-3 points.
{
"cost": 55.5,
"lat": 50.71245750791539,
"lng": -2.4619866156242995
}Our app surfaces talk to an image engine on our infrastructure to process and resize images for different smart phone screen densities. Because of this the size of images are less relevant as they are delivered at optimum sizes anyway. However due to processing power and speed we do recommend that image urls are all 3000 pixels or below. The app surfaces will never need an image this large, so it gives you the option of still having a large quality image, but can be loaded in the apps and our infrastructure efficiently. We support both png, jpeg, and webp images. You can optionally include a '?v=' version integer so this can be used for versioning. If you do include this you can ensure images are reprocessed if the source image is changed on your servers.
{
"imgUrl": "https://your-wordpress-site.com/wp-content/uploads/2023/08/a-large-image-3000x2100.jpg?v=1691481892",
"image": "https://your-wordpress-site.com/wp-content/uploads/2023/08/a-smaller-image.png"
}Standard JSON Integer - 0 is commonly considered to be a default value, unless it is an valid ID when -1 is used. For sort priorities 99 is used as the default.
{
"key1": 9,
"key2": 42,
"arrayOfInts": [
2,
3,
5,
8
]
}This is a legacy type which works the same as the 'link' object, however for legacy reasons has different node names.
{
"name": "Owner's on park agreement",
"file": "https://your-wordpress-install.com/wp-content/uploads/2023/02/owners.pdf"
}Type : String - Required
Name of file which should be used on the CTA button when rendering on a detail page
Type : Url String - Required
External url that the CTA button should try to externally open
This is a single item for opening times if they are set to the 'timescopy' opening times type. Each one renders the heading in bold with the times in standard text. If a note is included it renders under that specific item in smaller text.
{
"heading": "Fri - Sun",
"times": "10.00 - 23.00",
"note": "Last orders is 22:00"
}Type : String - Required
Bold heading of opening time row - eg 'Monday - Friday'
Type : String - Required
Standard text of opening time row eg '12noon - 5pm'
Type : Rich Text / Multiline String - Optional
Optional addition text to add after title/times
This is the full object for opening times. It may include just an opening times type, but may also include a selection of opening times text items to render.
{
"openType": "timescopy",
"textItems": [
{
"heading": "Mon - Thurs",
"times": "12.00 – 22.00"
},
{
"heading": "Fri - Sun",
"times": "10.00 - 23.00",
"note": "Last orders is 22:00"
}
]
}Type : Opening Times Type - Required
Type of opening times to render. Defaults to 'na'
Type : Array of Opening Time Text Item - Optional
If the open type is set to 'timescopy' this is a list of the text items to render. Each one includes a heading and times, with optional notes
Type : Rich Text / Multiline String - Optional
Extra notes which is added after all of the times items are rendered, or it open type is set to always open
This is string definition to set how a menu item will behave. The options available are :
• "na" - Do not show opening times at all (default)
• "always" - Show opening times heading with 'Always Open' as a single item
• "timescopy" - Define specific opening times items
{
"openType": "na"
}A place alert box can create a callout highlight to both the place list items and the detail view. On the list item it will render an icon and heading in the style colors. If the list item heading is clicked it will trigger the intent if one has been set. On the detail view it will render as a card including title, icon and copy. If an intent is set a CTA button is added, and the highlight text option can give you a way of adding a large colour text view in the middle of this to highlight a promo code or similar.
{
"style": "custom",
"icon": "https://your-wordpress-install.com/wp-content/uploads/2021/08/red-tickets.png",
"color": "#dd3333",
"title": "Buy your event tickets in advance",
"copy": "Discounted tickets available from Reception.",
"highlightText": "Use code: APP10OFF",
"linkIntent": "offer"
"linkTitle": "Offer Details",
"linkUrl": "",
"linkID": 123
}Type : Place Alert Style - Optional
Style of box. Defaults as 'standard'
Type : Image Url String - Optional
Custom icon used beside title of the alert box if style is set to 'custom' - ignored by all other styles. This should be a small transparent png - 100-75px recommended
Type : Color String - Optional
Custom color used by the border and title of the alert box if style is set to 'custom' - ignored by all other styles
Type : String - Optional
Title is rendered either at the top of the alert box, or on the place list card in the style's defined color
Type : Rich Text / Multiline String - Optional
Main copy rendered on alert box on detail view
Type : String - Optional
This can be used for a promo code, or another small piece of text which is highlighted in large text with the styles color as the background
Type : Place Alert Intent - Optional
An optional internal app intent for the CTA button
Type : Url String - Optional
Optional url to add a CTA button for an external link (if present is used rather than the intent)
Type : String - Optional
If an intent or url is used, then this can be set for the text on the CTA button
Type : Integer - Optional
If intent is set to 'offer' or 'qikserve' then this is the id of the entity to navigate to, or to use
This is string definition to set a home alert's behaviour when the optional link is clicked. The options available are :
• "none" - No button (default)
• "whatson" - Navigate to What's On section
• "whatsonfilter" - Navigate to What's On section filtering to this specific place record
• "faqs" - Navigate to FAQs / Holiday Information section
• "map" - Navigate to Park Map - selecting this place record
• "offers" - Navigate to offers section
• "offer" - Navigate to offers section and view a specific offer record
• "qikserve" - Load chosen QikServe link within the app
{
"linkIntent": "offer",
"linkID": 134,
}This is string definition to style a home alert. The options available are :
• "standard" - Info icon in branded color (default)
• "alert" - Warning/caution icon in red
• "takeaway" - Knife/Fork/Plate icon in green
• "custom" - Can set own icon/color
{
"style": "takeaway"
}Acts the same as the standard String type, however If text is assumed to include line breaks then we use a place holder of #BREAK#. These will then be replaced by the relevant line breaks depending on the language, and device that is rendering the text. This is commonly used in entity copy, and addresses. Rich text should not include HTML or other markup. There should always be a contextual consideration as well - for example if you copy includes a html anchor link to 'Read More' - then simply removing the markup will then leave the text 'Read More' which will be a redundant, none clickable piece of text within the app surfaces.
{
"textWithBullets": "This paragraph will now have two line breaks, and then a list of bullets#BREAK##BREAK#• Bullet 1#BREAK#• Bullet 2#BREAK#• Bullet 3",
"address": "Holidaymaker App Ltd#BREAK#Stowey House#BREAK#Bridport Road#BREAK#Dorchester#BREAK#DT12SB"
}Standard JSON String - Often will have certain characters escaped depending what system is writing the JSON packet, however our parser only requires to have double quotes (") escaped. UTF-8 encoding is our standard, but others may be accepted if required. If line breaks are required in the text then the Rich Text / Multiline String type is used instead.
{
"key1": "A string value",
"key2": "Another string with an some \"quotes\" that need escaping",
"arrayOfStrings": [
"Item one as a string",
"Item two as a string",
"Item three as a string",
]
}A Url is sent the same as a string. If our system knows this is a url it will check if it starts with http or https - Note that navigating from both iOS and Android should use https.
{
"bookingUrl" : "https://portal.managebooking.pmssystem"
}Added qikserve option
The "covid" style has been removed and future apps will default this to "alert"
Added 'gallery' property
Added offer and offers option
Added 'distances' property and structure
Added 'w3w' and 'w3wUrl' properties
Added 'linkToWhatsOnTitle' property