Oneschema Multi FileFeed Transforms API

Manage the transforms (flowgraph nodes) of a Multi FileFeed. The HEAD is the mutable, editable version of the flowgraph. Commits are immutable snapshots of the HEAD at a point in time. Imports run against the latest commit.

OpenAPI Specification

oneschema-multi-filefeed-transforms-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: OneSchema AWS Secrets Manager AWS Secrets Manager Accounts Multi FileFeed Transforms API
  version: '1'
  description: Configure AWS Secrets Manager account connections and managed secret references for use in Multi FileFeeds.
  contact:
    name: OneSchema Support
    email: support@oneschema.co
  termsOfService: https://www.oneschema.co/terms-and-conditions
  license:
    name: proprietary
    url: https://www.oneschema.co/terms-and-conditions
servers:
- url: https://api.oneschema.co
  description: Production server (hosted in the US)
- url: https://api.eu.oneschema.co
  description: Production server (hosted in the EU)
- url: https://api.ca.oneschema.co
  description: Production server (hosted in Canada)
- url: https://api.au.oneschema.co
  description: Production server (hosted in Australia)
security:
- ApiKeyAuth: []
tags:
- name: Multi FileFeed Transforms
  description: 'Manage the transforms (flowgraph nodes) of a Multi FileFeed.


    The HEAD is the mutable, editable version of the flowgraph.

    Commits are immutable snapshots of the HEAD at a point in time.

    Imports run against the latest commit.

    '
