curl --request PUT \
--url https://your-instance.example.com/api/organizations/api-keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id": "5f7b1c2e8a1d4e0012c3b400",
"name": "Acme Corp",
"phoneNumber": "+14165550100",
"address": "123 Yonge St, Toronto, ON",
"creds": {
"anthropicApiKey": "sk-ant-api03-EXAMPLE-key-redacted",
"sinchServicePlanId": "srv-plan-example-123"
}
}
'import requests
url = "https://your-instance.example.com/api/organizations/api-keys"
payload = {
"id": "5f7b1c2e8a1d4e0012c3b400",
"name": "Acme Corp",
"phoneNumber": "+14165550100",
"address": "123 Yonge St, Toronto, ON",
"creds": {
"anthropicApiKey": "sk-ant-api03-EXAMPLE-key-redacted",
"sinchServicePlanId": "srv-plan-example-123"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: '5f7b1c2e8a1d4e0012c3b400',
name: 'Acme Corp',
phoneNumber: '+14165550100',
address: '123 Yonge St, Toronto, ON',
creds: {
anthropicApiKey: 'sk-ant-api03-EXAMPLE-key-redacted',
sinchServicePlanId: 'srv-plan-example-123'
}
})
};
fetch('https://your-instance.example.com/api/organizations/api-keys', 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://your-instance.example.com/api/organizations/api-keys",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'id' => '5f7b1c2e8a1d4e0012c3b400',
'name' => 'Acme Corp',
'phoneNumber' => '+14165550100',
'address' => '123 Yonge St, Toronto, ON',
'creds' => [
'anthropicApiKey' => 'sk-ant-api03-EXAMPLE-key-redacted',
'sinchServicePlanId' => 'srv-plan-example-123'
]
]),
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://your-instance.example.com/api/organizations/api-keys"
payload := strings.NewReader("{\n \"id\": \"5f7b1c2e8a1d4e0012c3b400\",\n \"name\": \"Acme Corp\",\n \"phoneNumber\": \"+14165550100\",\n \"address\": \"123 Yonge St, Toronto, ON\",\n \"creds\": {\n \"anthropicApiKey\": \"sk-ant-api03-EXAMPLE-key-redacted\",\n \"sinchServicePlanId\": \"srv-plan-example-123\"\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://your-instance.example.com/api/organizations/api-keys")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"5f7b1c2e8a1d4e0012c3b400\",\n \"name\": \"Acme Corp\",\n \"phoneNumber\": \"+14165550100\",\n \"address\": \"123 Yonge St, Toronto, ON\",\n \"creds\": {\n \"anthropicApiKey\": \"sk-ant-api03-EXAMPLE-key-redacted\",\n \"sinchServicePlanId\": \"srv-plan-example-123\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-instance.example.com/api/organizations/api-keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"5f7b1c2e8a1d4e0012c3b400\",\n \"name\": \"Acme Corp\",\n \"phoneNumber\": \"+14165550100\",\n \"address\": \"123 Yonge St, Toronto, ON\",\n \"creds\": {\n \"anthropicApiKey\": \"sk-ant-api03-EXAMPLE-key-redacted\",\n \"sinchServicePlanId\": \"srv-plan-example-123\"\n }\n}"
response = http.request(request)
puts response.read_body{
"message": "Organization details updated successfully"
}{
"error": "Organization not found",
"details": "No organization exists with the provided id"
}{
"error": "Organization not found",
"details": "No organization exists with the provided id"
}{
"error": "Organization not found",
"details": "No organization exists with the provided id"
}Update organization API keys and details
Updates org-level details (name/phoneNumber/address/logoUrl) and replaces the OrganizationCredentials document. Validates the new credentials are not already in use by another org, uploads logo to R2 if provided as data URL, and backfills missing DynamicProperties section.properties fields.
curl --request PUT \
--url https://your-instance.example.com/api/organizations/api-keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id": "5f7b1c2e8a1d4e0012c3b400",
"name": "Acme Corp",
"phoneNumber": "+14165550100",
"address": "123 Yonge St, Toronto, ON",
"creds": {
"anthropicApiKey": "sk-ant-api03-EXAMPLE-key-redacted",
"sinchServicePlanId": "srv-plan-example-123"
}
}
'import requests
url = "https://your-instance.example.com/api/organizations/api-keys"
payload = {
"id": "5f7b1c2e8a1d4e0012c3b400",
"name": "Acme Corp",
"phoneNumber": "+14165550100",
"address": "123 Yonge St, Toronto, ON",
"creds": {
"anthropicApiKey": "sk-ant-api03-EXAMPLE-key-redacted",
"sinchServicePlanId": "srv-plan-example-123"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: '5f7b1c2e8a1d4e0012c3b400',
name: 'Acme Corp',
phoneNumber: '+14165550100',
address: '123 Yonge St, Toronto, ON',
creds: {
anthropicApiKey: 'sk-ant-api03-EXAMPLE-key-redacted',
sinchServicePlanId: 'srv-plan-example-123'
}
})
};
fetch('https://your-instance.example.com/api/organizations/api-keys', 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://your-instance.example.com/api/organizations/api-keys",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'id' => '5f7b1c2e8a1d4e0012c3b400',
'name' => 'Acme Corp',
'phoneNumber' => '+14165550100',
'address' => '123 Yonge St, Toronto, ON',
'creds' => [
'anthropicApiKey' => 'sk-ant-api03-EXAMPLE-key-redacted',
'sinchServicePlanId' => 'srv-plan-example-123'
]
]),
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://your-instance.example.com/api/organizations/api-keys"
payload := strings.NewReader("{\n \"id\": \"5f7b1c2e8a1d4e0012c3b400\",\n \"name\": \"Acme Corp\",\n \"phoneNumber\": \"+14165550100\",\n \"address\": \"123 Yonge St, Toronto, ON\",\n \"creds\": {\n \"anthropicApiKey\": \"sk-ant-api03-EXAMPLE-key-redacted\",\n \"sinchServicePlanId\": \"srv-plan-example-123\"\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://your-instance.example.com/api/organizations/api-keys")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"5f7b1c2e8a1d4e0012c3b400\",\n \"name\": \"Acme Corp\",\n \"phoneNumber\": \"+14165550100\",\n \"address\": \"123 Yonge St, Toronto, ON\",\n \"creds\": {\n \"anthropicApiKey\": \"sk-ant-api03-EXAMPLE-key-redacted\",\n \"sinchServicePlanId\": \"srv-plan-example-123\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-instance.example.com/api/organizations/api-keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"5f7b1c2e8a1d4e0012c3b400\",\n \"name\": \"Acme Corp\",\n \"phoneNumber\": \"+14165550100\",\n \"address\": \"123 Yonge St, Toronto, ON\",\n \"creds\": {\n \"anthropicApiKey\": \"sk-ant-api03-EXAMPLE-key-redacted\",\n \"sinchServicePlanId\": \"srv-plan-example-123\"\n }\n}"
response = http.request(request)
puts response.read_body{
"message": "Organization details updated successfully"
}{
"error": "Organization not found",
"details": "No organization exists with the provided id"
}{
"error": "Organization not found",
"details": "No organization exists with the provided id"
}{
"error": "Organization not found",
"details": "No organization exists with the provided id"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Organization ID whose details and credentials should be updated.
Replacement third-party API credentials (Anthropic, Sinch SMS/MMS) attached to the organization.
Show child attributes
Show child attributes
{
"anthropicApiKey": "sk-ant-api03-EXAMPLE-key-redacted",
"sinchServicePlanId": "srv-plan-example-123",
"sinchApiToken": "sinch-token-example-redacted",
"sinchMmsApiKey": "sinch-mms-key-example",
"sinchMmsServiceId": "sinch-mms-service-example"
}
Updated organization display name.
Updated primary organization phone number in E.164 format.
Updated mailing/business address.
Optional logo image; accepts a data URI which the server uploads and stores.
Response
API keys updated