Skip to main content
Loss of provenance

A previous release had provenance metadata, but this release does not. View details.

Murmel Python SDK

Official Python client for the Murmel Speech-to-Text API - optimized for Dutch.

Installation

pip install murmel

Quick Start

from murmel import Murmel

client = Murmel(api_key="murmel_sk_...")

# Transcribe an audio file with speaker diarization
result = client.transcribe("meeting.mp3", identify_speakers=True)
print(result.text)

Usage

Transcribe Audio

Upload an audio file and get the transcription back directly. Supports WAV, MP3, M4A, WEBM, OGG, FLAC, and more.

# From a file path
result = client.transcribe("interview.mp3", identify_speakers=True)
print(result.text)

# With timestamps and speakers
for segment in result.segments:
    speaker_info = f"[{segment.speaker}] " if hasattr(segment, 'speaker') and segment.speaker else ""
    print(f"[{segment.start:.1f}s → {segment.end:.1f}s] {speaker_info}{segment.text}")

# From a file object
with open("audio.wav", "rb") as f:
    result = client.transcribe(f)

Webhook (callback URL)

Don't want to keep the request open? Pass a callback_url and Murmel POSTs the finished transcription to your endpoint instead:

job = client.transcribe(
    "interview.mp3",
    callback_url="https://example.com/murmel-webhook?token=your-secret",
)
print(job.id, job.status)  # "pending"

The POST body has the same fields as Transcription, plus event (transcription.completed or transcription.failed). Respond with a 2xx status; anything else is retried a few times with increasing delays. Put a secret token in the URL to check the call really comes from Murmel.

List Transcriptions

# List recent transcriptions
transcriptions = client.transcriptions.list(limit=10)
for t in transcriptions:
    print(f"{t.id}: {t.status} ({t.language})")

# Filter by status
completed = client.transcriptions.list(status="completed")

Get a Transcription

# Get full result by ID
result = client.transcriptions.get("job-id-here")
print(result.text)
print(result.segments)

# Check status only (lightweight)
status = client.transcriptions.status("job-id-here")
print(status.status)  # "pending", "processing", "completed", "failed"

Check Usage

usage = client.usage()
print(f"Plan: {usage.plan}")
print(f"Used: {usage.used_minutes:.1f} / {usage.limit_minutes:.0f} min")
print(f"Remaining: {usage.remaining_minutes:.1f} min")

Error Handling

The SDK raises specific exceptions for different error types:

from murmel import Murmel, AuthenticationError, RateLimitError, InvalidRequestError

client = Murmel(api_key="murmel_sk_...")

try:
    result = client.transcribe("audio.mp3")
except AuthenticationError:
    print("Invalid API key")
except RateLimitError:
    print("Monthly usage limit exceeded")
except InvalidRequestError as e:
    print(f"Bad request: {e.message}")

Exception hierarchy:

Exception HTTP Status When
AuthenticationError 401 Invalid or missing API key
PermissionDeniedError 403 Account inactive, email not verified
InvalidRequestError 400, 413 Unsupported file format, file too large
NotFoundError 404 Transcription not found
RateLimitError 429 Monthly minutes exhausted
ServerError 500 Transcription processing failed
TimeoutError 504 Transcription took too long

Configuration

client = Murmel(
    api_key="murmel_sk_...",
    base_url="https://api.murmel.eu",  # default
    timeout=600,                        # 10 min default (for long audio)
)

# Use as context manager
with Murmel(api_key="murmel_sk_...") as client:
    result = client.transcribe("audio.mp3")

API Reference

Get your API key at app.murmel.nl/ontwikkelaar.

Full API docs: api.murmel.eu/v1/docs

Metadata

Release files for murmel 0.1.2

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

Loss of provenance

These files do not have provenance metadata, despite files in a prior release including this data.

We recommend further investigation before installing these files. View details.

Source distribution (sdist)

Source distribution for murmel 0.1.2
File Size Uploaded Provenance Actions
murmel-0.1.2.tar.gz 7.4 kB Without provenance Details for murmel-0.1.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for murmel 0.1.2
File Interpreter ABI Platform Actions
murmel-0.1.2-py3-none-any.whl Python 3 none any Details for murmel-0.1.2-py3-none-any.whl

Total release size: 16.6 kB

Release files / murmel-0.1.2.tar.gz

Loss of provenance

This file belongs to a release without provenance metadata, despite a prior release including this data.

We recommend further investigation before installing this file. View details.

Download URL murmel-0.1.2.tar.gz
Size 7.4 kB
Tags Source
SHA-256 checksum
How to use checksums
a87dd96d8b7951a7feb3c4850ed6a3fb026ba74b87de4c2dbd82d0a02eecfdc3
BLAKE2b-256 checksum
How to use checksums
63e28f443204ef96b57c4685a49e3bbf91033c46c44b6c1bfbd250e2d90678cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / murmel-0.1.2-py3-none-any.whl

Loss of provenance

This file belongs to a release without provenance metadata, despite a prior release including this data.

We recommend further investigation before installing this file. View details.

Download URL murmel-0.1.2-py3-none-any.whl
Size 9.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fcabc3eeda542c04eff79d8c3fa5db939f2479312c71f40f55a1d4f7f94bc45c
BLAKE2b-256 checksum
How to use checksums
b79f1002f849fea81daa1c7940d684c159ed48767c4d451039e4dfe8950c6348
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Security for murmel 0.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Loss of provenance

A previous release of these files had provenance metadata, but this release does not.

While this could reflect a routine change by the project maintainers, it may also indicate that the release files have been compromised.

Release comparison

  • Removed 0.1.1 2 files With provenance
  • Added 0.1.2 2 files Without provenance

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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