-
Notifications
You must be signed in to change notification settings - Fork 2
Voxxrin APIs for Organizers
Voxxrin has a number of HTTP APIs used for organizers.
To call these APIs, you will need to know these important variables:
-
baseUrl
for the Voxxrin environment you want to target. For instance, for Demo environment one, it will behttps://api-demo.voxxr.in
-
secretToken
allowing you to call the API. This token will look like:<tokenType>:<event or event family name>:<uuid v4>
wheretokenType
can be valued witheventOrganizer|familyOrganizer|eventRoomStatsContributor|familyRoomStatsContributor|eventStats|familyStats
(example:eventOrganizer:my-super-conference:1234567-89ab-cdef-1234567890ab
).
ThissecretToken
should be shared with you by a Voxxrin Administrator. -
eventId
corresponding to the event you want to get/update informations. This is generally a short name and you can guess it by looking at the URL on your Voxxrin instance:
-
spaceToken
(for private events only) allowing you to access / interact with your voxxrin private space. This token looks like<space name>_<uuid v4>
(example:my-private-space_fedcba9-8765-4321-fedcba987654
) and can be guessed by looking at the URL on your Voxxrin instance:
URIs:
- Any event:
POST {{baseUrl}}/api/crawlers/{{crawlerId}}/refreshScheduleRequest?token={{secretToken}}
Details
Params:
- [path]
baseUrl*
: see Pre-requisites section - [query]
secretToken*
: see Pre-requisites section - [query]
crawlerId*
: should be a crawler code which should be provided by Voxxrin Administrators
Allowed token types:
-
eventOrganizer
: for event organizers -
familyOrganizer
: for event family organizers
Dummy call example:
curl --request POST \
--url 'https://api-demo.voxxr.in/api/crawlers/myEvt24/refreshScheduleRequest?token=eventOrganizer%3AmyEvt24%3A1234567-89ab-cdef-1234567890ab'
Example payload response
{
"eventId": "myEvt24",
"days": [
"thursday"
],
"descriptorUrlUsed": "https://path/to/crawler/descriptor.json",
"durationInSeconds": 1.767000363,
"messages": []
}
URIs:
- Public events:
GET {{baseUrl}}/api/events/{{eventId}}/talksStats?token={{secretToken}}
- Private events:
GET {{baseUrl}}/api/spaces/{{spaceToken}}/events/{{eventId}}/talksStats?token={{secretToken}}
Details
Params:
- [path]
baseUrl*
,spaceToken*
,eventId*
: see Pre-requisites section - [query]
secretToken*
: see Pre-requisites section
Important Note: this endpoint is ETag-friendly. It means that:
- It will return an
etag
response header when calling it - You can pass this
etag
response header to your next request'sX-If-None-Match
(*) request header: if nothing has changed, an empty payload with HTTP status304 Not Modified
will be returned.
(*) X-If-None-Match
custom header has to be used instead of standard If-None-Match
header, because Firebase Hosting (which is used for Voxxrin API endpoints) is currently filtering out If-Not-Match
header in firebase cloud functions (more about this on this stackoverflow)
Allowed token types:
-
eventOrganizer
: for event organizers -
familyOrganizer
: for event family organizers -
eventStats
: for tools requiring event stats (such as conference walls) -
familyStats
: for family-wide tools requiring event stats (such as conference walls)
Dummy call sample:
curl --request GET \
--url 'https://api-demo.voxxr.in/api/events/myEvt24/talksStats?token=eventOrganizer%3AmyEvt24%3A1234567-89ab-cdef-1234567890ab'
Example payload response
{
"perTalkStats": [
{
"talkId": "t001",
"talkTitle": "A super talk title",
"speakers": [
"John Doe"
],
"totalFavoritesCount": 42
},
...
]
}
URIs:
- Public events:
GET {{baseUrl}}/api/events/{{eventId}}/dailyRatings/stats?token={{secretToken}}
- Private events:
GET {{baseUrl}}/api/spaces/{{spaceToken}}/events/{{eventId}}/dailyRatings/stats?token={{secretToken}}
Details
Params:
- [path]
baseUrl*
,spaceToken*
,eventId*
: see Pre-requisites section - [query]
secretToken*
: see Pre-requisites section
Important Note: this endpoint is ETag-friendly. It means that:
- It will return an
etag
response header when calling it - You can pass this
etag
response header to your next request'sX-If-None-Match
(*) request header: if nothing has changed, an empty payload with HTTP status304 Not Modified
will be returned.
(*) X-If-None-Match
custom header has to be used instead of standard If-None-Match
header, because Firebase Hosting (which is used for Voxxrin API endpoints) is currently filtering out If-Not-Match
header in firebase cloud functions (more about this on this stackoverflow)
Allowed token types:
-
eventOrganizer
: for event organizers -
familyOrganizer
: for event family organizers
Dummy call sample:
curl --request GET \
--url 'https://api-demo.voxxr.in/api/events/myEvt24/dailyRatings/stats?token=eventOrganizer%3AmyEvt24%3A1234567-89ab-cdef-1234567890ab'
Example payload response
{
"dailyFeedbacks": [
{
"dayId": "thursday",
"totalRatings": 42
}
]
}
Reminder: Top talks constraints are customizable at the conference descriptor level
URIs:
- Public events:
GET {{baseUrl}}/api/events/{{eventId}}/topTalks?token={{secretToken}}
- Private events:
GET {{baseUrl}}/api/spaces/{{spaceToken}}/events/{{eventId}}/topTalks?token={{secretToken}}
Details
Params:
- [path]
baseUrl*
,spaceToken*
,eventId*
: see Pre-requisites section - [query]
secretToken*
: see Pre-requisites section
Important Note: this endpoint is ETag-friendly. It means that:
- It will return an
etag
response header when calling it - You can pass this
etag
response header to your next request'sX-If-None-Match
(*) request header: if nothing has changed, an empty payload with HTTP status304 Not Modified
will be returned.
(*) X-If-None-Match
custom header has to be used instead of standard If-None-Match
header, because Firebase Hosting (which is used for Voxxrin API endpoints) is currently filtering out If-Not-Match
header in firebase cloud functions (more about this on this stackoverflow)
Allowed token types:
-
eventOrganizer
: for event organizers -
familyOrganizer
: for event family organizers -
eventStats
: for tools requiring event stats (such as conference walls) -
familyStats
: for family-wide tools requiring event stats (such as conference walls)
Dummy call sample:
curl --request GET \
--url 'https://api-demo.voxxr.in/api/events/myEvt24/topTalks?token=eventOrganizer%3AmyEvt24%3A1234567-89ab-cdef-1234567890ab'
Example payload response
{
"dailyTopTalks": [
{
"date": "2025-01-02",
"dayId": "thursday",
"topTalks": [
{
"talkId": "talk1",
"title": "A very interesting talk",
"speakers": [
{
"id": "speaker1",
"fullName": "John Doe",
"companyName": "Acme inc",
"photoUrl": ""
}
],
"start": "2025-01-02T11:30:00Z",
"end": "2025-01-02T12:15:00Z",
"format": "Conference",
"language": "en",
"room": "Room A",
"track": "Java",
"tags": [],
"averageRating": 4.80,
"numberOfVotes": 42
}
]
}
]
}
URIs:
- Public events:
GET {{baseUrl}}/api/events/{{eventId}}/talks/{{talkId}}/feedbacks?token={{secretToken}}&updatedSince={{updatedSinceISODatetime}}
- Private events:
GET {{baseUrl}}/api/spaces/{{spaceToken}}/events/{{eventId}}/talks/{{talkId}}/feedbacks?token={{secretToken}}&updatedSince={{updatedSinceISODatetime}}
Details
Params:
- [path]
baseUrl*
,spaceToken*
,eventId*
: see Pre-requisites section - [path]
talkId*
: Talk id you want to retrieve detailed feedbacks - [query]
secretToken*
: see Pre-requisites section - [query]
updatedSinceISODatetime
(facultative): shows only feedbacks provided after this ISO-8601 datetime. When this query param is not provided, every feedbacks will be returned.
Important Note: this endpoint is ETag-friendly. It means that:
- It will return an
etag
response header when calling it - You can pass this
etag
response header to your next request'sX-If-None-Match
(*) request header: if nothing has changed, an empty payload with HTTP status304 Not Modified
will be returned.
(*) X-If-None-Match
custom header has to be used instead of standard If-None-Match
header, because Firebase Hosting (which is used for Voxxrin API endpoints) is currently filtering out If-Not-Match
header in firebase cloud functions (more about this on this stackoverflow)
Allowed token types:
-
eventOrganizer
: for event organizers -
familyOrganizer
: for event family organizers
Dummy call sample:
curl --request GET \
--url 'https://api-demo.voxxr.in/api/events/myEvt24/talks/talk1/feedbacks?token=eventOrganizer%3AmyEvt24%3A1234567-89ab-cdef-1234567890ab&updatedSince=2025-01-02T09:10:35Z'
Example payload response
[
{
"eventId": "myEvt24",
"talkId": "talk1",
"feedbacks": [
{
"ratings": {
"custom-rating": null,
"linear-rating": 3,
"bingo": [
{
"id": "1",
"label": "Really enjoyed this"
},
{
"id": "2",
"label": "Awesome content"
}
]
},
"lastUpdatedOn": "2025-01-02T10:06:56.523Z",
"comment": null,
"attendeePublicToken": "eec471c6-7384-4037-b7ed-91184452d7f8",
"talkId": "talk1",
"createdOn": "2025-01-02T10:06:55.623Z"
}
]
}
]
This endpoint allows conference organizer to share private URLs with their speakers so that they are able to see feedbacks on their talks in realtime.
This should also allow speakers to edit some part of their talks like, providing assets (such as slides URLs, or github repository) or updating some parts of their speaker profile (like, social media platforms).
URIs:
- Public events:
GET {{baseUrl}}/api/events/{{eventId}}/talksEditors?token={{secretToken}}&baseUrl={{voxxrinInstanceBaseUrl}}
- Private events:
GET {{baseUrl}}/api/spaces/{{spaceToken}}/events/{{eventId}}/talksEditors?token={{secretToken}}&baseUrl={{voxxrinFrontendBaseUrl}}
Details
Params:
- [path]
baseUrl*
,spaceToken*
,eventId*
: see Pre-requisites section - [query]
secretToken*
: see Pre-requisites section - [query]
voxxrinFrontendBaseUrl*
: the Voxxrin frontend base url (like,https://app-demo.voxxr.in
). This is particularly useful for white-labelled Voxxrin instances, so that your speakers keep using the same white-labelled Voxxrin instance than your attendees'
Important Note: this endpoint is ETag-friendly. It means that:
- It will return an
etag
response header when calling it - You can pass this
etag
response header to your next request'sX-If-None-Match
(*) request header: if nothing has changed, an empty payload with HTTP status304 Not Modified
will be returned.
(*) X-If-None-Match
custom header has to be used instead of standard If-None-Match
header, because Firebase Hosting (which is used for Voxxrin API endpoints) is currently filtering out If-Not-Match
header in firebase cloud functions (more about this on this stackoverflow)
Allowed token types:
-
eventOrganizer
: for event organizers -
familyOrganizer
: for event family organizers
Dummy call sample:
curl --request GET \
--url 'https://api-demo.voxxr.in/api/events/myEvt24/talksEditors?token=eventOrganizer%3AmyEvt24%3A1234567-89ab-cdef-1234567890ab&baseUrl=https%3A%2F%2Fapp-demo.voxxr.in'
Example payload response
[
{
"eventId": "myEvt24",
"secretToken": "bd575ec5-3c7e-43fe-82db-5fcb5dd16a39",
"talkId": "talk1",
"speakersFullNames": [
"John Doe"
],
"registrationUrl": "https://app-demo.voxxr.in/user-tokens/register?type=TalkFeedbacksViewer&spaceToken=&eventId=myEvt24&talkId=talk1&secretToken=bd575ec5-3c7e-43fe-82db-5fcb5dd16a39"
},
{
"eventId": "myEvt24",
"secretToken": "9dcec52f-a962-46e4-8a32-0fc1ae2d75f1",
"talkId": "talk2",
"speakersFullNames": [
"Jane Doe"
],
"registrationUrl": "https://app-demo.voxxr.in/user-tokens/register?type=TalkFeedbacksViewer&spaceToken=&eventId=myEvt24&talkId=talk2&secretToken=9dcec52f-a962-46e4-8a32-0fc1ae2d75f1"
}
]
Allows to crawl Video Platforms (like Youtube) based on what is configured at your Conference Descriptor level, in order to try to match videos (based on their title) with your event's talks.
URIs:
- Public events:
POST {{baseUrl}}/api/events/{{eventId}}/refreshRecordingAssetsRequest?token={{secretToken}}
- Private events:
POST {{baseUrl}}/api/spaces/{{spaceToken}}/events/{{eventId}}/refreshRecordingAssetsRequest?token={{secretToken}}
Details
Params:
- [path]
baseUrl*
,spaceToken*
,eventId*
: see Pre-requisites section - [query]
secretToken*
: see Pre-requisites section
Allowed token types:
-
eventOrganizer
: for event organizers -
familyOrganizer
: for event family organizers
Dummy call sample:
curl --request POST \
--url 'https://api-demo.voxxr.in/api/events/myEvt24/refreshRecordingAssetsRequest?token=eventOrganizer%3AmyEvt24%3A1234567-89ab-cdef-1234567890ab'
Example payload response
{
"summary": {
"updates": "1 talk URLs have been updated (out of 25 matched talks): 42031",
"matchings": {
"message": "There are 14 talks and 1 videos which didn't matched",
"unmatchedElements": [
{
"type": "Video",
"label": "Youtube video title here"
},
{
"type": "Talk",
"label": "[talk1] A super talk title here (Speaker name 1)",
"format": "Conference"
}
]
}
},
"matchedTalks": [
{
"score": 0.98,
"titles": {
"talkWithSpeakers": "another super talk - speaker name 2",
"video": "another super talk by speaker name 2"
},
"talk": {
"id": "talk2",
"title": "Another super talk",
"format": {
"duration": "PT55m",
"id": "1",
"title": "Keynote"
},
"speakers": [
{
"fullName": "Speaker Name 2"
}
]
},
"video": {
"id": "26pc319OsA4",
"publishedAt": "2025-01-02T16:09:14Z",
"title": "Another super talk by Speaker name 2",
"duration": "PT52M"
}
}
],
"unmatchedTalks": [
{
"talk": {
"id": "talk3",
"title": "Still another super talk",
"format": {
"duration": "PT50m",
"id": "2",
"title": "Conference"
},
"speakers": [
{
"fullName": "Speaker name 3"
}
]
},
"highestScoreInvalidVideo": {
"bestScore": 0.397,
"bestScoreFrom": "titleWithSpeakers",
"titleWithSpeakersSimilarityScore": 0.397,
"titleOnlySimilarityScore": 0.394,
"titles": {
"talkWithSpeakers": "still another super talk - speaker name 3",
"video": "generate your doc with chatgpt by speaker name 4"
},
"titleIncludingSpeakerNamesRatio": 0,
"video": {
"id": "WXXsS6k2qMI",
"publishedAt": "2025-01-02T05:01:23Z",
"title": "Generate your doc with ChatGPT by Speaker Name 4",
"duration": "PT27M57S"
}
}
}
],
"unmatchedYoutubeVideos": [
{
"id": "WXXsS6k2qMI",
"publishedAt": "2025-01-02T10:54:54Z",
"title": "Generate your doc with ChatGPT by Speaker Name 4",
"duration": "PT27M57S"
}
]
}
This allows to update multiple rooms' remaining capacity in realtime, so that a realtime room capacity indicator is displayed to your attendees.
URIs:
- Public events:
POST {{baseUrl}}/api/events/{{eventId}}/rooms/stats?token={{secretToken}}
- Private events:
POST {{baseUrl}}/api/spaces/{{spaceToken}}/events/{{eventId}}/rooms/stats?token={{secretToken}}
Details
Params:
- [path]
baseUrl*
,spaceToken*
,eventId*
: see Pre-requisites section - [query]
secretToken*
: see Pre-requisites section
Allowed token types:
-
eventOrganizer
: for event organizers -
familyOrganizer
: for event family organizers -
eventRoomStatsContributor
: for external systems aimed at only providing room stat indication for a specific event -
familyRoomStatsContributor
: for external systems aimed at only providing room stat indication for all events belonging to an event family
Dummy call sample:
curl --request POST \
--url 'https://api-demo.voxxr.in/api/events/myEvt24/rooms/stats?token=eventOrganizer%3AmyEvt24%3A1234567-89ab-cdef-1234567890ab' \
--header 'content-type: application/json' \
--data '{
"roomsStats": [{
"roomId": "room1",
"capacityFillingRatio": 0.5,
"recordedAt": "2025-01-02T06:57:00Z"
}, {
"roomId": "room2",
"capacityFillingRatio": 0.70,
"recordedAt": "2025-01-02T06:57:00Z"
}]
}'
Example payload response
{
"roomsStats": {
"room1": {
"persistedAt": "2025-01-02T06:58:42Z",
"capacityFillingRatio": 0.5,
"recordedAt": "2025-01-02T06:57:00Z",
"roomId": "room1"
},
"room2": {
"persistedAt": "2025-01-02T06:58:42Z",
"capacityFillingRatio": 0.7,
"recordedAt": "2025-01-02T06:57:00Z",
"roomId": "room2"
},
"room3": {
"persistedAt": "2025-01-02T06:55:34Z",
"capacityFillingRatio": "unknown",
"recordedAt": "2025-01-02T06:43:04Z",
"roomId": "room3"
}
}
}
This allows to update single room' remaining capacity in realtime, so that a realtime room capacity indicator is displayed to your attendees.
URIs:
- Public events:
POST {{baseUrl}}/api/events/{{eventId}}/rooms/{{roomId}}/stats?token={{secretToken}}
- Private events:
POST {{baseUrl}}/api/spaces/{{spaceToken}}/events/{{eventId}}/rooms/{{roomId}}/stats?token={{secretToken}}
Details
Params:
- [path]
baseUrl*
,spaceToken*
,eventId*
: see Pre-requisites section - [path]
roomId*
: the room id you want to update statistics to - [query]
secretToken*
: see Pre-requisites section
Allowed token types:
-
eventOrganizer
: for event organizers -
familyOrganizer
: for event family organizers -
eventRoomStatsContributor
: for external systems aimed at only providing room stat indication for a specific event -
familyRoomStatsContributor
: for external systems aimed at only providing room stat indication for all events belonging to an event family
Dummy call sample:
curl --request POST \
--url 'https://api-demo.voxxr.in/api/events/myEvt24/rooms/room1/stats?token=eventOrganizer%3AmyEvt24%3A1234567-89ab-cdef-1234567890ab' \
--header 'content-type: application/json' \
--data '{
"capacityFillingRatio": 0.5,
"recordedAt": "2025-01-02T06:57:00Z"
}'
Example payload response
{
"roomsStats": {
"roomId": "room1",
"recordedAt": "2025-01-02T06:57:00Z",
"persistedAt": "2025-01-02T06:58:42Z",
"capacityFillingRatio": 0.5,
"valid": {
"forTalkId": "talk1",
"until": "2025-01-02T07:21:15.000Z"
}
}
}