Docs
Contact Dashboard

Get startedQuickstart

Quickstart

From an API key to your first transcript in a few minutes.

The API base URL is https://api.p99lab.com (streaming: wss://api.p99lab.com). Your key is in the console.

Get a key

Sign up in the console (every new account starts with $100 of free credit, no card needed) and create a key under API keys. A key is shown once, so copy it somewhere safe straight away. Keep it in an environment variable:

export P99LAB_API_KEY="YOUR_API_KEY"

Check the endpoint

curl https://api.p99lab.com/healthz
{"ok": true, "model": "audrey-0.7"}

Send a recording

Send the audio file as the request body, or as a multipart form with a file part. The response is JSON with the transcript in text.

curl
# The file as the request body
curl https://api.p99lab.com/v1/transcribe \
  -H "Authorization: Bearer $P99LAB_API_KEY" \
  --data-binary @call.wav

# Or as a multipart form, with options as fields
curl https://api.p99lab.com/v1/transcribe \
  -H "Authorization: Bearer $P99LAB_API_KEY" \
  -F file=@call.wav \
  -F language=en \
  -F format=true
Python
import os

import requests

with open("call.wav", "rb") as f:
    r = requests.post(
        "https://api.p99lab.com/v1/transcribe",
        headers={"Authorization": f"Bearer {os.environ['P99LAB_API_KEY']}"},
        files={"file": f},
        data={"language": "en", "format": "true"},
        timeout=900,
    )
body = r.json()
if not r.ok:
    detail = body["detail"]
    raise SystemExit(detail if isinstance(detail, str) else detail["message"])
print(body["text"])
Node.js
import { readFile } from "node:fs/promises";

const form = new FormData();
form.append("file", new Blob([await readFile("call.wav")]), "call.wav");
form.append("language", "en");
form.append("format", "true");

const res = await fetch("https://api.p99lab.com/v1/transcribe", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.P99LAB_API_KEY}` },
  body: form,
});
const body = await res.json();
if (!res.ok) {
  throw new Error(typeof body.detail === "string" ? body.detail : body.detail.message);
}
console.log(body.text);

Response:

{
  "text": "Thanks for calling. How can I help you today?",
  "audio_seconds": 12.84,
  "model": "audrey-0.7",
  "formatted": true
}

Stream live audio

For live calls, open a WebSocket, send one JSON configuration message, then 16-bit PCM audio. Finals arrive as each utterance ends. A complete client is on live streaming.

Next steps

↑↓ to move↵ to open