Clients
Update client
Rename a client or change their limits.
PATCH
/
v1
/
accounts
/
{id}
Update client
curl --request PATCH \
--url https://www.orgo.ai/api/v1/accounts/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"max_computers": 5
}
'import requests
url = "https://www.orgo.ai/api/v1/accounts/{id}"
payload = { "max_computers": 5 }
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({max_computers: 5})
};
fetch('https://www.orgo.ai/api/v1/accounts/{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://www.orgo.ai/api/v1/accounts/{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([
'max_computers' => 5
]),
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://www.orgo.ai/api/v1/accounts/{id}"
payload := strings.NewReader("{\n \"max_computers\": 5\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://www.orgo.ai/api/v1/accounts/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"max_computers\": 5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.orgo.ai/api/v1/accounts/{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 \"max_computers\": 5\n}"
response = http.request(request)
puts response.read_body{
"id": "8f14e45f-ceea-467a-9575-6f1c2b3d4e5f",
"external_id": "acme-dental",
"name": "Acme Dental",
"status": "active",
"workspace_id": "550e8400-e29b-41d4-a716-446655440000",
"created_at": "2026-10-01T09:00:00Z",
"closed_at": null,
"limits": {
"max_computers": 5,
"monthly_ai_cap_usd": 40
},
"usage": {
"computers": 2,
"ai_spend_usd_this_month": 12.4
},
"billing": {
"status": "active",
"price_usd": 250,
"email": "billing@acme.com"
},
"transfer": null
}
Send only what changes.
null removes a limit.
Use your account-wide API key. A client’s own key gets 403 here. See Invoicing.
Path parameters
string
required
The client’s
id.Body
string
Their new name.
integer
The most computers they can have, or
null.number
Their monthly AI cap in dollars, or
null.Response
The client, as Get client returns it.Example
curl -X PATCH https://www.orgo.ai/api/v1/accounts/$CLIENT_ID \
-H "Authorization: Bearer $ORGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"max_computers": 5}'
import os
import requests
client_id = os.environ["CLIENT_ID"]
res = requests.patch(
f"https://www.orgo.ai/api/v1/accounts/{client_id}",
headers={"Authorization": f"Bearer {os.environ['ORGO_API_KEY']}"},
json={"max_computers": 5},
)
print(res.json())
const clientId = process.env.CLIENT_ID;
const res = await fetch(`https://www.orgo.ai/api/v1/accounts/${clientId}`, {
method: 'PATCH',
headers: { Authorization: `Bearer ${process.env.ORGO_API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({"max_computers": 5}),
});
console.log(await res.json());
Response
{
"id": "8f14e45f-ceea-467a-9575-6f1c2b3d4e5f",
"external_id": "acme-dental",
"name": "Acme Dental",
"status": "active",
"workspace_id": "550e8400-e29b-41d4-a716-446655440000",
"created_at": "2026-10-01T09:00:00Z",
"closed_at": null,
"limits": {
"max_computers": 5,
"monthly_ai_cap_usd": 40
},
"usage": {
"computers": 2,
"ai_spend_usd_this_month": 12.4
},
"billing": {
"status": "active",
"price_usd": 250,
"email": "billing@acme.com"
},
"transfer": null
}
Errors
| Status | Body | Meaning |
|---|---|---|
401 | { "error": "Invalid API key" } | No key, or not one of yours. |
403 | { "error": "Use your account-wide API key to manage accounts. Workspace keys can’t." } | A client’s own key, or any key scoped to one workspace. |
403 | { "error": "Invoicing is on every paid plan. Upgrade to use it." } | You’re on the Free plan. code is UPGRADE_REQUIRED. |
400 | { "error": "max_computers must be a whole number from 0, or null for no limit." } | A limit isn’t valid. |
404 | { "error": "Account not found." } | No client with this id is yours. |
409 | { "error": "This account is closed." } | The client is closed. code is ACCOUNT_CLOSED. |
409 | { "error": "This account was transferred to your client." } | The client accepted a transfer and owns it now. code is ACCOUNT_TRANSFERRED. |
Authorizations
API key authentication. Get your key at orgo.ai/workspaces
Path Parameters
The client’s id.
Body
application/json
Response
OK
A client: a workspace you run for them, with a key scoped to it.
Available options:
active, closed, transferred Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
On Get client only.
⌘I
Update client
curl --request PATCH \
--url https://www.orgo.ai/api/v1/accounts/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"max_computers": 5
}
'import requests
url = "https://www.orgo.ai/api/v1/accounts/{id}"
payload = { "max_computers": 5 }
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({max_computers: 5})
};
fetch('https://www.orgo.ai/api/v1/accounts/{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://www.orgo.ai/api/v1/accounts/{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([
'max_computers' => 5
]),
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://www.orgo.ai/api/v1/accounts/{id}"
payload := strings.NewReader("{\n \"max_computers\": 5\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://www.orgo.ai/api/v1/accounts/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"max_computers\": 5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.orgo.ai/api/v1/accounts/{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 \"max_computers\": 5\n}"
response = http.request(request)
puts response.read_body{
"id": "8f14e45f-ceea-467a-9575-6f1c2b3d4e5f",
"external_id": "acme-dental",
"name": "Acme Dental",
"status": "active",
"workspace_id": "550e8400-e29b-41d4-a716-446655440000",
"created_at": "2026-10-01T09:00:00Z",
"closed_at": null,
"limits": {
"max_computers": 5,
"monthly_ai_cap_usd": 40
},
"usage": {
"computers": 2,
"ai_spend_usd_this_month": 12.4
},
"billing": {
"status": "active",
"price_usd": 250,
"email": "billing@acme.com"
},
"transfer": null
}