Skip to main content

aio-garmin-personal

Asynchronous Python client for the Garmin Connect Personal API, the read-only API Garmin offers to individual account holders for their own data.

It was written as the dependency of a Home Assistant integration, so it follows Home Assistant's rules for libraries: asyncio with aiohttp, a caller-supplied ClientSession, full type hints, and one exception type per kind of failure.

This is not a Garmin product.

Installation

pip install aio-garmin-personal

Usage

Create a Personal API key in Garmin Connect (Settings → Personal API Key). Garmin shows it once.

import asyncio
from datetime import date

import aiohttp

from aio_garmin_personal import GarminPersonalClient


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        client = GarminPersonalClient(session, "<your Personal API key>")
        summary = await client.async_get_daily_summary(date.today())
        if summary is not None:
            print(
                summary.total_kilocalories,
                summary.active_kilocalories,
                summary.total_steps,
            )


asyncio.run(main())

The client exchanges the key for an access token on the first request, keeps the token in memory, and exchanges the key again an hour before the token expires. It never writes the key or the token to disk.

Errors

Exception Raised when
GarminPersonalAuthenticationError Garmin rejects the key: wrong, expired or deleted
GarminPersonalRateLimitError Garmin answers HTTP 429; retry_after holds the delay in seconds if sent
GarminPersonalConnectionError Garmin cannot be reached or the request times out
GarminPersonalResponseError Any other failure status, or a body the client cannot parse

All of them derive from GarminPersonalError.

Supported endpoints

Method Endpoint
async_get_user_settings() GET /userprofile-service/userprofile/settings
async_get_daily_summary(day) GET /usersummary-service/usersummary/daily

More endpoints are added as the Home Assistant integration needs them.

Development

python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/pre-commit install
.venv/bin/pytest
.venv/bin/pre-commit run --all-files

Releases are built and published to PyPI by the release workflow when a vX.Y.Z tag is pushed.

License

Apache License 2.0.

Metadata

Release files for aio-garmin-personal 0.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 aio-garmin-personal 0.1.0
File Size Uploaded Provenance
aio_garmin_personal-0.1.0.tar.gz 22.8 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for aio-garmin-personal 0.1.0
File Interpreter ABI Platform
aio_garmin_personal-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 36.8 kB

Release files / aio_garmin_personal-0.1.0.tar.gz

Download URL aio_garmin_personal-0.1.0.tar.gz
Size 22.8 kB
Tags Source
SHA-256 checksum
How to use checksums
9ad23239e713988566af54a92b1baca3f5d32ff3ce6eb38640f404846a7ee084
BLAKE2b-256 checksum
How to use checksums
84dad5c5e8a8391f58454fb893a45848c3f9fd26bd89d4691a7ecebff10b8a36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / aio_garmin_personal-0.1.0-py3-none-any.whl

Download URL aio_garmin_personal-0.1.0-py3-none-any.whl
Size 14.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9b9154d30e318eff6e30f11d16b04f25d7e9aca46706776b8124e4d4ec5e5e12
BLAKE2b-256 checksum
How to use checksums
49560d7fc4e1592ae9bf0646e352f9be43b5898156661bda88e2f900094bc671
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Security for aio-garmin-personal 0.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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for aio_garmin_personal-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

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