> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://mediakind.ferndocs.com/harmonic/api/vos/asset-acquisition/extract-asset-as-mp-4/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://mediakind.ferndocs.com/_mcp/server. # Extract an asset as mp4 POST https://device.example.com:443/cluster1/vos-api/asset-acquisition/v1/asset/{id}/download Content-Type: application/json Reference: https://mediakind.ferndocs.com/harmonic/api/vos/asset-acquisition/extract-asset-as-mp-4 ## Authentication - `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer `, where token is your auth token. ## Request ### Path parameters - `id` (string, required) — ID of asset ### Query parameters - `force` (boolean, optional, default: false) — Allow to force the creation of a new extract even if one already exists from a previous extraction and has not expired ### Body (application/json) This endpoint expects a com.harmonicinc.vos.asset.acquisition.rest.model.ExtractionParameters. - `audioLanguages` (list of string, optional) — A list of audio languages to include in the extraction. To include all languages, set this null or remove it. - `expirationDuration` (integer, optional) — Download link expiration duration in minutes Default value 1440. Minimum value 5 minutes and maximum value 1440 minutes (24 hours). - `ismGeneration` (boolean, optional) — Flag to indicate if ISM file needs to be generated for the extracted asset. Default value is false. - `profileIndex` (integer, optional) — An index (from 1 to xx) for the size of the rendition to convert. index '1' means the bigger rendition in size will be converted. To convert all renditions, set this to null or remove it. The trimming is not frame accurate, the extracted file will be larger than the requested parameters, based on I frames position. - `trimParameters` (list of com.harmonicinc.vos.asset.acquisition.rest.model.conversion.TrimParameters, optional) — A list of trim parameters to include in the conversion the full or a portion of the asset. To not apply any trimming, set this to null or remove it. - `whitelistIps` (list of string, optional) — White list of comma separated IP addresses. Example: 192.168.1.1, 10.10.10.0/24 ## Response ### 200 Request successfully processed ### 201 Created ## Errors ### 400 Bad Request Error Bad request parameters - `any` ### 401 Unauthorized Error Unauthorized - `any` ### 403 Forbidden Error Forbidden - `any` ### 404 Not Found Error Data not found - `any` ### 408 Request Timeout Error API Request timeout - `any` ### 504 Gateway Timeout Error Extraction timeout - `any` ## Types ### com.harmonicinc.vos.asset.acquisition.rest.model.conversion.TrimParameters - `markIn` (long, optional) — Offset in ms from the start of the asset to define the start point of extraction - `markOut` (long, optional) — Offset in ms from the start of the asset to define the end point of extraction ## Examples ### Example 1 **Request** ```json {} ``` **Response** ```json {} ``` **SDK Code** ```python import requests url = "https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download" payload = {} headers = { "Authorization": "Bearer ", "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` ```javascript const url = 'https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download'; const options = { method: 'POST', headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'}, body: '{}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download" payload := strings.NewReader("{}") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Authorization", "Bearer ") req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["Authorization"] = 'Bearer ' request["Content-Type"] = 'application/json' request.body = "{}" response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download") .header("Authorization", "Bearer ") .header("Content-Type", "application/json") .body("{}") .asString(); ``` ```php request('POST', 'https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download', [ 'body' => '{}', 'headers' => [ 'Authorization' => 'Bearer ', 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download"); var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Bearer "); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = [ "Authorization": "Bearer ", "Content-Type": "application/json" ] let parameters = [] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ``` ### Example 2 **Request** ```json {} ``` **Response** ```json {} ``` **SDK Code** ```python import requests url = "https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download" payload = {} headers = { "Authorization": "Bearer ", "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` ```javascript const url = 'https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download'; const options = { method: 'POST', headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'}, body: '{}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download" payload := strings.NewReader("{}") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Authorization", "Bearer ") req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["Authorization"] = 'Bearer ' request["Content-Type"] = 'application/json' request.body = "{}" response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download") .header("Authorization", "Bearer ") .header("Content-Type", "application/json") .body("{}") .asString(); ``` ```php request('POST', 'https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download', [ 'body' => '{}', 'headers' => [ 'Authorization' => 'Bearer ', 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download"); var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Bearer "); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = [ "Authorization": "Bearer ", "Content-Type": "application/json" ] let parameters = [] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://device.example.com/cluster1/vos-api/asset-acquisition/v1/asset/id/download")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```