---
title: "common.config-secret-put@1 · OpenVibe.Services"
canonical: "https://openvibe.services/docs/contracts/common.config-secret-put"
updated: null
---

# common.config-secret-put@1 · OpenVibe.Services

HTML: [common.config-secret-put@1 · OpenVibe.Services](https://openvibe.services/docs/contracts/common.config-secret-put)

# ConfigSecretPut `common.config-secret-put@1`

Generated at 2026-11-13 06:25:48 UTC from [`openvibe-contracts v0.419.0`](https://github.com/OpenVibers/OpenVibe.Contracts/tree/v0.419.0) and [`openvibe-sdk v0.161.0`](https://github.com/OpenVibers/OpenVibe.SDK/tree/v0.161.0).

- Version: 1.0.0
- Owner: network
- Visibility: internal
- Status: active
- Compatibility: backward
- Schema: [`https://openvibe.network/contracts/common/config-secret-put.v1.json`](/docs/contracts/common.config-secret-put.json)

common.config-secret-put@1 (AI Exchange D11): body of PUT /internal/config/:namespace/secrets/:key on a service's openvibe-shared/config admin routes. The value is written once, sealed as an envelope under the service's KEK (or kept as today when it has none), and never returned, logged or put in values\_json. Its answer is the marker: { redacted: true, fingerprint, hint (four characters), set\_at, set\_by, bound\_to }, as common.config-namespace@1 defines it. A \`x-bind\` key on the namespace schema binds the secret to another key's value (a provider key to its base\_url origin); a changed bind no longer opens the value until the owner enters it again.

## Fields

| Field | Type | Required | Description | Constraints |
| --- | --- | --- | --- | --- |
| `value` | string | yes | The secret, once. | - `minLength 1`<br>- `maxLength 8192` |
| `reason` | string | yes | Why the secret is set; it is the revision's reason in the history. | - `minLength 1`<br>- `maxLength 500` |

## Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

 Valid: put

~~~~
{
  "value": "AIza-example-secret",
  "reason": "Set the YouTube API key"
}
~~~~

Rejected: empty-value

~~~~
{
  "value": "",
  "reason": "Set the YouTube API key"
}
~~~~

Rejected: missing-reason

~~~~
{
  "value": "AIza-example-secret"
}
~~~~

## Validate

~~~~
const contracts = require('openvibe-contracts');
contracts.validate('common.config-secret-put@1', value);   // { valid, errors: [{ path, message }] }
~~~~
