Skip to content

Read a current promotion review

GET
/katara/v1/orgs/{org_id}/environment-promotions/{draft_id}/reviews/{review_id}
curl --request GET \
--url https://api.katara.com/katara/v1/orgs/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/environment-promotions/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/reviews/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'Authorization: Bearer <token>'

Requires a signed-in human owner session and current owner authority in both the source Test and destination Live environments of this organization. API keys, service identities and workloads are refused. Environment bindings come from the immutable record; query parameters are not accepted. Responses are no-store. The routes are present only when the promotion service is configured. Canonical approved evidence and current binding verification are mandatory for readiness and activation; uncalibrated scores or a statistics threshold alone never authorize activation. Detailed references require current source, target and binding access; stale or denied detail is not returned. The review must belong to the exact draft.

org_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
draft_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
review_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
X-Katara-Account-ID
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/

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.

Successful request

Media typeapplication/json
object
draft_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
preparation_digest
required
string
/^sha256:[a-f0-9]{64}$/
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
request
required
object
source
required
object
org_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
environment_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
mode
required
Allowed value: test
organization_epoch
required
integer
>= 1 <= 9007199254740991
authority_epoch
required
integer
>= 1 <= 9007199254740991
reset_generation
required
integer
>= 1 <= 9007199254740991
destination
required
object
org_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
environment_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
mode
required
Allowed value: live
organization_epoch
required
integer
>= 1 <= 9007199254740991
authority_epoch
required
integer
>= 1 <= 9007199254740991
reset_generation
required
integer
>= 1 <= 9007199254740991
source_version
required
object
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
agent_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
subject_epoch
required
integer
>= 1 <= 9007199254740991
target
required
object
agent_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
subject_epoch
required
integer
>= 1 <= 9007199254740991
previous_version
required
One of:
object
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
definition
required
object
schema_version
required
Allowed value: 1
name
required
string
>= 1 characters <= 120 characters /^\S(?:[^\x00-\x1f\x7f]*\S)?$/
instructions_ref
required
object
org_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
environment_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
media_type
required
Allowed values: text/plain text/markdown
size_bytes
required
integer
>= 1 <= 131072
model_policy
required
object
mode
required
Allowed value: cortex
capability_revision
required
string
/^sha256:[a-f0-9]{64}$/
model_ids
required
Array<string>
>= 1 items <= 20 items unique items
tool_versions
required
Array<object>
<= 100 items unique items
object
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
knowledge_collections
required
Array<string>
<= 100 items unique items
input_schema_ref
required
object
org_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
environment_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
media_type
required
Allowed value: application/json
size_bytes
required
integer
>= 1 <= 262144
output_schema_ref
required
object
org_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
environment_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
media_type
required
Allowed value: application/json
size_bytes
required
integer
>= 1 <= 262144
approval_policy_versions
required
Array<object>
<= 100 items unique items
object
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
limits
required

The API also checks steps <= decisions, plan changes <= decisions, active and approval seconds <= elapsed seconds, and children/depth are either both zero or both positive. Structured output is a JSON envelope; larger artifacts use content references. Active time includes Activity scheduling, retries and execution. Approval waits consume the cumulative approval and elapsed limits; ordinary delays consume elapsed time only. Counters survive continuation.

object
max_steps
required
integer
>= 1 <= 10000
max_children
required
integer
<= 1000
max_depth
required
integer
<= 16
max_active_seconds
required
integer
>= 1 <= 86400
max_elapsed_seconds
required
integer
>= 1 <= 2592000
max_approval_wait_seconds
required
integer
>= 1 <= 604800
max_output_bytes
required
integer
>= 1 <= 1048576
max_decisions
required
integer
>= 1 <= 20000
max_plan_changes
required
integer
>= 1 <= 1000
evidence
required
object
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
grants
required
Array<object>
>= 1 items <= 8 items unique items
object
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
audience
required
Allowed values: katara:synapse katara:locus
authority_epoch
required

The selected immutable grant leaf agent_epoch, fenced to the target agent subject epoch.

