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 boundariespages- Split every N pagesblank- 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)
| File | Size | Uploaded | |
|---|---|---|---|
| renamed-0.1.5.tar.gz | 11.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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