Meeting-notes and transcription products share a common shape: take an
audio file, turn it into text, then ask a model to summarize or answer
questions about that text. On the WebWright API that is two calls on one
key and one base URL, https://webwright.ai/v1.
This post walks through the sequence. The full parameter reference for each endpoint lives on the API reference.
1. Transcribe the audio
Send the file to POST /v1/audio/transcriptions as multipart/form-data. This example uses whisper-large-v3-turbo and requests a JSON response, which
returns the transcript in a text field.
curl https://webwright.ai/v1/audio/transcriptions \
-H "Authorization: Bearer www_v1_YOUR_API_KEY" \
-F "file=@meeting.mp3" \
-F "model=whisper-large-v3-turbo" \
-F "response_format=json" 2. Summarize the transcript
Pass the transcript into POST /v1/chat/completions with the wren-r1 chat model. The request is the standard
OpenAI-compatible chat payload, so the same key works for both calls.
curl https://webwright.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer www_v1_YOUR_API_KEY" \
-d '{
"model": "wren-r1",
"messages": [
{"role": "system", "content": "Summarize the meeting transcript into decisions and action items."},
{"role": "user", "content": "PASTE_TRANSCRIPT_TEXT_HERE"}
]
}' The whole workflow in Python
The OpenAI SDK sends both requests when you point it at the WebWright base URL. One client handles the transcription and the summary in sequence.
from openai import OpenAI
client = OpenAI(
base_url="https://webwright.ai/v1",
api_key="www_v1_YOUR_API_KEY",
)
# 1. Transcribe the audio file.
with open("meeting.mp3", "rb") as audio:
transcript = client.audio.transcriptions.create(
model="whisper-large-v3-turbo",
file=audio,
response_format="json",
)
# 2. Summarize the transcript.
completion = client.chat.completions.create(
model="wren-r1",
messages=[
{
"role": "system",
"content": "Summarize the meeting transcript into decisions and action items.",
},
{"role": "user", "content": transcript.text},
],
)
print(completion.choices[0].message.content) The response format, accepted audio fields, and chat parameters are documented on the API reference. If a request fails, the error body follows the same OpenAI error schema described there.
Estimate your own monthly bill with the cost calculator.
The WebWright Team