Quickstart
The script below runs both endpoints end-to-end. Pick a language tab, paste in your API key, and point AUDIO_FILE at a local file.
#!/usr/bin/env bash
set -euo pipefail
# 1. Set your API key
KEY="lk_..."
BASE="https://sandbox.lingint.ai/api/v1/third-party/note-taker"
AUDIO_FILE="meeting.mp3"
# 2. Submit audio for transcription
# speakers provides known names + optional gender hint
echo "Submitting audio..."
TASK_ID=$(curl -s "$BASE/audio2dialog" \
-H "X-API-Key: $KEY" \
-F "audio=@$AUDIO_FILE" \
-F 'speakers=[{"name":"Alice","gender":"female"},{"name":"Bob","gender":"male"}]' \
| jq -r '.data.task_id')
echo "audio2dialog task_id: $TASK_ID"
# 3. Poll until completed, then download dialog.json from result.dialog_url
DELAY=2
while true; do
RESP=$(curl -s "$BASE/audio2dialog/$TASK_ID" -H "X-API-Key: $KEY")
STATUS=$(echo "$RESP" | jq -r '.data.status')
PROGRESS=$(echo "$RESP" | jq -r '.data.progress // "–"')
echo " status=$STATUS progress=$PROGRESS"
if [ "$STATUS" = "completed" ]; then
DIALOG_URL=$(echo "$RESP" | jq -r '.data.result.dialog_url')
curl -s -L "$DIALOG_URL" -o dialog.json
echo "Dialog saved to dialog.json"
break
elif [ "$STATUS" = "failed" ]; then
echo "Task failed: $(echo "$RESP" | jq -r '.data.error.message')"
exit 1
fi
sleep $DELAY
DELAY=$(( DELAY < 15 ? DELAY * 2 : 15 ))
done
# 4. (Optional) Inspect dialog.json. Map speaker IDs (speaker_1, speaker_2, ...)
# to real names + optional gender hint via speakerMap below.
# 5. Submit dialog for note generation (binary upload of dialog.json)
echo "Submitting dialog for meeting note..."
NOTE_TASK_ID=$(curl -s "$BASE/dialog2meeting" \
-H "X-API-Key: $KEY" \
-F "dialog=@dialog.json;type=application/json" \
-F 'speakerMap=[{"speaker_id":"speaker_1","name":"Alice","gender":"female"},{"speaker_id":"speaker_2","name":"Bob","gender":"male"}]' \
| jq -r '.data.task_id')
echo "dialog2meeting task_id: $NOTE_TASK_ID"
# 6. Poll until completed, then download the DOCX
DELAY=2
while true; do
RESP=$(curl -s "$BASE/dialog2meeting/$NOTE_TASK_ID" -H "X-API-Key: $KEY")
STATUS=$(echo "$RESP" | jq -r '.data.status')
echo " status=$STATUS"
if [ "$STATUS" = "completed" ]; then
DOCX_URL=$(echo "$RESP" | jq -r '.data.result.docx_url')
curl -s -L "$DOCX_URL" -o meeting_note.docx
echo "DOCX downloaded to meeting_note.docx"
echo "$RESP" | jq -r '.data.result.markdown' > meeting_note.md
echo "Markdown saved to meeting_note.md"
break
elif [ "$STATUS" = "failed" ]; then
echo "Task failed: $(echo "$RESP" | jq -r '.data.error.message')"
exit 1
fi
sleep $DELAY
DELAY=$(( DELAY < 15 ? DELAY * 2 : 15 ))
done
echo "Done."For details on each step, see the individual endpoint pages: POST /audio2dialog, POST /dialog2meeting, and Polling task status.