Icecat users have the ability to upload media assets to Icecat endpoints using the UserMedia feature. This manual provides instructions on uploading videos via the UserMedia API and presenting them via Icecat LIVE.
Swagger schema: https://api.icecat.biz/#/UserMedia
All requests are sent to https://bo.icecat.biz/restful/v3/ and SessionType is always Rest.While it is possible to reach API with your programming language or terminal tools like curl and wGet, I would recommend using tools like Insomnia or Postman to work with our data as the requests can be complicated.
You need to have either a brand or shop type account to use UserMedia API. To initiate data transmission, you must authenticate yourself with the API by obtaining a session key. This session key is required for subsequent requests to ensure proper API authentication. Please, follow point 1.3 from the PUSH API manual.
Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos?AccessKey={{_.accessKey}}&SessionType=Rest Headers:
Content-Type: multipart/form-data Multipart data:
'Title=My Title'
'LanguageIds=10,1,2'
SourceLink=http://example.com/FunnyElephant.mp4
ProviderUserId=99999 Example:
curl --request POST \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos?AccessKey={{_.accessKey}}&SessionType=Rest' \
--header 'Content-Type: multipart/form-data' \
--header 'accept: application/json' \
--form 'Title=My Title' \
--form 'LanguageIds=10,1,2' \
--form SourceLink=http://example.com/FunnyElephant.mp4 \
--form ProviderUserId=99999 Variables:
| _.accessKey | Access key |
| Title | Video title |
| LanguageIds | IDs for your languages. Comma-separated. Refer here: Locales & Language Code Table |
| SourceLink | Link to your video. Allowed formats: 3gp, avi, flv, m4v, mkv, mov, mp4, mpg, ogg, vob, wmv, webm. |
| ProviderUserId | ID of your Icecat account, contact support@icecat.biz to get yours. |
Success response 201:
{
"Data": {
"VideoId": 33232080
}
} Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}?AccessKey={{_.accessKey}}&SessionType=Rest Example:
curl --request GET \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}?AccessKey={{_.accessKey}}&SessionType=Rest' \ Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
Success response 200:
{
"Data": {
"VideoId": 99999,
"Title": "My Title",
"Link": "https://example.icecat.biz//",
"LanguageIds": [
2,
3,
10
],
"ProviderUserId": 303033,
"Status": "Done",
"PreviewImageLink": "https://example.icecat.biz//",
"PreviewImageLinkTmp": "https://example.icecat.biz//",
"PreviewThumbLink": "https://example.icecat.biz//",
"PreviewThumbLinkTmp": "https://example.icecat.biz//",
"Accesses": [],
"AgeRatings": []
}
} Response is constructed from links to your UserMedia on Icecat servers and additional data.
| VideoId | Video ID |
| Title | Video title |
| Link | Link to the video |
| LanguageIds | IDs for your languages. Comma-separated. Refer here: Locales & Language Code Table |
| ProviderUserId | Video owner’s ID |
| Status | Video upload status |
| PreviewImageLink | Link to video image preview |
| PreviewImageLinkTmp | Temporary link to video image preview |
| PreviewThumbLink | Link to video image preview in thumbnail format |
| PreviewThumbLinkTmp | Temporary link to video image preview in thumbnail format |
| Accesses | Users are allowed to update your video |
| AgeRatings | Age Ratings activated for your videos |
Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}?AccessKey={{_.accessKey}}&Sess
ionType=Rest Body:
{
"Title": "My new Title"
} Example:
curl --request PATCH \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}?AccessKey={{_.accessKey}}&SessionType=Rest' \
--header 'Content-Type: application/json' \
--data '{
"Title": "My new title"
}' Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
Success response 200:
{
"Data": {}
} Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}?AccessKey={{_.accessKey}}&SessionType=Rest Example:
curl --request DELETE \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}?AccessKey={{_.accessKey}}&SessionType=Rest' Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
Success response 200: Returns an ID of the deleted Video.
{
"Data": {
"VideoId": 332079
}
} Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos?AccessKey={{_.accessKey}}&SessionType=Rest Example:
curl --request GET \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos?AccessKey={{_.accessKey}}&SessionType=Rest' \ Variables:
| _.accessKey | User access key |
Success response 200: Method returns all Videos stored on Icecat.
Please check the IDs for Icecat Languages here: Locales & Language Code
Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}/Languages?AccessKey={{_.accessKey}}&SessionType=Rest Example:
curl --request POST \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}/Languages?AccessKey={{_.accessKey}}&SessionType=Rest' \
--data '{
"LanguageId": 3
}' Body:
{
"LanguageId": 3
} Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
| LanguageId | IDs of the languages for your video. Locales & Language Code |
Success response 200: Returns ID of activated languages.
{
"Data": {
"LanguageId": 3
}
} Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}?AccessKey={{_.accessKey}}&SessionType=Rest&Metadata%5B%5D=Languages Example:
curl --request GET \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}?AccessKey={{_.accessKey}}&SessionType=Rest&Metadata%5B%5D=Languages' \ Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
| Metadata[] | Metadata you want to receive. Can be Languages or Age Ratings. |
Success response 200:
{
"Data": {
"VideoId": 0,
"Title": "",
"Link": "",
"LanguageIds": [
2,
3,
10
],
"ProviderUserId": 0,
"Status": "Done",
"PreviewImageLink": "",
"PreviewImageLinkTmp": "",
"PreviewThumbLink": "",
"PreviewThumbLinkTmp": "",
"Accesses": [],
"AgeRatings": []
},
"Metadata": {
"Languages": [
{
"LanguageId": 2,
"ShortCode": "NL"
},
{
"LanguageId": 3,
"ShortCode": "FR"
},
{
"LanguageId": 10,
"ShortCode": "BR"
}
]
}
} Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}/Languages/{{ _.languageID }}?AccessKey={{_.accessKey}}&SessionType=Rest Example:
curl --request DELETE \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}/Languages/{{ _.languageID }}?AccessKey={{_.accessKey}}&SessionType=Rest' \ Variables:
| _.accessKey | User access key |
| _.videoId | VideoID, received in p. 3.1. |
| LanguageId | IDs of the languages for your video. Locales & Language Code |
Success response 200:
{
"Data": {}
} With accesses you can assign users to edit your UserMedia. You can only allow shop users to get access to your videos.
Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}/Accesses?AccessKey={{ _.accessKey }}&SessionType=Rest Body:
{
"AuthorizedUserId": {{_.userID}},
"UserReference": "My-team-lead"
} Example:
curl --request POST \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/332080/Accesses?AccessKey={{ _.accessKey }}&SessionType=Rest' \
--data '{
"AuthorizedUserId": {{_.userID}},
"UserReference": "My-team-lead"
}' Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
| _.userID | ID of a shop user you would like to grant access to. Please contact support@icecat.biz. |
| UserReference | Short description for your access. Please do not use white-spaces. |
Success response 201:
{
"Data": {
"AccessId": 0,
"AuthorizedUserId": 0,
"UserReference": "My-team-lead"
}
} Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}/Accesses/{{_.accessId}}?AccessKey={{ _.accessKey }}&SessionType=Rest Body:
{
"UserReference": "My-ex-team-lead"
} Example:
curl --request PATCH \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}/Accesses/{{ _.accessId }}?AccessKey={{ _.accessKey }}&SessionType=Rest' \
--data '{
"UserReference": "My-ex-team-lead"
}' Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
| _.accessId | Access ID, received in p. 5.1. |
| UserReference | Short description for your access. Please do not use white-spaces. |
Success response 200:
{
"Data": {
"AccessId": 9060198,
"AuthorizedUserId": 110865,
"UserReference": "My-ex-team-lead"
}
} Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}/Accesses/{{_.accessId}}?AccessKey={{ _.accessKey }}&SessionType=Rest Example:
curl --request DELETE \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}/Accesses/{{_.accessId}}?AccessKey={{ _.accessKey }}&SessionType=Rest' \ Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
| _.accessId | Access ID, received in p. 5.1. |
Success response 200:
{
"Data": {}
} Age Ratings are additional labels to mark which audience the video is available for. They display minimum age requirements for the content.
Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}?AccessKey={{_.accessKey}}&SessionType=Rest&Metadata%5B%5D=AgeRatings Example:
curl --request GET \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{_.videoID}}?AccessKey={{_.accessKey}}&SessionType=Rest&Metadata%5B%5D=AgeRatings' Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
| Metadata[] | Metadata you want to receive. Can be Languages or Age Ratings. |
Response returns all information about each Age Rating provider.
| AgeRatingId | ID of the Age Rating provider. |
| AgeRating | Age Rating provider name. |
| AgeRatingValues | Each provider has its own system of ratings and this array contains all possible values. |
| AgeRatingDescriptors | Description of content that appears in video which can affect Age Rating. |
Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{ _.videoID }}/AgeRatings?AccessKey={{_.accessKey}}&SessionType=Rest Body:
{
"AgeRatingId": 1,
"AgeRatingValueId": 2,
"AgeRatingDescriptorIds": [
2
]
} Example:
curl --request POST \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{ _.videoID }}/AgeRatings?AccessKey={{_.accessKey}}&SessionType=Rest' \
--header 'Content-Type: application/json' \
--data ' {
"AgeRatingId": 1,
"AgeRatingValueId": 2,
"AgeRatingDescriptorIds": [
2
]
}' Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
| AgeRatingId, AgeRatingValueId, AgeRatingDescriptorIds | Refer to Age Ratings Dictionary, received in p.6.1. |
Success response 201:
{
"Data": {
"AgeRatingId": 1
}
} Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{ _.videoID }}/AgeRatings/{{ _.ageRatingId }}?AccessKey={{_.accessKey}}&SessionType=Rest Body:
{
"AgeRatingValueId": 3
} Example:
curl --request PATCH \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{ _.videoID }}/AgeRatings/{{ _.ageRatingId }}?AccessKey={{_.accessKey}}&SessionType=Rest' \
--header 'Content-Type: application/json' \
--data '{
"AgeRatingValueId": 3
}' Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
| _.ageRatingId, AgeRatingValueId | Refer to Age Ratings Dictionary, received in p.6.1. |
Success response:
{
"Data": {}
} Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{ _.videoID }}/AgeRatings/{{ _.ageRatingId }}?AccessKey={{_.accessKey}}&SessionType=Rest Example:
curl --request DELETE \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{ _.videoID }}/AgeRatings/{{ _.ageRatingId }}?AccessKey={{_.accessKey}}&SessionType=Rest' \ Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
| _.ageRatingId | Refer to Age Ratings Dictionary, received in p.6.1. |
Success response 200:
{
"Data": {}
} AgeRatingDescriptor is a label that shows additional information about provocative content that is not suited for minors. For example, “Drugs” or “Sex” are the descriptors in PEGI rating.
Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{ _.videoID }}/AgeRatings/{{ _.ageRatingID }}/Descriptors?AccessKey={{_.accessKey}}&SessionType=Rest Body:
{
"AgeRatingDescriptorId": 7
} Example:
curl --request POST \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{ _.videoID }}/AgeRatings/{{ _.ageRatingID }}/Descriptors?AccessKey={{_.accessKey}}&SessionType=Rest' \
--data '{
"AgeRatingDescriptorId": 7
}' Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
| _.ageRatingId, AgeRatingDescriptorId | Refer to Age Ratings Dictionary, received in p.6.1. |
Success response 201:
{
"Data": {
"AgeRatingDescriptorId": 7
}
} Path:
https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{ _.videoID }}/AgeRatings/{{ _.ageRatingID }}/Descriptors/{{ _.ageRatingDescriptorID }}?AccessKey={{_.accessKey}}&SessionType=Rest Example:
curl --request DELETE \
--url 'https://bo.icecat.biz/restful/v3/UserMedia/Videos/{{ _.videoID }}/AgeRatings/{{ _.ageRatingID }}/Descriptors/{{ _.ageRatingDescriptorID }}?AccessKey={{_.accessKey}}&SessionType=Rest' \ Variables:
| _.accessKey | User access key |
| _.videoId | Video ID, received in p. 3.1. |
| _.ageRatingId, _.ageRatingDescriptorID | Refer to Age Ratings Dictionary, received in p.6.1. |
Success response 200:
{
"Data": {}
} | Error code | Error message | Resolution |
| 400 | Some of the parameters are not valid or were not inputted. See returned message for details | Check your input method. |
| 400 | HTTP method GET is not described in the swagger schema. | Change HTTP method to HTTPS. |
| 401 | Your AccessKey is not valid any more | Renew your AccessKey with Session/ endpoint. |
| 403 | You are not assigned to this content! | Check the Video accesses with UserMedia/Videos/{{_.videoID}} endpoint. |
| 500 | This should never happen! | Report such cases to support@icecat.biz |
To retrieve videos uploaded through the UserMedia API using Icecat LIVE JS API, you will need to include two essential parameters in your request code:
| UserReference | User references code. This is a user identifier that helps to search loaded video into the Icecat system. |
| ProviderId | User identifier of the owner of an uploaded video in Icecat system (the same as ProviderUserId). |
These two parameters are required for showing the user’s videos into live html.
Age gating is activated by default, however it is possible to disable it by adding videoAgeGatingDisabled: true parameter. Please see an example below.
Videos uploaded via UserMedia API can be requested via Granular call to be included among other containers. For this you need to include a ‘videos’ container to the call, UserReference and ProviderId are also required. The request works with any identifier combinations, Smart call and Multilingual request. Please refer to the Granular Call manual for more info.
Granular call with UserMedia API parameters – Brand + MPN:
<!DOCTYPE html>
<html>
<head></head>
<body>
<div id="сontainer1"></div>
<div id="сontainer2"></div>
<script>
window.addEventListener('liveload', function () {
IcecatLive.getDatasheet(
{
gallery: '#сontainer1',
videos: '#сontainer2',
},
{
Brand: 'Philips',
PartCode: 'DS8900/10',
UserName: 'shop_user',
UserReference: 'user_code',
ProviderId: 1,
},
'en'
);
});
</script>
<script src="https://live.icecat.biz/js/live-current-2.js" async></script>
</body>
</html> The same request with Age gating disabled:
<!DOCTYPE html>
<html>
<head></head>
<body>
<div id="сontainer1"></div>
<div id="сontainer2"></div>
<script>
window.addEventListener('liveload', function () {
IcecatLive.getDatasheet(
{
gallery: '#сontainer1',
videos: '#сontainer2',
},
{
Brand: 'Philips',
PartCode: 'DS8900/10',
UserName: 'shop_user',
UserReference: 'user_code',
ProviderId: 1,
videoAgeGatingDisabled: true,
},
'en'
);
});
</script>
<script src="https://live.icecat.biz/js/live-current-2.js" async></script>
</body>
</html> Users can request videos uploaded via UserMedia API exclusively without requesting any specific product or data containers using Icecat Live. ProviderId and UserReference parameters are required.
<!DOCTYPE html>
<html>
<head></head>
<body>
<div id="сontainer"></div>
<script>
window.addEventListener('liveload', function () {
IcecatLive.getUnlinkedVideos(
'#сontainer',
{
shopname: 'shop_user',
UserReference: 'user_code',
ProviderId: 1,
},
'en'
);
});
</script>
<script src="https://live.icecat.biz/js/live-current-2.js" async></script>
</body>
</html>
The Regular call of datasheet + UserMedia API parameters – Brand + MPN (can also be used with Icecat ID based, EAN-based calls, and Smart call):
<!DOCTYPE html>
<html>
<head></head>
<body>
<div id="container"></div>
<script>
window.addEventListener('liveload', function () {
window.IcecatLive.getDatasheet(
'#container',
{
Brand: 'Philips',
PartCode: 'DS8900/10',
UserName: 'shop_user',
UserReference: 'user_code',
ProviderId: 1,
},
'en'
);
});
</script>
<script src="https://live.icecat.biz/js/live-current-2.js" async></script>
</body>
</html> In this release, we focused on strengthening Icecat’s core value pillars: richer content experiences, more…
MAXHUB, a global provider of collaborative display and communication solutions, has joined the Icecat ecosystem…
Another wave of layoffs at Meta Platforms is making headlines. But beyond the numbers, the…
Icecat Hexagon is Icecat’s internal platform for connecting retailers, Akeneo users, and marketplaces like Mirakl.…
Today, Wakuli publishes its 2025 Progress Report, offering a closer look at how the company…
The European Accessibility Act (EAA) establishes new requirements to ensure that digital products and services…