Build on XTC.

Transcription, extraction, and organization via REST API. Integrate the full pipeline into your own applications.

Up and running in 60 seconds

Install the SDK, authenticate, and make your first API call.

1. Install

pip install xtcstudio
# No installation needed. Use curl directly.

2. Authenticate

from xtcstudio import XTC client = XTC(api_key="your-api-key")
# Pass your key via the Authorization header curl https://api.xtcstudio.com/v1/jobs \ -H "Authorization: Bearer xtc_your_key_here"

3. First call

job = client.transcribe( url="https://youtube.com/watch?v=example", engine="studio_pro", diarize=True ) print(job.status) # "processing"
curl -X POST https://api.xtcstudio.com/v1/transcribe \ -H "Authorization: Bearer xtc_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "url": "https://youtube.com/watch?v=example", "engine": "studio_pro", "diarize": true }'

Endpoints

Five endpoints cover the full pipeline: transcribe, extract, organize, check status, and export.

Method Endpoint Description
POST /v1/transcribe Submit a URL or file for transcription
POST /v1/extract Run AI extraction on a transcript
POST /v1/organize Cluster extractions by semantic similarity
GET /v1/jobs/{id} Check job status
GET /v1/export/{id} Download results in specified format

API Keys

All requests require an API key passed in the Authorization header.

Header format

Authorization: Bearer xtc_your_key_here

Getting your key

1. Sign up at xtcstudio.com.
2. Open the Dashboard and navigate to Settings > API Keys.
3. Click Generate Key. Copy it immediately. Keys are only shown once.

Keep your key secret

Never expose API keys in client-side code, public repositories, or logs. Use environment variables or a secrets manager.

End-to-end pipeline

Transcribe a video, extract quotes, and export the results as JSON.

from xtcstudio import XTC import time client = XTC(api_key="xtc_your_key") # Transcribe job = client.transcribe( url="https://youtube.com/watch?v=example", engine="studio_pro", diarize=True ) # Wait for completion result = client.wait(job.id) # Extract quotes extraction = client.extract( transcript_id=result.id, mode="quotes", llm="claude", model="sonnet" ) # Export output = client.export(extraction.id, format="json") print(output)
import XTC from 'xtcstudio'; const client = new XTC({ apiKey: 'xtc_your_key' }); async function run() { // Transcribe const job = await client.transcribe({ url: 'https://youtube.com/watch?v=example', engine: 'studio_pro', diarize: true }); // Wait for completion const result = await client.wait(job.id); // Extract quotes const extraction = await client.extract({ transcriptId: result.id, mode: 'quotes', llm: 'claude', model: 'sonnet' }); // Export const output = await client.export(extraction.id, { format: 'json' }); console.log(output); } run();
# 1. Submit transcription curl -X POST https://api.xtcstudio.com/v1/transcribe \ -H "Authorization: Bearer xtc_your_key" \ -H "Content-Type: application/json" \ -d '{"url":"https://youtube.com/watch?v=example","engine":"studio_pro","diarize":true}' # Response: {"id":"job_abc123","status":"processing"} # 2. Poll for completion curl https://api.xtcstudio.com/v1/jobs/job_abc123 \ -H "Authorization: Bearer xtc_your_key" # Response: {"id":"job_abc123","status":"completed","transcript_id":"tx_abc123"} # 3. Extract quotes curl -X POST https://api.xtcstudio.com/v1/extract \ -H "Authorization: Bearer xtc_your_key" \ -H "Content-Type: application/json" \ -d '{"transcript_id":"tx_abc123","mode":"quotes","llm":"claude","model":"sonnet"}' # Response: {"id":"ext_abc123","status":"completed"} # 4. Export results curl https://api.xtcstudio.com/v1/export/ext_abc123?format=json \ -H "Authorization: Bearer xtc_your_key"

Extraction Modes

Specify the mode parameter in your extract call to control what the AI pulls from the transcript.

Quotes

mode: "quotes"

Extracts notable quotes with speaker attribution, timestamps, and confidence scores.

Wisdom

mode: "wisdom"

Pulls key insights, lessons, and actionable takeaways from the content.

Dialogues

mode: "dialogues"

Identifies and structures meaningful exchanges between speakers.

Book English

mode: "book_english"

Rewrites spoken content into polished, publication-ready prose.

Custom

mode: "custom"

Pass your own prompt. Add prompt: "..." to define exactly what to extract.

Custom mode example

extraction = client.extract( transcript_id=result.id, mode="custom", prompt="Extract all mentions of dates, deadlines, and time-sensitive commitments.", llm="claude", model="sonnet" )

Async Callbacks

Instead of polling for job status, register a webhook URL to receive a POST request when a job completes. Set the webhook_url parameter on any transcribe or extract call.

Payload example

{ "event": "job.completed", "job_id": "job_abc123", "type": "transcription", "status": "completed", "result_url": "/v1/export/job_abc123" }

Verification

Every webhook request includes an X-XTC-Signature header. Verify it against your webhook secret to confirm authenticity.

Rate Limits

Rate limits are applied per API key. If you exceed them, the API returns 429 Too Many Requests.

Tier Requests / min Concurrent jobs
Free 10 2
Pro 60 10
Business 200 50

Response Format

All responses are JSON. Here is an example extraction response.

{ "id": "ext_abc123", "status": "completed", "mode": "quotes", "items": [ { "text": "The only way to do great work is to love what you do.", "speaker": "Speaker 1", "timestamp": "00:14:23", "confidence": 0.94 } ], "metadata": { "source_url": "https://youtube.com/watch?v=example", "duration": 3847, "word_count": 12450 } }

Ready to build?

Get your API key and start integrating transcription, extraction, and organization into your product.

Get API Key

Or join the waitlist for early access and usage credits.