Skip to main content

renamed

Official Python SDK for the renamed.to API.

Installation

pip install renamed
# or
poetry add renamed
# or
uv add renamed

Quick Start

from renamed import RenamedClient

client = RenamedClient(api_key="rt_your_api_key_here")

# Rename a file using AI
result = client.rename("invoice.pdf")
print(result.suggested_filename)
# => "2025-01-15_AcmeCorp_INV-12345.pdf"

Examples

See runnable examples in the SDK repo: examples/python (basic_rename.py, pdf_split.py).

Usage

Rename Files

Rename files using AI-powered content analysis:

from renamed import RenamedClient

client = RenamedClient(api_key="rt_...")

# From file path
result = client.rename("/path/to/document.pdf")

# From bytes
with open("document.pdf", "rb") as f:
    result = client.rename(f.read())

# With custom template
result = client.rename("invoice.pdf", template="{date}_{vendor}_{type}")

print(result.suggested_filename)  # "2025-01-15_AcmeCorp_Invoice.pdf"
print(result.folder_path)         # "2025/AcmeCorp/Invoices"
print(result.confidence)          # 0.95

Split PDFs

Split multi-page PDFs into individual documents:

from pathlib import Path

# Start the split job
job = client.pdf_split("multi-page.pdf", mode="auto")

# Wait for completion with progress updates
result = job.wait(lambda status: print(f"Progress: {status.progress}%"))

# Download the split documents
for doc in result.documents:
    content = client.download_file(doc.download_url)
    Path(doc.filename).write_bytes(content)

Split modes:

  • auto - AI detects document boundaries
  • pages - Split every N pages
  • blank - Split at blank pages

Extract Data

Extract structured data from documents:

result = client.extract(
    "invoice.pdf",
    prompt="Extract invoice number, date, vendor name, and total amount"
)

print(result.data)
# {
#     "invoiceNumber": "INV-12345",
#     "date": "2025-01-15",
#     "vendor": "Acme Corp",
#     "total": 1234.56
# }

Check Credits

user = client.get_user()
print(f"Credits remaining: {user.credits}")

Async Support

Use the synchronous methods for simple scripts/CLIs. Use the async methods when you're already in an async app (FastAPI, etc.) or want concurrency.

All methods have async versions with the _async suffix:

import asyncio
from renamed import RenamedClient

async def main():
    client = RenamedClient(api_key="rt_...")

    # Async rename
    result = await client.rename_async("invoice.pdf")
    print(result.suggested_filename)

    # Async PDF split
    job = await client.pdf_split_async("multi-page.pdf", mode="auto")
    result = await job.wait_async()

    await client.aclose()

asyncio.run(main())

Or use as a context manager:

async with RenamedClient(api_key="rt_...") as client:
    result = await client.rename_async("invoice.pdf")

Configuration

client = RenamedClient(
    # Required: Your API key (get one at https://www.renamed.to/settings)
    api_key="rt_...",

    # Optional: Custom base URL (default: https://www.renamed.to/api/v1)
    base_url="https://www.renamed.to/api/v1",

    # Optional: Request timeout in seconds (default: 30.0)
    timeout=30.0,

    # Optional: Max retries for failed requests (default: 2)
    max_retries=2,

    # Optional: Enable debug logging (default: False)
    debug=True,

    # Optional: Custom logger (default: stderr logger when debug=True)
    logger=my_logger,
)

Debug Logging

Enable debug logging to see HTTP request details for troubleshooting:

client = RenamedClient(api_key="rt_...", debug=True)

# Output:
# [Renamed] POST /rename -> 200 (234ms)
# [Renamed] Upload: document.pdf (1.2 MB)

Use Python's standard logging module for custom logging:

import logging

# Configure logging level
logging.basicConfig(level=logging.DEBUG)

# Or use a custom logger
logger = logging.getLogger("my_app")
client = RenamedClient(api_key="rt_...", logger=logger)

Error Handling

from renamed import (
    RenamedClient,
    AuthenticationError,
    RateLimitError,
    InsufficientCreditsError,
    ValidationError,
)

try:
    result = client.rename("document.pdf")
except AuthenticationError:
    print("Invalid API key")
except RateLimitError as e:
    print(f"Rate limited. Retry after {e.retry_after}s")
except InsufficientCreditsError:
    print("Not enough credits")
except ValidationError as e:
    print(f"Invalid request: {e.message}")

File Input Types

The SDK accepts multiple file input types:

from pathlib import Path

# File path (str)
client.rename("/path/to/file.pdf")

# Path object
client.rename(Path("file.pdf"))

# Bytes
content = Path("file.pdf").read_bytes()
client.rename(content)

# File-like object
with open("file.pdf", "rb") as f:
    client.rename(f)

Supported File Types

  • PDF (.pdf)
  • Images: JPEG (.jpg, .jpeg), PNG (.png), TIFF (.tiff, .tif)

Requirements

  • Python 3.9+
  • Dependencies: httpx, pydantic

License

MIT

Release files for renamed 0.1.5

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

Source distribution (sdist)

Source distribution for renamed 0.1.5
File Size Uploaded
renamed-0.1.5.tar.gz 11.7 kB Details

Built distribution (wheel)

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

Total release size: 23.3 kB

Release files / renamed-0.1.5.tar.gz

Download URL renamed-0.1.5.tar.gz
Size 11.7 kB
Tags Source
SHA-256 checksum
How to use checksums
a675b262fbe7af1e42ce8da5e64b451fc622771a37932efd54a1b5bcb88451f9
BLAKE2b-256 checksum
How to use checksums
7888c8fa600522cc1d53851f90f90e9c4e146aef440f72377ef953d6a0bf3f71
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 28, 2026.

Transparency log

Release files / renamed-0.1.5-py3-none-any.whl

Download URL renamed-0.1.5-py3-none-any.whl
Size 11.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
360f6b16e7429d4b883282b94b0aea7af4abe54b0dfdec35e573198733e7f000
BLAKE2b-256 checksum
How to use checksums
306d615c21d8a31a9bf153265095680c6f3536a7040921d78bfaccec4913d058
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 28, 2026.

Transparency log
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