Happy Tuesday everyone! A few weeks back on Something fun for a Friday, we showed off some creative uses of the interactions editor, the London sightseeing guide and the maths game baked into a presentation. This week we are going under the hood. The interactions editor you click around in is really just a friendly interface sitting on top of a single API resource: InteractiveElements.
By the end of this post you will be able to do two things: pull a list of every interaction already on a video, and post a brand new one yourself, all through the API.
1 - Viewing existing interactions on a presentation
Every interaction lives as a child resource of the presentation it belongs to. To see what is already on a video, call:
GET/api/v1/Presentations('presentationId')/InteractiveElements
This returns every InteractiveElement currently attached to that presentation, hotspots, buttons, and text overlays alike, each with its full set of properties. Handy as a quick audit before you go editing or adding anything, or if you just want to see what a colleague has already built without opening the editor.
**
2 - Understanding the properties before you create one**
Every interactive element is one of three types, set via the Type property: Hotspot, Button, or Text.
Position and size are not given in pixels, they are given as a ratio from 0.0 to 1.0 across the video frame. PositionX and PositionY of 0.5 and 0.5 would sit dead centre, regardless of the resolution the video is played back at. Width and Height follow the same logic, and only apply to Hotspot or Text elements. Timing works the same way conceptually but in milliseconds rather than ratios, StartTime and EndTime define the window during which the element is visible and clickable.
| Property | Applies to | Notes |
|---|---|---|
| Color / SecondaryColor | All | Hex format, with or without the leading # |
| Opacity | All | Percentage from 0 to 100 |
| Fill / Shape | Hotspot | Shape is Circle or Rectangle |
| ButtonSize | Button | Small, Medium, or Large |
| TextAlignment / TextSize | Text | Start/Center/End, Small/Medium/Large |
The InteractionEffect property is what actually turns a hotspot or button into something useful, paired with InteractionParameter:
| InteractionEffect | InteractionParameter expects |
|---|---|
| LinkNewPresentation | A presentation ID to jump to |
| TimeInCurrentPresentation | A time in seconds to skip to |
| ExternalUrl | A URL to navigate to |
There is also a Pause property, a simple boolean that determines whether the video should pause the moment the interaction is triggered. Handy for forcing someone to actually read a piece of text before the video carries on.
**
3 - Posting a brand new interactive element**
Same parent resource, just a different verb. To add a new element to a presentation:
POST/api/v1/Presentations('presentationId')/InteractiveElements
Here is a complete example body for a button that jumps to a related presentation and pauses on click:
{
"Type": "Button",
"Name": "Watch part two",
"StartTime": 30000,
"EndTime": 35000,
"PositionX": 0.85,
"PositionY": 0.85,
"ButtonSize": "Medium",
"Text": "Next: part two",
"Color": "#1D9E75",
"Opacity": 90,
"InteractionEffect": "LinkNewPresentation",
"InteractionParameter": "the-other-presentation-id",
"Pause": true
}
Note the presentation ID only appears in the URL, not in the body. Because the element is being created as a child of that presentation, Mediasite already knows which video it belongs to.
Worth noting: both the GET and POST routes here are confirmed straight from Mediasite’s own API documentation, listed as supported routes under the Presentations resource. If you are scripting this across a batch of videos, the presentation ID in the URL is the value you will be looping over.
Have you scripted interactions before? Fancy making your own custom workflow?
We would love to hear what you built, or what held you back from trying. Drop it below. ![]()



