Mint a presigned upload URL
curl --request POST \
--url https://api.sydium.com/v1/media/upload-url \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fileSize": 123
}
'import requests
url = "https://api.sydium.com/v1/media/upload-url"
payload = { "fileSize": 123 }
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({fileSize: 123})
};
fetch('https://api.sydium.com/v1/media/upload-url', 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.sydium.com/v1/media/upload-url",
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([
'fileSize' => 123
]),
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.sydium.com/v1/media/upload-url"
payload := strings.NewReader("{\n \"fileSize\": 123\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.sydium.com/v1/media/upload-url")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fileSize\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sydium.com/v1/media/upload-url")
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 \"fileSize\": 123\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"publicUrl": "<string>",
"key": "<string>",
"uploadUrl": "<string>",
"mimeType": "<string>",
"bytes": 123,
"width": 123,
"height": 123,
"duration": 123
},
"meta": {}
}{
"success": false,
"error": {
"code": "bad_request",
"message": "<string>"
},
"meta": {}
}{
"success": false,
"error": {
"code": "bad_request",
"message": "<string>"
},
"meta": {}
}{
"success": false,
"error": {
"code": "bad_request",
"message": "<string>"
},
"meta": {}
}{
"success": false,
"error": {
"code": "bad_request",
"message": "<string>"
},
"meta": {}
}API Reference
Mint a presigned upload URL
POST
/
v1
/
media
/
upload-url
Mint a presigned upload URL
curl --request POST \
--url https://api.sydium.com/v1/media/upload-url \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fileSize": 123
}
'import requests
url = "https://api.sydium.com/v1/media/upload-url"
payload = { "fileSize": 123 }
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({fileSize: 123})
};
fetch('https://api.sydium.com/v1/media/upload-url', 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.sydium.com/v1/media/upload-url",
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([
'fileSize' => 123
]),
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.sydium.com/v1/media/upload-url"
payload := strings.NewReader("{\n \"fileSize\": 123\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.sydium.com/v1/media/upload-url")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fileSize\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sydium.com/v1/media/upload-url")
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 \"fileSize\": 123\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"publicUrl": "<string>",
"key": "<string>",
"uploadUrl": "<string>",
"mimeType": "<string>",
"bytes": 123,
"width": 123,
"height": 123,
"duration": 123
},
"meta": {}
}{
"success": false,
"error": {
"code": "bad_request",
"message": "<string>"
},
"meta": {}
}{
"success": false,
"error": {
"code": "bad_request",
"message": "<string>"
},
"meta": {}
}{
"success": false,
"error": {
"code": "bad_request",
"message": "<string>"
},
"meta": {}
}{
"success": false,
"error": {
"code": "bad_request",
"message": "<string>"
},
"meta": {}
}Authorizations
Opaque API key (sk_live_... / sk_test_...)
Body
application/json
Must be one of the supported types. An unsupported type is rejected rather than stored, because the file extension is derived from it and an unknown extension makes the publish pipeline misclassify a video as an image.
Available options:
image/jpeg, image/png, image/gif, image/webp, video/mp4, video/quicktime, video/webm Bytes. Images are limited to 50MB, video to 2GB. The value is signed into the presigned URL, so a larger upload than declared is rejected by storage.
Was this page helpful?
⌘I

