Publish a tool version without enabling execution
const url = 'https://api.katara.com/katara/v1/orgs/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/environments/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/tools/versions';const options = { method: 'POST', headers: { 'Idempotency-Key': 'example', 'X-Katara-CSRF': '1', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"tool_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","expected_revision":1,"manifest":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.katara.com/katara/v1/orgs/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/environments/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/tools/versions \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Idempotency-Key: example' \ --header 'X-Katara-CSRF: 1' \ --data '{ "tool_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "expected_revision": 1, "manifest": "example" }'Available when the catalog service is configured. REST tools require an approved OpenAPI source, explicit operation/server selection, matching compiled input and response schemas, and current ownership of that server and HTTP method. MCP tools use current protocol metadata and cannot include OpenAPI fields. Provider account credentials require a verified credential binding; endpoint ownership alone does not authorize them. Preserve the original idempotency key after an uncertain response. Publication and activation are separate; no tool invocation occurs here.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Header Parameters
Section titled “Header Parameters”Browser cookie mutations require value 1 and an allowed Origin. Session bearer clients may omit this header.
Required for cookie-authenticated changes. Use the UUID of the account that loaded the application. A different current cookie account returns account_changed before the handler runs. Session bearer and API key clients do not require this header.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Publication checks environment mode, endpoint ownership, source authority, dependency versions and rollback lineage. REST tools bind an approved OpenAPI operation and its compiled request and response schemas. MCP tools bind current protocol metadata. Credentials and request/response bodies are never part of this record. A tool with an effect declares how an attempt whose outcome could not be read is settled; one that does not is neither published nor executed.
object
object
object
object
object
object
object
object
object
object
object
How an attempt whose outcome could not be read is settled. Idempotency: natural when the request can be repeated without a second effect, key_header when Katara sends the attempt’s claim ID in idempotency_header and the destination acts once per key, none, or protocol for a quoted tool’s paid protocol. Method: status_lookup to ask status_lookup once by that key, manual when a person records what happened, or protocol. An unknown outcome is never retried automatically.
object
A GET under the tool’s destination URL. {operation_id} is replaced by the key Katara sent with the attempt. It answers 200, with output the tool’s output schema accepts, when the effect happened; any other answer leaves the outcome unknown.
object
Responses
Section titled “Responses”Successful request
object
Examplegenerated
{ "operation_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "resource_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "completed": true}Account_changed: reload and review with the signed-in account.
default
Section titled “default”Request error
object
object
Stable; branch on it. Any operation can answer invalid_request, with param naming the refused field when there is one; human_session_required, when an API key, service account or workload calls an operation only a signed-in person may perform; reauthentication_required, when a person’s sign-in is too old for the operation; permission_denied; route_not_found and method_not_allowed, when no operation matches the path or method; and feature_unavailable, when the operation’s service is not enabled on this deployment.
The request field a refusal is about, such as the agent_id or run_id query parameter; null when the refusal is not about one field.
Example
{ "error": { "action": "sign_in" }}