curl --request POST \
--url https://api.so-me.studio/v1/posts/presign-media \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"files": [
{
"filename": "<string>",
"mimetype": "<string>",
"size": 123,
"duration": 43200.05
}
]
}
'import requests
url = "https://api.so-me.studio/v1/posts/presign-media"
payload = { "files": [
{
"filename": "<string>",
"mimetype": "<string>",
"size": 123,
"duration": 43200.05
}
] }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
files: [{filename: '<string>', mimetype: '<string>', size: 123, duration: 43200.05}]
})
};
fetch('https://api.so-me.studio/v1/posts/presign-media', 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.so-me.studio/v1/posts/presign-media",
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([
'files' => [
[
'filename' => '<string>',
'mimetype' => '<string>',
'size' => 123,
'duration' => 43200.05
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.so-me.studio/v1/posts/presign-media"
payload := strings.NewReader("{\n \"files\": [\n {\n \"filename\": \"<string>\",\n \"mimetype\": \"<string>\",\n \"size\": 123,\n \"duration\": 43200.05\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.so-me.studio/v1/posts/presign-media")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"files\": [\n {\n \"filename\": \"<string>\",\n \"mimetype\": \"<string>\",\n \"size\": 123,\n \"duration\": 43200.05\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.so-me.studio/v1/posts/presign-media")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"files\": [\n {\n \"filename\": \"<string>\",\n \"mimetype\": \"<string>\",\n \"size\": 123,\n \"duration\": 43200.05\n }\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"fileId": "<string>",
"uploadUrl": "<string>",
"s3Prefix": "<string>",
"fileSrc": "<string>"
}
]Vorsignierte Upload-URLs für Mediendateien erzeugen
Gibt für jede Datei vorsignierte S3-URLs zurück. Lade jede Datei per HTTP PUT an ihre uploadUrl hoch, mit einem Content-Type-Header, der dem für diese Datei angegebenen mimetype entspricht (zum Beispiel Content-Type: image/jpeg). Die URL ist mit diesem Header signiert; ein PUT ohne ihn oder mit einem anderen Wert schlägt daher mit 403 SignatureDoesNotMatch fehl. Übergib anschließend die zurückgegebenen Werte s3Prefix und fileSrc in der Anfrage zum Erstellen des Beitrags. HTML, SVG, XML, Skripte und unbekannte Typen werden mit 400 abgelehnt.
curl --request POST \
--url https://api.so-me.studio/v1/posts/presign-media \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"files": [
{
"filename": "<string>",
"mimetype": "<string>",
"size": 123,
"duration": 43200.05
}
]
}
'import requests
url = "https://api.so-me.studio/v1/posts/presign-media"
payload = { "files": [
{
"filename": "<string>",
"mimetype": "<string>",
"size": 123,
"duration": 43200.05
}
] }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
files: [{filename: '<string>', mimetype: '<string>', size: 123, duration: 43200.05}]
})
};
fetch('https://api.so-me.studio/v1/posts/presign-media', 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.so-me.studio/v1/posts/presign-media",
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([
'files' => [
[
'filename' => '<string>',
'mimetype' => '<string>',
'size' => 123,
'duration' => 43200.05
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.so-me.studio/v1/posts/presign-media"
payload := strings.NewReader("{\n \"files\": [\n {\n \"filename\": \"<string>\",\n \"mimetype\": \"<string>\",\n \"size\": 123,\n \"duration\": 43200.05\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.so-me.studio/v1/posts/presign-media")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"files\": [\n {\n \"filename\": \"<string>\",\n \"mimetype\": \"<string>\",\n \"size\": 123,\n \"duration\": 43200.05\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.so-me.studio/v1/posts/presign-media")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"files\": [\n {\n \"filename\": \"<string>\",\n \"mimetype\": \"<string>\",\n \"size\": 123,\n \"duration\": 43200.05\n }\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"fileId": "<string>",
"uploadUrl": "<string>",
"s3Prefix": "<string>",
"fileSrc": "<string>"
}
]Autorisierungen
Body
Beitragstyp, für den die Medien gedacht sind
TEXT, IMAGE, MULTIPLE_IMAGES, VIDEO, CAROUSEL, REEL, STORY Ziel-Plattform
TWITTER, INSTAGRAM, LINKEDIN, LINKEDIN_PAGE, FACEBOOK, TIKTOK, YOUTUBE, THREADS, WHATSAPP Dateien, für die Upload-URLs erzeugt werden sollen
Show child attributes
Show child attributes
Antwort
Vorsignierte URLs erzeugt
UUID des Dateieintrags
Vorsignierte PUT-URL (läuft nach 1 Stunde ab). Sende die Datei mit einem Content-Type, der dem angegebenen mimetype entspricht.
S3-Objektschlüssel – übergib ihn beim Erstellen des Beitrags
Öffentliche CDN-URL – übergib sie beim Erstellen des Beitrags