GoRunner docs
Search or askSearch⌘K

Export a workflow

GET/api/workflows/{id}/export

Returns a workflow’s draft as a file another installation can import.

Needs an API token with the Read permission for workflows (workflow:read).

Parameters

Path

idRequired · UUID

The workflow’s ID.

Save it as a file

The answer is ordinary JSON, not a download. Save data, and import that with Import a workflow, which also takes the whole answer.

It holds the draft: the name, description, trigger type, tags and tree. No ID, state, folder, runs or webhook token.

Connection IDs in the tree travel as they are, and won’t exist on another installation.

Responses

  • 200OK

    The export.

  • id isn’t a UUID.

  • The token lacks the Read permission for workflows.

  • No workflow with this ID in the token’s workspace.

Any call can also answer: 401 UNAUTHORIZED · 401 TOKEN_ENDED · 403 TOKEN_SURFACE_OFF · 403 FEATURE_OFF · 403 EMBED_NOT_ALLOWED · 403 EMBED_NOT_AVAILABLE · 403 ACCOUNT_SUSPENDED · 429 RATE_LIMITED · 503 BUSY · 503 PAUSED · 503 SERVICE_UNAVAILABLE. See Errors.

Request

GORUNNER="https://api.gorunner.io"
GORUNNER_TOKEN="grt_…"  # needs Read for workflows
WORKFLOW_ID="your-workflow-id"

curl "$GORUNNER/api/workflows/$WORKFLOW_ID/export" \
  -H "Authorization: Bearer $GORUNNER_TOKEN"

Response · 200 OK

json
{
  "data": {
    "gorunnerExport": "workflow",
    "version": 1,
    "exportedAt": "2026-10-25T09:00:00Z",
    "workflow": {
      "name": "Order intake",
      "description": "Sends new orders to fulfilment.",
      "triggerType": "webhook",
      "tags": [
        "orders"
      ],
      "definition": {
        "schemaVersion": 2,
        "trigger": {
          "name": "trigger",
          "displayName": "Order received",
          "type": "webhook",
          "pieceId": "webhook",
          "pieceVersion": "1.0.0",
          "actionId": "catch_webhook",
          "config": {
            "methods": [
              "POST"
            ]
          },
          "valid": true,
          "nextAction": {
            "name": "forward",
            "displayName": "Forward to fulfilment",
            "type": "PIECE",
            "pieceId": "http",
            "pieceVersion": "1.0.0",
            "actionId": "send_request",
            "config": {
              "method": "POST",
              "url": "https://example.com/fulfilment",
              "body_type": "json",
              "body_json": "{{trigger.body}}"
            },
            "valid": true
          }
        },
        "settings": {}
      }
    }
  }
}
Every field

It takes no body.

Response · 200 OK

dataobject

The portable file format produced by the export route and accepted by import. Carries no ids, no status, no folder, no webhook token and no run history — only what is meaningful on another instance.

gorunnerExportstring

Format marker; the value is the literal string workflow, not a boolean.

One of workflow.

versioninteger

Export FORMAT version — 1. Unrelated to definition.schemaVersion, which is 2.

One of 1.

exportedAttime

When the export was produced. Informational; import ignores it.

workflowobject

The portable payload inside an export envelope. Import also accepts this object on its own, without the envelope around it.

namestring

On import, an empty or absent name becomes "Imported Workflow".

descriptionstring
triggerTypestring

Overridden by whatever definition.trigger says, so it is effectively informational.

One of manual, cron, webhook, callable, event, error, run_finished, poll.

tagsarray of strings

Trimmed and deduplicated case-insensitively on import.

definitionobject

The workflow definition, and the single most important shape in this API.

A workflow definition: its fields are in Workflow definition.