JSON Endpoint Embedded References Schema
This page defines the schema when you choose the ‘Embed Referenced’ option. Please see this page for available schema.
As our product develops we will add new fields to the schema without notice.
Where possible we will not deprecate or remove existing fields, if this becomes required we will notify active users of the integration.
When using Embedded References the initial response to the GET will return a 302 with a temporary url for the entire document.
These are the typescript definitions for the document.
Note that ‘speakers’ are called ‘contributors’ in the document.
References are embedded one level deep, for example a session will contain all contributors but those contributors will not in turn include their sessions. To access all sessions for a contributor, access the contributor from the top level contributors object.
{
/**
* Contributors are the speakers for the event
*/
contributors: Contributor[];
/**
* Labels, aka tags, can be assigned to contributors, sessions, tracks, resources and locations
*/
labels: Label[];
/**
* Locations are where sessions take place
*/
locations: Location[];
/**
* Resources are things that sessions need. Locations can have resources assigned to them.
* Sessions are then required to be scheduled in a location with matching resources.
*/
resources: Resource[];
/**
* Roles model the relationship between contributors and sessions, eg Chair, Panel Member etc...
*/
roles: Role[];
/**
* Sessions are sessions....
**/
sessions: Session[];
/**
* A session can take place in one or many tracks.
*/
tracks: Track[];
}
Contributor (aka Speaker)
{
/**
* The UUID for the speaker
*/
id: string;
/**
* The speaker's title eg Mr, Mrs, Mx...
*/
honorific: string | null;
/**
* The speaker's first name
*/
firstName: string | null;
/**
* The speaker's last name
*/
lastName: string | null;
/**
* Any letters after the speaker's name, eg 'Esq', 'OBE' etc...
*/
postNominal: string | null;
/**
* The speaker's email. Note that some speakers may not have an email address, it is also not guaranteed to be unique.
*/
email: string | null;
/**
* The speaker's company
*/
company: string | null;
/**
* The speaker's job title at their company
*/
position: string | null;
/**
* The speaker's phone number
*/
phone: string | null;
/**
* The speakers country code, eg 'gb'
* The data is sourced from https://www.iso.org/obp/ui/#search/code/
* Our current dataset can be found here https://app.lineup.ninja/countries.json
*/
countryCode: string | null;
/**
* The speakers country name, eg 'United Kingdom'
* The data is sourced from https://www.iso.org/obp/ui/#search/code/
* Some names are tweaked to improve presentation eg 'United Kingdom', rather than 'United Kingdom of Great Britain and Northern Ireland (the)'
* Our current dataset can be found here https://app.lineup.ninja/countries.json
*/
countryName: string | null;
/**
* The URL for the speaker's X feed
*/
twitter: string | null;
/**
* The URL for the speaker's Facebook page
*/
facebook: string | null;
/**
* THe URL for the speaker's LinkedIn page
*/
linkedin: string | null;
/**
* The URL for the speaker's Instagram page
*/
instagram: string | null;
/**
* The URL for the speaker's Youtube channel
*/
youtube: string | null;
/**
* The URL for the speaker's GitHub Profile
*/
github: string | null;
/**
* The URL for the speaker's Website
*/
website: string | null;
/**
* The speakers bio formatted in Markdown
*/
bio: string | null;
/**
* The speakers bio formatted in HTML
*/
bio_HTML: string;
/**
* A URL to the speakers headshot, 128x128px
*/
headshotURL: string | null;
/**
* A URL for the speakers headshot at 256x256px
*/
headshot2xURL: string | null;
/**
* A URL for the speakers headshot at 512x512px
*/
headshot4xURL: string | null;
/**
* A URL for the speakers headshot at 1024x1024px
*/
headshot8xURL: string | null;
/**
* A URL to the speakers company logo, to fit within 128x128px
*/
logoURL: string | null;
/**
* A URL to the speakers company logo, to fit within 256x256px
*/
logo2xURL: string | null;
/**
* A URL to the speakers company logo, to fit within 512x512px
*/
logo4xURL: string | null;
/**
* A URL to the speakers company logo, to fit within 1024x1024px
*/
logo8xURL: string | null;
/**
* The speakers availability
*/
availability: Availability[];
/**
* The labels assigned to the speaker
*/
labels: Label[];
/**
* The sessions assigned to the speaker
*/
sessions: {
Session & {
/**
* The name of the role of the speaker. If any
*/
roleName: string : null;
}
}[];
/**
* Any notes for the speaker. These are generally intended to be kept private.
*/
notes: string | null;
/**
* When the speaker was last modified in UTC.
* eg 2022-02-04T18:03:03.662Z
*/
lastModified: Date;
/**
* Any Data Sources referenced for this speaker
*/
references?: SourceReferences | undefined;
/**
* Any data for Custom Fields for this speaker
*/
customFieldData: CustomFieldData[];
/**
* Files attached to the speaker
*
* Note that files are not included by default. You can configure this per publication as required.
*
* For headshot and logo it is probably easier to use the headshot and logo properties above
*/
files: File[];
/**
* If the speaker was created from a submission this will include the details for the submission
* If a speaker was submitted to multiple submissions then there will be multiple origins
*
* This data exists for contributors created/updated after 16 June 2023
*/
origins: ContentOrigin[]
}
Labels
{
/**
* The UUID for the label
*/
id: string;
/**
* The name of the label
*/
name: string;
/**
* A description of the label formatted in Markdown
*/
description: string | null;
/**
* A description of the label formatted in HTML
*/
description_HTML: string;
/**
* The UUIDs of contributors (speakers) assigned to this label
*/
contributors: Contributor[];
/**
* The locations assigned to this label
*/
locations: Location[];
/**
* The resources assigned to this label
*/
resources: Resource[];
/**
* The sessions assigned to this label
*/
sessions: Session[];
/**
* The tracks assigned to this label
*/
tracks: Track[];
/**
* When the label was last modified in UTC
* eg 2022-02-04T18:03:03.662Z
*/
lastModified: Date;
/**
* Any Data Sources referenced for this label
*/
references?: SourceReferences | undefined;
/**
* Any data for Custom Fields for this label
*/
customFieldData: CustomFieldData[];
/**
* Files attached to the label
*
* Note that files are not included by default. You can configure this per publication as required.
*/
files: File[];
}
Locations
{
/**
* The UUID for the location
*/
id: string;
/**
* The name of the location
*/
name: string;
/**
* A description of the location formatted in Markdown
*/
description: string | null;
/**
* A description of the location formatted in HTML
*/
description_HTML: string;
/**
* The availability of the location
*/
availability: Availability[];
/**
* The labels assigned to this location
*/
labels: Label[];
/**
* The resources assigned to this location
*/
resources: Resource[];
/**
* The sessions taking place in this location
*/
sessions: Session[];
/**
* The tracks taking place in this location
*/
tracks: Track[];
/**
* When the location was last modified in UTC
* eg 2022-02-04T18:03:03.662Z
*/
lastModified: Date;
/**
* Any Data Sources referenced for this location
*/
references?: SourceReferences | undefined;
/**
* Any data for Custom Fields for this location
*/
customFieldData: CustomFieldData[];
/**
* Files attached to the location
*
* Note that files are not included by default. You can configure this per publication as required.
*/
files: File[];
}
Resources
{
/**
* The UUID for the resource
*/
id: string;
/**
* The name of the resource
*/
name: string;
/**
* A description of the resource formatted in Markdown
*/
description: string | null;
/**
* A description of the resource formatted in HTML
*/
description_HTML: string;
/**
* The labels assigned to this resource
*/
labels: Label[];
/**
* The locations with this resource
*/
locations: Location[];
/**
* The sessions needing this resource
*/
sessions: Session[];
/**
* When the resource was last modified in UTC
* eg 2022-02-04T18:03:03.662Z
*/
lastModified: Date;
/**
* Any Data Sources referenced for this resource
*/
references?: SourceReferences | undefined;
/**
* Any data for Custom Fields for this resource
*/
customFieldData: CustomFieldData[];
/**
* Files attached to the resource
*
* Note that files are not included by default. You can configure this per publication as required.
*/
files: File[];
}
Roles
Roles model the relationship between contributors and sessions, eg Chair, Panel Member etc…
{
/**
* The UUID for the role
*/
id: string;
/**
* The name of the role
*/
name: string;
}
Sessions
{
/**
* The UUID for the session
*/
id: string;
/**
* The name of the session
*/
name: string;
/**
* A code for the session. This is created by the Event Manager, eg TECH101.
*/
code: string | null;
/**
* A description of the session formatted in Markdown
*/
description: string | null;
/**
* A description of the session formatted in HTML
*/
description_HTML: string;
/**
* If the session is scheduled, the start date of the session in UTC
* eg 2022-02-04T18:03:03.662Z
*/
startDate: Date | null;
/**
* If the session is scheduled, the end date of the session in UTC
* eg 2022-02-04T18:03:03.662Z
*/
endDate: Date | null;
/**
* The duration of the session in milliseconds
*/
duration: number | null;
/**
* If the session is scheduled, the location it is scheduled in
*/
location: Location | null;
/**
* Any notes for the location. These are generally intended to be kept private.
*/
notes: string | null;
/**
* The contributors (speakers) for this session
*/
contributors: {
Contributor & {
/**
* The name of the role of the speaker. If any
*/
roleName: string : null;
}
}[];
/**
* The labels assigned to this session
*/
labels: Label[];
/**
* The resources assigned to this session
*/
resources: Resource[];
/**
* The tracks assigned to this session
*/
tracks: Track[];
/**
* When the session was last modified in UTC
* eg 2022-02-04T18:03:03.662Z
*/
lastModified: Date;
/**
* Any Data Sources referenced for this session
*/
references?: SourceReferences | undefined;
/**
* Any data for Custom Fields for this session
*/
customFieldData: CustomFieldData[];
/**
* Files attached to the session
*
* Note that files are not included by default. You can configure this per publication as required.
*/
files: File[];
/**
* If the session was created from a submission this will include the details for the submission
* A session may have multiple origins if multiple submissions were linked to it
*
* This data exists for sessions created/updated after 16 June 2023
*/
origins: ContentOrigin[]
}
Note that a session may not yet be scheduled by the Event Manager. In this case it will not have a start or end time, nor a location.
Tracks
{
/**
* The UUID for the track
*/
id: string;
/**
* The name of the track
*/
name: string;
/**
* The description of the track formatted in Markdown
*/
description: string | null;
/**
* The description of the track formatted in HTML
*/
description_HTML: string;
/**
* The color of the track formatted in HEX
* eg #FF00B1
*/
color: string | null;
/**
* The labels in this track
*/
labels: Label[];
/**
* The sessions in this track
*/
sessions: Session[];
/**
* When the track was last modified in UTC
* eg 2022-02-04T18:03:03.662Z
*/
lastModified: Date;
/**
* Any Data Sources referenced for this track
*/
references?: SourceReferences | undefined;
/**
* Any data for Custom Fields for this track
*/
customFieldData: CustomFieldData[];
/**
* Files attached to the track
*
* Note that files are not included by default. You can configure this per publication as required.
*/
files: File[];
}
Custom Field Data
An event may have Custom Fields. If data has been set for that item then the values will be returned in customFieldData
{
/**
* The UUID for this data
*/
id: string;
/**
* The value for this data
*/
value: string;
/**
* The UUID for this field
*/
fieldId: string;
/**
* The type of field
*/
fieldType: 'text' | 'textarea' | 'number' | 'checkbox' | 'radio' | 'email' | 'url' | 'date';
/**
* The name of the field
*/
fieldName: string;
}
File
Files are attached to items on the agenda, they can be images, or regular files. For images cropped variants of the image may be available depending on the event configuration.
Note that files are not included by default. To add files browse to the configuration for the publication and set the ‘Do you want to include attached files in the feed’ option.
{
/**
* A unique ID for the file
*/
id: string;
/**
* The name of the file
*/
fileName: string;
/**
* The type of the file
*/
type: {
/**
* This file type was created for this event
*/
isPredefined: false;
/**
* The name of the file type eg 'Slides'
*/
name: string;
/**
* A uuid for this file type
*/
id: string;
} | {
/**
* This is a predefined file type
*/
isPredefined: true;
/**
* The name of the file type eg 'Speaker Profile Image'
*/
name: string;
/**
* The type of predefined file
* Additional types may be added from time to time
*/
id: 'generic' |
| 'contributorHeadshot'
| 'contributorLogo'
| 'locationLogo'
| 'locationSponsorLogo'
| 'sessionHandouts'
| 'sessionSlides'
| 'sessionSponsorLogo'
| 'trackLogo'
}
/**
* The size, in bytes, of the file
*/
size: number;
/**
* The mimeType of the file
*/
mimeType: string;
/**
* The URL to retrieve the file
*/
url: string;
/**
* The variants of this file
* For images these are the different sizes of image available
*/
variants: FileVariant[];
}
FileVariant
Image files have ‘variants’ which are the image scaled to fit within
The properties are the same as a regular File
with an additional scale
attribute
File & {
/**
* The size the image was scaled to fit within
* THUMB = 128x128
* SMALL = 256x256
* MEDIUM = 512x512
* LARGE = 1024x1024
* FULL = The same resolution as the originally uploaded image
*/
scale: 'THUMB' | 'SMALL' | 'MEDIUM' | 'LARGE' | 'FULL';
}
ContentOrigin
Both Contributor
and Session
have origins
property, which is any array containing the detail of which submissions this Contributor
of Session
was created from.
At present ‘submission’ is the only ContentOrigin type. More types may be added in the future, with different shapes, so do be sure to check that type === 'submission'
when processing these.
Once a Contributor
or Session
has been created the original source of the object may become deleted. In which case deleted
will be true in the respective entry below.
{
type: 'submission';
/**
* The owner of the Submission. I.e. the Submitter
*/
owner: {
id: string;
name: string;
email: string;
deleted: boolean;
};
/**
* The name and id of the Submission from which this object was created
*/
submission: {
id: string;
name: string;
deleted: boolean;
};
/**
* The event in which the submission exists
*/
event: {
id: string;
name: string;
deleted: boolean;
};
/**
* The current stage of the submission, eg 'Submitted'
*/
stage: {
id: string;
name: string;
deleted: boolean;
};
/**
* Any labels attached to the submission
* This includes labels in the same event as the JSON publication and also labels in other events
* So be sure to filter by event.id if you are only interested in fields in a particular event
*/
labels: {
id: string;
event: {
id: string;
name: string;
deleted: boolean;
};
name: string;
deleted: boolean;
}[];
}
Source References
If the event is using ‘Data Sources’ then a mapping between the URI of the source, and the ID’s of the objects at the source.
{ [sourceService: string]: string[] };
Still can’t find what you’re looking for? Email support@lineupninja.com and one of the team will get back to you as soon as possible.