Dograh

How to Migrate From Synthflow to Open-Source Voice AI: Step by Step

How to Migrate From Synthflow to Open-Source Voice AI: Step by Step
TutorialOctober 24, 2026·15 min read

How to Migrate From Synthflow to Open-Source Voice AI: Step by Step

Abhishek Kumar
Abhishek Kumar·Co-founder, Dograh AI

Co-founder of Dograh, building the future of open-source voice AI agents. Own your voice AI stack.

To migrate from Synthflow to open-source voice AI, export each agent version to JSON and save its actions and knowledge bases separately, since the export leaves them out. Rebuild the flow in Dograh, an open-source, self-hostable voice agent platform, and choose new models. Test on a spare number, then move one number at a time, keeping Synthflow as the fallback.

Key Takeaways

  • Synthflow's JSON export leaves out actions and knowledge bases; save them first.
  • Synthflow LLM stays behind; on Dograh, use your own keys or host open-weight models.
  • Move one number at a time, with Synthflow still answering the rest.

This post is part of our guide to Synthflow alternatives. The guide's section "What moving off Synthflow takes" covers the move in brief. This tutorial shows how to move, step by step, onto Dograh, an open-source, self-hostable voice agent platform.

The timing suits a move for some teams. Synthflow is retiring its legacy Global cluster during Q4 2026, so workspaces on it face a region change anyway, and since 15 September 2026 agencies bill their clients outside Synthflow. Dograh has no Synthflow importer, so the move is a guided rebuild, with Synthflow answering calls until each rebuilt agent proves itself.

What you need before you start

You need access to your Synthflow workspace, a Dograh account, keys for the model providers you plan to use, and a spare phone number for testing.

Dograh runs as managed Dograh Cloud or self-hosted on your own server. Self-hosted Dograh has no per-minute platform fee (servers, model keys and phone minutes still cost); Dograh Cloud has a 1¢-a-minute platform fee. Cloud includes 10 concurrent calls. For testing, a spare Twilio number costs $1.15 a month in the US.

Plan for real effort. In a Zapier survey of US enterprise executives published in April 2026, 89% believed they could switch AI vendors within four weeks, yet 58% of those who had tried said the move failed or took far more effort than expected. That is why this guide moves one number at a time, with a way back.

Hold off if your setup depends on what Synthflow's contract includes, such as its own launch team, its trust-center certificates or PII redaction, or if your contract has many months left and the saving will not repay the work before renewal.

Step 1: Export each agent version from Synthflow

Download every live agent's settings, then write down what the download leaves out. In each agent's version history, choose Export to JSON. Synthflow's version history docs say it "downloads that version's configuration as a .json file", and every publish saves a new version, so export the version your live calls use. Keep one file per agent, because it is your spec for the rebuild.

The file is not the whole agent. "Exports do not include actions or knowledge bases", so record those by hand. Write down each custom action's URL, method, headers and body, and which node runs it, and keep the original files behind each knowledge base. Note too which agent each phone number points at, and where the number lives: bought from Synthflow, in your own Twilio account, or on your own carrier or PBX. Download any call records you need to keep before you close the workspace.

Check: you have one JSON file per live agent, a list of its actions with their full request details, its knowledge base files, and a table of numbers with their carrier.

Step 2: Set up Dograh and choose the models

Create your Dograh workspace, then pick the models and voice that replace Synthflow's. On Dograh Cloud, sign up at app.dograh.com. To self-host, follow the Docker setup, which runs Docker Compose on a server with at least 8 GB of RAM and 4 vCPUs. No GPU is needed when your models run through API keys.

Synthflow LLM runs only inside Synthflow, so nothing carries over here. Dograh is the orchestration layer: it runs the call flow, tools and telephony, and the speech and language models are a separate layer you choose. Connect your provider keys under Providers in the sidebar. Dograh starts every account on its own managed models. To keep call audio away from Dograh, open Models, switch the Organization default to BYOK with your own speech and language providers (or local models), and check that no agent has its own model override. On screen, that means: open Models, click Add Configuration, choose BYOK, pick your speech-to-text, language model and voice, save, then click Make org default on that row (see the model configuration docs). The call audio stays in-house only when the speech and language models run on your own servers too. To get there, host open-weight models; our tutorial on building a voice agent on fully local open-source models covers that setup.

