Submit Media Link to Track
curl --request POST \
--url https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://wetransfer.com/downloads/abc123",
"name": "Track Demo",
"type": "audio"
}
'import requests
url = "https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link"
payload = {
"url": "https://wetransfer.com/downloads/abc123",
"name": "Track Demo",
"type": "audio"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://wetransfer.com/downloads/abc123',
name: 'Track Demo',
type: 'audio'
})
};
fetch('https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => 'https://wetransfer.com/downloads/abc123',
'name' => 'Track Demo',
'type' => 'audio'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link"
payload := strings.NewReader("{\n \"url\": \"https://wetransfer.com/downloads/abc123\",\n \"name\": \"Track Demo\",\n \"type\": \"audio\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://wetransfer.com/downloads/abc123\",\n \"name\": \"Track Demo\",\n \"type\": \"audio\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://wetransfer.com/downloads/abc123\",\n \"name\": \"Track Demo\",\n \"type\": \"audio\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"cloudId": "550e8400-e29b-41d4-a716-446655440000",
"cloudUrl": "https://storage.royalti.io/files/audio.mp3",
"type": "audio",
"name": "my-track.mp3",
"isLink": false,
"releasePath": "tenant123/releases/release456/tracks/track789/file.mp3",
"metadata": {
"duration": 213.5,
"bitrate": "320",
"sampleRate": "44100",
"channels": "2",
"codec": "mp3",
"fileSize": 1048576,
"mimeType": "audio/mpeg",
"processedAt": "2023-11-07T05:31:56Z",
"linkValidated": true
}
},
"message": "Media uploaded successfully"
}{
"status": "error",
"message": "Invalid request parameters"
}{
"status": "error",
"message": "Unauthorized"
}{
"status": "error",
"message": "Resource not found"
}{
"status": "error",
"message": "Internal server error"
}Release
Submit Media Link to Track
POST /releases//tracks//media/link
POST
/
releases
/
{id}
/
tracks
/
{trackId}
/
media
/
link
Submit Media Link to Track
curl --request POST \
--url https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://wetransfer.com/downloads/abc123",
"name": "Track Demo",
"type": "audio"
}
'import requests
url = "https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link"
payload = {
"url": "https://wetransfer.com/downloads/abc123",
"name": "Track Demo",
"type": "audio"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://wetransfer.com/downloads/abc123',
name: 'Track Demo',
type: 'audio'
})
};
fetch('https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => 'https://wetransfer.com/downloads/abc123',
'name' => 'Track Demo',
'type' => 'audio'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link"
payload := strings.NewReader("{\n \"url\": \"https://wetransfer.com/downloads/abc123\",\n \"name\": \"Track Demo\",\n \"type\": \"audio\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://wetransfer.com/downloads/abc123\",\n \"name\": \"Track Demo\",\n \"type\": \"audio\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.royalti.io/releases/{id}/tracks/{trackId}/media/link")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://wetransfer.com/downloads/abc123\",\n \"name\": \"Track Demo\",\n \"type\": \"audio\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"cloudId": "550e8400-e29b-41d4-a716-446655440000",
"cloudUrl": "https://storage.royalti.io/files/audio.mp3",
"type": "audio",
"name": "my-track.mp3",
"isLink": false,
"releasePath": "tenant123/releases/release456/tracks/track789/file.mp3",
"metadata": {
"duration": 213.5,
"bitrate": "320",
"sampleRate": "44100",
"channels": "2",
"codec": "mp3",
"fileSize": 1048576,
"mimeType": "audio/mpeg",
"processedAt": "2023-11-07T05:31:56Z",
"linkValidated": true
}
},
"message": "Media uploaded successfully"
}{
"status": "error",
"message": "Invalid request parameters"
}{
"status": "error",
"message": "Unauthorized"
}{
"status": "error",
"message": "Resource not found"
}{
"status": "error",
"message": "Internal server error"
}This endpoint requires authentication. Include your Bearer token in the Authorization header.
Description
This endpoint allows submitting an external link as media for a specific track. Only audio and video links are allowed for tracks. Each track can have only one audio or video file. The link is validated and stored for later processing. Authorization:- Required role:
useror higher
Code Examples
const response = await fetch('https://api.royalti.io/releases/example-id/tracks/example-id/media/link', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
"ref": "#/components/schemas/TrackLinkSubmissionRequest"
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://api.royalti.io/releases/example-id/tracks/example-id/media/link',
headers={
'Authorization': f'Bearer {token}'
},
json={"ref":"#/components/schemas/TrackLinkSubmissionRequest"}
)
data = response.json()
print(data)
curl -X POST https://api.royalti.io/releases/example-id/tracks/example-id/media/link \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"ref":"#/components/schemas/TrackLinkSubmissionRequest"}'
Authorizations
JWT Authorization header using the Bearer scheme. Format: "Bearer {token}"
Body
application/json
⌘I