Login / Sign Up

Local Routes Packet

This packet of data includes all of the information needed for the routes section of the app. This includes a list of local routes, and the required categories. It also includes a small packet of routes specific strings used by all route records.

Routes do not have to be restricted to walking, however this will be a common usage of them by many holiday parks.

Routes are also filtered based on groupsite so if your app surfaces are part of a multi park install, then routes should be marked with which parks they should be available for.

Additional sorting/filter

The routes section of the app includes further ways for the user to sort and filter the list, which other sections do not allow at present.

The default sort is typically featured/priority – the same as other holidaymaker entities. However due to the nature of the routes, there is also the option to sort by numeric properties such as starting distance from park, length or route, time of route, and difficulty

Depending on the data available also depends on the other filters. The app surfaces create the filters on the fly for the following :

  • Difficulty
  • Activity
  • Terrain

This means that if these pieces of data are enforced tags throughout the routes then they can be filtered together. For example setting one route as the activity ‘Walking’ and one as ‘walking’ they will be treated as a different filter, so the data should, when possible, be as consistent as possible.

 

Structure

{
  "routes": [
    {
      //Route 1
    },
    {
      //Route 2
    }
  ],
  "categories": [
    {
      //Category 1
    },
    {
      //Category 2
    }
  ],
  "strings": {
    //Routes Strings Object
  },
  "lastChange": 1691585188
}

Properties

routes

Type : Array of Route - Required

This is a list of available routes

categories

Type : Array of Category - Required

List of available categories for the supplied data. These are used for the tabs on the routes pages, ordered by the sort priority, then alphabetically.

strings

Type : Route Strings - Required

Extra information required for the routes section in the app surfaces

lastChange

Type : Epoch Date/Time Integer - Optional

Last change in UTC/GMT - Optionally used so our system knows if it should trigger data invalidation to end users devices.

Required Type Definitions

Boolean - Reveal

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"
  ]
}

Category - Reveal

A category packet contains the ID to filter entities, and also the name to render. Typically they are sorted by their priority integer which defaults at 99 if not set. The lower this number the higher in the list. After priority they are alphabatised (case insensitive). An 'All' category is never required as the app surfaces create this. Holiday home sales categories also should include a banner image url, as they are also rendered as banners on the home sales section landing page.

{
  "id": 42,
  "name": "Caravans",
  "slug": "caravans",
  "priority": 5,
  "imgUrl": "https://link-to-homesales-caravans-banner.jpg?v=12345",
  "locales": [
    "cy" : "Name Translation"
  ]
}

id

Type : Integer - Required

Category ID used for filtering entities. This should be unique to the specific entity category, however does not need to be unique within scope of other entities and data.


name

Type : String - Required

Name of category which is rendered in various places in the app surfaces


slug

Type : String - Optional

Currently optional as unused by categories. Filtering uses IDs, but slug is stored to potentially be referenced by future


priority

Type : Integer - Optional

Defaults to 99 if not set. The lower the priority, the higher this category will be sorted before alphabetisation.


imgUrl

Type : Image Url String - Optional

Currently only used by holiday home sales categories. This image is used as the banner on the holiday homes sales section landing page.


locales

Type : Array of String - Optional

An array of localisable name translations for this category. This can include multiple translated names with the array should be keyed with the locale code which are supported by your holidaymaker install

Color String - Reveal

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"
}

Distance from park - Reveal

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
}

site

Type : String - Required

For single park installs this should be 'default' else it should be the groupsite key this data relates to


distance

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


time

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

Epoch Date/Time Integer - Reveal

When dealing with time, as well as dates, our data packets will typically use an epoch integer. Our date/times will normally be in UTC/GMT - unless it will be a renderable time to the end user, when it currently will use the 'Europe/London' timezone to take into account daylight savings time.

{
  "lastChange": 1691481892,
  "time": 1691398800,
  "endTime": 1691402400
}

Floating Point Numeric - Reveal

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
}

Image Url String - Reveal

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"
}

Integer - Reveal

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
  ] 
}

Link - Reveal

A title and url of a link button. These are often attached to other entities to provide external links or pdf downloads such as onsite food menus, or more information about special offers.

{
  "url": "https:/your-wordpress-website.co.uk/wp-content/uploads/2021/08/offer-voucher.pdf",
  "title": "Download voucher"
}

url

Type : String - Required

