curl --request PATCH \
--url https://workspace.basaltic.sh/v1/organizations/{organization_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"captcha_token": "03AGdBq24...",
"language": "en",
"time_zone": "America/Sao_Paulo",
"name": "Acme Corporation",
"description": "Cloud infrastructure for Acme Corporation"
}
'import requests
url = "https://workspace.basaltic.sh/v1/organizations/{organization_id}"
payload = {
"captcha_token": "03AGdBq24...",
"language": "en",
"time_zone": "America/Sao_Paulo",
"name": "Acme Corporation",
"description": "Cloud infrastructure for Acme Corporation"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
captcha_token: '03AGdBq24...',
language: 'en',
time_zone: 'America/Sao_Paulo',
name: 'Acme Corporation',
description: 'Cloud infrastructure for Acme Corporation'
})
};
fetch('https://workspace.basaltic.sh/v1/organizations/{organization_id}', 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://workspace.basaltic.sh/v1/organizations/{organization_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'captcha_token' => '03AGdBq24...',
'language' => 'en',
'time_zone' => 'America/Sao_Paulo',
'name' => 'Acme Corporation',
'description' => 'Cloud infrastructure for Acme Corporation'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://workspace.basaltic.sh/v1/organizations/{organization_id}"
payload := strings.NewReader("{\n \"captcha_token\": \"03AGdBq24...\",\n \"language\": \"en\",\n \"time_zone\": \"America/Sao_Paulo\",\n \"name\": \"Acme Corporation\",\n \"description\": \"Cloud infrastructure for Acme Corporation\"\n}")
req, _ := http.NewRequest("PATCH", 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))
}HttpResponse<String> response = Unirest.patch("https://workspace.basaltic.sh/v1/organizations/{organization_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"captcha_token\": \"03AGdBq24...\",\n \"language\": \"en\",\n \"time_zone\": \"America/Sao_Paulo\",\n \"name\": \"Acme Corporation\",\n \"description\": \"Cloud infrastructure for Acme Corporation\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://workspace.basaltic.sh/v1/organizations/{organization_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"captcha_token\": \"03AGdBq24...\",\n \"language\": \"en\",\n \"time_zone\": \"America/Sao_Paulo\",\n \"name\": \"Acme Corporation\",\n \"description\": \"Cloud infrastructure for Acme Corporation\"\n}"
response = http.request(request)
puts response.read_body{
"organization": {
"language": "en",
"time_zone": "America/Sao_Paulo",
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Acme Corporation",
"description": "Cloud infrastructure for Acme Corporation",
"owner_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "active",
"suspension_reason": "billing",
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-16T14:20:00Z",
"crn": "crn:workspace:::organization/current"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "An internal error occurred",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Update organization
Update an existing organization
curl --request PATCH \
--url https://workspace.basaltic.sh/v1/organizations/{organization_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"captcha_token": "03AGdBq24...",
"language": "en",
"time_zone": "America/Sao_Paulo",
"name": "Acme Corporation",
"description": "Cloud infrastructure for Acme Corporation"
}
'import requests
url = "https://workspace.basaltic.sh/v1/organizations/{organization_id}"
payload = {
"captcha_token": "03AGdBq24...",
"language": "en",
"time_zone": "America/Sao_Paulo",
"name": "Acme Corporation",
"description": "Cloud infrastructure for Acme Corporation"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
captcha_token: '03AGdBq24...',
language: 'en',
time_zone: 'America/Sao_Paulo',
name: 'Acme Corporation',
description: 'Cloud infrastructure for Acme Corporation'
})
};
fetch('https://workspace.basaltic.sh/v1/organizations/{organization_id}', 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://workspace.basaltic.sh/v1/organizations/{organization_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'captcha_token' => '03AGdBq24...',
'language' => 'en',
'time_zone' => 'America/Sao_Paulo',
'name' => 'Acme Corporation',
'description' => 'Cloud infrastructure for Acme Corporation'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://workspace.basaltic.sh/v1/organizations/{organization_id}"
payload := strings.NewReader("{\n \"captcha_token\": \"03AGdBq24...\",\n \"language\": \"en\",\n \"time_zone\": \"America/Sao_Paulo\",\n \"name\": \"Acme Corporation\",\n \"description\": \"Cloud infrastructure for Acme Corporation\"\n}")
req, _ := http.NewRequest("PATCH", 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))
}HttpResponse<String> response = Unirest.patch("https://workspace.basaltic.sh/v1/organizations/{organization_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"captcha_token\": \"03AGdBq24...\",\n \"language\": \"en\",\n \"time_zone\": \"America/Sao_Paulo\",\n \"name\": \"Acme Corporation\",\n \"description\": \"Cloud infrastructure for Acme Corporation\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://workspace.basaltic.sh/v1/organizations/{organization_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"captcha_token\": \"03AGdBq24...\",\n \"language\": \"en\",\n \"time_zone\": \"America/Sao_Paulo\",\n \"name\": \"Acme Corporation\",\n \"description\": \"Cloud infrastructure for Acme Corporation\"\n}"
response = http.request(request)
puts response.read_body{
"organization": {
"language": "en",
"time_zone": "America/Sao_Paulo",
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Acme Corporation",
"description": "Cloud infrastructure for Acme Corporation",
"owner_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "active",
"suspension_reason": "billing",
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-16T14:20:00Z",
"crn": "crn:workspace:::organization/current"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "An internal error occurred",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}workspace:UpdateOrganization. See WORKSPACE permissions for the full list, what each one covers, and an example policy.Authorizations
An OAuth 2.0 bearer token, sent as Authorization: Bearer <token>.
This is the recommended way to authenticate.
Get one by exchanging a service account's access key pair at
POST /v1/oauth/token with grant_type=client_credentials. It is the
standard client-credentials grant, so any OAuth-aware library will
obtain and refresh it for you.
curl -s -u "$KEY_ID:$SECRET" -d grant_type=client_credentials \
https://iam.basaltic.sh/v1/oauth/token
Tokens last an hour by default. The same access key pair is separately your AWS SigV4 credential for the S3-compatible object endpoint, which speaks nothing else.
Path Parameters
Organization ID
Body
Google reCAPTCHA token for bot protection
"03AGdBq24..."
Language for organization billing and operational emails, independent of each user's console preference.
en, pt-BR, es IANA timezone for formatting organization emails. Does not change billing periods or resource schedules.
"America/Sao_Paulo"
1 - 255"Acme Corporation"
1000"Cloud infrastructure for Acme Corporation"
Response
Organization updated
Show child attributes
Show child attributes

