Get S3-Compatible Credentials for Blob Storage
curl --request GET \
--url https://blob.vertracloud.app/v1/s3/credentialsimport requests
url = "https://blob.vertracloud.app/v1/s3/credentials"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://blob.vertracloud.app/v1/s3/credentials', 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://blob.vertracloud.app/v1/s3/credentials",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://blob.vertracloud.app/v1/s3/credentials"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://blob.vertracloud.app/v1/s3/credentials")
.asString();require 'uri'
require 'net/http'
url = URI("https://blob.vertracloud.app/v1/s3/credentials")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"response": {
"access_key_id": "VCS3K7P2M9X4QA",
"secret_access_key": "<secret>",
"endpoint": "https://s3.vertracloud.dev",
"region": "auto",
"buckets": [
"public",
"private"
],
"access": {
"read": true,
"write": true
}
}
}
Account
Get S3-Compatible Credentials for Blob Storage
Returns S3-compatible credentials derived from the API key, for tools such as aws-cli, rclone and boto3. Limited to 10 calls per hour.
GET
/
v1
/
s3
/
credentials
Get S3-Compatible Credentials for Blob Storage
curl --request GET \
--url https://blob.vertracloud.app/v1/s3/credentialsimport requests
url = "https://blob.vertracloud.app/v1/s3/credentials"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://blob.vertracloud.app/v1/s3/credentials', 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://blob.vertracloud.app/v1/s3/credentials",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://blob.vertracloud.app/v1/s3/credentials"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://blob.vertracloud.app/v1/s3/credentials")
.asString();require 'uri'
require 'net/http'
url = URI("https://blob.vertracloud.app/v1/s3/credentials")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"response": {
"access_key_id": "VCS3K7P2M9X4QA",
"secret_access_key": "<secret>",
"endpoint": "https://s3.vertracloud.dev",
"region": "auto",
"buckets": [
"public",
"private"
],
"access": {
"read": true,
"write": true
}
}
}
Returns S3-compatible credentials for tools such as aws-cli, rclone and boto3. The pair is derived from the API key that makes the call, so revoking that key cuts S3 access at once. With an API key that has only
blob:read, the credentials are read-only (access.write is false). Treat secret_access_key as a password. This route requires an API key: a dashboard session is refused. Rotating the API key replaces the pair, so fetch the credentials again afterwards.
Scope: blob:read.
string
The workspace ID, when the blob belongs to a workspace. The call acts on the blob of the workspace owner and needs the
blob:read workspace permission (blob:manage on routes that change data). Leave it out to act on your own blob.Example request
curl "https://blob.vertracloud.app/v1/s3/credentials" \
-H "Authorization: Bearer $VERTRA_API_KEY"
Response
object
The S3 credentials for the account.
Show properties
Show properties
string
Access key ID. Starts with
VCS3.string
Secret key. Treat it as a password.
string
S3 endpoint to set in your tool.
string
Always
auto.string[]
The two buckets:
public and private.boolean
Whether the credentials can read.
boolean
Whether the credentials can write.
false with an API key that has only blob:read.{
"response": {
"access_key_id": "VCS3K7P2M9X4QA",
"secret_access_key": "<secret>",
"endpoint": "https://s3.vertracloud.dev",
"region": "auto",
"buckets": [
"public",
"private"
],
"access": {
"read": true,
"write": true
}
}
}
Error Responses
string
The error code indicating the reason for failure. Possible values:
AUTH_TOKEN_MISSING(401): NoAuthorizationheader was sent.API_KEY_INVALID(401): The API key doesn’t exist, was revoked, or its secret doesn’t match.API_KEY_SCOPE_DENIED(403): The key lacks the scope this route needs (blob:readorblob:write);details.requirednames it.WORKSPACE_PERMISSION_DENIED(403): Only withworkspace_id: you’re not a member, or your role lacks the blob permission.WORKSPACE_NOT_FOUND(404): Only withworkspace_id: no workspace with that ID, or you’re not a member.VALIDATION_ERROR(400): The call wasn’t made with an API key;details.reasonisapi_key_required.RATE_LIMIT_EXCEEDED(429): More than 10 calls in one hour.details.retry_aftergives the wait in seconds.
{
"code": "AUTH_TOKEN_MISSING"
}
{
"code": "API_KEY_SCOPE_DENIED"
}
{
"code": "WORKSPACE_NOT_FOUND"
}
{
"code": "RATE_LIMIT_EXCEEDED"
}