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>"
}
]Générer des URL de téléversement présignées pour des fichiers multimédias
Renvoie des URL S3 présignées pour chaque fichier. Téléversez chaque fichier avec une requête HTTP PUT vers son uploadUrl, avec un en-tête Content-Type égal au mimetype que vous avez déclaré pour ce fichier (par exemple Content-Type: image/jpeg). L’URL est signée avec cet en-tête : un PUT sans lui, ou avec une autre valeur, échoue avec une erreur 403 SignatureDoesNotMatch. Transmettez ensuite les valeurs s3Prefix et fileSrc renvoyées dans la requête de création de publication. Les types HTML, SVG, XML, script et inconnus sont refusés avec une erreur 400.
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>"
}
]Autorisations
Corps
Type de publication auquel le média est destiné
TEXT, IMAGE, MULTIPLE_IMAGES, VIDEO, CAROUSEL, REEL, STORY Plateforme de réseau social cible
TWITTER, INSTAGRAM, LINKEDIN, LINKEDIN_PAGE, FACEBOOK, TIKTOK, YOUTUBE, THREADS, WHATSAPP Fichiers pour lesquels générer des URL de téléversement
Show child attributes
Show child attributes
Réponse
URL présignées générées
UUID de l'enregistrement du fichier
URL PUT présignée (expire au bout d'1 heure). Envoyez le fichier avec un Content-Type égal au mimetype déclaré.
Clé de l'objet S3 : à transmettre lors de la création de la publication
URL publique du CDN : à transmettre lors de la création de la publication