Skip to navigation

Store a tool credential

Creates a secret and its immutable version 1 from write-only material. No readback. Does not bind or publish anything. Inline credentials on tool and MCP setup remain available and create the same resource.

Authentication

AuthorizationBearer

Create and manage workspace-owned keys through the existing app session routes, outside this public API. Creator and manager identities are audit actors only. Key validity follows workspace policy, expiry and explicit revocation, independently of creator membership. Do not include a workspace-selection header.

Headers

Idempotency-KeystringRequired1-255 characters

Stable key per logical intent, 1–255 printable characters. Persist it before sending. Retry the same key/body after an uncertain result for 24 hours. A changed body conflicts. Beyond retention, reconcile the resource before retrying; this is not permanent deduplication. Current authorization is rechecked on replay. Evaluation order: authenticate and check current authorization; look up intent; replay its stored receipt before checking the current revision; only a new intent evaluates If-Match and executes. Fingerprint includes method, path, body and original If-Match. A changed request returns idempotency_key_reused. The server stores only a keyed (HMAC) fingerprint, and no error or response ever returns a fingerprint or hash of a request. In-flight intent returns 409 idempotency_in_progress with Retry-After; retry the same intent after reconciliation. Receipts describe that attempt, not current resource state. A replay returns the original status code and body, with the response header Idempotent-Replayed: true.

Request

This endpoint expects an object.
purposeenumRequired
Allowed values:
material_kindenumRequired

A descriptive label that does not change how the value is sent. Rasen sends the stored value unchanged as the header value for a webhook secret header, or as “Bearer <value>” for an MCP server with auth=bearer, or as the header value for auth=secret_header. For basic_auth, store the complete header value, for example “Basic <base64 of user:password>”, and use a secret header named Authorization. No kind and auth-mode pair is refused.

Allowed values:
valuestringRequiredformat: "password"1-8192 characters

Write-only credential material. Sealed inside the request transaction. Never returned, logged, included in diffs, errors, events or call evidence.

namestringOptionalformat: "^[a-z0-9][a-z0-9_-]{1,62}$"
Optional handle. If omitted, Rasen generates one.
resource_keystringOptionalformat: "^[A-Za-z0-9][A-Za-z0-9._:~-]{0,127}$"1-128 characters

Optional caller-chosen resource key: an opaque external identifier that matches your own record (for example a CRM ID, a configuration-file ID or a UUID) to this resource. Rasen still generates the canonical id; use id in paths and references. Case-sensitive, compared exactly, never normalized or parsed. 1-128 characters from A-Z a-z 0-9 . _ : ~ - and starting with a letter or digit; UUIDs and ULIDs are valid. Unique per resource type within one workspace; separate environment workspaces can reuse the same key. Set only at creation and immutable afterwards. A create with a key that already exists returns 409 resource_key_conflict with details.existing_id; it never updates or returns the existing resource. Not an Idempotency-Key: that header identifies one request intent for 24 hours, and a same-intent replay returns its original receipt before the resource-key check runs. Uniqueness includes archived resources. A key becomes free again only after its resource is permanently deleted or erased (a deleted secret or a deleted knowledge source); archive never frees it.

Response headers

X-Request-IdstringOptional
Safe server request correlation ID.
RateLimit-LimitintegerOptional
Requests allowed in the current window for the tightest applicable limit.
RateLimit-RemainingintegerOptional
Requests left in the current window.
RateLimit-ResetintegerOptional
Seconds until the current window resets.
Idempotent-ReplayedstringOptional

true when this response replays a stored Idempotency-Key result. The status and body equal the original.

Response

Store a tool credential.
idstring<=128 characters
Opaque sec identifier. Do not parse its contents.
resource_keystring or nullformat: "^[A-Za-z0-9][A-Za-z0-9._:~-]{0,127}$"1-128 characters

Optional caller-chosen resource key: an opaque external identifier that matches your own record (for example a CRM ID, a configuration-file ID or a UUID) to this resource. Rasen still generates the canonical id; use id in paths and references. Case-sensitive, compared exactly, never normalized or parsed. 1-128 characters from A-Z a-z 0-9 . _ : ~ - and starting with a letter or digit; UUIDs and ULIDs are valid. Unique per resource type within one workspace; separate environment workspaces can reuse the same key. Set only at creation and immutable afterwards. A create with a key that already exists returns 409 resource_key_conflict with details.existing_id; it never updates or returns the existing resource. Not an Idempotency-Key: that header identifies one request intent for 24 hours, and a same-intent replay returns its original receipt before the resource-key check runs. Uniqueness includes archived resources. A key becomes free again only after its resource is permanently deleted or erased (a deleted secret or a deleted knowledge source); archive never frees it.

namestring<=63 characters

Workspace-unique handle among secrets that are not deleted. A label, not the resource key. Deletion frees the name and the resource_key.

purposestring

Consumer type the credential may be released to. A webhook_tool secret cannot be used by an MCP server, and the reverse. Open response vocabulary. Preserve unknown values; never assume they mean success.

material_kindstring

A descriptive label that does not change how the value is sent. Rasen sends the stored value unchanged as the header value for a webhook secret header, or as “Bearer <value>” for an MCP server with auth=bearer, or as the header value for auth=secret_header. For basic_auth, store the complete header value, for example “Basic <base64 of user:password>”, and use a secret header named Authorization. No kind and auth-mode pair is refused. Open response vocabulary. Preserve unknown values; never assume they mean success.

statestring

revoked means every version is revoked. Open response vocabulary. Preserve unknown values; never assume they mean success.

latest_versioninteger>=1

Highest version number. Not an implicit binding target: consumers pin exact versions.

active_version_countinteger>=0
created_atdatetime
updated_atdatetime
last_rotated_atdatetime or null
usageobject

Reference counts at response time. Use GET /secrets/{secret_id}/references for the exact consumers.

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
409
Conflict Error
413
Content Too Large Error
429
Too Many Requests Error
500
Internal Server Error
503
Service Unavailable Error