Appearance
Python SDK
Official Python SDK for QR Code API.
Installation
bash
pip install qrcodeapiQuick Start
python
from qrcodeapi import QRCodeAPI
client = QRCodeAPI(api_key="your-api-key")
# Generate a QR code
qr = client.generate(
data="https://example.com",
size=400,
color="22c55e"
)
# Save to file
with open("qr.png", "wb") as f:
f.write(qr)Configuration
python
from qrcodeapi import QRCodeAPI
client = QRCodeAPI(
api_key="your-api-key",
# Optional: Custom base URL
base_url="https://www.qrcodeapi.io/api",
# Optional: Request timeout in seconds
timeout=30,
# Optional: Retry configuration
max_retries=3,
retry_delay=1.0
)API Reference
generate()
Generate a QR code image.
python
qr = client.generate(
data="https://example.com", # Required
size=300, # 50-2000 (default: 300)
format="png", # "png" or "svg" (default: "png")
color="000000", # Hex without # (default: "000000")
background="ffffff", # Hex without # (default: "ffffff")
error_correction="M", # "L", "M", "Q", or "H" (default: "M")
margin=4, # 0-10 (default: 4)
logo="https://...", # Logo URL (Pro plan)
logo_size=20 # 10-40 as % (default: 20)
)Returns bytes (the image data).
links.create()
Create a dynamic link.
python
link = client.links.create(
name="My Campaign",
target_url="https://example.com"
)
print(link.id) # UUID
print(link.short_code) # e.g., "abc123"
print(link.scan_count) # 0links.list()
Get all dynamic links.
python
links = client.links.list()
for link in links:
print(f"{link.name}: {link.short_code} ({link.scan_count} scans)")links.get()
Get a single link by ID.
python
link = client.links.get("link-id")links.update()
Update a dynamic link.
python
link = client.links.update(
link_id="link-id",
name="New Name",
target_url="https://new-url.com"
)links.delete()
Delete a dynamic link.
python
client.links.delete("link-id")analytics.get()
Get scan analytics for a dynamic link.
python
from datetime import datetime, timedelta
analytics = client.analytics.get(
link_id="link-id",
start_date=datetime.now() - timedelta(days=30),
end_date=datetime.now()
)
print(f"Total scans: {analytics.total_scans}")
print(f"Unique scans: {analytics.unique_scans}")
for country in analytics.by_country[:5]:
print(f" {country.country}: {country.scans}")batch.generate()
Generate multiple QR codes (Pro plan).
python
items = [
{"data": "https://example.com/1", "filename": "qr1.png"},
{"data": "https://example.com/2", "filename": "qr2.png"},
]
zip_content = client.batch.generate(
items=items,
defaults={"size": 400, "color": "4f46e5"}
)
# Save ZIP file
with open("qrcodes.zip", "wb") as f:
f.write(zip_content)
# Or extract directly
import zipfile
import io
with zipfile.ZipFile(io.BytesIO(zip_content)) as z:
z.extractall("qrcodes/")Complete Example
python
from qrcodeapi import QRCodeAPI
import os
def main():
client = QRCodeAPI(api_key=os.environ["QRCODE_API_KEY"])
# 1. Create a dynamic link
link = client.links.create(
name="Product Launch",
target_url="https://company.com/launch"
)
print(f"Created link: {link.short_code}")
# 2. Generate QR code
qr = client.generate(
data=f"https://www.qrcodeapi.io/r/{link.short_code}",
size=500,
color="1e40af",
error_correction="H"
)
with open("launch-qr.png", "wb") as f:
f.write(qr)
print("Saved launch-qr.png")
# 3. Update target URL
client.links.update(
link.id,
target_url="https://company.com/launch-v2"
)
print("Updated link target")
# 4. Check analytics
analytics = client.analytics.get(link_id=link.id)
print(f"Total scans: {analytics.total_scans}")
if __name__ == "__main__":
main()Error Handling
python
from qrcodeapi import QRCodeAPI
from qrcodeapi.exceptions import (
QRCodeAPIError,
AuthenticationError,
RateLimitError,
ValidationError
)
client = QRCodeAPI(api_key="your-key")
try:
qr = client.generate(data="test")
except AuthenticationError:
print("Invalid API key")
except RateLimitError as e:
print(f"Rate limited. Retry after {e.retry_after} seconds")
except ValidationError as e:
print(f"Invalid input: {e.message}")
except QRCodeAPIError as e:
print(f"API error: {e.message} (status: {e.status})")Async Support
python
from qrcodeapi import AsyncQRCodeAPI
import asyncio
async def main():
client = AsyncQRCodeAPI(api_key="your-key")
# Generate multiple QR codes concurrently
urls = ["https://example.com/1", "https://example.com/2", "https://example.com/3"]
tasks = [client.generate(data=url) for url in urls]
results = await asyncio.gather(*tasks)
for i, qr in enumerate(results):
with open(f"qr{i}.png", "wb") as f:
f.write(qr)
asyncio.run(main())Django Integration
python
# views.py
from django.http import HttpResponse
from qrcodeapi import QRCodeAPI
from django.conf import settings
client = QRCodeAPI(api_key=settings.QRCODE_API_KEY)
def generate_qr(request):
data = request.GET.get("data", "")
if not data:
return HttpResponse("data required", status=400)
qr = client.generate(
data=data,
size=int(request.GET.get("size", 300)),
color=request.GET.get("color", "000000")
)
return HttpResponse(qr, content_type="image/png")Flask Integration
python
from flask import Flask, request, Response
from qrcodeapi import QRCodeAPI
import os
app = Flask(__name__)
client = QRCodeAPI(api_key=os.environ["QRCODE_API_KEY"])
@app.route("/qr")
def generate_qr():
data = request.args.get("data")
if not data:
return {"error": "data required"}, 400
qr = client.generate(
data=data,
size=int(request.args.get("size", 300)),
color=request.args.get("color", "000000")
)
return Response(qr, mimetype="image/png")Type Hints
The SDK includes full type hints for IDE support:
python
from qrcodeapi import QRCodeAPI
from qrcodeapi.types import (
GenerateOptions,
DynamicLink,
Analytics,
BatchItem
)
client: QRCodeAPI = QRCodeAPI(api_key="key")
link: DynamicLink = client.links.create(name="Test", target_url="https://test.com")Related
- Python Guide - More examples
- API Reference - Full API docs
- PyPI Package - PyPI page