Url to external link or pdf/doc attachment


title

Type : String - Required

Text for call to action button

Rich Text / Multiline String - Reveal

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"
}

Route - Reveal

This is a single route listing. It includes all of the rich date to include in the record. most of the data is optional, and the app will render accordingly, taking into account any unavailable information.

{
  "id": 297,
  "title": "Maiden Castle",
  "description": "Maiden Castle in Dorset is one of the largest and most complex Iron Age hillforts in Europe - the size of 50 football pitches. Its huge multiple ramparts, mostly built in the 1st century BC, once protected hundreds of residents. When it was first built, the gleaming white chalk ramparts would have towered over the surrounding landscape.",
  "copy": "Maiden Castle in Dorset is one of the largest and most complex Iron Age hillforts in Europe - the size of 50 football pitches. Its huge multiple ramparts, mostly built in the 1st century BC, once protected hundreds of residents. When it was first built, the gleaming white chalk ramparts would have towered over the surrounding landscape.#BREAK##BREAK#Excavations here have revealed much about Maiden Castle’s history, such as a Neolithic enclosure from about 3500 BC and a Roman temple built in the 4th century AD. The archaeologists also found evidence of a late Iron Age cemetery, where many of those buried had suffered horrific injuries.#BREAK##BREAK#English Heritage does not permit drone flying from or over sites in our care, except by contractors or partners undertaking flights for a specific purpose, who satisfy stringent CAA criteria, have the correct insurances and permissions, and are operating under controlled conditions.",
  "priority": 99,
  "ctaUrl": "https://discoverdorchester.co.uk/whats-on/home-of-hillforts-henges-2023/",
  "ctaText": "Home of Hillforts Event 2023",
  "onHolidayOnly": false,
  "signedInOnly": false,
  "isOwnersOnly": false,
  "imgUrl": "https://your-wordpress-install.com/wp-content/uploads/2023/05/aerial.jpg?v=1685101115",
  "gallery": [
    "https://your-wordpress-install.com/wp-content/uploads/2023/05/ramparts.jpg?v=1685101352",
    "https://your-wordpress-install.com/wp-content/uploads/2023/05/maiden-remains.jpg?v=1685101348"
  ],
  "activity": "Walking",
  "activityIcon": "walking",
  "activityCustomIconLight": "https://your-wordpress-install.com/wp-content/uploads/2023/05/windsurfing-icon-light.png?v=1685101115",
  "activityCustomIconDark": "https://your-wordpress-install.com/wp-content/uploads/2023/05/windsurfing-icon-dark.png?v=1685101115",
  "terrain": "Hills",
  "terrainIcon": "hills",
  "terrainCustomIconLight": "https://your-wordpress-install.com/wp-content/uploads/2023/05/fleet-icon-light.png?v=1685101115",
  "terrainCustomIconDark": "https://your-wordpress-install.com/wp-content/uploads/2023/05/fleet-icon-dark.png?v=1685101115",
  "difficulty": "Easy",
  "dots": 1,
  "color": "#81d742",
  "accNotes": "The ramparts are uneven and not suitable for wheelchairs.",
  "parkingNotes": "There is a small car park at the fort which can become busy at peak times. ",
  "safetyNotes": "The footpaths at Maiden Castle have been created over time by people walking them, in some areas the chalk has been exposed to create an uneven slippery surface, care should be taken and sturdy footwear is recommended when visiting Maiden Castle.#BREAK##BREAK#The site is very exposed, with no shelter.",
  "dogNotes": "Dogs are welcome, but please keep them on a lead as sheep graze the site.",
  "length": 1.5,
  "ascent": 420,
  "descent" : 400,
  "time": 60,
  "address": "Maiden Castle Road,#BREAK#Dorchester,#BREAK#Dorset,#BREAK#DT2 9PP",
  "locationLat": "50.699121572241",
  "locationLng": "-2.4708831310272",
  "w3w": "vibrating.acclaim.waltz",
  "w3wUrl": "https://w3w.co/vibrating.acclaim.waltz",
  "youtube": "wZNzZ7ImuOw",
  "distances": [
    {
      "site": "park-one",
      "distance": 13.16,
      "time": 27
    },
    {
      "site": "park-two",
      "distance": 3.43,
      "time": 9
    }
  ],
  "linksHeading": "Useful information",
  "links": [
    {
      "url": "https://your-wordpress-install.com/wp-content/uploads/2021/08/pdf-map.pdf",
      "title": "Download PDF Map",
      "type": "download"
    },
    {
      "url": "https://www.english-heritage.org.uk/visit/places/maiden-castle/",
      "title": "English Heritage Information"
    }
  ],
  "tags": [
    "Great Views",
    "Historic Dorset"
  ],
  "sites": [
    "park-one",
    "park-two"
  ],
  "categories": [
    60
  ]
}

