Upload media part
PUT /v1/media/:id/parts/:part scope write
Uploads one part of the file (raw bytes in the body). Re-sending the same part is safe. Every part except the last must have the same size (at least 5 MiB).
Headers
Authorization: Bearer praeko_… and X-Praeko-Contract: en. Always send both.Legacy Portuguese alias (still answered, marked as deprecated): /v1/midia/:id/partes/:n.
Parameters
| Name | In | Description |
|---|---|---|
id |
path | Media item id. |
part |
path | Part number, from 1 to 10000. |
Request body
The raw bytes of the file (not JSON), with the file's Content-Type.
Example
curl -X PUT "https://praeko.app/v1/media/01KA3VQ7M2T9XE4HB8N5RZ6C0D/parts/1" \
-H "Authorization: Bearer $PRAEKO_KEY" \
-H "X-Praeko-Contract: en" \
-H "Content-Type: video/mp4" \
--data-binary @video.mp4const res = await fetch("https://praeko.app/v1/media/01KA3VQ7M2T9XE4HB8N5RZ6C0D/parts/1", {
method: "PUT",
headers: {
"Authorization": `Bearer ${process.env.PRAEKO_KEY}`,
"X-Praeko-Contract": "en",
"Content-Type": "video/mp4",
},
body: await (await import("node:fs/promises")).readFile("video.mp4"),
});
console.log(res.status, await res.json());// O @praeko/sdk ainda não tem um método para esta rota: use o fetch (aba JavaScript).
const res = await fetch("https://praeko.app/v1/media/01KA3VQ7M2T9XE4HB8N5RZ6C0D/parts/1", {
method: "PUT",
headers: {
"Authorization": `Bearer ${process.env.PRAEKO_KEY}`,
"X-Praeko-Contract": "en",
"Content-Type": "video/mp4",
},
body: await (await import("node:fs/promises")).readFile("video.mp4"),
});
console.log(res.status, await res.json());import os
import requests
resp = requests.put(
"https://praeko.app/v1/media/01KA3VQ7M2T9XE4HB8N5RZ6C0D/parts/1",
headers={
"Authorization": f"Bearer {os.environ['PRAEKO_KEY']}",
"X-Praeko-Contract": "en",
"Content-Type": "video/mp4",
},
data=open("video.mp4", "rb"),
)
print(resp.status_code, resp.json())<?php
$ch = curl_init('https://praeko.app/v1/media/01KA3VQ7M2T9XE4HB8N5RZ6C0D/parts/1');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("PRAEKO_KEY"),
'X-Praeko-Contract: en',
'Content-Type: video/mp4',
],
CURLOPT_POSTFIELDS => file_get_contents("video.mp4"),
]);
$resposta = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), " ", $resposta, PHP_EOL;
curl_close($ch);package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
body, err := os.Open("video.mp4")
if err != nil {
panic(err)
}
defer body.Close()
req, err := http.NewRequest("PUT", "https://praeko.app/v1/media/01KA3VQ7M2T9XE4HB8N5RZ6C0D/parts/1", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("PRAEKO_KEY"))
req.Header.Set("X-Praeko-Contract", "en")
req.Header.Set("Content-Type", "video/mp4")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(resp.Status, string(out))
}require "net/http"
require "uri"
uri = URI("https://praeko.app/v1/media/01KA3VQ7M2T9XE4HB8N5RZ6C0D/parts/1")
request = Net::HTTP::Put.new(uri)
request["Authorization"] = "Bearer #{ENV['PRAEKO_KEY']}"
request["X-Praeko-Contract"] = "en"
request["Content-Type"] = "video/mp4"
request.body = File.binread("video.mp4")
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }
puts response.code, response.bodyusing System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Put, "https://praeko.app/v1/media/01KA3VQ7M2T9XE4HB8N5RZ6C0D/parts/1");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("PRAEKO_KEY"));
request.Headers.Add("X-Praeko-Contract", "en");
request.Content = new StreamContent(File.OpenRead("video.mp4"));
request.Content.Headers.ContentType = new MediaTypeHeaderValue("video/mp4");
using var response = await client.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode} {await response.Content.ReadAsStringAsync()}");import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Path;
public class Main {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://praeko.app/v1/media/01KA3VQ7M2T9XE4HB8N5RZ6C0D/parts/1"))
.header("Authorization", "Bearer " + System.getenv("PRAEKO_KEY"))
.header("X-Praeko-Contract", "en")
.header("Content-Type", "video/mp4")
.method("PUT", HttpRequest.BodyPublishers.ofFile(Path.of("video.mp4")))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode() + " " + response.body());
}
}http PUT "https://praeko.app/v1/media/01KA3VQ7M2T9XE4HB8N5RZ6C0D/parts/1" \
"Authorization: Bearer $PRAEKO_KEY" \
"X-Praeko-Contract: en" \
"Content-Type: video/mp4" \
< video.mp4This route has no dedicated SDK call yetThe example uses
fetch.No official SDKExample with the language's standard library (or HTTP client). Only the JavaScript SDK exists.
No official SDKExample with the language's standard library (or HTTP client). Only the JavaScript SDK exists.
No official SDKExample with the language's standard library (or HTTP client). Only the JavaScript SDK exists.
No official SDKExample with the language's standard library (or HTTP client). Only the JavaScript SDK exists.
No official SDKExample with the language's standard library (or HTTP client). Only the JavaScript SDK exists.
No official SDKExample with the language's standard library (or HTTP client). Only the JavaScript SDK exists.
Response
| Success status | When |
|---|---|
200 |
Success. |
{
"id": "01KA3VQ7M2T9XE4HB8N5RZ6C0D",
"part": 1,
"size": 16777216,
"etag": "eb4fc1b20b020225bebfd48686d92517"
}Send the same part again to replace it.
Errors
No errors specific to this route besides the common ones.
Errors on any route
| Status | code | When |
|---|---|---|
| 401 | unauthorized |
The Authorization: Bearer … header is missing. |
| 401 | invalid_api_key |
The key does not exist. |
| 401 | revoked_api_key |
The key has been revoked. |
| 401 | expired_api_key |
The key has expired. |
| 403 | forbidden |
The key's scope is not enough for this route (see the scope badge). |
| 429 | rate_limited |
The per-minute request limit was exceeded. |
The body of every error is { "error": { "code", "message", "details"? } }. See all error codes.
Try it
Try it
Sign in to try itThe live test uses your key and your account. It stays off when you are not signed in.
Question or mistake on this page? contato@praeko.appView .md