API - Data Sync
Introduction
The Data Sync API act as a synchronisation between your data source and our CMS. This is useful if you already have your data in a system and you are able to export it as data feeds.
Prerequisites
The data must be exposed in data feeds accessible on the web.
The feed must follow the structure defined in this documentation
The data must follow the formats and requisites described in this documentation
If you are unable to achieve all these requirements, we may be able to provide a service that will convert your existing data feeds to match the format we require. Contact us for more info.
Authentication
The CMS will add the authenticationToken
parameter with a value that your implementation manager can provide. If you want to protect your data, your server will have to validate that token. This is optional.
Example: https://website.com/datafeed/tags.json?authenticationToken=410fcbaeb33448dda131158705ea8ccb
Data models
Model | Info |
---|---|
stage | A location where an activity takes place |
location | A general location |
activity | Can represent a show, a conference, an event |
scheduleItem | Is linked to an activity. It associates the activity to one or both of these:
|
timeSlot | The date and time information of a scheduleItem |
performer | Can represent a speaker, as guest, an artist Is usually used to identify multiple performers of a same event (schedule item) |
tagCategory | You can create tag categories for activity, stage and scheduleItem |
tag | A tag is linked to a tagCategory and you can assign a tag to one or more objects. Tags can be used to filter content in the app. |
widgetCollection | A collection of widgets that can be linked to an object |
widget | Widgets are used to add extra content to an object |
Examples of how you can use the data model
Data feed
Data must be split into five different data feeds. They are all optional, you may use only the feeds that you need.
feed | Info |
---|---|
tags | Data for tagCategories and tags |
stages | Data for all the stages |
activities | Data for all the activities along with their optional scheduleItems and timeSlots |
performers | Data for all the performers |
locations | Data for all the locations |
Data format
Feeds must be valid JSON. They need to be served by a secure web server (https) that is using a valid certificate. The web server must return an HTTP status of 200.
Each JSON feed must be an object with a required attribute that represents the feed objects like stages
or activities
, and an optional errors
attribute that contains a list of any errors that occurred while preparing the data. The value for that attribute is a list of objects.
Example for activities:
{
"activities": [
{
"id": "activity1",
"name": "First Activity"
},
{
"id": "activity2",
"name": "Second Activity"
}
],
"errors": [
"Server returned 404 error",
]
}
Data attributes
Tag Category
Attribute | Type | Required | Info |
---|---|---|---|
id | string (256 characters max) |
| Must be unique across all tag categories IDs must maintain consistency (i.e. a given Tag Category must keep the same ID across each data sync). Not maintaining IDs between syncs can cause issues with pins on a map. |
name | string | The name of the tag category Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info | |
object_types | array of string | Defines the types of objects that can use that tag category. Choices are: | |
tags | array |
| A list of tag objects to create for this category |
Tag
Attribute | Type | Required | Info |
---|---|---|---|
id | string (256 characters max) |
| Must be unique across all tags IDs must maintain consistency (i.e. a given Tag must keep the same ID across each data sync). Not maintaining IDs between syncs can cause issues with pins on a map. |
name | string | The name of the tag Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info |
Stage
Attribute | Type | Required | Info |
---|---|---|---|
id | string (256 characters max) |
| Must be unique across all stages IDs must maintain consistency (i.e. a given Stage must keep the same ID across each data sync). Not maintaining IDs between syncs can cause issues with pins on a map. |
name | string | The name of the stage Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info | |
subtitle | string |
| An optional subtitle for the stage Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info |
description | text |
| An optional description for the stage Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info Description supports basic HTML tags like |
address | string |
| An optional address for the stage Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info |
coordinates | object |
| An optional Coordinates object |
photo | object |
| An optional Photo object |
order | integer |
| An optional order that is used to sort the stages in the app. A stage with |
tags | array |
| A list of tag IDs use for this object |
Location
Attribute | Type | Required | Info |
---|---|---|---|
id | string (256 characters max) |
| Must be unique across all locations |
name | string | The name of the location Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info | |
subtitle | string |
| An optional subtitle for the stage Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info |
description | text |
| An optional description for the stage Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info Description supports basic HTML tags like |
address | string |
| An optional address for the stage Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info |
coordinates | object |
| An optional Coordinates object |
photo | object |
| An optional Photo object |
order | integer |
| An optional order that is used to sort the locations in the app. A location with |
tags | array |
| A list of tag IDs use for this object |
widget_collection | object |
| An optional Widget Collection object |
Coordinates
Attribute | Type | Required | Info |
---|---|---|---|
latitude | string or number (20 characters max) | If one is provided, the other is required | Latitude coordinate of the stage |
longitude | string or number (20 characters max) | Longitude coordinate of the stage |
Photo
Attribute | Type | Required | Info |
---|---|---|---|
url | string |
| Latitude coordinate of the stage |
fingerprint | string (64 characters max) | highly recommended | A string that the CMS will use to quickly determine if the file has changed since the last sync. Can be a date, a timestamp, a hash… The fingerprint needs to change when the photo is updated. Providing a fingerprint will greatly improve the speed of imports |
Activity
Attribute | Type | Required | Info |
---|---|---|---|
id | string (256 characters max) |
| Must be unique across all activities |
name | string | The name of the activity Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info | |
subtitle | string |
| An optional subtitle for the activity Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info |
description | text |
| An optional description for the activity Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info Description supports basic HTML tags like |
photo | object |
| An optional Photo object |
order | integer |
| An optional order that is used to sort the activities in the app. An activity with |
schedule_items | list |
| List of Schedule Items objects. |
tags | array |
| A list of tag IDs use for this object |
widget_collection | object |
| An optional Widget Collection object |
Schedule Item
Attribute | Type | Required | Info |
---|---|---|---|
id | string (256 characters max) |
| Must be unique across all schedule items |
stage_id | string (256 characters max) |
| Must be the ID of a stage that is present and valid in the stages feed. |
time_slot | object |
| An optional Time Slot object |
performers | array |
| A list of Schedule Item Performer objects |
tags | array |
| A list of tag IDs use for this object |
widget_collection | object |
| An optional Widget Collection object |
Schedule Item Performer
Attribute | Type | Required | Info |
---|---|---|---|
performer_id | string (256 characters max) | Must be the ID of a performer that is present and valid in the performers feed. | |
order | integer |
| An optional order that is used to sort the performers of the schedule item in the app. A performer with |
Time Slot
Attribute | Type | Required | Info |
---|---|---|---|
start_date | string of an ISO-8601 date (YYYY-MM-DD) | The start date of the schedule item | |
start_time | string of an ISO-8601 time (hh:mm) |
| The start time of the schedule item Time zone is assumed to be local to your event. (Can be changed in the CMS by your implementation manager) |
end_date | string of an ISO-8601 date (YYYY-MM-DD) |
| The end date of the schedule item. If omitted, the end date is assumed to be the same as the start date Must be the equal or after the |
end_time | string of an ISO-8601 time (hh:mm) |
| The end time of the schedule item Time zone is assumed to be local to your event. (Can be changed in the CMS by your implementation manager) The |
Performer
Attribute | Type | Required | Info |
---|---|---|---|
id | string (256 characters max) |
| Must be unique across all performers |
name | string | The name of the performer Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info | |
subtitle | string |
| An optional subtitle for the performer Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info |
description | text |
| An optional description for the performer Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info Description supports basic HTML tags like |
photo | object |
| An optional Photo object |
order | integer |
| An optional order that is used to sort the performers in the app. A performer with |
tags | array |
| A list of tag IDs use for this object |
widget_collection | object |
| An optional Widget Collection object |
Widget Collection
Attribute | Type | Required | Info |
---|---|---|---|
widgets | array | A list of Widget objects |
Widget
Attribute | Type | Required | Info |
---|---|---|---|
widget_type | string | Defines the type of widget. Available choices are | |
widget | object | Each widget types have their own attributes, see Button Widget, Link Collection Widget and Title Subtitle Widget for more info |
Button Widget
Attribute | Type | Required | Info |
---|---|---|---|
button_text | string | The text to display on the button Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info | |
url | string | The URL to open when the user taps on the button. Can be a web link or an internal link. Ask your implementation manager for available internal links. | |
icon | string |
| An icon to display on the button. Ask your implementation manager for a list of available choices |
Link Collection Widget
Attribute | Type | Required | Info |
---|---|---|---|
links | array | A list of Link objects |
Link
Attribute | Type | Required | Info |
---|---|---|---|
url | string | The URL to open when the user taps on the button. Can be a web link or an internal link. Ask your implementation manager for available internal links | |
label | string |
| An optional label to display for this link. If not set, a default label will be set based on the URL you entered |
icon | string |
| An optional icon to display for this link. Ask your implementation manager for a list of available choices. If not set, a default icon will be set based on the URL you entered. |
Title Subtitle Widget
Attribute | Type | Required | Info |
---|---|---|---|
title | string |
You need to provide at least a | The text to display as the title Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info |
subtitle | string | The text to display as the subtitle Use a string if your content is in a single language or if you want to use the same value for all the languages If you want to use different values for each language you can use an object. See Localization of text attributes for more info |
Localization of text attributes
If you want to use different value for each language you can use an object like this:
{
"eng": "An English name",
"fre": "Un nom en français"
}
When using multi-language, the value for the main language is required. Values for other languages are optional and will fallback on the main language if they are not provided. The main language is defined in the CMS by the implementation manager.
Supported language codes
ISO 639-2 three letter codes (ex.
eng
,fre
,ger
)ISO 639-1 two letter codes (ex.
en
,fr
,de
)
Examples
{
"tags": [
{
"id": "music",
"name": "Music Genre",
"object_types": ["activity"],
"tags": [
{
"id": "123",
"name": {
"eng": "Rock"
}
},
{
"id": "dance",
"name": {
"eng": "Dance"
}
}
]
},
{
"id": "access",
"name": "Access level",
"object_types": ["schedule_item"],
"tags": [
{
"id": "vip",
"name": "VIP"
}
]
}
]
}
CMS
Configuration
An implementation manager will setup the CMS for you. They will need the URLs of your feed(s) and optionally the authentication token you want to use.
When the setup is complete, you will have access to the Data Sync section from the left menu where you will be able to test and sync your data.
Sync flow
Test run
During a test run, the CMS will load the data feed and validate the content. A report will display the list of objects that are valid along with any validation errors that needs to be fixed.
Nothing is imported during a test run, the CMS data is not changed in any way.
Photos are not validated during a test run.
Sync
During a sync, the data is first validated. If there are any validation errors, the sync is stopped and the data is not changed.
Once every object is validated, they are imported. The import of photo is run after the objects are imported. If there are any issues with the import of photos, the sync will still complete and you will have access to the list of errors.
The data is synchronized to match the feed:
An activity with ID “123” will completely replace the activity with ID “123” that was created during a previous sync
If an activity with ID “345” was previously imported and is no longer present in your data feed, it will be deleted from the CMS
Change log
Date | Author | Notes |
---|---|---|
2022-02-04 | Yan Chouinard | Initial version |
2022-02-22 | Yan Chouinard | Added support for two letters language codes |
2022-05-11 | Yan Chouinard | Hide Performers until they are supported |
2022-05-19 | Yan Chouinard | Added Tags and Widgets |
2022-08-24 | Yan Chouinard | Added Locations |
2022-10-06 | Yan Chouinard | Update Tag’s object_types field |
2023-05-10 | Yan Chouinard | Added order for Activities and added more info for start_time and end_time |
2023-06-12 | Yan Chouinard | Added Performers and order on Location and Stage |
2023-09-05 | Mahmoud Ahmed | Added the |