integer
>= 1 <= 9007199254740991
funding
required
object
payer_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
consent_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
budget_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
limit
required
object
ledger_kind
required
Allowed value: real
asset
required
Allowed value: CREDIT_ATOMIC
scale
required
Allowed value: 9
amount
required
string
/^[1-9][0-9]{0,17}$/
purpose_caps
required
object
inference
required
string
/^(0|[1-9][0-9]{0,17})$/
tool
required
string
/^(0|[1-9][0-9]{0,17})$/
service
required
string
/^(0|[1-9][0-9]{0,17})$/
sandbox
required
string
/^(0|[1-9][0-9]{0,17})$/
evaluation
required
string
/^(0|[1-9][0-9]{0,17})$/
target_bundle
required
object
bundle
required
object
org_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
environment_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
agent_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
revision
required
integer
>= 1 <= 9007199254740991
reset_generation
required
integer
>= 1 <= 9007199254740991
subject_epoch
required
integer
>= 1 <= 9007199254740991
definition
required
object
schema_version
required
Allowed value: 1
name
required
string
>= 1 characters <= 120 characters /^\S(?:[^\x00-\x1f\x7f]*\S)?$/
instructions_ref
required
object
org_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
environment_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
media_type
required
Allowed values: text/plain text/markdown
size_bytes
required
integer
>= 1 <= 131072
model_policy
required
One of:
object
mode
required
Allowed value: simulated
fixture_set
required
string
/^[a-z0-9][a-z0-9._-]{0,119}$/
fixture_revision
required
string
/^sha256:[a-f0-9]{64}$/
tool_versions
required
Array<object>
<= 100 items unique items
object
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
knowledge_collections
required
Array<string>
<= 100 items unique items
input_schema_ref
required
object
org_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
environment_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
media_type
required
Allowed value: application/json
size_bytes
required
integer
>= 1 <= 262144
output_schema_ref
required
object
org_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
environment_id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
media_type
required
Allowed value: application/json
size_bytes
required
integer
>= 1 <= 262144
approval_policy_versions
required
Array<object>
<= 100 items unique items
object
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
version
required
integer
>= 1 <= 9007199254740991
integrity
required
string
/^sha256:[a-f0-9]{64}$/
limits
required

The API also checks steps <= decisions, plan changes <= decisions, active and approval seconds <= elapsed seconds, and children/depth are either both zero or both positive. Structured output is a JSON envelope; larger artifacts use content references. Active time includes Activity scheduling, retries and execution. Approval waits consume the cumulative approval and elapsed limits; ordinary delays consume elapsed time only. Counters survive continuation.

object
max_steps
required
integer
>= 1 <= 10000
max_children
required
integer
<= 1000
max_depth
required
integer
<= 16
max_active_seconds
required
integer
>= 1 <= 86400
max_elapsed_seconds
required
integer
>= 1 <= 2592000
max_approval_wait_seconds
required
integer
>= 1 <= 604800
max_output_bytes
required
integer
>= 1 <= 1048576
max_decisions
required
integer
>= 1 <= 20000
max_plan_changes
required
integer
>= 1 <= 1000
schema_profile
required
Allowed value: json-schema-2020-12/v1
published_by
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
published_at
required
string format: date-time
digest
required
string
/^sha256:[a-f0-9]{64}$/
signing_key_id
required
string
/^[A-Za-z0-9._-]{1,80}$/
signature
required
string
>= 88 characters <= 88 characters
dependency_digest
required
string
/^sha256:[a-f0-9]{64}$/
authority
required
Array<object>
<= 8 items

What a pinned grant allowed when the promotion was approved, rather than which grant was pinned. Grants are revoked and reissued; what a Live version was approved to do cannot be looked up again afterwards unless it was written down at the time.

object
id
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
audience
required
Allowed values: katara:synapse katara:locus
actions
required
Array<string>
<= 50 items
resources
required
Array<string>
<= 1000 items
authority_beyond_configuration
required
Array<string>
<= 2000 items
authority_baseline
required
One of:
string
/^sha256:[a-f0-9]{64}$/
authority_added
required
Array<string>
<= 2000 items
created_by
required
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
created_at
required
string format: date-time
digest
required
string
/^sha256:[a-f0-9]{64}$/
Example
{
"request": {
"source": {
"mode": "test"
},
"destination": {
"mode": "live"
},
"target": {
"definition": {
"schema_version": 1,
"instructions_ref": {
"media_type": "text/plain"
},
"model_policy": {
"mode": "cortex"
},
"input_schema_ref": {
"media_type": "application/json"
},
"output_schema_ref": {
"media_type": "application/json"
}
}
},
"grants": [
{
"audience": "katara:synapse"
}
],
"funding": {
"limit": {
"ledger_kind": "real",
"asset": "CREDIT_ATOMIC",
"scale": 9
}
}
},
"target_bundle": {
"bundle": {
"definition": {
"schema_version": 1,
"instructions_ref": {
"media_type": "text/plain"
},
"model_policy": {
"mode": "simulated"
},
"input_schema_ref": {
"media_type": "application/json"
},
"output_schema_ref": {
"media_type": "application/json"
}
},
"schema_profile": "json-schema-2020-12/v1"
}
},
"authority": [
{
"audience": "katara:synapse"
}
],
"authority_baseline": ""
}

Account_changed: reload and review with the signed-in account.

Request error

Media typeapplication/json
object
error
required
object
message
required
string
>= 1 characters <= 500 characters
type
required
string
>= 1 characters <= 100 characters
code
required

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.

string
>= 1 characters <= 100 characters
param
required

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.

string | null
request_id
required
string
>= 1 characters <= 100 characters
upstream_status
required
integer | null
action
Allowed values: sign_in reauthenticate request_access review fund retry reconcile refresh support
operation_id
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
snapshot_ref
string format: uuid
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
Allowed value: 00000000-0000-0000-0000-000000000000
Example
{
"error": {
"action": "sign_in"
}
}