Skip to main content

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

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)

Source distribution for aether-support 1.0.0
File Size Uploaded Provenance
aether_support-1.0.0.tar.gz 16.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for aether-support 1.0.0
File Interpreter ABI Platform
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.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page