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.1.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.1.0
File Size Uploaded Provenance
outnote-1.1.0.tar.gz 26.3 kB Without provenance Details

Built distribution (wheel)

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

Total release size: 56.9 kB

Release files / outnote-1.1.0.tar.gz

Download URL outnote-1.1.0.tar.gz
Size 26.3 kB
Tags Source
SHA-256 checksum
How to use checksums
fcf2c5ae366730cb9d1ecd5a928f89fd03774e6ea783e955d23e53b5bf028cd3
BLAKE2b-256 checksum
How to use checksums
bfe4f42b8d8beaf6cb4d577d90226855d9028fba4a2f296117d5173ffe710df2
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.1.0-py3-none-any.whl

Download URL outnote-1.1.0-py3-none-any.whl
Size 30.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9cce2fdfac3b9c5216927f3130badd245b338d7df9b940249ae62bcd35002852
BLAKE2b-256 checksum
How to use checksums
516f53c24833a425775c2d5a19d6e35ca54a3a2b7d2391e4e4f47b6d0bd000d7
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.1.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