> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://onepin.ai/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://onepin.ai/docs/_mcp/server.

# Export

> The Onepin Export node (sink_preview) — produces the final audio files. Choose wav or mp3; the run's download is a ZIP of the audio plus a manifest.csv.

**Family: Sink · `type: sink_preview`**

The Export node produces the final audio files — the end of the graph. Every runnable workflow has one, and its input must reach back to a [Generator](/docs/workflow/generator) (Export needs audio to export).

## Config

| Config key | Default | Values       |
| ---------- | ------- | ------------ |
| `format`   | `wav`   | `wav`, `mp3` |

```python
node["config"] = {"format": "mp3"}
```

## Getting the output

The run's download is a ZIP of the generated audio files plus a `manifest.csv` mapping each file to its line and language. Download it after the run completes:

#### Python

```python
dl = client.workflows.download_run(workflow_id=wf, run_id=run_id).data
# dl.url is the pre-signed URL, dl.filename the suggested name
```

#### CLI

```bash
onepin workflows runs download "$WF" "$RUN" --out result.zip
```

#### API

```bash
# 1. Get a 15-minute pre-signed download URL
curl "https://api.onepin.ai/api/v1/workflows/$WF/runs/$RUN/download" \
  -H "Authorization: Bearer $ONEPIN_API_KEY"
# → {"data": {"url": "https://…signed…", "filename": "My-workflow_run1.zip"}}

# 2. Fetch the ZIP from that URL
curl -o result.zip "https://…signed…"
```

## Sharing a finished run

A completed run can also be published behind a public link — anyone with the URL can listen without an API key or an account. Read it off the run: `public_share_id` is the share id (build the URL as `<app origin>/r/<public_share_id>`) and `shared_at` is when it was published. Both are null when the run isn't shared.

> **Note**
>
> You can **read** the share state with an API key, but creating and revoking a share is dashboard-only — those endpoints take a dashboard session, not an API key.

## Inspect this node

#### Python

```python
client.nodes.get_node_detail(node_type="sink_preview").data
```

#### CLI

```bash
onepin nodes show sink_preview
```

#### API

```bash
curl https://api.onepin.ai/api/v2/nodes/sink_preview \
  -H "Authorization: Bearer $ONEPIN_API_KEY"
```

## Related

* [Run a workflow](/docs/guides/run-a-workflow) — run and download end to end
* [Generator](/docs/workflow/generator) — produces the audio Export needs