SDKs
Python

Python SDK

Official Python client for the Canvelete (opens in a new tab) API. Supports Python 3.8+.

Installation

pip install canvelete

Or 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 usage
  • batch_render.py — Batch processing
  • template_usage.py — Working with templates

Support