paths:
  /v0/multi-file-feeds/{multi_file_feed_id}/head:
    parameters:
    - name: multi_file_feed_id
      in: path
      required: true
      schema:
        type: integer
      description: ID of the Multi FileFeed
    get:
      x-readme:
        hidden: true
      summary: Get HEAD state
      description: 'Returns the current HEAD (draft) flowgraph state along with its

        dirty status. The HEAD is the mutable, editable version of the

        flowgraph — it may differ from the latest commit if edits have

        been made but not yet committed.


        The `is_dirty` flag indicates whether the HEAD has changes that

        are newer than the latest commit. If `true`, `POST /commits`

        will reject requests to prevent overwriting in-progress UI edits.


        Requires Multi FileFeed transforms to be enabled for the organization.

        '
      operationId: get-multi-file-feed-head
      tags:
      - Multi FileFeed Transforms
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  is_dirty:
                    type: boolean
                    description: Whether the HEAD has uncommitted changes newer than the latest commit
                  transforms:
                    type: object
                    description: The portable flowgraph export
                    properties:
                      version:
                        type: integer
                        description: Export format version
                        example: 0
                      exported_at:
                        type: string
                        format: date-time
                        description: When the export was generated
                      flowgraph:
                        type: object
                        properties:
                          nodes:
                            type: array
                            items:
                              type: object
                              properties:
                                node_key:
                                  type: string
                                type:
                                  type: string
                                config:
                                  type: object
                                position_x:
                                  type: number
                                position_y:
                                  type: number
                                pipeline:
                                  type: object
                                  nullable: true
                          edges:
                            type: array
                            items:
                              type: object
                              properties:
                                from_node_key:
                                  type: string
                                to_node_key:
                                  type: string
                required:
                - is_dirty
                - transforms
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                type: object
        '401':
          description: Unauthorized (missing or invalid API key)
        '403':
          description: Forbidden (wrong organization or required feature not enabled)
        '422':
          description: Unprocessable entity (e.g. workflow has no recurring flowgraph)
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
  /v0/multi-file-feeds/{multi_file_feed_id}/transforms/history:
    parameters:
    - name: multi_file_feed_id
      in: path
      required: true
      schema:
        type: integer
      description: ID of the Multi FileFeed
    - name: offset
      in: query
      required: false
      schema:
        type: integer
        minimum: 0
        default: 0
      description: Number of commits to skip (for pagination)
    - name: limit
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
      description: Maximum number of commits to return (1–100)
    get:
      summary: Get transforms history
      description: 'Returns the paginated commit history for the Multi FileFeed''s transforms,

        ordered by most recent first.


        Each entry includes the commit ID, timestamp, and optional creator label

        and change descriptions.


        Requires Multi FileFeed transforms to be enabled for the organization.

        '
      operationId: get-multi-file-feed-transforms-history
      tags:
      - Multi FileFeed Transforms
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                required:
                - history
                - total_count
                properties:
                  history:
                    type: array
                    description: Ordered list of commits, most recent first
                    items:
                      type: object
                      required:
                      - commit_id
                      - created_at
                      properties:
                        commit_id:
                          type: integer
                          description: Unique identifier of the commit
                        created_at:
                          type: string
                          format: date-time
                          description: When the commit was created (ISO 8601)
                        creator_label:
                          type: string
                          description: Label of the API key or user that created the commit (omitted if not set)
                        change_descriptions:
                          type: array
                          description: Human-readable descriptions of changes in this commit (omitted if empty)
                          items:
                            type: string
                  total_count:
                    type: integer
                    description: Total number of commits across all pages
        '400':
          description: Bad request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden (feature not enabled)
        '422':
          description: Workflow has no recurring flowgraph
  /v0/multi-file-feeds/{multi_file_feed_id}/transforms:
    parameters:
    - name: multi_file_feed_id
      in: path
      required: true
      schema:
        type: integer
      description: ID of the Multi FileFeed
    get:
      summary: Get transforms
      description: "Returns the current HEAD flowgraph state using the v1 transforms format.\n\nThe response includes the portable flowgraph export (nodes, edges, pipelines),\nthe dirty status (and the last commit ID if there is at least one commit) \nfor optimistic locking.\n\nRequires Multi FileFeed transforms to be enabled for the organization.\n"
      operationId: get-multi-file-feed-transforms
      tags:
      - Multi FileFeed Transforms
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  is_dirty:
                    type: boolean
                    description: Whether the HEAD has uncommitted changes
                  last_commit_id:
                    type: integer
                    description: ID of the latest commit (for optimistic locking)
                  transforms:
                    type: object
                    description: The portable flowgraph export in v1 format
                    properties:
                      version:
                        type: integer
                        description: Export format version (always 1)
                        example: 1
                      flowgraph:
                        type: object
                        properties:
                          nodes:
                            type: array
                            items:
                              type: object
                          edges:
                            type: array
                            items:
                              type: object
                      workflow:
                        type: object
                        description: 'Workflow-level metadata. Present on every response.

                          `workspace_key` is read-only and not accepted by PATCH.

                          '
                        properties:
                          name:
                            type: string
                            description: Workflow display name
                          workspace_key:
                            type: string
                            description: Name of the workspace this workflow belongs to (read-only)
                          workflow_event_webhook_key:
                            type: string
                            description: Key of the event webhook attached to this workflow
                          workflow_code_action_key:
                            type: string
                            description: Key of the code action attached to this workflow
                          custom_metadata:
                            type: object
                            description: Arbitrary JSON metadata stored on the workflow
                      templates:
                        type: array
                        description: 'Template associations for this workflow. Controls which templates

                          appear in the Multi FileFeed template selector.

                          Distinct from node-level `pipeline.template_key`.

                          '
                        items:
                          type: object
                          properties:
                            template_key:
                              type: string
                              description: Portable key of the associated template
                            is_required:
                              type: boolean
                              description: Whether this template is required for the workflow to run
                required:
                - is_dirty
                - transforms
        '400':
          description: Bad request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden (feature not enabled)
        '422':
          description: Workflow has no recurring flowgraph
    patch:
      summary: Patch transforms
      description: "Replaces the Multi FileFeed's HEAD flowgraph with the supplied state.\n\nThe `flowgraph.nodes` and `flowgraph.edges` arrays represent the complete\ndesired state — nodes absent from the payload are deleted, and edges are\nfully replaced. Every call must include a `source` node and an `import` or\n`import-v2` node or the request will be rejected. Represent the complete\nworkflow as a single graph.\n\nWithin an individual node, `config` uses merge semantics:\n\nIf a key is not specified, the current value is left unchanged.\nIf a key takes a scalar value\n- a supplied value replaces the current value\n- a null value deletes the key\nIf a key takes an array value\n- supplied value replaces the current array\n- a null value deletes the key\nIf a key takes a hash/object value\n- the supplied hash is recursively merged with the current hash (same rules apply at each nested level)\n- a null value deletes the key\n\nAuto-commits by default. Use `commit_now: false` to defer committing.\n\nConcurrency guards:\n  - `last_known_commit_id` — optimistic lock; 409 if commits changed\n  - Dirty-state check — 409 if HEAD has uncommitted UI edits (override with `force: true`)\n\nRequires Multi FileFeed transforms to be enabled for the organization.\n"
      operationId: patch-multi-file-feed-transforms
      tags:
      - Multi FileFeed Transforms
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - version
              - flowgraph
              properties:
                version:
                  type: integer
                  description: Payload format version (must be 1)
                  example: 1
                commit_now:
                  type: boolean
                  description: Whether to auto-commit after applying (default true)
                  default: true
                force:
                  type: boolean
                  description: Override dirty-state check when commit_now is true
                  default: false
                last_known_commit_id:
                  type: integer
                  description: Optimistic lock — rejects if latest commit differs
                workflow:
                  type: object
                  description: 'Optional workflow-level metadata to update. Object-merge semantics:

                    only keys present are updated; absent keys leave current values

                    unchanged. `workspace_key` is read-only and ignored if supplied.

                    '
                  properties:
                    name:
                      type: string
                      description: New display name for the workflow
                    workflow_event_webhook_key:
                      type: string
                      description: Key of the event webhook to attach (null to detach)
                    workflow_code_action_key:
                      type: string
                      description: Key of the code action to attach (null to detach)
                    custom_metadata:
                      type: object
                      description: Arbitrary JSON metadata (null to clear)
                templates:
                  type: array
                  description: 'Optional full-replace list of template associations for this workflow.

                    When present, replaces all existing associations — entries absent from

                    the array are removed. Omit the field entirely to leave associations

                    unchanged.

                    '
                  items:
                    type: object
                    required:
                    - template_key
                    - is_required
                    properties:
                      template_key:
                        type: string
                        description: Portable key of the template to associate
                      is_required:
                        type: boolean
                        description: Whether this template is required for the workflow to run
                flowgraph:
                  type: object
                  required:
                  - nodes
                  - edges
                  properties:
                    nodes:
                      type: array
                      description: 'Complete desired set of nodes. Every call must include a `source`

                        node and at least one `import` or `import-v2` node. Nodes absent

                        from this array are deleted.

                        '
                      items:
                        type: object
                        required:
                        - node_key
                        - type
                        - config
                        properties:
                          node_key:
                            type: string
                            description: Unique identifier for the node within this flowgraph
                          type:
                            type: string
                            description: Node type (e.g. source, import-v2, sheet-transforms)
                          config:
                            type: object
                            description: Node-specific configuration (merge semantics — see above)
                          position_x:
                            type: number
                            description: X coordinate in the visual editor
                          position_y:
                            type: number
                            description: Y coordinate in the visual editor
                          pipeline:
                            type: object
                            description: Pipeline configuration (for single-list nodes only)
                            properties:
                              template_key:
                                type: string
                                description: Template key reference
                              config:
                                type: object
                                description: Pipeline step configuration
                              prompt_generated_code_actions:
                                type: array
                                items:
                                  type: object
                                  required:
                                  - key
                                  - label
                                  - user_prompt
                                  - code
                                  properties:
                                    key:
                                      type: string
                                    label:
                                      type: string
                                    user_prompt:
                                      type: string
                                    code:
                                      type: string
                    edges:
                      type: array
                      description: Complete desired set of edges. Fully replaced on every call.
                      items:
                        type: object
                        required:
                        - from_node_key
                        - to_node_key
                        properties:
                          from_node_key:
                            type: string
                            description: Source node key
                          to_node_key:
                            type: string
                            description: Target node key
            examples:
              minimal_two_node_graph:
                summary: Minimal valid graph (source → import-v2)
                value:
                  version: 1
                  flowgraph:
                    nodes:
                    - node_key: source
                      type: source
                      config: {}
                    - node_key: import
                      type: import-v2
                      config: {}
                    edges:
                    - from_node_key: source
                      to_node_key: import
      responses:
        '200':
          description: Successfully patched transforms
          content:
            application/json:
              schema:
                type: object
                properties:
                  transforms:
                    type: object
                    description: Full transforms state after patch
                  commit_id:
                    type: integer
                    description: ID of the created commit (if commit_now was true)
                  created_at:
                    type: string
                    format: date-time
                    description: When the commit was created
        '400':
          description: Bad request (invalid JSON or not an object)
        '401':
          description: Unauthorized
        '403':
          description: Forbidden (feature not enabled or wrong org)
        '409':
          description: Conflict — concurrent modification detected
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  data:
                    type: object
                    properties:
                      last_known_commit_id:
                        type: integer
                      current_commit_id:
                        type: integer
                      is_dirty:
                        type: boolean
        '422':
          description: Validation failed (schema, references, or graph errors)
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  data:
                    type: object
                    properties:
                      errors:
                        type: array
                        items:
                          type: string
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY