Skip to main content

WolfScribe API Wrapper

Official client libraries for the WolfScribe Studio API — hyper-efficient AI transcription for developers, agents, and creators.

npm PyPI License: MIT

Transcribe audio files, video files, and YouTube URLs in 3 lines of code. Built for AI agents, serverless functions, and automation pipelines.


Quick Start

Node.js / TypeScript

npm install wolfscribe-api-wrapper
import { WolfScribe } from "wolfscribe-api-wrapper";

const client = new WolfScribe(process.env.WOLFSCRIBE_API_KEY);

// YouTube transcription — synchronous
const result = await client.transcribeYouTube(
  "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
);
console.log(result.transcript.content);

Python

pip install wolfscribe-api-wrapper
from wolfscribe import WolfScribe

client = WolfScribe(api_key="ws_live_your_key_here")

result = client.transcribe_youtube("https://www.youtube.com/watch?v=dQw4w9WgXcQ")
print(result["transcript"]["content"])

Features

  • YouTube Transcription — Extract transcripts from any YouTube video instantly
  • Media File Transcription — Submit audio/video URLs for AI transcription (MP3, MP4, WAV, M4A, OGG, MOV, AVI, MKV, FLAC)
  • Speaker Diarization — Identify and separate speakers automatically
  • Webhook Callbacks — Receive async notifications when transcription completes
  • Wallet-Based Billing — Pay-as-you-go, no monthly commitments
  • TypeScript & Python — Full type safety in both ecosystems

Pricing

Service Cost
YouTube transcription $0.008 per video
Audio/Video file transcription $0.0108 per minute (~$0.65/hr)

Pre-fund your wallet via the WolfScribe dashboard.


Usage

YouTube Transcription (Synchronous)

YouTube transcripts are returned immediately — no waiting.

// TypeScript
const result = await client.transcribeYouTube(
  "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  {
    language: "en",                    // optional: "auto" | "en" | "es" | "fr" | "de" | "it"
    title: "My Video Title",           // optional
    webhookUrl: "https://example.com", // optional
  }
);
// result.transcript.content     -> full text
// result.transcript.id          -> transcript ID
// result.transcript.durationSeconds -> duration
# Python
result = client.transcribe_youtube(
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    language="en",
)

Media File Transcription (Asynchronous)

Media files are processed asynchronously. Poll for completion or use a webhook.

// TypeScript — with webhook
const job = await client.transcribeMedia(
  "https://storage.example.com/podcast.mp3",
  {
    title: "My Podcast",
    identifySpeakers: true,
    webhookUrl: "https://my-server.com/webhook",
  }
);
console.log(`Job ID: ${job.transcriptId}`);

// Poll for results
let transcript = await client.getTranscript(job.transcriptId);
while (transcript.status === "processing") {
  await new Promise(r => setTimeout(r, 5000));
  transcript = await client.getTranscript(job.transcriptId);
}
console.log(transcript.content);
# Python — polling
job = client.transcribe_media(
    "https://storage.example.com/podcast.mp3",
    identify_speakers=True,
)

transcript = client.get_transcript(job["transcriptId"])
while transcript["status"] == "processing":
    import time
    time.sleep(5)
    transcript = client.get_transcript(job["transcriptId"])

Check Transcription Status

const transcript = await client.getTranscript("cm_media_xyz789p");
// { id, status, title, durationSeconds, content, speakerData, costUnitsCharged }
transcript = client.get_transcript("cm_media_xyz789p")

Manage API Keys

// List keys
const keys = await client.listApiKeys();

// Create a new key (returns full key once)
const newKey = await client.createApiKey("My Agent Key");
console.log(newKey.key); // ws_live_...

// Revoke a key
await client.revokeApiKey(keys[0].id);
keys = client.list_api_keys()
new_key = client.create_api_key("My Agent Key")
client.revoke_api_key(keys[0]["id"])

Usage Logs

const logs = await client.getUsageLogs();
// [{ endpointType, status, costCharged, createdAt }]
logs = client.get_usage_logs()

