Skip to main content

Python SDK for interacting with the CirtusAI backend API.

Project description

CirtusAI Python SDK

CirtusAI provides a lightweight Python wrapper around the CirtusAI backend API. It enables:

  • Exchanging API keys for access tokens;
  • Reading the identity linked to an API key;
  • Filtering mailbox content (folder, sender, unread flag, date range);
  • Sending messages with optional Base64 attachments;
  • Consistent error handling and session management.

Installation

pip install cirtusai

For local development inside this repository:

pip install -e ./sdk

Quick Start

from datetime import datetime, timedelta, timezone
from cirtusai import CirtusClient

client = CirtusClient(
    base_url="https://api.cirtusai.com",
    api_key="cai_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
)

# Read identity information
identity = client.get_identity()
print(identity.id, identity.credentials.signature_key)
for asset in identity.assets:
    print(asset.type, asset.address)

# Fetch unread messages from the past week
now = datetime.now(timezone.utc)
messages = client.list_messages(
    unread=True,
    start_date=now - timedelta(days=7),
)
for msg in messages:
    print(msg.subject, msg.created_at)

# Send a message
client.send_message(
    to=["teammate@example.com"],
    subject="Weekly summary",
    content="Please see attached report.",
)

Production vs local: Use https://api.cirtusai.com for production traffic. During development you can point base_url at your sandbox instance (for example http://127.0.0.1:8000) and keep the defaults for api_prefix (/api) and timeouts.

Configuration

CirtusClient accepts a few optional parameters for advanced scenarios:

  • api_prefix: change the API namespace if your deployment serves the backend under a different path.
  • timeout: override the default 10s request timeout.
  • session: supply a pre-configured requests.Session (proxy settings, retries, etc.).
  • auto_authenticate: set to False when you need to defer authentication and call authenticate() manually.

Every public method ensures a valid token is present and will automatically re-authenticate if the server indicates expiration.

Filtering Mail

list_messages supports inline keyword arguments or an explicit MessageFilters object if you prefer strong typing:

from datetime import datetime, timezone
from cirtusai import CirtusClient, MessageFilters

client = CirtusClient(base_url="https://api.cirtusai.com", api_key="cai_...")

last_week = datetime.now(timezone.utc) - timedelta(days=7)
filters = MessageFilters(folder="inbox", unread=True, start_date=last_week, limit=50)

messages = client.list_messages(filters=filters)

You can mix and match: passing folder, sender, unread, start_date, end_date, or limit directly to list_messages will automatically build the same filter payload.

Attachments

Attach Base64 encoded content along with file metadata. You can optionally supply content_type to hint MIME information to downstream systems:

import base64
from cirtusai import Attachment, CirtusClient

client = CirtusClient(base_url="https://api.cirtusai.com", api_key="cai_...")
content = base64.b64encode(b"example").decode()
attachment = Attachment(
    filename="demo.txt",
    content=content,
    size=len(content),
    content_type="text/plain",
)

client.send_message(
    to=["recipient@example.com"],
    subject="Demo",
    content="Sample with attachment",
    attachments=[attachment],
)

Read State & Cleanup

The client exposes helpers for day-to-day mailbox maintenance:

client.set_read_state(ids=[101, 102], unread=False)
client.delete_messages(ids=[203, 204])

Both methods accept any iterable of numeric message IDs and raise if you accidentally pass an empty list so you do not trigger no-op API calls.

Error Handling

The SDK raises a small hierarchy of exceptions:

  • AuthenticationError: API key invalid or session expired;
  • APIError: non-2xx responses with structured error details;
  • CirtusSDKError: networking or client side failures.
from cirtusai import AuthenticationError, APIError

try:
    client.list_messages()
except AuthenticationError:
    client.authenticate(force=True)
except APIError as exc:
    print("Request failed", exc.status_code, exc.detail)

Tests

pytest

Tests rely on unittest.mock to stub HTTP behaviour and can run in CI without network access.

Contributing

  1. Fork and clone the repository;
  2. Install dependencies: pip install -e ./sdk[dev];
  3. Ensure pytest passes before submitting pull requests.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cirtusai-0.2.0.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cirtusai-0.2.0-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file cirtusai-0.2.0.tar.gz.

File metadata

  • Download URL: cirtusai-0.2.0.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cirtusai-0.2.0.tar.gz
Algorithm Hash digest
SHA256 37bd1472709d1b73ae3a5517f8b624eba24605fd865e70f6dd5dff38c46f4643
MD5 63de684fd51c697ef170818b001dc88e
BLAKE2b-256 003ddecf276d3b0703bed379276e9eaad4e024f0fb0ea226b39b0e60ac082980

See more details on using hashes here.

Provenance

The following attestation bundles were made for cirtusai-0.2.0.tar.gz:

Publisher: publish.yml on CirtusX/Cirtus-SDK

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cirtusai-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: cirtusai-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 12.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cirtusai-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b63efc12ca6f1a3d2725292fa5654748a2a04b6e642176aa06a59338ae99111e
MD5 08f8ad9eb7651b1a29688a2db85e24aa
BLAKE2b-256 a9406c55432f52b345e1108b1ce86b2942cce38104651749c1aca826daf40f10

See more details on using hashes here.

Provenance

The following attestation bundles were made for cirtusai-0.2.0-py3-none-any.whl:

Publisher: publish.yml on CirtusX/Cirtus-SDK

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page