Skip to content

Save & Test — Stage 3 of Snap Studio

Audience: Everyone · Tags: studio, flow, runs, beginner

Stage 3 turns a plan you've checked into a real, saved flow — and then proves it works by actually running it, once, for real.

What "Save & test it" does, in order

Clicking Save & test it runs three steps behind the scenes:

  1. A silent check. If you haven't already gotten a clean Check my flow result, Studio quietly runs one first. This means you'll always hear about a problem in plain language instead of getting a confusing failed save — you can't accidentally save something broken.
  2. Save. Studio sends your plan to be persisted:
POST /api/v1/flow-designer/studio/approve
Authorization: Bearer $TOKEN
Content-Type: application/json

{
  "workspaceId": "ws_8f2a1c",
  "plan": { "...": "your checked plan" },
  "name": "Order emails"
}

This is a real save, not a preview. It creates a new flow (or reuses an existing one with the same name), creates a draft from your plan, and promotes that draft — so as soon as this call succeeds, your flow has a live version. On success you get back:

{ "flowId": "flow_9c41e0", "flowName": "Order emails" }

If something about the plan regressed between your last check and now, you'll get a 400 instead, with the same kind of problem list you saw in Stage 2:

{
  "ok": false,
  "error": {
    "code": "STUDIO_PLAN_INVALID",
    "message": "This plan can't be saved yet.",
    "details": {
      "problems": [
        { "stepId": "action-1", "field": "to", "message": "Then: send an email: please fill in \"Send it to\"." }
      ]
    }
  }
}
  1. A real test run. Once the flow is saved, Studio immediately runs it — once, for real, through the actual execution engine. This is not a simulation or a dry run: if the action is "send an email," an email actually goes out.
POST /api/v1/flow-designer/studio/test-run
Authorization: Bearer $TOKEN
Content-Type: application/json

{ "workspaceId": "ws_8f2a1c", "flowId": "flow_9c41e0" }

Reading the narration

While the test run happens, Studio reveals each step one at a time through the same shared status region it's used throughout Studio — roughly every 700 milliseconds, or instantly if you have reduced motion turned on at the operating-system level (see Accessibility). You'll hear or read something like:

Step 1 — Receiving the webhook: done. Step 2 — Sending an email: done.

The response backing that narration looks like this on success:

{
  "runId": "run_77ad2f",
  "status": "succeeded",
  "headline": "It worked — your flow ran for real.",
  "steps": [
    { "title": "Receiving the webhook", "status": "done", "detail": "Signal received." },
    { "title": "Sending an email", "status": "done", "detail": "Email sent to ops@example.com." }
  ],
  "problem": null
}

On success

You'll see a green confirmation: "It worked — your flow ran for real. It's saved as 'Order emails' in your Flows," with a link to Flows and a Build another button if you want to start a new one. Your flow is now live — the next time its webhook receives a signal, it runs again on its own, the same way it just did.

On failure

If the run fails, you'll see a role="alert" card instead of the green confirmation, built from the same response shape:

{
  "runId": "run_77ad2f",
  "status": "failed",
  "headline": "We hit a problem running your flow.",
  "steps": [
    { "title": "Receiving the webhook", "status": "done", "detail": "Signal received." },
    { "title": "Sending an email", "status": "failed", "detail": "The email server rejected the request." }
  ],
  "problem": {
    "message": "SnapLink couldn't send the email — the mail server isn't set up yet.",
    "suggestion": "Ask your SnapLink admin to configure the email connector, then try again."
  }
}

The card shows problem.message (the plain-language cause) and a "How to fix it:" line with problem.suggestion. A Go back and edit button returns you to Stage 2 with your plan fully intact, so you can fix the field in question and try Save & test it again — your flow was still saved in Stage 2's sense, it just didn't run cleanly yet.

You can revisit the explanation for any past test run later without re-running it:

GET /api/v1/flow-designer/studio/runs/run_77ad2f/explain
Authorization: Bearer $TOKEN

This returns the same { runId, status, headline, steps, problem } shape you saw right after the run.

If something goes wrong

See Snap Studio problems for what to do when a test run fails, and how it's different from a flow that simply hasn't run yet.


Related: Review & edit · Execution history · Monitoring runs