Sign part URLs
curl --request POST \
--url https://api.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"parts": [
{
"partNumber": 5000,
"sha256": "<string>"
}
]
}
'import requests
url = "https://api.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts"
payload = { "parts": [
{
"partNumber": 5000,
"sha256": "<string>"
}
] }
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({parts: [{partNumber: 5000, sha256: '<string>'}]})
};
fetch('https://api.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts', 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.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts",
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([
'parts' => [
[
'partNumber' => 5000,
'sha256' => '<string>'
]
]
]),
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.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts"
payload := strings.NewReader("{\n \"parts\": [\n {\n \"partNumber\": 5000,\n \"sha256\": \"<string>\"\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.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"parts\": [\n {\n \"partNumber\": 5000,\n \"sha256\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts")
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 \"parts\": [\n {\n \"partNumber\": 5000,\n \"sha256\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"parts": [
{
"method": "PUT",
"url": "<string>",
"headers": {},
"expiresAt": "2023-11-07T05:31:56Z",
"partNumber": 123
}
]
}{
"error": {
"requestId": "<string>",
"message": "<string>",
"errorCode": "<string>",
"docUrl": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"requestId": "<string>",
"message": "<string>",
"errorCode": "<string>",
"docUrl": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"requestId": "<string>",
"message": "<string>",
"errorCode": "<string>",
"docUrl": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"requestId": "<string>",
"message": "<string>",
"errorCode": "<string>",
"docUrl": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"requestId": "<string>",
"message": "<string>",
"errorCode": "<string>",
"docUrl": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Files
Sign part URLs
For a multipart upload only: returns one signed URL for each part you name, up to 100 per call. Each URL is signed for that part’s exact length (partSize, or the remainder for the last part) and lives for a few minutes, so request them shortly before you send the parts.
POST
/
platform
/
files
/
uploads
/
{uploadId}
/
parts
Sign part URLs
curl --request POST \
--url https://api.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"parts": [
{
"partNumber": 5000,
"sha256": "<string>"
}
]
}
'import requests
url = "https://api.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts"
payload = { "parts": [
{
"partNumber": 5000,
"sha256": "<string>"
}
] }
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({parts: [{partNumber: 5000, sha256: '<string>'}]})
};
fetch('https://api.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts', 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.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts",
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([
'parts' => [
[
'partNumber' => 5000,
'sha256' => '<string>'
]
]
]),
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.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts"
payload := strings.NewReader("{\n \"parts\": [\n {\n \"partNumber\": 5000,\n \"sha256\": \"<string>\"\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.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"parts\": [\n {\n \"partNumber\": 5000,\n \"sha256\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rootkey.ai/api-v1/platform/files/uploads/{uploadId}/parts")
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 \"parts\": [\n {\n \"partNumber\": 5000,\n \"sha256\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"parts": [
{
"method": "PUT",
"url": "<string>",
"headers": {},
"expiresAt": "2023-11-07T05:31:56Z",
"partNumber": 123
}
]
}{
"error": {
"requestId": "<string>",
"message": "<string>",
"errorCode": "<string>",
"docUrl": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"requestId": "<string>",
"message": "<string>",
"errorCode": "<string>",
"docUrl": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"requestId": "<string>",
"message": "<string>",
"errorCode": "<string>",
"docUrl": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"requestId": "<string>",
"message": "<string>",
"errorCode": "<string>",
"docUrl": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"requestId": "<string>",
"message": "<string>",
"errorCode": "<string>",
"docUrl": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Authorizations
ROOTKey API key (rk_live_... for production, rk_test_... for the test network).
Path Parameters
The uploadId returned by Start an upload.
Pattern:
^upl_[0-9a-f]{32}$Example:
"upl_3f2b8c1e5a7d4e9b9c2a1d6e8f0a4b7c"
Body
application/json
Required array length:
1 - 100 elementsShow child attributes
Show child attributes
Response
One signed request per part.
Show child attributes
Show child attributes
Was this page helpful?

