Orchestrations

Update an orchestration

Partially updates an orchestration definition.

patch/v1/projects/{project_id}/orchestrations/{orchestration_id}

Request

  • Base URL: https://api.naturali.ai
  • URL: https://api.naturali.ai/v1/projects/{project_id}/orchestrations/{orchestration_id}
  • Auth: one of:
    • HTTP bearer
    • OAuth 2 (authorization code, authorization URL https://api.naturali.ai/authorize, token URL https://api.naturali.ai/token, scopes: mcp:access)

Path parameters

orchestration_idstring required

Public ID of the orchestration (orch_...)

Headers

If-Matchstring

The version the caller believes the resource holds, as an entity tag (3 or "3"). Equivalent to expected_version in the request body; * states no precondition beyond the resource existing. A mismatch is 409 VERSION_CONFLICT.

Request body

namestring
descriptionstring nullable
state_schemaobject nullable
input_schemaobject nullable
output_mappingOrchestrationOutputMapping nullable

The shape of a completed run's output, owned by the orchestration rather than by its terminal node ids. Each key is an output field (a dotted key such as summary.title builds a nested object); each value is JSON Logic (https://jsonlogic.com) evaluated against { "state": <final run state> }, which includes state.input and state.nodes.<id>. A missing path maps to null; a mapping that throws fails the run. Null (or omitted) keys output by terminal node id. Versioned with the graph; null on update clears it.

version_labelstring

Optional tag for the version this write archives, e.g. pre-rewire. Ignored when the write changes no graph field, since no version is archived.

expected_versioninteger nullable

The version the caller believes the resource holds. When the resource is at any other version the write is refused with 409 VERSION_CONFLICT and nothing is written; meta.current_version on that response names the version in force.

Omit it to write unconditionally. Omitting it does not make the write unordered: two writes that reach the server together are still serialized, and the one whose version was taken first is refused the same way. What the field adds is refusing a write whose author read the resource some time ago and has not seen what happened since.

The If-Match header carries the same precondition for a client that prefers the HTTP spelling. Sending both with different versions is 400 VALIDATION_FAILED.

Example request

{
  "output_mapping": {
    "summary": {
      "var": "state.summary"
    },
    "answer": {
      "var": "state.nodes.answer.content"
    }
  },
  "version_label": "pre-rewire",
  "expected_version": 3
}

Response

Updated orchestration

idstring required

Public ID (orch_...).

project_idstring required

Public ID of the owning project.

namestring required

Human-readable name.

descriptionstring nullable

Optional description.

versioninteger required

Incremented on every write that changes the graph; prior versions are archived. A run pins the version it started on, so these fields are a draft for runs started from now on rather than a live rewrite of the ones already executing.

state_schemaobject nullable

Optional JSON Schema for state validation.

input_schemaobject nullable

Schema for run inputs (initial state).

output_mappingOrchestrationOutputMapping nullable

The shape of a completed run's output, owned by the orchestration rather than by its terminal node ids. Each key is an output field (a dotted key such as summary.title builds a nested object); each value is JSON Logic (https://jsonlogic.com) evaluated against { "state": <final run state> }, which includes state.input and state.nodes.<id>. A missing path maps to null; a mapping that throws fails the run. Null (or omitted) keys output by terminal node id. Versioned with the graph; null on update clears it.

created_atstring date-time required
updated_atstring date-time required

Example response

{
  "version": 1,
  "output_mapping": {
    "summary": {
      "var": "state.summary"
    },
    "answer": {
      "var": "state.nodes.answer.content"
    }
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.