Current collected state Current
Observed since 20 Oct, 20:55 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Official Python SDK for Aether Support - AI-powered customer support platform
Official Python SDK for Aether Support - the AI-powered customer support platform.
pip install aether-support
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..."
)
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())
# 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")
# 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()
# 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"
})
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"}
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
)
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}")
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
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()
# 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)
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()
MIT License - see LICENSE for details.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.0.0 | 13 Dec 2025 | 9 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 20:55 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:d472d2f5b29a8febe86f7c9b1bc364f71728540468f0479a093f25f589cb1076