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:
- 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.
- 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\"." }
]
}
}
}
- 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