Open in
Leaving ThunderPhone
Export an agent as open files, rebuild it on LiveKit Agents, Pipecat, Vapi, or Retell with a coding-agent skill, and download your call history and recordings.
You can leave ThunderPhone whenever you want. Any agent exports as a zip of open files, free, and a skill helps your coding agent rebuild it on LiveKit Agents, Pipecat, Vapi, or Retell. This page covers what you can take, how to export it, and what you redo on the other side.
What you can take with you
| What | How |
|---|---|
| An agent: instructions, tools, transfer numbers, steps, settings, number routing, and webhooks | The agent export, one zip per agent |
| The agent's knowledge files | Inside the agent export |
| Call history and transcripts | The calls export, up to 1,000 calls per request |
| Recordings | One recording per request, by call |
| Phone numbers on your own carrier | They never left your carrier. See Phone numbers |
Export an agent
In Zeus
Open the agent and go to its settings (Call handling in the agent's editor). At the bottom, under Export, copy or delete, choose Export. The zip downloads to your computer.
With the API
curl 'https://api.thunderphone.com/v1/agents/12/export' \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-o agent-12.zipThe zip is built when you ask for it. Anyone who can read the agent can
export it. Knowledge, numbers, and webhooks are included only when the
credential can read them: an OAuth token needs knowledge:read,
numbers:read, and integrations:read, and webhooks also need an admin or
owner. A part that is left out is listed under omitted in manifest.json.
The API answers 429 above 30 exports a minute.
| Query parameter | Description |
|---|---|
include_url_paths | true keeps the path of each URL in the export, such as a tool's endpoint. By default every URL is cut to its host. User names, passwords, and query strings are removed from URLs either way |
Use include_url_paths=true when you are about to rebuild the agent
somewhere else, because the tool endpoints are needed there. Leave it off for
a copy you plan to share.
What the zip holds
| File | Contents |
|---|---|
manifest.json | The format (thunderphone.agent-export/v1), what is included, and an omitted list that names anything left out and why |
agent.json | The agent as GET /v1/agents/{agent_id} returns it, with credentials removed |
prompt.md | The live instructions |
knowledge/index.json and the files beside it | The agent's knowledge. Each document is the original file where one is stored, otherwise its extracted text |
numbers.json | The numbers routed to this agent, inbound and outbound, with any pinned version or variant |
webhooks.json | The webhook endpoints scoped to this agent, without their secrets |
README.md | What each file is |
A knowledge file larger than 25 MB is left out, and so is anything past
100 MB for the whole export. Each one is listed in manifest.json with the
endpoint that downloads it,
GET /v1/knowledge/documents/{document_id}/original.
What is never included
- Credential values. A tool's headers are listed by name only. Header values are write-only in ThunderPhone: no API response returns them, so no export can. You re-enter them on the other side. This covers credentials ThunderPhone stores as credentials. Your instructions and knowledge files are copied exactly as you wrote or uploaded them, so if a key was ever pasted into a prompt or a document, it is in the zip. Check before you share it.
- Call history and recordings. They have their own exports; see Call history and recordings.
- Version history. The export holds the agent as it is live now. Earlier
versions stay listed at
GET /v1/agents/{agent_id}/versions. - Other agents this one hands off to. Export each of them the same way.
Move to another platform
The migrate-off-thunderphone skill walks your coding agent through the
move. Install the ThunderPhone skills:
npx skills add thunderphone/skillsThen ask your coding agent to move an agent off ThunderPhone and name the destination: LiveKit Agents, Pipecat, Vapi, or Retell. The skill downloads the export, asks you for each credential, rebuilds the agent from a mapping for that destination, and tests it there before any number moves. The conversion runs in your coding agent, with your own keys. ThunderPhone never writes to your account on another platform.
What carries over, as files the skill maps for you:
- Instructions, including shared instructions and steps.
- Tools: the same endpoint, method, and parameter schema. Each tool's
request_formatrecords the body shape your endpoint expects. - Transfer numbers and the end-call and keypad settings.
- Knowledge files.
- Voicemail, silence, and call-length settings.
- Which numbers the agent answers and places calls from.
What you redo on the other side:
- Speech, language-model, and voice providers. You choose them on the destination. Nothing guarantees that a voice, or how a call sounds, will match.
- Credentials. Tool header values and webhook secrets.
- Telephony. How numbers reach the agent is set up differently on every platform.
- Steps and handoffs. A destination with a flow or handoff feature gets them rebuilt there. Elsewhere the skill folds the steps into the instructions and tells you.
- ThunderPhone settings with no equivalent. Intelligence, hearing and reply-speed settings, the built-in email and text-message tools, and call grading, summaries, and outcome labels do not move unless you rebuild them.
- Request signatures. ThunderPhone signs the tool requests and webhooks it sends. Another platform signs its own way, so an endpoint that verifies the ThunderPhone signature needs a new check.
- Testing. Test the rebuilt agent on the destination before you move a number.
Leave the ThunderPhone agent in place until the new one has passed your tests. It is your way back.
Phone numbers
Move numbers last, after the new agent passes its tests.
- A number on your own carrier (a VoIP connection)
stays with that carrier. Point it at the new platform in your carrier's
console. Then choose Release on the number in ThunderPhone and leave
Also cancel this number in my … account unticked: the number is
disconnected from ThunderPhone and stays in your carrier account. Through
the API, release it
with
DELETE /v1/phone-numbers/{phone_number_id}?confirm=trueand do not sendrelease_at_provider. - A number ThunderPhone provided. Contact support before you release a number you want to keep. Releasing a ThunderPhone number is permanent: it returns to the pool and can go to another customer.
Call history and recordings
These are separate from the agent export.
- Calls.
GET /v1/calls/exportreturns up to 1,000 calls per request as CSV (metadata) or JSON (with transcripts). Filter byagent_idand page through your history withstart_dateandend_date. TheX-Truncatedresponse header istruewhen more calls matched than were returned. - Recordings.
GET /v1/calls/{call_id}/audioreturns a short-lived URL for one call's recording. There is no bulk recording download.
curl 'https://api.thunderphone.com/v1/calls/export?export_format=json&agent_id=12&start_date=2026-10-01T00:00:00Z&end_date=2026-11-01T00:00:00Z' \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-o calls-2026-10.jsonWhat it costs
Nothing. The agent export, the calls export, and recording downloads are free. ThunderPhone is pay-as-you-go with no subscription and no seat fee. A ThunderPhone number stops billing when you release it.
After you leave
There is no fixed term. You may end the agreement by written notice to legal@thunderphone.com, sent from the account's administrative email or another verifiable channel. A lapse in payment may suspend service; by itself it never ends the agreement or triggers deletion of Customer Data. On data, the Terms say: "After formal termination, Provider will return or delete Customer Data within sixty (60) days, subject to Customer's export rights, backup cycles, legal holds, legally required retention, the DPA, and any executed BAA."
The full text is in the Terms of Service, under Service term; suspension; termination. The Terms govern; this is a summary.