Flaky vendor — retry then catch

A vendor call inside a Try block: it retries once, and when it still fails the ERROR lane takes over with the details — the run survives. This demo's vendor always fails so you can see the catch path.

What’s inside

5 nodes — every type links to its full reference page.

StepNodeType
Shipment Inject input.inject
Try vendor Try error-handling.try
Vendor tracking call JavaScript utility.javascript
Ops alert Console utility.console
Tracking updated Console utility.console

Import it

  1. Studio → Import — paste the JSON below (or the URL /docs/templates/flaky-vendor-retry-then-catch.json).
  2. Or ask the AI Copilot with the JSON pasted after the phrase:
    import this workflow json into a new workflow named "Flaky vendor — retry then catch"
  3. Any credentials the nodes need are ${credential.…} references — add them once in Admin → Credentials and the template picks them up. Nothing secret ships in a template.
The workflow document (flowdrome.workflow.v1, 4 node types)
{
  "schemaVersion": "flowdrome.workflow.v1",
  "id": "",
  "name": "Flaky vendor — retry then catch",
  "version": "0",
  "status": "draft",
  "nodes": [
    {
      "id": "seed",
      "type": "input.inject",
      "label": "Shipment",
      "category": "trigger",
      "config": {
        "contentType": "application/json",
        "payload": {
          "shipmentId": "SH-77"
        }
      },
      "position": {
        "x": 60,
        "y": 160
      }
    },
    {
      "id": "try",
      "type": "error-handling.try",
      "label": "Try vendor",
      "category": "flow",
      "config": {
        "retries": 1,
        "retryDelayMs": 250
      },
      "position": {
        "x": 380,
        "y": 60
      },
      "width": 460,
      "height": 300
    },
    {
      "id": "vendor",
      "type": "utility.javascript",
      "label": "Vendor tracking call",
      "category": "script",
      "config": {
        "code": "throw new Error('vendor timeout: tracking API did not answer');",
        "outputs": [
          "output"
        ]
      },
      "position": {
        "x": 470,
        "y": 150
      },
      "parentTry": "try"
    },
    {
      "id": "alert",
      "type": "utility.console",
      "label": "Ops alert",
      "category": "utility",
      "config": {
        "message": "⚠️ vendor failed after retry — {{ $json }}"
      },
      "position": {
        "x": 950,
        "y": 240
      }
    },
    {
      "id": "ok",
      "type": "utility.console",
      "label": "Tracking updated",
      "category": "utility",
      "config": {
        "message": "tracking updated: {{ $json }}"
      },
      "position": {
        "x": 950,
        "y": 60
      }
    }
  ],
  "edges": [
    {
      "id": "e0",
      "sourceNodeId": "seed",
      "sourcePort": "output",
      "targetNodeId": "vendor",
      "targetPort": "input"
    },
    {
      "id": "e1",
      "sourceNodeId": "try",
      "sourcePort": "success",
      "targetNodeId": "ok",
      "targetPort": "input"
    },
    {
      "id": "e2",
      "sourceNodeId": "try",
      "sourcePort": "error",
      "targetNodeId": "alert",
      "targetPort": "input"
    }
  ],
  "triggers": [
    {
      "id": "t0",
      "nodeId": "seed"
    }
  ],
  "meta": {
    "snippets": [],
    "source": "template-gallery",
    "description": "A vendor call inside a Try block: it retries once, and when it still fails the ERROR lane takes over with the details — the run survives. This demo's vendor always fails so you can see the catch path."
  }
}

Generated from the verified demo corpus — this exact document seeds and runs on a fresh Flowdrome. Raw JSON: flaky-vendor-retry-then-catch.json.