id

Type : Integer - Required

ID for this event. This needs to be unique to others routes in the list, however does not need to be unique to other entities. This ID should also not change between data requests/packets.


title

Type : String - Required

Route title


description

Type : Rich Text / Multiline String - Optional

List description. This is rendered as a small amount of text on the event cards within the app surfaces.


copy

Type : Rich Text / Multiline String - Optional

Larger amount of text for the detail section of the app surfaces route section.


priority

Type : Integer - Optional

Defaults to 99 - the lower the priority the higher on the event lists views it will be before alphabetisation.


ctaUrl

Type : Url String - Optional

At the top of the route detail under the main details you have the option to show a CTA button before the rest of the record. Set this url for the button to navigate externally.


ctaText

Type : String - Optional

At the top of the route detail under the main details you have the option to show a CTA button before the rest of the record. Set this text for the button.


onHolidayOnly

Type : Boolean - Optional

If set to true this route will only be visible to users who have logged in with a valid holiday booking, AND is between their arrival and departure date (inclusive) - Note that the holidaymaker CMS would normally only allow one of these three options to be set to true.


signedInOnly

Type : Boolean - Optional

If set to true this route will only be visible to users who have logged in with a valid holiday booking - Note that the holidaymaker CMS would normally only allow one of these three options to be set to true.


isOwnersOnly

Type : Boolean - Optional

If set to true this route will only be visible to users who have logged in as a home owner - Note that the holidaymaker CMS would normally only allow one of these three options to be set to true.


imgUrl

Type : Image Url String - Optional

Landscape hero image used on the route list views and detail view


gallery

Type : Array of Image Url String - Optional

A list of image urls to render as a swipable gallery in the route detail. These are a landscape hero style ratio.


activity

Type : String - Optional

Name of activity - These are collated in the app when rendering the routes section to create filters - so this string could/should be common among other routes


activityIcon

Type : Route Activity Icon - Optional

Key for activity icon to use, or 'custom' to set own icons


activityCustomIconLight

Type : Image Url String - Optional

Custom icon used on dark backgrounds (light foreground) if activity icon is set to 'custom' - ignored by all other activity icon choices. This should be a small transparent png - 100-75px recommended


activityCustomIconDark

Type : Image Url String - Optional

Custom icon used on light backgrounds (dark foreground) if activity icon is set to 'custom' - ignored by all other activity icon choices. This should be a small transparent png - 100-75px recommended


terrain

Type : String - Optional

Name of terrain - These are collated in the app when rendering the routes section to create filters - so this string could/should be common among other routes


terrainIcon

Type : Route Terrain Icon - Optional

Key for terrain icon to use, or 'custom' to set own icons


terrainCustomIconLight

Type : Image Url String - Optional

Custom icon used on dark backgrounds (light foreground) if terrain icon is set to 'custom' - ignored by all other terrain icon choices. This should be a small transparent png - 100-75px recommended


terrainCustomIconDark

Type : Image Url String - Optional

Custom icon used on light backgrounds (dark foreground) if terrain icon is set to 'custom' - ignored by all other terrain icon choices. This should be a small transparent png - 100-75px recommended


difficulty

Type : String - Optional

Name of difficulty - These are collated in the app when rendering the routes section to create filters - so this string could/should be common among other routes


dots

Type : Integer - Optional

This is the difficulty level of the route in comparison to the maxDots number in the route strings object. For example you could have a maxDots of 4 and then have Casual (1), Moderate (2), Tricky (3) and they would all render as a bar at 1/4, 2/4, and 3/4.


color

Type : Color String - Optional

This is the color of the difficulty bar to render. Eg using the above 1/2/3 difficulty dots examples you could send RGB colors for a green/orange/red


accNotes

Type : Rich Text / Multiline String - Optional

You can add some multiline text to add additional accessibility notes to this route. These will be added to the route detail under the heading 'Accessibility'


