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
| Synthflow | Dograh |
|---|---|
| Global Settings | Global Node, added to each step that has Add Global Prompt switched on |
| Greeting Message | Start Call node, with the opening line in Greeting Text |
| Conversation | An Agent node, with Enable Variable Extraction and Variables to Extract for the answer |
| Message | Transition Speech on the pathway out of the step (fixed text or a recorded clip) |
| Branch | Pathways, each with a Condition Label and a written Condition the AI checks |
| Jump To | A pathway straight to that node |
| Trigger Subflow | One pathway into that part of the workflow and one back to the next step |
| Custom Action | An HTTP API tool on the Agent node |
| Call Transfer | The Transfer Call tool |
| Real-Time Booking | An HTTP API tool against your calendar's API |
| End Call | End Call node |
| Knowledge base | Knowledge 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.
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 fromtranscript_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.

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.
| Item | Where | Done when |
|---|---|---|
| Export saved | Your files | Each live version's JSON, its actions, knowledge files and call records are stored outside Synthflow |
| Models and voice chosen | Models, Providers | A test call speaks in the new voice |
| Flow rebuilt | Workflow builder | Every Flow Designer node has a Dograh match, and each sub-flow has its return pathway |
| Tools tested | Browser and phone | Each tool succeeds, and a timeout gets a sensible reply |
| Transfer tested | Real phone call | Answered and unanswered transfers both end well |
| Webhook checked | Your receiver | A real payload parsed, and a repeat delivery created no duplicate |
| Rollback written | Your runbook | The number's old Twilio settings, or its porting plan, are saved |
| Synthflow kept active | Synthflow workspace | Every 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.

