Skip to main content

OutNote Logo

OutNote

Headless Microsoft 365 over Graph - mail, calendar, Teams, OneDrive, SharePoint, OneNote, To Do, Planner and Assignments, without an app registration.

visits Python 3.10+ Latest release MIT license Built on Entrance


What is OutNote?

Every "read my mailbox over Graph" tutorial makes you register an Azure app and get admin consent - which a locked-down tenant (a school, a company) simply refuses. OutNote sidesteps that entirely.

It signs in (via entrance) with the pre-consented OfficeHome first-party client, gets a FOCI family refresh token, and a broker trades it for whichever first-party client's token a given call needs - all without another sign-in, and each already consented in the tenant. One headless login (password + TOTP, no browser), then clean reads and writes across the whole account.

Features

  • 🔓 No app registration, no admin consent - rides pre-consented Microsoft first-party clients
  • 🤖 Fully headless - password + TOTP MFA over pure HTTP (or a browser fallback via entrance)
  • 💾 Log in once - the family refresh token is persisted (0600) and reused, so later runs skip the sign-in
  • 📬 Broad coverage - mail, calendar, Teams chats & channels, OneDrive, SharePoint, OneNote, To Do, Planner, Assignments
  • ✉️ Writes too - send mail, Teams messages (with @mentions), events, uploads, OneNote pages, tasks
  • 🧾 Text out - Teams/OneNote HTML to text, .docx/.pptx/.xlsx/.pdf extraction
  • ⚡ Robust - 429/5xx backoff, $batch, delta queries, nextLink paging
  • 🖥️ CLI - outnote --text chats --unread

Install

pip install outnote        # or: uv add outnote

Python 3.10+; ms-entrance is pulled in automatically. pip install "outnote[pdf]" adds PDF text extraction.

Quickstart

from outnote import authenticate

note = authenticate("you@school.ch", "password", totp_secret="JBSWY3DPEHPK3PXP")

note.emails(top=5, unread=True)
note.chats()
note.send_to("friend@school.ch", "on my way")
note.download(item_id)
note.search_emails("invoice")

Docs

  • Usage - sign-in, reading, writing, the CLI
  • Method reference - every method, its endpoint, and the caveats
  • FOCI clients - the client/scope map and how to re-probe your tenant

Disclaimer

OutNote is published for educational and research purposes only - to document how Microsoft 365's first-party OAuth2 clients and the Graph API behave for a browserless client.

Use it only against accounts you own, or with the explicit authorization of the account or tenant owner. You alone are responsible for your use of it and for complying with Microsoft's terms, your identity provider's terms, your institution's acceptable-use policy, and applicable law. The software is provided "as is", without warranty of any kind, and the author accepts no liability for misuse. Not affiliated with or endorsed by Microsoft.

License

MIT (c) PianoNic

Metadata

Release files for outnote 1.2.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 outnote 1.2.0
File Size Uploaded Provenance
outnote-1.2.0.tar.gz 27.1 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for outnote 1.2.0
File Interpreter ABI Platform
outnote-1.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 58.6 kB

Release files / outnote-1.2.0.tar.gz

Download URL outnote-1.2.0.tar.gz
Size 27.1 kB
Tags Source
SHA-256 checksum
How to use checksums
950bdb4bdd7314de84b4c9087f94f9d59e99ad11a4e0b5aa1628a3dead0a64c3
BLAKE2b-256 checksum
How to use checksums
b07d54a20c478119023427985245cc74806652f5464b37db19369dfde7ec00dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / outnote-1.2.0-py3-none-any.whl

Download URL outnote-1.2.0-py3-none-any.whl
Size 31.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
292657c90781078629438e2d73ea0962b886fcff83e8aff2775c7353dfdf2eef
BLAKE2b-256 checksum
How to use checksums
a9aa1b7febe16660edcc405104211ec26c679ab674b39b30bc0b18f62db3203d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for outnote 1.2.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.

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