parkingNotes

Type : Rich Text / Multiline String - Optional

You can add some multiline text to add additional notes about parking at this route. These will be added to the route detail under the heading 'Parking Information'


safetyNotes

Type : Rich Text / Multiline String - Optional

You can add some multiline text to add additional notes in regards to safety warnings or concerns during this route. These will be added to the route detail under the heading 'Safety Information'


dogNotes

Type : Rich Text / Multiline String - Optional

You can add some multiline text to add additional notes in regards to how dog friendly a route is, or any concerns in regards to dogs during this route. These will be added to the route detail under the heading 'Notes For Dog Owners'


length

Type : Floating Point Numeric - Optional

Length of the route 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


ascent

Type : Integer - Optional

Expected ascent height in feet. If this is a circular walk with the same, or similar ascent and descent, then you can just supply the ascent integer and the app will use a 'ascent/descent' icon with this number instead of two separate icons/numbers. Will be prefixed with ' feet' eg '420 feet'


descent

Type : Integer - Optional

Expected descent height in feet if different then the ascent height. If this is a circular walk with the same, or similar ascent and descent, then yodo not supply this property, instead just send the ascent property above. Will be prefixed with ' feet' eg '420 feet'


time

Type : Integer - Optional

Estimated route duration. 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.


youtube

Type : String - Optional

This should be the code to a youtube video tour or route introduction (not the whole url)


address

Type : Rich Text / Multiline String - Optional

Starting point address and postcode


locationLat

Type : Floating Point Numeric - Optional

Location latitude of starting point - used to externally load maps app


locationLng

Type : Floating Point Numeric - Optional

Location longitude of starting point - used to externally load maps app


w3w

Type : String - Optional

What3Words address of starting point


w3wUrl

Type : Url String - Optional

Full What3Words url to navigate to starting point


distances

Type : Array of Distance from park - Optional

List of starting point 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'


linksHeading

Type : String - Optional

This can optionally be set to override the heading above the additional links. If not set, and links are provided the default heading will be 'More information'


links

Type : Array of Link - Optional

An optional list of additional links or attachments. Examples on an route may be detailed maps, or kids activity ideas. Could also be links to official bodies such as the national trust or english heritage.


tags

Type : Array of String - Optional

These are additional tag names that render on both the route list items, and route detail. Examples are tags that would not warrant a seperate category but are worth noting eg 'All Weathers', 'Jurassic Coast', 'Family Fun'


sites

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 route should be available for. If this array is missing or empty then the offer will not render for any user.


categories

Type : Array of Integer - Optional

List of category IDs to associate with this route. All routes will render in the 'All' tab, but this array can set which other category tabs the offer also appears in.

Route Activity Icon - Reveal

This is string definition to set a route's activity icon for a set embedded in the app, or to tell the app surface to look for custom icons. These are the base set of icons, which can be bespoke image files client by client in the app. There is also the ability to send another option that below, if the corresponding bespoke image is included in that clients app. The standard options available are :
• "walking"
• "running"
• "cycling"
• "horseriding"
• "driving"
• "motorcycle"
• "kayak"
• "paddleboard"
• "swimming"
• "hunt" - Treasure hunt
• "nature" - Nature trail
• "custom" - This will tell the app to instead look for custom light and dark icon urls

{
  "activityIcon": "horseriding"
}

Route Strings - Reveal

This is an object that adds additional strings to the routes packet. These are used to customise the routes section, and can be accessed by all routes

{
  "routesMaxDots": 4
}

routesMaxDots

Type : Integer - Required

This is the maximum difficulty dots - This is used when rendering the difficulty levels. The max level is not calculated from the available routes so you could have higher difficulty defined ready to use in future, or weight the difficulty levels for rendering reasons - eg have routes with levels up to 1,2 and 3, but set your max to 4 so the difficulty 3 routes will render with a 75% difficulty bar instead of being full.

Route Terrain Icon - Reveal

This is string definition to set a route's terrain icon for a set embedded in the app, or to tell the app surface to look for custom icons. These are the base set of icons, which can be bespoke image files client by client in the app. There is also the ability to send another option that below, if the corresponding bespoke image is included in that clients app. The standard options available are :
• "onparktent"
• "onparkcaravan"
• "mixed"
• "road"
• "forest"
• "hills"
• "cliffs"
• "beach"
• "sea"
• "river"
• "lake"
• "custom" - This will tell the app to instead look for custom light and dark icon urls

