Python SDK
Official Python client for the Canvelete (opens in a new tab) API. Supports Python 3.8+.
Installation
pip install canveleteOr install from source:
git clone https://github.com/Canvelete/canvelete-python.git
cd canvelete-python
pip install -e .Quick Start
from canvelete import CanveleteClient
# Initialize with API key
client = CanveleteClient(api_key="cvt_your_api_key")
# List designs
designs = client.designs.list()
print(f"Found {len(designs['data'])} designs")
# Render a design
result = client.render.create(
design_id="design_123",
format="png",
dynamic_data={"title": "Hello World"},
output_file="output.png"
)Authentication
API Key
from canvelete import CanveleteClient
client = CanveleteClient(api_key="cvt_your_api_key")Environment Variable
export CANVELETE_API_KEY="cvt_your_api_key"import os
from canvelete import CanveleteClient
client = CanveleteClient(api_key=os.getenv("CANVELETE_API_KEY"))Designs
List Designs
# Basic listing
designs = client.designs.list()
# With pagination
designs = client.designs.list(page=1, limit=20)
# Iterate all designs (auto-pagination)
for design in client.designs.iterate_all():
print(design["name"])Create Design
design = client.designs.create(
name="My Design",
width=1920,
height=1080,
canvas_data={
"elements": [
{
"type": "text",
"text": "{{title}}",
"x": 100,
"y": 100,
"fontSize": 48
}
]
}
)Get, Update, Delete
# Get
design = client.designs.get("design_123")
# Update
design = client.designs.update("design_123", name="Updated Name")
# Delete
client.designs.delete("design_123")Rendering
Single Render
# Render to file
result = client.render.create(
design_id="design_123",
format="png",
quality=90,
dynamic_data={"title": "Hello World"},
output_file="output.png"
)
# Get binary data
image_data = client.render.create(
design_id="design_123",
format="png"
)Render Options
result = client.render.create(
design_id="design_123",
format="pdf", # png, jpg, pdf, svg, webp
quality=95, # 1-100
width=1200, # Custom width
height=630, # Custom height
scale=2.0, # Scale factor
dynamic_data={
"title": "Hello",
"image": "https://example.com/photo.jpg"
}
)Batch Rendering
results = client.render.batch([
{
"design_id": "design_123",
"format": "png",
"dynamic_data": {"name": "Alice"}
},
{
"design_id": "design_123",
"format": "png",
"dynamic_data": {"name": "Bob"}
}
])
for result in results:
print(result["downloadUrl"])Templates
# List templates
templates = client.templates.list()
# Search templates
templates = client.templates.list(search="certificate")
# Get template
template = client.templates.get("template_123")
# Iterate all
for template in client.templates.iterate_all():
print(template["name"])API Keys
# List keys
keys = client.api_keys.list()
# Create key
new_key = client.api_keys.create(name="Production Key")
print(f"Save this key: {new_key['key']}") # Only shown once!Error Handling
from canvelete.exceptions import (
AuthenticationError,
NotFoundError,
RateLimitError,
ValidationError
)
try:
design = client.designs.get("invalid_id")
except NotFoundError:
print("Design not found")
except AuthenticationError:
print("Invalid API key")
except RateLimitError as e:
print(f"Rate limited. Retry after {e.retry_after}s")
except ValidationError as e:
print(f"Invalid request: {e.message}")Configuration
client = CanveleteClient(
api_key="cvt_your_key",
base_url="https://api.canvelete.com", # Custom URL
timeout=60, # Request timeout
max_retries=3 # Retry attempts
)Examples
See the examples directory (opens in a new tab) for complete working examples:
quickstart.py— Basic usagebatch_render.py— Batch processingtemplate_usage.py— Working with templates
Support
- Documentation: docs.canvelete.com
- API Reference: docs.canvelete.com/api-reference
- GitHub Issues: github.com/Canvelete/canvelete-python/issues (opens in a new tab)
- Email: support@canvelete.com