Aether Support Python SDK
Official Python SDK for Aether Support - the AI-powered customer support platform.
Installation
pip install aether-support
Quick Start
from aether_support import AetherSupport
# Initialize the client
client = AetherSupport(
app_id="your-app-id",
api_key="your-api-key"
)
# Create a ticket
ticket = client.tickets.create(
subject="Help with integration",
description="I need help setting up the SDK",
customer_email="user@example.com",
category="technical"
)
print(f"Created ticket: {ticket.ticket_id}")
# Get all tickets
tickets = client.tickets.list()
for t in tickets:
print(f"[{t.status}] {t.subject}")
# Reply to a ticket
client.tickets.reply(
ticket_id=ticket.ticket_id,
content="Here's more information about my issue..."
)
Async Support
import asyncio
from aether_support import AsyncAetherSupport
async def main():
client = AsyncAetherSupport(
app_id="your-app-id",
api_key="your-api-key"
)
# All methods are async
tickets = await client.tickets.list()
for t in tickets:
print(f"[{t.status}] {t.subject}")
await client.close()
asyncio.run(main())
Features
Ticket Management
# List tickets with filters
tickets = client.tickets.list(
status="open",
category="billing",
limit=50
)
# Get a specific ticket
ticket = client.tickets.get("ticket-id")
# Update ticket status
client.tickets.update("ticket-id", status="resolved")
# Add internal note (agents only)
client.tickets.add_note("ticket-id", "Internal notes here")
Knowledge Base
# Search the knowledge base
results = client.knowledge.search("how to reset password")
for doc in results:
print(f"{doc.title}: {doc.content[:100]}...")
# Get all documents
docs = client.knowledge.list()
Users & Identification
# Identify a user (for tracking)
client.identify(
user_id="user-123",
email="user@example.com",
name="John Doe",
plan="pro",
metadata={
"company": "Acme Inc",
"signup_date": "2024-01-15"
}
)
# Track custom events
client.track("button_clicked", {
"button_name": "contact_support",
"page": "/pricing"
})
Webhooks
from aether_support.webhooks import WebhookHandler
# Verify and parse webhook payloads
handler = WebhookHandler(webhook_secret="your-webhook-secret")
@app.post("/webhooks/aether")
async def handle_webhook(request):
payload = await request.body()
signature = request.headers.get("X-Aether-Signature")
event = handler.verify_and_parse(payload, signature)
if event.type == "ticket.created":
print(f"New ticket: {event.data['ticket_id']}")
elif event.type == "ticket.replied":
print(f"Reply on: {event.data['ticket_id']}")
return {"status": "ok"}
Configuration
from aether_support import AetherSupport
client = AetherSupport(
app_id="your-app-id",
api_key="your-api-key",
# Optional configuration
api_url="https://api.aether-support.com", # Custom API URL
timeout=30.0, # Request timeout in seconds
max_retries=3, # Retry failed requests
)
Error Handling
from aether_support import AetherSupport
from aether_support.exceptions import (
AetherError,
AuthenticationError,
NotFoundError,
RateLimitError,
ValidationError
)
client = AetherSupport(app_id="...", api_key="...")
try:
ticket = client.tickets.get("invalid-id")
except NotFoundError:
print("Ticket not found")
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 request: {e.message}")
except AetherError as e:
print(f"API error: {e}")
Type Hints
The SDK is fully typed for excellent IDE support:
from aether_support import AetherSupport
from aether_support.types import Ticket, Message, User
client = AetherSupport(app_id="...", api_key="...")
# Full type information available
ticket: Ticket = client.tickets.get("ticket-id")
messages: list[Message] = ticket.messages
Framework Integrations
FastAPI
from fastapi import FastAPI, Depends
from aether_support import AetherSupport
app = FastAPI()
def get_aether() -> AetherSupport:
return AetherSupport(app_id="...", api_key="...")
@app.get("/tickets")
async def list_tickets(aether: AetherSupport = Depends(get_aether)):
return aether.tickets.list()
Django
# settings.py
AETHER_SUPPORT = {
"APP_ID": "your-app-id",
"API_KEY": "your-api-key",
}
# views.py
from django.conf import settings
from aether_support import AetherSupport
client = AetherSupport(**settings.AETHER_SUPPORT)
Flask
from flask import Flask, g
from aether_support import AetherSupport
app = Flask(__name__)
def get_aether():
if 'aether' not in g:
g.aether = AetherSupport(app_id="...", api_key="...")
return g.aether
@app.route("/tickets")
def list_tickets():
return get_aether().tickets.list()
License
MIT License - see LICENSE for details.
Support
- 📧 Email: support@aether-support.com
- 📖 Docs: https://docs.aether-support.com/sdk/python
- 💬 Discord: https://discord.gg/aether-support
Metadata
Release files for aether-support 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| aether_support-1.0.0.tar.gz | 16.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aether_support-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.9 kB
Release files / aether_support-1.0.0.tar.gz
| Download URL | aether_support-1.0.0.tar.gz |
|---|---|
| Size | 16.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
878bbbb736cd656fbeab75a691111da38f50a454e2723e977be0fad8be599c64
|
|
BLAKE2b-256 checksum How to use checksums |
0b741fa025ae3d6dc6d4a77c4abfa8418494e0bd62f4ab38b39ed439cdd8cff1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|
Release files / aether_support-1.0.0-py3-none-any.whl
| Download URL | aether_support-1.0.0-py3-none-any.whl |
|---|---|
| Size | 12.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
94845bbf4c5a3f3150f99539b104b8b9214203f71abf0abfb41d80faa6511a3a
|
|
BLAKE2b-256 checksum How to use checksums |
2475a6d2fa79b164dd599437a8e36fc64d6359ea2eb6b1d51eda20b86aaac6d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|
Security for aether-support 1.0.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.