{
  "terrainIcon": "lake"
}

String - Reveal

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",
  ] 
}

Url String - Reveal

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"
}

Full Packet Example

{
  "routes": [
    {
      "id": 297,
      "title": "Maiden Castle",
      "description": "Maiden Castle in Dorset is one of the largest and most complex Iron Age hillforts in Europe - the size of 50 football pitches. Its huge multiple ramparts, mostly built in the 1st century BC, once protected hundreds of residents. When it was first built, the gleaming white chalk ramparts would have towered over the surrounding landscape.",
      "copy": "Maiden Castle in Dorset is one of the largest and most complex Iron Age hillforts in Europe - the size of 50 football pitches. Its huge multiple ramparts, mostly built in the 1st century BC, once protected hundreds of residents. When it was first built, the gleaming white chalk ramparts would have towered over the surrounding landscape.#BREAK##BREAK#Excavations here have revealed much about Maiden Castle’s history, such as a Neolithic enclosure from about 3500 BC and a Roman temple built in the 4th century AD. The archaeologists also found evidence of a late Iron Age cemetery, where many of those buried had suffered horrific injuries.#BREAK##BREAK#English Heritage does not permit drone flying from or over sites in our care, except by contractors or partners undertaking flights for a specific purpose, who satisfy stringent CAA criteria, have the correct insurances and permissions, and are operating under controlled conditions.",
      "ctaUrl": "https://discoverdorchester.co.uk/whats-on/home-of-hillforts-henges-2023/",
      "ctaText": "Home of Hillforts Event 2023",
      "imgUrl": "https://your-wordpress-install.com/wp-content/uploads/2023/05/aerial.jpg?v=1685101115",
      "gallery": [
        "https://your-wordpress-install.com/wp-content/uploads/2023/05/ramparts.jpg?v=1685101352",
        "https://your-wordpress-install.com/wp-content/uploads/2023/05/maiden-remains.jpg?v=1685101348"
      ],
      "activity": "Walking",
      "activityIcon": "walking",
      "terrain": "Hills",
      "terrainIcon": "hills",
      "difficulty": "Moderate",
      "dots": 2,
      "color": "#4169E1",
      "accNotes": "The ramparts are uneven and not suitable for wheelchairs.",
      "parkingNotes": "There is a small car park at the fort which can become busy at peak times. ",
      "safetyNotes": "The footpaths at Maiden Castle have been created over time by people walking them, in some areas the chalk has been exposed to create an uneven slippery surface, care should be taken and sturdy footwear is recommended when visiting Maiden Castle.#BREAK##BREAK#The site is very exposed, with no shelter.",
      "dogNotes": "Dogs are welcome, but please keep them on a lead as sheep graze the site.",
      "length": 1.5,
      "ascent": 420,
      "descent" : 400,
      "time": 60,
      "youtube": "wZNzZ7ImuOw",
      "address": "Maiden Castle Road,#BREAK#Dorchester,#BREAK#Dorset,#BREAK#DT2 9PP",
      "locationLat": 50.699121572241,
      "locationLng": -2.4708831310272,
      "w3w": "vibrating.acclaim.waltz",
      "w3wUrl": "https://w3w.co/vibrating.acclaim.waltz",
      "distances": [
        {
          "site": "park-one",
          "distance": 13.16,
          "time": 27
        },
        {
          "site": "park-two",
          "distance": 3.43,
          "time": 9
        }
      ],
      "linksHeading": "Useful information",
      "links": [
        {
          "url": "https://your-wordpress-install.com/wp-content/uploads/2021/08/pdf-map.pdf",
          "title": "Download PDF Map",
          "type": "download"
        },
        {
          "url": "https://www.english-heritage.org.uk/visit/places/maiden-castle/",
          "title": "English Heritage Information"
        }
      ],
      "tags": [
        "Great Views",
        "Historic Dorset"
      ],
      "sites": [
        "park-one",
        "park-two"
      ],
      "categories": [
        60
      ]
    },
    {
      "id": 298,
      "title": "Windsurfing in the fleet",
      "description": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh viverra non semper suscipit posuere a pede.",
      "copy": "Donec nec justo eget felis facilisis fermentum. Aliquam porttitor mauris sit amet orci. Aenean dignissim pellentesque felis.#BREAK##BREAK#Morbi in sem quis dui placerat ornare. Pellentesque odio nisi euismod in pharetra a ultricies in diam. Sed arcu. Cras consequat.",
      "priority": 10,
      "imgUrl": "https://your-wordpress-install.com/wp-content/uploads/2023/05/windsurfing.jpg?v=1685101115",
      "activity": "Wind-Surfing",
      "activityIcon": "custom",
      "activityCustomIconLight": "https://your-wordpress-install.com/wp-content/uploads/2023/05/windsurfing-icon-light.png?v=1685101115",
      "activityCustomIconDark": "https://your-wordpress-install.com/wp-content/uploads/2023/05/windsurfing-icon-dark.png?v=1685101115",
      "terrain": "The Fleet",
      "terrainIcon": "custom",
      "terrainCustomIconLight": "https://your-wordpress-install.com/wp-content/uploads/2023/05/fleet-icon-light.png?v=1685101115",
      "terrainCustomIconDark": "https://your-wordpress-install.com/wp-content/uploads/2023/05/fleet-icon-dark.png?v=1685101115",
      "difficulty": "Enthusiast",
      "dots": 3,
      "color": "#8B0000",
      "parkingNotes": "Pay and display carpark is available at the fleet which accepts cash, card, and the JustPay App",
      "safetyNotes": "Although the fleet is a calm shallow area of water, the greatest caution and safety should be considered whenparticipating in a watersport.",
      "time": 120,
      "locationLat": 50.699121572241,
      "locationLng": -2.4708831310272,
      "w3w": "vibrating.acclaim.waltz",
      "w3wUrl": "https://w3w.co/vibrating.acclaim.waltz",
      "distances": [
        {
          "site": "park-one",
          "distance": 13.16,
          "time": 27
        }
      ],
      "sites": [
        "park-one"
      ],
      "categories": [
        61
      ]
    },
    {
      "id": 299,
      "title": "Park Treasure Hunt",
      "description": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh viverra non semper suscipit posuere a pede.",
      "copy": "Donec nec justo eget felis facilisis fermentum. Aliquam porttitor mauris sit amet orci. Aenean dignissim pellentesque felis.#BREAK##BREAK#Morbi in sem quis dui placerat ornare. Pellentesque odio nisi euismod in pharetra a ultricies in diam. Sed arcu. Cras consequat.",
      "imgUrl": "https://your-wordpress-install.com/wp-content/uploads/2023/05/treasurehunt.jpg?v=1685101115",
      "gallery": [
        "https://your-wordpress-install.com/wp-content/uploads/2023/05/hunt-clue1.jpg?v=1685101352",
        "https://your-wordpress-install.com/wp-content/uploads/2023/05/hunt-clue2.jpg?v=1685101348",
        "https://your-wordpress-install.com/wp-content/uploads/2023/05/hunt-clue3.jpg?v=1685101348",
        "https://your-wordpress-install.com/wp-content/uploads/2023/05/hunt-clue4.jpg?v=1685101348"
      ],
      "activity": "Walking",
      "activityIcon": "walking",
      "terrain": "On Park",
      "terrainIcon": "onparktent",
      "difficulty": "Casual",
      "dots": 1,
      "color": "#4169E1",
      "length": 0.5,
      "time": 45,
      "linksHeading": "Useful information",
      "links": [
        {
          "url": "https://your-wordpress-install.com/wp-content/uploads/2021/08/pdf-map.pdf",
          "title": "Download PDF Map and Clues"
        }
      ],
      "tags": [
        "Family Friendly"
      ],
      "sites": [
        "park-one",
        "park-two"
      ],
      "categories": [
        62
      ]
    }
  ],
  "categories": [
    {
      "id": 60,
      "slug": "local-area",
      "name": "Local Area",
      "priority": 1
    },
    {
      "id": 62,
      "slug": "onpar-adventures",
      "name": "On Park Adventures"
    },
    {
      "id": 61,
      "slug": "watersports",
      "name": "Watersports"
    }
  ],
  "strings": {
    "routesMaxDots": 4
  },
  "lastChange": 1691585188
}

Data Changes

10/04/2025 - Category

Added 'locales' property for translational holidaymaker installs

01/09/2022 - Category

Added 'imgUrl' property for home sales categories