Replace settings

Writes the caller org's configuration for one product and answers the stored result, secrets masked.

PUT /v1/settings/{product}

Addresshttps://api.hanzo.ai/v1/settings/{product}
MethodPUT
Operationput_settings_by_product
AuthAuthorization: Bearer $HANZO_API_KEY

Writes the caller org's configuration for one product and answers the stored result, secrets masked. Secret VALUES are sealed into KMS under orgs/{org}/settings/{product}/{key} and never touch this deployment's database; with no KMS configured a write that carries any secret is refused whole (503) rather than dropping it or persisting it in the clear. A secret the body omits keeps its stored value, so a partial write never silently clears one.

Request

6 fields, body application/json (required).

FieldInTypeRequiredDescription
productpathstringyesProduct is the catalog slug, from the PATH.
configbodyobject—Config is the product's non-secret configuration, stored verbatim.
config.*bodyany—
productbodystring—Product is the catalog slug, from the PATH.
secretsbodyobject—Secrets are the secret fields, by name.
secrets.*bodystring—

Response

StatusBodyMeaning
200settings.Viewok
defaultproblem-detailsrefused

200 body — 5 fields.

FieldInTypeAlwaysDescription
configbodyany—Config is the product's non-secret configuration, an opaque JSON object the server stores and returns verbatim.
createdAtbodystring—CreatedAt is when this configuration was first written, RFC 3339 UTC.
productbodystring—Product is the catalog slug this configuration belongs to.
secretKeysbodystring[]—SecretKeys names the secret fields that ARE set.
updatedAtbodystring—UpdatedAt is when this configuration was last written, RFC 3339 UTC.

Failure carries the platform error shape — see Errors.

Examples

hanzo settings set <product>
import { Configuration, SettingsApi } from 'hanzoai';

const api = new SettingsApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.putSettingsByProduct({ product: 'product', config: {}, product: "<product>" });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import SettingsApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = SettingsApi(client).put_settings_by_product(product='product', config={}, product="<product>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.SettingsAPI.PutSettingsByProduct(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, settings_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = settings_api::put_settings_by_product(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.SettingsApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new SettingsApi(client).putSettingsByProduct();
curl -X PUT https://api.hanzo.ai/v1/settings/<product> \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "config": {},
       "product": "<product>"
     }'

MCP reaches settings through the settings tool, which names its 2 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "get_setting"
         }
       }
     }'

Settings API · All Hanzo APIs · Interactive reference

Was this page useful?