Videos API
Warning
Deprecation Notice
The Marketing Version 202311 (Marketing November 2023) and earlier versions (excluding 202306 and 202307) have been sunset. Additionally, the unversioned APIs will be sunset soon. We recommend that you migrate to the versioned APIs as well as migrate to the new Content and Community Management APIs to avoid disruptions. See the Migration page for more details.
If you haven’t yet migrated and have questions, submit a request on the LinkedIn Developer Support Portal.
The Videos API is a new offering from LinkedIn that features the ability to upload a captions file as well as thumbnail video functionality.
The request and response schema is simplified for uploading videos to the LinkedIn platform. These media uploads can then be referenced in a User-Generated Content (UGC) Post or various sponsored content and campaign ads. LinkedIn partners can create and upload rich and engaging personal or organization content for surfacing on select feeds within the LinkedIn ecosystem.
Note
The Videos API replaces the Assets API. See Migration Guide for more details.
Permissions
Permission | Description |
---|---|
w_organization_social | Post, comment, and like posts on behalf of an organization. Restricted to the company admin, DSC poster, or content admin |
w_member_social | Post, comment, and like posts on behalf of authenticated member |
rw_ads | Create ads and creatives for a sponsored account |
r_ads | Read an authenticated member's Ad Account. Restricted to Ad Accounts in which the authenticated member has one of the following Ad Account roles. |
Additionally, the following permission checks are performed when uploading a video:
- For videos with company URN owners, the caller needs to have have ADMIN or DSC permissions for the company page
- For videos with member URN owners, the caller needs to match the video owner
Invalid permissions results in the following API response:
{
"message": "Accessing this video resource is forbidden. Please check your permissions for this resource",
"status": 403
}
Video File Size Specifications
The following are the high-level specifications for non-connected-television video file sizing. For connected television video specification, refer to Connected Television Video Ads Specifications for more information.
- Length: Three seconds to 30 minutes
- File size: Between 75kb and 500MB
- File format: MP4
Refer to Video Ads Advertising Specifications for more information.
Schema
Note
All APIs require the request headers LinkedIn-Version: {Version in YYYYMM format}
and X-Restli-Protocol-Version: 2.0.0
. Refer to the Protocol Versions page to learn more about Rest.li Protocol 2.0.0.
Field Name | Type | Description | Required |
---|---|---|---|
aspectRatioHeight | float | Media aspect ratio height. For media with a 16:9 ratio, it is a 9. There might be decimal values for high density displays for a greater degree of precision. aspectRatioHeight and aspectRatioWidth would either both be present or both be null. It is empty if the media asset isn't available, failed processing, or there is another issue. | No |
aspectRatioWidth | float | Aspect ratio width of the media. For media with a 16:9 ratio, it is 16. There might be decimal values for high density displays for a greater degree of precision. aspectRatioHeight and aspectRatioWidth would either both be present or both be null. It is empty if the media asset isn't available, failed processing, or there is another issue. | No |
captions | URL | File identifier to retrieve the caption file. Present if initializeUploadRequest.uploadCaptions was true and a caption was successfully uploaded and processed. | No |
downloadUrl | URL | Public URL to download/view the media asset. It will be empty if the media asset isn't available, failed processing, or there is another issue. | No |
downloadUrlExpiresAt | Time optional | Milliseconds since the epoch (1970-01-01 00:00 UTC) when the identifier expires. If it is not present, it may never expire. Unless the use case has a security and legal exception, all URLs have an expiration time. If they don't, they can still expire because URLs are signed, and the sign keys may be rotated. If a non expiring URL was signed with a key that gets invalidated, it expires. | No |
duration | long | The length of the video in milliseconds. It is empty if the media asset isn't available, failed processing, or there is another issue. | No |
id | Video URN | The unique video URN. This field is read only. | No |
mediaLibraryMetadata | MediaLibraryMetadata | Metadata for assets stored in the media library. Metadata is tied to a specific account which must be specified in queries / requests. | No |
mediaLibraryMetadata.associatedAccount | URN | The associated account that owns the media library (e.g. urn:li:sponsoredAccount:123). The media library specific metadata fields will be filled with the data from this account's library. | Yes |
mediaLibraryMetadata.assetName | String | The name of the asset in the associatedAccount's library. | Yes |
mediaLibraryMetadata.mediaLibraryStatus | MediaLibraryStatus | Status of the asset's entry in the media library. Defaults to "ACTIVE" on creation. |
No |
status | String | No | |
processingFailureReason | String | Reason for video processing failure. This field will only be present if video.status is PROCESSING_FAILED. | No |
thumbnail | URL optional | File identifier to retrieve the thumbnail file. Present in one of the following cases: a) initializeUploadRequest.uploadThumbnail was true and a thumbnail was successfully uploaded and processed. b) initializeUploadRequest.uploadThumbnail was false but a system generated default thumbnail is present. | No |
initializeUploadRequest.fileSizeBytes | long | File size in bytes. This determines how many parts the video upload will be broken into. Maximum allowed Videos size is 5GB. | Yes |
initializeUploadRequest.mediaLibraryMetadata | MediaLibraryMetadata | Metadata for assets stored in the media library. Metadata is tied to a specific account which must be specified in queries / requests. When this field is present, the uploaded asset will also be registered in the account's media library. | No |
initializeUploadRequest.owner | URN | URN of the entity that owns this asset. Can be a person(urn:li:person:123), or organization(urn:li:organization:123) URN | Yes |
initializeUploadRequest.uploadCaptions | boolean default=false | TBD | No |
initializeUploadRequest.uploadThumbnail | boolean default=false | Whether you want to upload a thumbnail along with video. If the partner does not upload a thumbnail, a system generated thumbnail may be added to the video. If this field is set to true for an Ads Video, the processing of thumbnail must succeed for video to be servable. A feed video can serve even with failed captions. The value defaults to false as a thumbnail is optional for all videos. | No |
initializeVideoUploadResponse.captionsUploadUrl | URL optional | URL for uploading captions. Present only if initializeUploadRequest.uploadCaptions was true. | No |
initializeVideoUploadResponse.thumbnailUploadUrl | URL optional | URL for uploading thumbnail. This value is present only if initializeUploadRequest.uploadThumbnail is true. | No |
initializeVideoUploadResponse.uploadInstructions | VideoPartUploadInstruction array | Instructions for parts of multi-part video upload. Each entry in the array represents one part of the multi-part upload. It is never be empty. Parts are sorted by non-overlapping byte-range. The first entry is byte range: 0 - 4194303, the next one with 4194304 - 8388607 and so on. |
No |
initializeVideoUploadResponse.uploadToken | String | Identifier for an upload session. You need to pass this in the finalize step to link video parts together. | No |
initializeVideoUploadResponse.uploadUrlsExpireAt | Time | Milliseconds since the epoch (1970-01-01 00:00 UTC) when the upload URLs expire. All upload URLs expire at the same time. Trying to upload to expired URLs would throw a 401 error. Typically URLs expire 30 days from the time an upload is initialized. | No |
initializeVideoUploadResponse.video | Video URN | Video URN that the uploaded Video is associated with | |
uploadToken | String | upload token | No |
finalizeUploadRequest.uploadToken | String | Identifier for an upload session. | This is from the initialize video upload step. Partners should not try to interpret it. |
finalizeUploadRequest.uploadedPartIds | String array | IDs for each uploaded video part in the multipart upload. The order needs to be the same as the order of parts in the upload instructions. Callers are should get the IDs as ETags from the response headers when they upload the videos. ETag: "e4383924336106965d6cd2a111beaceb" ETag: "24259a14365734f1f1b4abcdb5e55d01e" corresponds to uploadedPartIds: ["e4383924336106965d6cd2a111beaceb", "24259a14365734f1f1b4abcdb5e55d01e"] | No |
finalizeUploadRequest.video | Video URN | Video URN that the uploaded Video is associated with | No |
How to Upload Videos
With Videos API, you can upload captions and thumbnails independent of the file size with multipart upload functionality by default.
Steps to upload a video:
- Initialize Upload for Video
- Split the file into 4 MB each (
split -b 4194303
). - Upload the Video
- Finalize Video Upload
Initialize Video Upload
Use the initializeUpload
action to register the upload. When you initialize, you declare the upcoming upload. Use the upload URL from the uploadInstructions
to upload the video.
Note
Initialize upload action is same irrespective of the file size, based on the file size, the response may have one or multiple upload URLs.
Sample Request
Video without Captions or Thumbnails
POST 'https://api.linkedin.com/rest/videos?action=initializeUpload'
{ "initializeUploadRequest": {
"owner": "urn:li:organization:2414183",
"fileSizeBytes": 1055736 ,
"uploadCaptions": false,
"uploadThumbnail": false
}
}
Sample Response
A successful response returns a 200 OK status code with the uploadUrl to upload the video.
{
"value": {
"uploadUrlsExpireAt": 1633234498985,
"video": "urn:li:video:C5505AQH-oV1qvnFtKA",
"uploadInstructions": [
{
"uploadUrl": "https://www.linkedin.com/dms-uploads/C5505AQH-oV1qvnFtKA/uploadedVideo?sau=aHR0cHM6Ly93d3cubGlua2VkaW4tZWkuY29tL2FtYnJ5L2FtYnJ5LXZpZGVvZWkvP3gtbGktYW1icnktZXA9QVFHVkdRS0FtS05oM2dBQUFYd19ObG1uZzVYcllXajEzZjIybXh4LW55SGVBclVKcE8y",
"lastByte": 4194303,
"firstByte": 0
}
],
"uploadToken": ""
}
}
Note
Videos uploaded with the Video Ads API can now be reused across different video post formats. For example, a video uploaded and posted to the feed can also be used in a sponsored video ad and does not require a separate video upload.
Sample Request
Video with Captions but no Thumbnails
POST 'https://api.linkedin.com/rest/videos?action=initializeUpload'
{ "initializeUploadRequest": {
"owner": "urn:li:organization:2414183",
"fileSizeBytes": 1055736 ,
"uploadCaptions": true,
"uploadThumbnail": false
}
}
Sample Response
A successful response returns a 200 OK
status code with the uploadUrl
to upload the video.
{
"value": {
"uploadUrlsExpireAt": 1633234498985,
"video": "urn:li:video:C5505AQH-oV1qvnFtKA",
"uploadInstructions": [
{
"uploadUrl": "https://www.linkedin.com/dms-uploads/C5505AQH-oV1qvnFtKA/uploadedVideo?sau=aHR0cHM6Ly93d3cubGlua2VkaW4tZWkuY29tL2FtYnJ5L2FtYnJ5LXZpZGVvZWkvP3gtbGktYW1icnktZXA9QVFHVkdRS0FtS05oM2dBQUFYd19ObG1uZzVYcllXajEzZjIybXh4LW55SGVBclVKcE8y",
"lastByte": 4194303,
"firstByte": 0
}
],
"uploadToken": ""
}
}
Sample Request
Video with Thumbnails but no Captions
Make sure you set the Content-Type header to application/json
.
POST 'https://api.linkedin.com/rest/videos?action=initializeUpload'
{ "initializeUploadRequest": {
"owner": "urn:li:organization:2414183",
"fileSizeBytes": 1055736 ,
"uploadCaptions": false,
"uploadThumbnail": true
}
}
Sample Response
A successful response returns a 200 OK
status code with the uploadUrl
to upload the video.
{
"value": {
"uploadUrlsExpireAt": 1633234498985,
"video": "urn:li:video:C5505AQH-oV1qvnFtKA",
"uploadInstructions": [
{
"uploadUrl": "https://www.linkedin.com/dms-uploads/C5505AQH-oV1qvnFtKA/uploadedVideo?sau=aHR0cHM6Ly93d3cubGlua2VkaW4tZWkuY29tL2FtYnJ5L2FtYnJ5LXZpZGVvZWkvP3gtbGktYW1icnktZXA9QVFHVkdRS0FtS05oM2dBQUFYd19ObG1uZzVYcllXajEzZjIybXh4LW55SGVBclVKcE8y",
"lastByte": 4194303,
"firstByte": 0
}
],
"uploadToken": ""
}
}
Sample Request
Video with MediaLibraryMetadata for media library registration
Note that the mediaLibraryMetadata.mediaLibraryStatus
defaults to "ACTIVE" on creation.
POST 'https://api.linkedin.com/rest/videos?action=initializeUpload'
{ "initializeUploadRequest": {
"owner": "urn:li:organization:2414183",
"fileSizeBytes": 1055736 ,
"uploadCaptions": false,
"uploadThumbnail": false,
"mediaLibraryMetadata": {
"associatedAccount": "urn:li:sponsoredAccount:123456789",
"assetName": "My media library asset"
}
}
}
Sample Response
A successful response returns a 200 OK status code with the uploadUrl to upload the video.
{
"value": {
"uploadUrlsExpireAt": 1633234498985,
"video": "urn:li:video:C5505AQH-oV1qvnFtKA",
"uploadInstructions": [
{
"uploadUrl": "https://www.linkedin.com/dms-uploads/C5505AQH-oV1qvnFtKA/uploadedVideo?sau=aHR0cHM6Ly93d3cubGlua2VkaW4tZWkuY29tL2FtYnJ5L2FtYnJ5LXZpZGVvZWkvP3gtbGktYW1icnktZXA9QVFHVkdRS0FtS05oM2dBQUFYd19ObG1uZzVYcllXajEzZjIybXh4LW55SGVBclVKcE8y",
"lastByte": 4194303,
"firstByte": 0
}
],
"uploadToken": ""
}
}
Upload the Video
Sample Request
curl -v \
-H "Content-Type:application/octet-stream" \
--upload-file ~/Downloads/sample.mp4 \
"https://www.linkedin.com/dms-uploads/C5505AQH-oV1qvnFtKA/uploadedVideo?sau=aHR0cHM6Ly93d3cubGlua2VkaW4tZWkuY29tL2FtYnJ5L2FtYnJ5LXZpZGVvZWkvP3gtbGktYW1icnktZXA9QVFHVkdRS0FtS05oM2dBQUFYd19ObG1uZzVYcllXajEzZjIybXh4LW55SGVBclVKcE8y"
The headers in the response return an ETag as shown below. Ensure that you save eTag for future use.
Sample Response
A successful response returns a 200 OK
status code.
HTTP/1.1 200 OK
Content-Length: 0
Connection: keep-alive
etag: /ambry-videoei/signedId/AQHX97-zKFZrewAAAXx7Kf1h4pHEr_EVJ2_BGyigpJdmMfO9DreqqynKhTXcMMtKmFtM_JL07JFHXfzHoegWPUsBw9ofV7Z3KWfKRvB41FtIXq9pmvQtkDNrw_nPX4QjsDktxxzFq2gMlC9e3H4x8U_y0QQFQO0pMvtdwaBoFZ_eq_hGZRQCG-zTcYD0J_Nqsf1bApcZ_KGM3Zdc62eATjUTAV7zH4f--18-PLbhQMkKl4g9tjzgRVVv3jp3EPwRidBb7bk0RSI.bin
Upload Captions
curl -v -H 'Content-Type:multipart/form-data' -F metadata='{ "format": "SRT", "formattedForEasyReader": true, "largeText": true, "source": "USER_PROVIDED", "locale": { "variant": "AMERICAN", "country": "US", "language": "EN"}, "transcriptType": "CLOSED_CAPTION" }' -F 'file=@/Downloads/vector4/sample.srt;type=text/plain'
"https://www.linkedin.com/dms-mpf-uploads/C5510AQFcJm7vFh0-GQ/userUploadedCustomCaptions/YBIDwEuGcAA-/0?sync=0&v=beta&ut=1dpApVoV7zLac1'
Important
In the above call, The "@" in 'file=@/Downloads/vector4/sample.srt;type=text/plain'
is mandatory to avoid any errors.
Sample Response
A successful response returns a 201 Created
status code.
POST /dms-mpf-uploads/C5510AQHwJl8JK7pBbw/userUploadedCustomCaptions/X9xZTedGYAA-/0?sync=0&v=beta&ut=2xCgsvCrxHQG81 HTTP/2
Host: www.linkedin.com
Content-Length: 962
Content-Type: multipart/form-data; boundary=------------------------f04e0be9b719964e
Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
[962 bytes data]
We are completely uploaded and fine
HTTP/2 201
Upload Thumbnail
curl -v -H 'media-type-family:STILLIMAGE' -H 'Content-Type:application/octet-stream' --upload-file '~/Downloads/vector4/kiki.jpg' 'https://www.linkedin.com/dms-uploads/C5510AQHHRzI0nYgcuw/ads-video-userUploadedThumbnail/0?ca=vector_ads&cn=uploads_secure&ccn=ambry-video&sync=0&v=beta&ut=0LIRxJwkoZQG81
Sample Response
A successful response returns a 201 Created
status code.
PUT /dms-uploads/C5510AQHHRzI0nYgcuw/ads-video-userUploadedThumbnail/0?ca=vector_ads&cn=uploads_secure&ccn=ambry-video&sync=0&v=beta&ut=0LIRxJwkoZQG81 HTTP/2
Host: www.linkedin-ei.com
User-Agent: curl/7.64.1
media-type-family:STILLIMAGE
Content-Type:application/octet-stream
X-LI-R2-W-MsgType: REST
Accept: application/json
Content-Length: 256600
Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
[65536 bytes data]
We are completely uploaded and fine
HTTP/2 201
Finalize Video Upload
Sample Request
POST https://api.linkedin.com/rest/videos?action=finalizeUpload
{
"finalizeUploadRequest": {
"video": "urn:li:video:C5505AQHErI8lGthkfA",
"uploadToken": "",
"uploadedPartIds": [
"/ambry-videoei/signedId/AQHR565FaYkDgAAAAXw_UJ1CyIkbTA1fh0JAC2dLx1lklVp7hflbaQTu7F3n736vqZ0oF16jNYfdQeiw_Rqoo8oB0foqB3qpWwFYWoDt0lu3GYMvDOfoB4jKCgLHeP-bBsagclZ0aVGC-8QPxiq9iC7JAcWESNdAooTqS40jVEK2kqcXBumDWLGQrMpfNSJ1qHrY4UqflpL3ibwa7BVev5VfUjkdK6CPfEhfVHbDEaE-93-2dio20_XUee5o2ZSYxMz4Txx8I3Y.bin"
]
}
}
A successful response returns the 200 OK
status code.
Get a Video
Sample Request
Sample Response
{
"duration": 32066,
"aspectRatioWidth": 16,
"owner": "urn:li:organization:18799005",
"thumbnail": "https://media-exp1.licdn.com/dms/image/C4E10AQGUkQY7trgh-Q/ads-video-thumbnail_720_1280/0/1635274077531?e=2147483647&v=beta&t=_HxpoaXestMGYSqDyziZjUtzDvsp9zOgZvAy9HtVJZw",
"downloadUrlExpiresAt": 1650549600000,
"downloadUrl": "https://dms.licdn.com/playlist/C4E10AQGUkQY7trgh-Q/mp4-720p-30fp-crf28/0/1635274088269?e=2147483647&v=beta&t=tsv3E_sgOT1e7VPGpmrxk6ED7C0W3vwTh9Ui-8mlFZk",
"id": "urn:li:video:C4E10AQGUkQY7trgh-Q",
"aspectRatioHeight": 9,
"captions": "https://www.linkedin.com/dms-mpf-uploads/C5510AQHHRzI0nYgcuw/ads-video-userUploadedThumbnail/0?ca=vector_ads&cn=uploads_secure&ccn=ambry-video&sync=0&v=beta&ut=0LIRxJwkoZQG81",
"status": "AVAILABLE"
}
Note
https://www.linkedin.com/dms-mpf-uploads/C5510AQHHRzI0nYgcuw/ads-video-userUploadedThumbnail/0?ca=vector_ads&cn=uploads_secure&ccn=ambry-video&sync=0&v=beta&ut=0LIRxJwkoZQG81
is the upload URL provided in response during the initializing video step.
Batch Get a Video
Sample Request
GET https://api.linkedin.com/rest/videos?ids=List(urn%3Ali%3Avideo%3AC4D10AQE9WE5n4uJKUg,urn%3Ali%3Avideo%3AC5F10AQElP1fVH1Ke6g)
Sample Response
{
"results": {
"urn:li:video:C4D10AQE9WE5n4uJKUg": {
"owner": "urn:li:organization:2414183",
"status": "WAITING_UPLOAD",
"id": "urn:li:video:C4D10AQE9WE5n4uJKUg"
}
},
"statuses": {
"urn:li:video:C4D10AQE9WE5n4uJKUg": 200,
"urn:li:video:C5F10AQElP1fVH1Ke6g": 404
},
"errors": {
"urn:li:video:C5F10AQElP1fVH1Ke6g": {
"message": "Could not find entity",
"status": 404,
"code": "NOT_FOUND"
}
}
}
Partial Update on a Video
Only supports updates on the media library metadata and only for the specified account. As such, the associatedAccount
parameter is mandatory. Silently ignores any other patch data.
When updating the mediaLibraryMetadata.mediaLibraryStatus
field, an asset can go from ACTIVE to ARCHIVED only if it is not currently in processing (i.e. is done processing or processing failed). An asset can only go from ARCHIVED to ACTIVE if it succeeded processing. Updating the mediaLibraryMetadata.mediaLibraryStatus
field will not update the last modified time of the asset.
Sample Request
POST https://api.linkedin.com/rest/videos/urn%3Ali%3Avideo%3AC5510AQEB1AGuxQ1NEA?associatedAccount=urn%3Ali%3AsponsoredAccount%3A123456789
{
"patch":{
"mediaLibraryMetadata":{
"$set":{
"assetName":"updated name",
"mediaLibraryStatus":"ARCHIVED"
}
}
}
}
Sample Response
A successful response returns a 204 status code.
Find by Associated Account
Get the Videos associated with the specified account, by descending order of last modified time.
Parameters
Parameter | Required | Possible Values |
---|---|---|
q | Yes | Must be associatedAccount |
mediaLibraryStatus | No | Optional filter on the media library status. When omitted, all videos will be returned. |
start | No | The index at which the returned elements should begin. Defaults to 0. |
count | No | The number of elements to return, up to 1000. Defaults to 10. |
Sample Request
GET https://api.linkedin.com/rest/videos?start=0&count=1&associatedAccount=urn%3Ali%3AsponsoredAccount%3A123456789&mediaLibraryStatus=ACTIVE&q=associatedAccount \
Sample Response
{
"elements": [
{
"owner": "urn:li:organization:2414183",
"aspectRatioWidth": 9.0,
"duration": 6827,
"thumbnail": "https://media.licdn-ei.com/dms/image/C5510AQEB1AGuxQ1NEA/ads-video-thumbnail_720_1280/0/1674575147547/customthumbnail?e=1676390400&v=beta&t=t8j6ysV2yIGB0pBJz63N-X0AB0bMn_L8vqbl7A32B00",
"downloadUrlExpiresAt": 1676390400000,
"downloadUrl": "https://dms.licdn-ei.com/playlist/C5510AQEB1AGuxQ1NEA/mp4-640p-30fp-crf28/0/1674575155048/customthumbnail?e=1676390400&v=beta&t=wbhPr3X9gQ-b7q36KMrSHXRiSqPXSaab-Q-B_oQ9AiI",
"id": "urn:li:video:C5510AQEB1AGuxQ1NEA",
"aspectRatioHeight": 16.0,
"mediaLibraryMetadata": {
"associatedAccount": "urn:li:sponsoredAccount:123456789",
"mediaLibraryStatus": "ACTIVE",
"assetName": "custom thumbnail"
},
"status": "AVAILABLE"
},
]
"paging": {
"count": 1,
"start": 0,
"links": [
{
"rel": "next",
"type": "application/json",
"href": "https://api.linkedin.com/rest/videos?associatedAccount=urn%3Ali%3AsponsoredAccount%3A521498108&q=associatedAccount&start=1&count=1"
}
]
}
}
Error Messages
Code HTTP | Status Code | Error Message Template |
---|---|---|
INVALID_VIDEO_ID | 400 | This Video ID is invalid |
INVALID_CALL_TO_ACTION | 400 | {cta} is an invalid Call To Action |
INVALID_URL | 400 | {cta} is an invalid Url |
INVALID_URN_TYPE | 400 | {field} value {value} must be a {urnType} URN |
EXPIRED_UPLOAD_URL | 400 | The Video upload Url is expired |
INVALID_URN_ID | 400 | This URN Id is invalid |
NOT_FOUND | 404 | Could not find entity |
MEDIA_ASSET_PROCESSING_FAILED | 400 | Media asset failed processing |
MEDIA_ASSET_WAITING_UPLOAD | 400 | Media asset is waiting upload |
UPDATING_ASSET_FAILED | 400 | Failed to update asset {urn} for the intended usecase. Please recreate the asset and try again. |
Migration from Assets API to Videos API
LinkedIn recommends migrating to the Videos API for your video uploads. The following sections describe some of the key benefits.
Response Schema Enhancement
Assets API | Videos API | Benefit |
---|---|---|
Returns generic digitalMediaAsset URN for all content | Returns specific URN (e.g., video:C4E05AQEw_VQIt69CrA) | Purpose-built response URN rather than generic asset URN |
Returns mediaArtifact field with superfluous details | Does not return mediaArtifact field | Simplified response structure |
Headers for AWS S3 Upload for backward compatibility (LinkedIn has storage capability) | No unnecessary headers | Simplified response structure |
urlExpiresAt param present in multi-part even with consistent value | urlExpiresAt param outside nested structure for a single value | Simplified response structure |
Nested field relationships | Plain schema | Simplified response structure |
Improvements with Request Schema to complete Upload
Assets API | Videos API | Benefit |
---|---|---|
Nested field relationships required in the request schema | Plain schema | Simplified Request structure |
Metadata, mediaArtifact, ETags, status fields required in request schema | Requires only ETags and upload token (previously metadata) | Simplified request structure |
Action Purpose | Assets API Action Name | Videos API Name |
---- | ----- | --- |
Init Upload | registerUpload | initializeUpload |
Complete Upload | completeMultiPartUpload | finalizeUpload |