PyiCloud is a module which allows pythonistas to interact with iCloud webservices. It's powered by the fantastic requests HTTP library.
At its core, PyiCloud connects to the iCloud web application using your username and password, then performs regular queries against its API.
Please see the terms of use for your responsibilities when using this library.
For support and discussions, join our Discord community: Join our Discord community
Install the library and CLI with:
$ pip install "pyicloud[cli]"This installs the icloud command line interface alongside the Python package. To install the library on its own run pip without the cli extra.
$ pip install pyicloudAuthentication without using a saved password is as simple as passing your
username and password to the PyiCloudService class:
from pyicloud import PyiCloudService
api = PyiCloudService("jappleseed@apple.com", "password")In the event that the username/password combination is invalid, a
PyiCloudFailedLoginException exception is thrown.
For China mainland accounts, long-running daemon settings, family polling,
pause_2fa, and the full two-step / two-factor (2SA/2FA) flow, see the
Authentication guide.
The icloud CLI can also store your password in the system keyring; see the
Command-Line Interface guide.
Full documentation lives under docs/.
It is also published, with a generated API reference, at
pyicloud.readthedocs.io.
- Authentication — login,
pause_2fa, and 2SA/2FA - Command-Line Interface — the
icloudcommand, auth/session management, and keyring storage - Diagnostics —
icloud doctorand its exit codes
- Account — account info, storage, and summary plan
- Devices & Find My — list devices and locate, ring, lock, or erase them
- Calendar — calendars, events, alarms, and invitees
- Contacts — the address book and MeCard
- File Storage (Drive) — iCloud Drive and the legacy Ubiquity API
- Photos — browse, sync, upload, and modify the photo library
- Hide My Email — generate and manage email aliases
- Mail — experimental folder and message reads, verified sender identities, bounded single-/multi-folder searches, previews, Unread/Flagged thread filters, cursor enumeration of filtered thread identities (
icloud mail filter-threads), private JSON and original MIME/EML export (icloud mail export-eml), restricted size-bounded Mail Drop downloads (icloud mail download-maildrop), exact message lookup (icloud mail getby ID or UID), opt-in mailbox/thread/flag-filter UID enumeration, folder-scoped thread expansion, bodies, attachment streams, and one-shot POSIX metadata inventory synchronization (icloud mail sync), also available throughicloud mail; plus separate explicit single-message read/unread and flag/unflag writes and ordinary mailbox moves throughset_read(),set_flagged(),move(), andicloud mail mark/icloud mail move, plus guarded draft saves/discard with recipients and ordinary attachment uploads and folder creation, renaming, and confirmed irreversible deletion through the library and CLI, plus explicit reply/forward drafts and confirmed sending and confirmed single-message permanent deletion from Trash - Reminders — lists, reminders, alarms, tags, and attachments
- Notes — folders, note rendering, and HTML export
- Invites — read events and respond to invitations
If you want to see some code samples, see the examples.
Contributions are welcome! Please read the Contributing guide, the Code of Conduct, and the Terms of Use before getting started.
To report a security vulnerability, use private vulnerability reporting rather than opening a public issue (see SECURITY.md).