A new language model reads your prompts a little differently, so expect to adjust them in Step 6. A voice cloned for your Synthflow agent has to be re-created at a provider Dograh supports, such as ElevenLabs or Cartesia, with the speaker's consent; enter the new voice ID in the model configuration's voice field by hand.

Check: under Models, your named model configuration shows the speech-to-text, language model and voice you picked, with the Org default badge.

Step 3: Rebuild each flow in Dograh

Turn each Synthflow node into a Dograh node, pathway or tool, working from the JSON file. Under Voice Agents, create an agent: on the Create Voice Agent page, set Call Type to Inbound or Outbound, enter a Use Case and an Activity Description, and click Create Agent. In the agent's Model tab, leave the picker on Organization default, which now points at your configuration from Step 2. In its Settings tab, open Dictionary, type the words callers say that speech-to-text often mishears, such as product names, separated by commas, and click Save Dictionary. Then go back to the Canvas tab, the visual workflow builder.

A Prompt Builder agent is the simple case: its prompt becomes one Agent node between a Start Call node and an End Call node. A Flow Designer agent needs the table below.

What maps to what

SynthflowDograh
Global SettingsGlobal Node, added to each step that has Add Global Prompt switched on
Greeting MessageStart Call node, with the opening line in Greeting Text
ConversationAn Agent node, with Enable Variable Extraction and Variables to Extract for the answer
MessageTransition Speech on the pathway out of the step (fixed text or a recorded clip)
BranchPathways, each with a Condition Label and a written Condition the AI checks
Jump ToA pathway straight to that node
Trigger SubflowOne pathway into that part of the workflow and one back to the next step
Custom ActionAn HTTP API tool on the Agent node
Call TransferThe Transfer Call tool
Real-Time BookingAn HTTP API tool against your calendar's API
End CallEnd Call node
Knowledge baseKnowledge Base files attached to the node

Where the design changes

Synthflow's Trigger Subflow hands the call to a sub-agent and comes back on its own. In Dograh you build this with pathways: one pathway into that part of the workflow and one back to the next step. The return is not automatic; you draw it. A Synthflow Global Settings block becomes Dograh's Global Node, which is a shared prompt added to each step, not a step of its own.

Pathway conditions are read by the AI, never applied as a fixed rule, so write each one in plain words and test values near its edge. Lines that must be spoken word for word belong where Dograh plays fixed text: the Greeting Text, or a pathway's Transition Speech. Transition Speech cannot include per-caller variables, so a Message node that read out a variable needs that line in the next Agent node's prompt instead.

For a faster rebuild, let an AI assistant do it through Dograh's MCP (Model Context Protocol) server. Create an API key under Developers first. The command below registers the server in Claude Code, with your key in the X-API-Key header:

claude mcp add --transport http dograh https://app.dograh.com/api/v1/mcp/ \
  --header "X-API-Key: YOUR_DOGRAH_API_KEY"

What this does: It connects Claude Code to your Dograh workspace. On a self-hosted install, swap the URL for your own backend address followed by /api/v1/mcp/.

Then give the assistant one exported JSON file and the table above, and ask it to plan, then build, a Dograh agent that does the same job. A brand-new agent created this way publishes as version 1 at once, while edits to an existing agent save as drafts, so test it before any number points at it. Teams that prefer code can convert the JSON into Dograh's own nodes-and-edges format and load it with Upload Agent Definition on the Voice Agents page, or the Create from Definition API. Either way, expect to convert the file by hand or with the assistant, since there is no one-click import.

Dograh

Open Source Alternative to Vapi / Retell

Self-hosted voice agent platform — no per-minute fees

dograh-hq/dograh

Star on GitHub

