Guide · n8n
Saidwire speech-to-text in n8n
n8n's built-in OpenAI node can transcribe audio, and its OpenAI credential has a Base URL field. Point that field at Saidwire and the node's Transcribe a recording action runs on Saidwire with no other changes.
| you need | |
|---|---|
| n8n | Cloud or self-hosted, with a recent version whose OpenAI credential shows a Base URL field |
| Saidwire API key | sk_live_... from saidwire.com/dev (120 free hours, no card) |
In n8n, open Settings → Community Nodes and install n8n-nodes-saidwire. Self-hosted:
npm install n8n-nodes-saidwire
npm package · Source on GitHub · The steps below use n8n's built-in OpenAI node with our base URL and work too.
1. Create the credential
- In n8n, open Overview, click Create at the top-right, and choose Credential. (You can also create it from inside the node in step 2, under Credential to connect with.)
- Search for
OpenAIand select it. - Fill in the fields:
field value API Key your Saidwire key, sk_live_...Organization ID (optional) leave blank Base URL https://api.saidwire.com/v1(no trailing slash)Add Custom Header off - Click the credential's name at the top and rename it to something like
Saidwire, so it is not confused with an OpenAI key. - Click Save. n8n tests the credential by listing models, and Saidwire answers with
saidwire-en, so the test passes when the key is valid.
2. Add the transcription step
- Start with a node that outputs an audio file as binary data, for example Read/Write Files from Disk, an HTTP Request that downloads a file (Response Format:
File), a Form trigger with a file field, or a Telegram trigger set to download voice messages. - Click + after it, search for
OpenAI, and in its list of actions choose Transcribe a recording (under the audio actions). - Set the parameters:
parameter value Credential to connect with the Saidwirecredential from step 1Resource AudioOperation Transcribe a RecordingInput Data Field Name the binary field holding the audio, usually dataOptions → Language of the Audio File en(optional; other languages are rejected)Options → Output Randomness (Temperature) leave unset (it has no effect) - Click Execute step. The output is
{"text": "...", "usage": {"type": "duration", "seconds": ...}}. Use{{ $json.text }}in the next node.
The node always sends model=whisper-1. Saidwire accepts any model name, so this is fine.
Timestamps or subtitles: use HTTP Request
The OpenAI node returns plain text only. For word timestamps, segments, or an SRT/VTT file, call the endpoint with an HTTP Request node and reuse the same credential:
| parameter | value |
|---|---|
| Method | POST |
| URL | https://api.saidwire.com/v1/audio/transcriptions |
| Authentication | Predefined Credential Type |
| Credential Type | OpenAI, then pick the Saidwire credential |
| Send Body | on |
| Body Content Type | Form-Data |
| Body field 1 | Type n8n Binary File, Name file, Input Data Field Name data |
| Body field 2 | Type Form Data, Name model, Value saidwire-en |
| Body field 3 | Type Form Data, Name response_format, Value verbose_json (or srt, vtt, text) |
| Body field 4 (optional) | Type Form Data, Name timestamp_granularities[], Value word |
For srt, vtt and text, set Options → Response → Response Format to Text. The full list of fields and formats is in the API docs.
Troubleshooting
| you see | fix |
|---|---|
Credential test fails, or 404 | Base URL must be exactly https://api.saidwire.com/v1, with no trailing slash. |
401 Incorrect API key provided | The key is wrong, revoked or has a stray space. |
400 ... language | Saidwire transcribes English only. Remove the language option or set en. |
400 ... file | The binary field is empty or not audio. Check Input Data Field Name against the previous node's output. |
429 | Too many files at once for your key (trial keys allow 4), or your free hours are used up. Lower the batch size, or check the message. |
Good to know
- Files up to 100 MB and 60 minutes. WAV, MP3, FLAC, Ogg/Opus, WebM and M4A/MP4 work.
- Saidwire processes the audio in memory and does not store it.
- $0.30 per audio hour after the free hours, billed per second.
Stuck? Email support@saidwire.com with the x-request-id from the failed call.
OpenAI is a trademark of OpenAI. Open WebUI, n8n, LiteLLM, Dify, Flowise, Vercel and the AI SDK belong to their respective owners. Saidwire is not affiliated with OpenAI or with these projects.