API Reference

POST /api/v1/transcribe

Submit a transcription job.

Parameter Type Required Description
type string yes "youtube" or "media"
url string yes YouTube URL or public media file URL
title string no Display name for the transcript
language string no Language code ("en", "es", "fr", "de") or "auto"
identifySpeakers boolean no Enable speaker diarization
mainSpeakerName string no Override dominant speaker label
webhookUrl string no URL for async completion callback

GET /api/v1/transcribe/:id

Retrieve transcription results. Status values: "completed", "processing", "failed".

GET /api/v1/keys

List all API keys for the authenticated user.

POST /api/v1/keys

Create a new API key. The full key is returned only once during creation.

DELETE /api/v1/keys?id=:id

Revoke an API key.

GET /api/v1/usage-logs

Get API usage history (last 100 entries).


Webhooks

When submitting async jobs (type: "media"), provide a webhookUrl. WolfScribe will POST the result to your endpoint when processing completes.

{
  "event": "transcript.completed",
  "transcript": {
    "id": "cm_media_xyz789p",
    "status": "completed",
    "durationSeconds": 120,
    "content": "Full transcript text with speaker labels...",
    "speakerData": [
      { "speaker": "Speaker A", "start": 0, "end": 4500, "text": "Hello everyone." }
    ]
  }
}

Events: transcript.completed | transcript.failed


Error Handling

import {
  WolfScribeError,
  AuthenticationError,
  InsufficientFundsError,
  ValidationError,
  NotFoundError,
} from "wolfscribe-api-wrapper";

try {
  await client.transcribeYouTube("https://youtube.com/watch?v=...");
} catch (error) {
  if (error instanceof InsufficientFundsError) {
    console.error("Top up your wallet at https://wolfscribe.live");
  }
  if (error instanceof AuthenticationError) {
    console.error("Check your API key");
  }
}
from wolfscribe import WolfScribe, AuthenticationError, InsufficientFundsError

try:
    client.transcribe_youtube("https://youtube.com/watch?v=...")
except InsufficientFundsError:
    print("Top up your wallet at https://wolfscribe.live")
except AuthenticationError:
    print("Check your API key")
Status Error Meaning
401 AuthenticationError Invalid or missing API key
402 InsufficientFundsError Wallet balance too low
400 ValidationError Missing or invalid parameters
404 NotFoundError Transcript not found
500 WolfScribeError Server error (not billed)

Environment Variables

WOLFSCRIBE_API_KEY=ws_live_your_key_here

The client reads WOLFSCRIBE_API_KEY from the environment automatically when no key is passed to the constructor.


Requirements

  • Node.js >= 18 (TypeScript/JS)
  • Python >= 3.9

Links


License

MIT © More Than Design UK Ltd

Release files for wolfscribe-api-wrapper 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wolfscribe-api-wrapper 0.1.0
File Size Uploaded
wolfscribe_api_wrapper-0.1.0.tar.gz 10.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wolfscribe-api-wrapper 0.1.0
File Interpreter ABI Platform
wolfscribe_api_wrapper-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 17.6 kB

Release files / wolfscribe_api_wrapper-0.1.0.tar.gz

Download URL wolfscribe_api_wrapper-0.1.0.tar.gz
Size 10.1 kB
Tags Source
SHA-256 checksum
How to use checksums
6986843f2930e5d980a491fdf99490e638f671b572401768bb97a447d5927636
BLAKE2b-256 checksum
How to use checksums
430553e1417498557ccb9d58e1bf42d760670de816c94b3da0ea11fffd974716
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / wolfscribe_api_wrapper-0.1.0-py3-none-any.whl

Download URL wolfscribe_api_wrapper-0.1.0-py3-none-any.whl
Size 7.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8b79d4b0a4fa8a7973cd340fdc81452b087cde5c735b873e80047501e028ab7b
BLAKE2b-256 checksum
How to use checksums
9f8095f5a9ef9e61414c000144d9ae99072d57813a7d33030b377bf2f1a15385
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page