Check: the canvas shows a Start Call node with your old greeting, one Agent node for each Conversation node, and a pathway for each Branch, Jump To and sub-flow route, including the drawn return.

Step 4: Re-create actions, transfers and knowledge

Each Synthflow node that acts during the call becomes a Dograh tool or a knowledge file. Every custom action becomes an HTTP API tool: under Tools, click Create New Tool, choose External HTTP API, and enter the same Endpoint URL, HTTP Method, headers and parameters from your Step 1 list, then attach it to the Agent nodes that need it. HTTP API tools wait 5 seconds by default and do not retry, so add a prompt line to each node that uses one: if the tool returns an error, say you cannot check right now and offer a callback. The tool's Custom Message (text or a recorded clip) plays once, just before the tool runs.

Real-Time Booking becomes the same kind of tool, pointed at your calendar's own API. Our post on booking meetings mid-call with Calendly shows the pattern with an HTTP API tool.

Each Call Transfer node becomes a Transfer Call tool. Under Tools, create one, set Destination Source to Static / Template and enter the number in E.164 format, such as +1415555XXXX. Transfer Timeout defaults to 30 seconds. Transfer Call works on Twilio, Telnyx and Asterisk ARI. It passes no summary by default; on Twilio it can play a short spoken introduction to both people. Write the details to your system with an HTTP API tool before the transfer. If nobody answers, the caller stays with the agent; tell it in the prompt to offer a callback.

For knowledge bases, upload the original files under Files, then select them on each node under Knowledge Base Documents. Dograh takes PDF, DOCX, DOC, TXT, JSON and Markdown files up to 5 MB each.

Check: a browser test call that needs each tool shows the tool call completing in the transcript.

Step 5: Send call results to a Webhook node

Move whatever Synthflow sent to your systems after each call to a Webhook node with the fields your receiver already reads. Add a Webhook node to the workflow and design its payload. The template below keeps your receiver's own key names, filling them from Dograh's run ID in workflow_run_id, the extracted values in gathered_context and the links in recording_url and transcript_url:

{
  "call_id": "{{workflow_run_id}}",
  "outcome": "{{gathered_context.call_disposition}}",
  "appointment_date": "{{gathered_context.appointment_date}}",
  "duration_seconds": "{{cost_info.call_duration_seconds}}",
  "recording_url": "{{recording_url}}",
  "transcript_url": "{{transcript_url}}"
}

What this does: After each call, it posts one JSON body with the run ID, the outcome, a value the agent extracted (here appointment_date), the duration and download links for the recording and transcript. A receiver that read the full transcript text now fetches it from transcript_url.

A temporary failure, such as a timeout or a 5xx reply, is retried automatically, up to 5 attempts in all, so make your receiver safe to call twice.

Check: a test receiver such as webhook.site shows one POST after a test call, with every field filled.

Step 6: Test in the browser, then on a spare number

Prove the agent in the browser first, then on a real phone line, before any caller reaches it. In the editor, click Test Agent and, in the Test Audio tab, talk through the calls your Synthflow agent handled, using old transcripts as scripts. Before the phone tests, click Publish, then Publish version, because edits reach test calls straight away but live calls only after publishing. Then add your spare number under Telephony, set the agent as that number's Inbound workflow, and call it from a real phone. Browser test calls cannot run Transfer Call, so test every transfer on the phone, answered and unanswered.

For each phone call, where tracing is set up, open View Trace on the run page to see what speech-to-text heard, each prompt sent to the AI, and every tool call with its request and response. Mask any real numbers in what you share, as in +1415555XXXX.

Most phone calls still reach the agent as 8 kHz audio, while a browser call runs at 16 kHz. Depending on the speech model, that can mean more misheard names and numbers, so listen for them. Add a QA node to score each step of every test call, and lower its Sample Rate once you go live. Our checklist for testing voice agents before you go live has the full order of tests.

Check: the phone test appears as a run under Agent Runs, with the transfer in its transcript and the webhook delivered.

Step 7: Run both, then move one number at a time

