An "Extension' is a way to extend platform functionality without changing the core platform codebase.
An Extension needs to implement:
An Extension can visually integrate into Studio, aid data collection for a Creator and provide data for the App and feeds by providing:
All requests to 3rd party Extension are backend-to-backend and signed with Extension access token. Access token is created Extension deployment time, stored in both the Extension and the platform, and not communicated between them (pre-shared).
signature = SHA1(access_token + signeable_content + salt)
signable_contentis a concatenation of the following:
- Resource path (including leading slash, e.g. ”/path/to/script”)
- Query string (including leading question mark, e.g. ”?attr=value”)
- POST data
saltis a random string, it should change from request to request and be sufficiently random.
Salt and generated signature are sent in HTTP headers:
Receiving end calculates signature from the
access_tokenstored locally and data from the request and checks if it matches the one in the request. Any request failing signature check must return
To add an Extension to a platform's instance, super admin is to provide three parameters:
- Base URL
- Access token
- Name (used to identify the service in Studio UI)
timereleaseallows to set a lock on assets, like images uploaded for a media element, so that even if the client application knew the url to the asset, the user would not be able to view it until a specific point in time.
An application specifies which Extension(s) it needs. When a Project is created, the platform enables all required Extensions automatically.
- A new Extension has been added to the Project
- Extension config in the app is changed
- Project name is changed
Tabs are entries in Studio main menu.
Tabs are fetched by sending a request to the Extension when a Project or an Event is selected in Studio:
An icon that is shown for the Extension tab on Studio main menu. Can be any Font Awesome 5.14 icon that support
falprefix including pro icons. To specify an icon the tabs response must contain
iconfield with name of the desired icon. By default Studio use
"name": "Event Segments",
Super admin access
The purpose is to allow an Extension to use Studio as Event/Element management system, where some processing is done by the Extension. To enable this Studio notifies the Extension whenever data changes are made in Studio. When notified the Extension then fetches up-to-date data from the platform using feeds or Control API.
Please note that notification does not guarantee that any of the data was actually changed after the previous notification, or that the current state of the object is final and complete. So the Extension should track changes by itself.
On success the Extension needs to respond with 200 and empty body.
On error the Extension needs to respond with corresponding status and empty body.
These are supported notification types:
This API allows adding a tab with Extension analytics data to the Event's analytics page. The platform enables this feature according to corresponding flag in instance handshake response. The platform makes Analytics request to the Extension to get its data.
An Extension can act as a data source for a custom field, providing dynamic content.
Each Extension can provide Extension-specific data feeds. These feeds will be requested from the Extension and uploaded to the public CDN by the platform. Feeds list is configured during instance handshake in the handshake response.
Uploaded public feed will be listed on the Event feeds page, and available at the following URL:
//<static_host>/events/<first two chars of event uuid>/<event uuid>/<extension_type>/<feed_id>.json
Subscribing to webhook events is a way to integrate with the platform and perform actions in response to changes, without the need for periodic API pooling.