Python SDK & CLI

AnyMoment Python documentation

Create and manage recurring calendar events with natural language. Use the SDK in your app or the CLI from the terminal.

Features

Natural language event creation

Create complex recurring events from simple text.

Full calendar management

Create, update, delete, and share calendars.

Secure token management

Encrypted token storage with automatic refresh.

Library & CLI

Use programmatically or from the command line.

Installation

Library only:

pip install anymoment

With CLI (recommended for terminal use):

pip install anymoment[cli]

Quick start — CLI

# Login
anymoment auth login

# Create a calendar
anymoment calendars create "Work Calendar" --timezone "America/New_York"

# Create an event from natural language
anymoment events create "Weekly team meeting every Monday at 10 AM" --calendar <calendar-id>

# List events
anymoment events list --calendar <calendar-id>

# Get event instances for a date range
anymoment events instances <event-id> --from "2026-01-01" --to "2026-03-31"

Quick start — Library

from anymoment import Client

# Initialize client
client = Client(api_url="https://api.anymoment.sineways.tech")

# Login
client.login(email="user@example.com", password="secret")

# Create calendar
calendar = client.create_calendar(
    name="Work Calendar",
    timezone="America/New_York"
)

# Create event from natural language
event = client.create_event_from_text(
    recurrence_text="Weekly team meeting every Monday at 10 AM",
    calendar_id=calendar["id"]
)

# Get event instances for a date range
instances = client.get_event_instances(
    event_id=event["id"],
    from_date="2026-01-01",
    to_date="2026-03-31"
)

Configuration

Environment variables:

  • ANYMOMENT_BASE_URL — Default API URL (default: https://api.anymoment.sineways.tech)
  • ANYMOMENT_DEFAULT_CALENDAR — Default calendar ID
  • ANYMOMENT_DEFAULT_TIMEZONE — Default timezone

Config file: ~/.anymoment/config.json. Manage via CLI:

anymoment config set-url https://api.anymoment.sineways.tech
anymoment config set-timezone America/New_York
anymoment config set-calendar <calendar-id>
anymoment config show

CLI commands

Authentication

anymoment auth login [--host URL]
anymoment auth logout [--host URL]
anymoment tokens list
anymoment tokens clear

Calendars

anymoment calendars list [--active/--inactive] [--limit N] [--offset N]
anymoment calendars create <name> [--description TEXT] [--timezone TZ] [--color COLOR]
anymoment calendars get <id>
anymoment calendars update <id> [--name NAME] [--timezone TZ] [--color COLOR] [--active/--inactive]
anymoment calendars delete <id>
anymoment calendars share <id> <user-id> [--role ROLE]
anymoment calendars update-share <id> <user-id> --role ROLE
anymoment calendars unshare <id> <user-id>
anymoment calendars add-event <calendar-id> <event-id> [--display-order N] [--color COLOR]
anymoment calendars remove-event <calendar-id> <event-id>
anymoment calendars batch-add-events <calendar-id> <event-id> [<event-id> ...]
anymoment calendars batch-remove-events <calendar-id> <event-id> [<event-id> ...]
anymoment calendars webhook-url <id>

Events

anymoment events create "TEXT" [--name NAME] [--timezone TZ] [--calendar ID] [--model high|low|mega]
anymoment events list [--calendar ID] [--active/--inactive] [--limit N] [--offset N] [--minimal]
anymoment events get <id>
anymoment events update <id> [--name NAME] [--description TEXT]
anymoment events delete <id>
anymoment events toggle <id>
anymoment events instances <id> [--from DATE] [--to DATE] [--optimized]
anymoment events next <id>
anymoment events export <id> [--format ics|csv] [--from DATE] [--to DATE] [--out FILE]

Agenda & search

anymoment agenda list [--start ISO] [--end ISO] [--calendar ID] [--no-cache] [--webhooks]
anymoment agenda search <query> [--start ISO] [--end ISO] [--calendar ID] [--active/--inactive] [--limit N] [--offset N] [--no-instances]

Users

anymoment users me

Common options: --host, -h (API URL), --raw (full JSON), --pipe (IDs only), --timezone, -z, --calendar, -c.

Library API reference

Initialize the client:

from anymoment import Client

client = Client(api_url="https://api.anymoment.sineways.tech", token="optional-token")

Authentication

  • client.login(email, password)
  • client.refresh_token()
  • client.get_user_info()

Calendars

  • client.list_calendars(...), get_calendar, create_calendar, update_calendar, delete_calendar
  • client.share_calendar(calendar_id, user_id, role) — share with user and set permissions
  • client.update_calendar_share_role(calendar_id, user_id, role) — update shared user's role
  • client.unshare_calendar(calendar_id, user_id) — remove share
  • client.get_calendar_webhook_url(calendar_id)

Events

  • client.list_events(...), get_event, create_event_from_text(recurrence_text, ...)
  • client.update_event, delete_event, toggle_event
  • client.get_event_instances(event_id, from_date, to_date, optimized)
  • client.get_next_event_instance(event_id)

Agenda & search

  • client.get_agenda(start, end, calendar_ids, use_cache, include_webhooks)
  • client.search_events(q, start, end, calendar_ids, is_active, limit, offset, include_instances)

Calendar–event links (add / remove events to or from calendars)

  • client.link_event_to_calendar(calendar_id, event_id, display_order, color_override) — add one event
  • client.unlink_event_from_calendar(calendar_id, event_id) — remove one event (unlink only)
  • client.batch_add_events_to_calendar(calendar_id, event_ids, ...) — add multiple events
  • client.batch_remove_events_from_calendar(calendar_id, event_ids) — remove multiple events (unlink only)

Error handling

The SDK raises specific exceptions:

from anymoment import (
    AuthenticationError,
    NotFoundError,
    ValidationError,
    ServerError,
)

try:
    calendar = client.get_calendar("invalid-id")
except NotFoundError:
    print("Calendar not found")
except AuthenticationError:
    print("Authentication failed — please login again")
except ValidationError as e:
    print(f"Validation error: {e.message}")
except ServerError as e:
    print(f"Server error: {e.message}")

Support

By Sineways Technology. AnyMoment — write moments the way you think them.