Keep Synthflow answering while you move your quietest number first, knowing exactly what switches it and what undoes it. Synthflow's contract keeps running while both platforms do, so plan the cutover around its renewal date rather than paying for two platforms longer than you need. For outbound lists, send a small share through a Dograh Campaign and the rest through Synthflow, then compare outcomes before moving the whole list.

For a number in your own Twilio account, open it in the Twilio console and copy its current voice settings into your runbook first. Then connect that Twilio account to Dograh and set the agent as the number's Inbound workflow. Saving it pushes Dograh's webhook to the number in Twilio, so calls switch to Dograh at once. Check the number's voice settings in the Twilio console. To roll back, you paste the old settings back in Twilio. If the number sits on a SIP trunk in Twilio, Twilio ignores its own voice settings, so it moves only when you take it off the trunk.

A board of phone numbers where only the quietest number points to Dograh and three others still answer on Synthflow. Four numbered steps: copy the number's old voice settings from the Twilio console into a runbook, set the agent as its inbound workflow in Dograh, call it from a real phone, then check that Dograh shows a new run and Synthflow shows no new calls on it.
If the quietest line misbehaves, few callers notice, and pasting the saved settings back returns it to Synthflow. A number bought through Synthflow can't move this way; it has to be ported to a carrier Dograh supports first.

Synthflow's telephony docs say purchased numbers cover the US, Canada and Australia. For a number bought through Synthflow, ask Synthflow support how to port it out. A ported number must land with a carrier Dograh supports, such as Twilio, Telnyx, Plivo or Vonage, or on your own SIP trunk through Dograh Managed SIP. Numbers on your own carrier or PBX connect through Dograh Managed SIP on Cloud, or Asterisk ARI when self-hosted. Keep each number answering on Synthflow until its move is complete.

Join the Dograh Community

Dograh is an OSS alternative to Vapi. Join our Slack community for queries, releases, best practices & community interactions.

Check: a call to the moved number appears as a new run in Dograh, and Synthflow's call history shows no new calls on it.

Before you ship it

Run this list for each number before you call its move finished.

ItemWhereDone when
Export savedYour filesEach live version's JSON, its actions, knowledge files and call records are stored outside Synthflow
Models and voice chosenModels, ProvidersA test call speaks in the new voice
Flow rebuiltWorkflow builderEvery Flow Designer node has a Dograh match, and each sub-flow has its return pathway
Tools testedBrowser and phoneEach tool succeeds, and a timeout gets a sensible reply
Transfer testedReal phone callAnswered and unanswered transfers both end well
Webhook checkedYour receiverA real payload parsed, and a repeat delivery created no duplicate
Rollback writtenYour runbookThe number's old Twilio settings, or its porting plan, are saved
Synthflow kept activeSynthflow workspaceEvery number has moved and a week of calls look right

Once your quietest number runs cleanly on Dograh for a week, move the next one the same way, and let the Synthflow contract end after the last.

What you end up with is a platform you control. Dograh is open source under BSD-2-Clause, so you can self-host it without an annual contract, and self-hosted it has no per-minute platform fee. You choose every model, from your own provider keys to open-weight models on your own servers, and your numbers stay with your carrier. Our Dograh vs Synthflow comparison covers what changes day to day. To start, run Dograh from GitHub with Docker Compose, or sign up for Dograh Cloud.

Glossary

Export to JSON
Synthflow's download of one agent version's settings as a .json file. It leaves out actions and knowledge bases, so those are saved separately before a move.
Inbound workflow
The Dograh agent a phone number is set to answer with. Saving it on a Twilio number switches that number's calls to Dograh at once.
Pathway condition
The plain-words rule on a Dograh pathway that the AI reads to decide where the call goes next. It is interpreted, not applied as a fixed rule, so test values near its edge.
HTTP API tool
A Dograh tool that calls one of your systems during the call, with the URL, method, headers and parameters you set. It waits 5 seconds by default and does not retry.

Frequently Asked Questions

Get started with Dograh

Build, deploy, and scale AI agents with Dograh. Join the community of developers building the future.