> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vortexiq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get automation canvas

> A workflow automation drawn as n8n draws it, from its own copy of the workflow, so it still answers after the
import is deleted. Answers `404` for an automation that is not a workflow.

Needs the `automations:read` scope.



## OpenAPI

````yaml automations/api/openapi.json GET /v1/automations/{automationId}/canvas
openapi: 3.1.0
info:
  title: Vortex IQ Automations API
  version: 1.0.0
  description: >
    REST API for Vortex IQ Automations. List the templates your organisation can
    use, set automations up on your

    stores, schedule them, run them, and follow every run, from your own tools
    instead of the Automations screens.


    The API is served from `https://automations-api.vortexiq.ai`; the login that
    gives you a token is on

    `https://app.vortexiq.ai`. Every call acts as the person who logged in,
    within their organisation, and every

    answer is JSON. See [Authentication](/automations/api/authentication).
  contact:
    name: Vortex IQ Support
    url: https://www.vortexiq.ai/contact-us
servers:
  - url: https://automations-api.vortexiq.ai
    description: Vortex IQ Automations (production)
security:
  - bearerAuth: []
  - apiCredential: []
tags:
  - name: Authentication
    description: >-
      Exchange your identity and your organisation's API credential for a bearer
      token.
  - name: Templates & stores
    description: What you can set up, and what it can run on.
  - name: Automations
    description: Set automations up, read them and change them.
  - name: Automation controls
    description: Pause, resume, archive and restore.
  - name: Runs
    description: Run an automation now, follow a run, read the history.
  - name: Schedules & calendar
    description: Preview a schedule, list the coming runs, move or skip one.
  - name: Approvals
    description: >-
      The runs waiting for a decision. Deciding happens in the Vortex IQ app
      only.
  - name: Imported workflows
    description: >-
      Bring an n8n or Shopify Flow workflow in, see how it would run, and run it
      as your own automation.
  - name: Status
    description: >-
      Whether Automations are on for your organisation, and how the service is
      doing.
paths:
  /v1/automations/{automationId}/canvas:
    get:
      tags:
        - Imported workflows
      summary: Get automation canvas
      description: >-
        A workflow automation drawn as n8n draws it, from its own copy of the
        workflow, so it still answers after the

        import is deleted. Answers `404` for an automation that is not a
        workflow.


        Needs the `automations:read` scope.
      operationId: getAutomationCanvas
      parameters:
        - name: automationId
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/Id'
          description: The automation's id.
      responses:
        '200':
          description: The canvas.
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                  - contract_version
                properties:
                  success:
                    type: boolean
                    const: true
                  contract_version:
                    $ref: '#/components/schemas/ContractVersion'
                  data:
                    type: object
                    required:
                      - canvas
                    properties:
                      canvas:
                        $ref: '#/components/schemas/WorkflowCanvas'
              example:
                success: true
                contract_version: 1
                data:
                  canvas:
                    nodes:
                      - name: Daily
                        type: n8n-nodes-base.scheduleTrigger
                        kind: trigger
                        disposition: run
                        reason: null
                        position:
                          - 0
                          - 0
                        disabled: false
                        outputs:
                          - null
                        inputs: 0
                        subtitle: every day at 07:00
                      - name: Products
                        type: n8n-nodes-base.httpRequest
                        kind: step
                        disposition: run
                        reason: null
                        position:
                          - 200
                          - 0
                        disabled: false
                        outputs:
                          - null
                        inputs: 1
                        subtitle: 'GET: products.json'
                    connections:
                      - from: Daily
                        output: 0
                        to: Products
                        input: 0
                        type: main
                      - from: Products
                        output: 0
                        to: Summary
                        input: 0
                        type: main
                    notes: []
                    bounds:
                      x: -40
                      'y': 0
                      width: 580
                      height: 160
                    trigger:
                      node: Daily
                      kind: schedule
                      rule: every day at 07:00
                      timezone: null
                    timezone_origin: store
        '401':
          $ref: '#/components/responses/Unauthorised'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      security:
        - bearerAuth:
            - automations:read
        - apiCredential:
            - automations:read
