SDK Code Samples
Use the official Node SDK for production. Raw HTTP samples below for non-Node integrators.
RecommendedNode >== 18
@capsiynau/sdk-transcribe
Official Node SDK. Wraps POST /api/v1/transcribe, job polling, and transcript retrieval. Welsh and English first-class. Typed errors (AuthError, PlanGateError, QuotaError, and more) parsed automatically.
npm install @capsiynau/sdk-transcribe
import { TranscriptionClient } from '@capsiynau/sdk-transcribe'
const client = new TranscriptionClient({ apiKey: process.env.CAPSIYNAU_API_KEY })
const projectId = '00000000-0000-0000-0000-000000000000' // your project UUID
const fileUrl = 'https://example.com/audio.mp4' // direct media URL
const job = await client.submit({ projectId, fileUrl, language: 'cy' })
await client.waitFor(job.jobId)
const transcript = await client.getTranscript(job.projectId)
console.log(transcript.segments[0].text)Raw HTTP samples below show direct REST calls for Python and curl. Not needed if you're using the Node SDK above.
Transcription flow
Submit a project, poll until done, fetch the JSON transcript.
import requests
import time
API_KEY = "ck_live_YOUR_KEY"
BASE_URL = "https://www.capsiynau.com" # apex 301-redirects strip Authorization
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
def transcribe(project_id: str, file_url: str, language: str = "cy"):
# 1. Submit
r = requests.post(
f"{BASE_URL}/api/v1/transcribe",
headers=HEADERS,
json={"projectId": project_id, "fileUrl": file_url, "sourceLanguage": language},
)
r.raise_for_status()
job_id = r.json()["jobId"]
print(f"Job submitted: {job_id}")
# 2. Poll until done (or cancelled / failed)
while True:
sr = requests.get(
f"{BASE_URL}/api/v1/status",
headers={"Authorization": HEADERS["Authorization"]},
params={"jobId": job_id},
)
sr.raise_for_status() # surface 401/404/5xx instead of looping forever
s = sr.json().get("job", {})
status = s.get("status")
print(f"Status: {status}")
if status in ("done", "completed"):
break
if status in ("failed", "cancelled"):
raise RuntimeError(f"Job {status}: {s.get('error')}")
time.sleep(2)
# 3. Export the transcript as JSON
e = requests.get(
f"{BASE_URL}/api/v1/export",
headers={"Authorization": HEADERS["Authorization"]},
params={"projectId": project_id, "format": "json", "track": "original"},
)
e.raise_for_status()
return e.json()
if __name__ == "__main__":
transcript = transcribe(
project_id="00000000-0000-0000-0000-000000000000",
file_url="https://example.com/audio.mp4",
language="cy",
)
print(f"Segments: {len(transcript['segments'])}")
print(transcript["segments"][0]["text"])