Obter URLs das partes de um upload multipart
curl --request POST \
--url https://blob.vertracloud.app/v1/uploads/{upload_id}/parts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"part_numbers": [
123
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({part_numbers: [123]})
};
fetch('https://blob.vertracloud.app/v1/uploads/{upload_id}/parts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://blob.vertracloud.app/v1/uploads/{upload_id}/parts"
payload = { "part_numbers": [123] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://blob.vertracloud.app/v1/uploads/{upload_id}/parts"
payload := strings.NewReader("{\n \"part_numbers\": [\n 123\n ]\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))
}{
"response": [
{
"part_number": 1,
"url": "https://storage.example/part-1",
"size": 67108864,
"headers": {
"content-length": "67108864"
}
}
]
}
Uploads
Obter URLs das partes de um upload multipart
Retorna a URL de upload de cada parte pedida de um upload multipart, até 100 partes por chamada. Aceita um token de upload.
POST
/
v1
/
uploads
/
{upload_id}
/
parts
Obter URLs das partes de um upload multipart
curl --request POST \
--url https://blob.vertracloud.app/v1/uploads/{upload_id}/parts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"part_numbers": [
123
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({part_numbers: [123]})
};
fetch('https://blob.vertracloud.app/v1/uploads/{upload_id}/parts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://blob.vertracloud.app/v1/uploads/{upload_id}/parts"
payload = { "part_numbers": [123] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://blob.vertracloud.app/v1/uploads/{upload_id}/parts"
payload := strings.NewReader("{\n \"part_numbers\": [\n 123\n ]\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))
}{
"response": [
{
"part_number": 1,
"url": "https://storage.example/part-1",
"size": 67108864,
"headers": {
"content-length": "67108864"
}
}
]
}
Retorna uma URL de upload assinada para cada parte que você pedir. Envie os bytes de cada parte com um
PUT para a url dela, usando exatamente os headers retornados. O tamanho das partes é o part_size do upload, exceto a última parte, que pode ser menor. Os limites de partes estão em limits em uso e limites.
Escopo: blob:write. Aceita um token de upload.
Token de upload: esta rota também aceita um token de upload (Authorization: Bearer vcup_...) em vez de uma chave de API.
string
obrigatório
O ID do upload multipart.
number[]
obrigatório
Números das partes para obter URLs, começando em 1. Até 100 por chamada.
string
O ID do workspace, quando o blob pertence a um workspace. A chamada atua sobre o blob do dono do workspace e precisa da permissão de workspace
blob:read (blob:manage nas rotas que alteram dados). Omita para atuar sobre o seu próprio blob.Exemplo de requisição
curl -X POST "https://blob.vertracloud.app/v1/uploads/7c1d2e3f-4a5b-4c6d-8e7f-0a1b2c3d4e5f/parts" \
-H "Authorization: Bearer $VERTRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"part_numbers":[1,2]}'
Resposta
object[]
{
"response": [
{
"part_number": 1,
"url": "https://storage.example/part-1",
"size": 67108864,
"headers": {
"content-length": "67108864"
}
}
]
}
Respostas de erro
string
O código de erro que indica o motivo da falha. Valores possíveis:
AUTH_TOKEN_MISSING(401): Nenhum headerAuthorizationfoi enviado.API_KEY_INVALID(401): A chave de API não existe, foi revogada ou o segredo não confere.API_KEY_SCOPE_DENIED(403): A chave não tem o escopo que a rota exige (blob:readoublob:write);details.requiredinforma qual.WORKSPACE_PERMISSION_DENIED(403): Somente comworkspace_id: você não é membro, ou seu papel não tem a permissão de blob.WORKSPACE_NOT_FOUND(404): Somente comworkspace_id: não existe workspace com esse ID, ou você não é membro.BLOB_UPLOAD_TOKEN_INVALID(401): O token de upload não existe, expirou ou foi revogado (somente com token de upload).VALIDATION_ERROR(400): Um parâmetro ou campo do body falhou na validação.details.pathinforma o campo.BLOB_UPLOAD_NOT_FOUND(404): Nenhum upload com esse ID nesta conta, ou ele já foi concluído ou abortado.BLOB_UPLOAD_EXPIRED(410): O prazo do upload passou.
{
"code": "AUTH_TOKEN_MISSING"
}
{
"code": "API_KEY_SCOPE_DENIED"
}
{
"code": "WORKSPACE_NOT_FOUND"
}
{
"code": "VALIDATION_ERROR"
}
{
"code": "BLOB_UPLOAD_EXPIRED"
}
Última modificação em 28 de outubro de 2026