components:
  schemas:
    Id:
      type: string
      description: A public id (a ULID).
      pattern: ^[0-9A-HJKMNP-TV-Z]{26}$
    ContractVersion:
      type: integer
      minimum: 1
      description: >-
        The version of the API this answer follows. It changes only for a
        breaking change.
    WorkflowCanvas:
      type: object
      additionalProperties: false
      description: >-
        An imported workflow drawn as n8n draws it. Never a step's settings, a
        credential or a removed secret.
      required:
        - nodes
        - connections
        - notes
        - bounds
        - trigger
        - timezone_origin
      properties:
        nodes:
          type: array
          maxItems: 500
          items:
            $ref: '#/components/schemas/CanvasNode'
        connections:
          type: array
          maxItems: 5000
          items:
            $ref: '#/components/schemas/CanvasConnection'
        notes:
          type: array
          maxItems: 100
          items:
            $ref: '#/components/schemas/CanvasNote'
        bounds:
          type: object
          additionalProperties: false
          required:
            - x
            - 'y'
            - width
            - height
          description: >-
            Every node's box (its tile and the label beneath) and every note,
            for fit-to-view.
          properties:
            x:
              type: number
            'y':
              type: number
            width:
              type: number
              minimum: 0
            height:
              type: number
              minimum: 0
        trigger:
          type:
            - object
            - 'null'
          additionalProperties: false
          required:
            - node
            - kind
            - rule
            - timezone
          description: >-
            Where runs start, as the plan chose it; null when the workflow has
            no start Vortex IQ runs.
          properties:
            node:
              type: string
            kind:
              type: string
              enum:
                - schedule
                - manual
                - event
            rule:
              type:
                - string
                - 'null'
              description: >-
                The start in words: a Schedule Trigger's rule, or for a store
                event what starts it, such as "Runs when stock changes". Null
                for a Manual Trigger.
            timezone:
              type:
                - string
                - 'null'
        timezone_origin:
          type:
            - string
            - 'null'
          enum:
            - n8n
            - store
            - merchant
            - null
          description: >-
            An automation's read only, where its timezone came from; null for an
            import, and for an automation set up before it was kept.
        source:
          type: string
          enum:
            - n8n
            - shopify_flow
          description: >-
            Where the workflow came from, as the import's plan says it; an
            automation's canvas is always n8n's, the only kind that becomes one.
    CanvasNode:
      type: object
      additionalProperties: false
      description: One n8n node as the canvas draws it. Never its parameters.
      required:
        - name
        - type
        - kind
        - disposition
        - reason
        - position
        - disabled
        - outputs
        - inputs
        - subtitle
      properties:
        name:
          type: string
        type:
          type: string
          description: n8n's type, e.g. n8n-nodes-base.httpRequest.
        kind:
          type: string
          enum:
            - trigger
            - error_trigger
            - step
        disposition:
          $ref: '#/components/schemas/StepDisposition'
        reason:
          type:
            - string
            - 'null'
          description: The plan's reason, as ImportPlanStep has it.
        position:
          type: array
          minItems: 2
          maxItems: 2
          items:
            type: number
          description: n8n's own coordinates.
        disabled:
          type: boolean
        outputs:
          type: array
          maxItems: 5000
          items:
            type:
              - string
              - 'null'
          description: >-
            One entry per output, its label (a Switch's renamed output, true and
            false, Success and Error, done and loop), or null. At most 5,000: a
            count written into the export above that is cut there, and a
            connection can only use an output below it.
        inputs:
          type: integer
          minimum: 0
          maximum: 5000
          description: >-
            How many main inputs it has: 0 for a trigger, 2 or more for a Merge.
            At most 5,000, as outputs.
        subtitle:
          type:
            - string
            - 'null'
          maxLength: 60
          description: >-
            A short description of the step in Vortex IQ's words; never an
            address or a secret.
    CanvasConnection:
      type: object
      additionalProperties: false
      required:
        - from
        - output
        - to
        - input
        - type
      properties:
        from:
          type: string
        output:
          type: integer
          minimum: 0
          maximum: 4999
          description: The source output's index.
        to:
          type: string
        input:
          type: integer
          minimum: 0
          maximum: 4999
          description: >-
            The destination input's index (n8n's `index`): which input of a
            Merge it feeds.
        type:
          type: string
          description: 'n8n''s connection type: main, or a sub-node''s such as ai_tool.'
    CanvasNote:
      type: object
      additionalProperties: false
      required:
        - text
        - position
        - size
        - color
      properties:
        text:
          type: string
          maxLength: 4000
          description: >-
            The note's markdown as its author wrote it, after the import's
            secret check: a note that held a key or a private webhook reads
            [removed]. Other links and addresses stay, as text.
        position:
          type: array
          minItems: 2
          maxItems: 2
          items:
            type: number
        size:
          type: array
          minItems: 2
          maxItems: 2
          items:
            type: number
            minimum: 1
        color:
          type: integer
          minimum: 1
          maximum: 7
    ErrorResponse:
      type: object
      required:
        - success
        - message
        - contract_version
      properties:
        success:
          type: boolean
          const: false
        contract_version:
          $ref: '#/components/schemas/ContractVersion'
        message:
          type: string
          description: Plain words saying what happened and what to do.
        code:
          type: string
          description: >-
            A stable code to act on, such as `wrong_state`, `stale_version` or
            `allowance_spent`.
        errors:
          type: object
          description: Field name to messages, for 422.
          additionalProperties:
            type: array
            items:
              type: string
    StepDisposition:
      type: string
      enum:
        - run
        - show
        - send
        - unsupported
      description: >-
        `run`: runs in Vortex IQ. `send`: writes through the connection bound to
        the step. `unsupported`: cannot run in this version.
  responses:
    Unauthorised:
      description: >-
        The token is missing, has expired, or is no longer valid (for example,
        the API credential was rotated or disabled). The answer carries
        `WWW-Authenticate`; log in again for a new token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: >-
        Your token is valid but may not do this: it lacks the scope, the
        operation is not part of the Automations API, or Automations are
        switched off for your organisation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: >-
        Not found. Anything that belongs to another organisation is answered the
        same way.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    TooManyRequests:
      description: >-
        Too many calls in a minute from you or your organisation; nothing was
        done. `Retry-After` says how many seconds to wait.
      headers:
        Retry-After:
          schema:
            type: integer
            minimum: 1
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        A bearer token from [Login](/automations/api/login), sent as
        `Authorization: Bearer <token>`. Valid for 60 minutes; it acts as the
        person named at login, within their organisation, and never approves.
        Rotating or disabling the organisation's API credential ends every token
        made with it on its next call. See
        [Authentication](/automations/api/authentication).
    apiCredential:
      type: oauth2
      description: >-
        Your organisation's API credential, exchanged at
        [Login](/automations/api/login) for the bearer token above: an OAuth 2.0
        client-credentials request, with the `username`, `email` and
        `organization_name` of the person the token acts as sent as extra
        fields, as Postman's OAuth 2.0 helper can send them. The token never
        holds `automations:approve`.
      flows:
        clientCredentials:
          tokenUrl: https://app.vortexiq.ai/v2/api/automations/login
          scopes:
            automations:read: >-
              Read automations, templates, stores, runs, the calendar, approvals
              and imports.
            automations:write: >-
              Set automations up, change, pause, resume, archive, restore and
              run them; move and skip coming runs; keep and delete imports.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.