Skip to main content

Python API wrapper for Aula.

Project description

Aula

PyPI Python License

Async Python client for the Danish school platform aula.dk.

  • Fetch calendar events, messages, posts, and daily overviews
  • Authenticate via Denmark's MitID national identity system
  • Token caching — MitID app approval only needed on first login
  • Full async API client (AulaApiClient) and a CLI included

Table of Contents

Installation

pip install aula
# or with uv
uv add aula

Requirements: Python >= 3.10, MitID username and MitID app.

Run without installing

Use uvx to run the CLI directly from PyPI without a permanent install:

uvx aula --username johndoe messages --limit 5

Install from Source

git clone https://github.com/nickknissen/aula.git
cd aula
pip install -e .

Quick Start

import asyncio
from aula import FileTokenStorage
from aula.auth_flow import authenticate_and_create_client

async def main():
    token_storage = FileTokenStorage(".aula_tokens.json")
    async with await authenticate_and_create_client("your_mitid_username", token_storage) as client:
        profile = await client.get_profile()
        print(profile.display_name)
        for child in profile.children:
            overview = await client.get_daily_overview(child.id)

asyncio.run(main())

Key methods on AulaApiClient: get_profile(), get_daily_overview(child_id), get_message_threads(), get_messages_for_thread(thread_id), get_calendar_events(...), get_posts(...). See src/aula/api_client.py for the full list.

Widget API (Namespace)

Widget integrations are available via the namespaced widgets client on AulaApiClient:

tasks = await client.widgets.get_mu_tasks(
    widget_id="0030",  # WIDGET_MIN_UDDANNELSE_TASKS
    child_filter=["12345"],
    institution_filter=["5678"],
    week="2026-W8",
    session_uuid="guardian-user-id",
)

Use the client.widgets.* namespace for widget calls (for example: get_mu_tasks, get_ugeplan, get_easyiq_weekplan, get_meebook_weekplan, get_momo_courses, get_library_status).

Legacy direct widget methods on AulaApiClient are deprecated and will be removed in a future release. Migrate to client.widgets.<method>(...).

Authentication

What You Need

  • MitID username — your MitID username (not your Aula username). Find it at mitid.dk.
  • MitID app — installed and set up on your phone.

First Login

On first run you'll be prompted to approve the login in your MitID app. You may need to scan a QR code or enter an OTP shown in the terminal. Tokens are saved to the storage file and reused on subsequent runs — no app interaction needed until they expire.

Token Security

Tokens provide full access to your Aula account — treat them like passwords and never commit token files to version control.

How It Works

For a detailed breakdown of the authentication flow (OAuth + SAML + MitID), session cookies, and how this library differs from the browser login, see docs/aula-authentication.md.

CLI

aula --username <your_mitid_username> [COMMAND]

The username can also be set via the AULA_MITID_USERNAME environment variable or a config file (~/.config/aula/config.json).

Command Description
login Verify credentials
profile Show profile and children
overview Daily overview for all children
messages Recent message threads
calendar Calendar events
posts Posts and announcements
notifications Recent notifications
daily-summary Today's schedule, homework & messages
weekly-summary Full week overview with provider data
presence-templates Planned entry/exit times
mu:opgaver Min Uddannelse tasks
mu:ugeplan Min Uddannelse weekly letter
easyiq:ugeplan EasyIQ weekly plan
easyiq:homework EasyIQ homework
meebook:ugeplan Meebook weekly plan
momo:forløb MoMo courses
momo:huskeliste MoMo reminders
library:status Library loans & reservations
widgets List available widgets
download-images Download images from gallery/posts/messages
agent-setup Install AI agent skill (see below)

Example:

aula --username johndoe messages --limit 5
# or without installing
uvx aula --username johndoe messages --limit 5

JSON output

All commands support --output json for machine-readable output:

aula --output json messages --unread
aula --output json daily-summary --child "Emma"
aula --output json calendar --start-date 2026-03-10

Set the AULA_OUTPUT=json environment variable to make JSON the default.

AI Agent Integration

The CLI is designed to work with AI coding agents like Claude Code and OpenCode. The agent-setup command installs a skill that teaches agents how to query Aula for school data.

# Install for the current project
aula agent-setup

# Install globally (all projects)
aula agent-setup --global

This creates a SKILL.md following the Agent Skills open standard under .claude/skills/aula/, which is read by both Claude Code and OpenCode. Once installed, agents can invoke /aula or automatically use the CLI when you ask about school data.

Attribution

License

MIT

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

aula-0.8.1.tar.gz (146.6 kB view details)

Uploaded Source

Built Distribution

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

aula-0.8.1-py3-none-any.whl (81.9 kB view details)

Uploaded Python 3

File details

Details for the file aula-0.8.1.tar.gz.

File metadata

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

File hashes

Hashes for aula-0.8.1.tar.gz
Algorithm Hash digest
SHA256 6c68f034d9479f28556bf9eba963909e052c525aff7fc4625d68186f23f36ca0
MD5 521ce7f9a32783dbec83fe0dd41257cf
BLAKE2b-256 be355a3aee5b961cc830601618da306534704e56bfd91eec7aee1101eeb45930

See more details on using hashes here.

Provenance

The following attestation bundles were made for aula-0.8.1.tar.gz:

Publisher: publish.yml on nickknissen/aula

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

File details

Details for the file aula-0.8.1-py3-none-any.whl.

File metadata

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

File hashes

Hashes for aula-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b4513897e0142a0aed888c507082b762e618d4fbb8439dc02287f65629579c93
MD5 fc02408c7848e1c658c39bd76a32da70
BLAKE2b-256 6610a6eec3527ae7a98ef3e76b28b58e19126e8c39efdb3193d80ebca532faea

See more details on using hashes here.

Provenance

The following attestation bundles were made for aula-0.8.1-py3-none-any.whl:

Publisher: publish.yml on nickknissen/aula

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