wakapi 0.3.1

Wakatime API client
Documentation

Wakapi : wakatime API client

Read-only API client for the Wakatime API, supporting all GET endpoints as blocking or async depending on the blocking feature flag.

The following endpoints are implemented:

  • All Time Since Today : [AllTimeSinceToday], [AllTimeSinceTodayParams], [AllTimeSinceToday::fetch]
  • Commit : [Commit], [CommitParams], [Commit::fetch]
  • Commits : [Commits], [CommitsParams], [Commits::fetch]
  • Durations : [Durations], [DurationsParams], [Durations::fetch]
  • Heartbeats : [Heartbeats], [HeartbeatsParams], [Heartbeats::fetch]
  • Projects : [Projects], [ProjectsParams], [Projects::fetch]
  • Stats : [Stats], [StatsParams], [Stats::fetch]
  • Summaries : [Summaries], [SummariesParams], [Summaries::fetch]

The structures are based on the official documentation last checked 2026-05-15.

Known inconsistencies with the official documentation

  • projectsrepository and badge fields are documented as strings but the API returns objects (RepositoryDetails and ProjectBadge respectively). The struct types match the actual API response.
  • projects — The response includes pagination fields (page, total, total_pages, prev_page, next_page) not shown in the documentation.
  • commits — The response includes a page field not shown in the documentation.
  • stats — The response includes an is_up_to_date_pending_future boolean field not present in the documentation.
  • heartbeatsproject_root_count is present in the response but not documented.

Usage

Async mode

use wakapi::WakapiClient;

let client = WakapiClient::new(
    "https://wakatime.com",
    "YOUR_WAKATIME_API_KEY",
);
let res = wakapi::Summaries::fetch(
    &client,
    wakapi::SummariesParams::from_interval("2026-01-01", "2026-01-05"),
).await.unwrap();
println!("{:?}", res);

Blocking mode

use wakapi::WakapiClient;

let client = WakapiClient::new(
    "https://wakatime.com",
    "YOUR_WAKATIME_API_KEY",
);
let res = wakapi::Summaries::fetch(
    &client,
    wakapi::SummariesParams::from_interval("2026-01-01", "2026-01-05"),
).unwrap();
println!("{:?}", res);

Integration tests

Integration tests hit the real Wakatime API and require two environment variables:

Variable Description
WAKAPI_URL Base URL of the server, e.g. https://wakatime.com
WAKAPI_KEY Plain-text API key (the client Base64-encodes it)
# Async (default)
WAKAPI_URL=https://wakatime.com WAKAPI_KEY=<key> cargo test --test integration

# Blocking
WAKAPI_URL=https://wakatime.com WAKAPI_KEY=<key> cargo test --features blocking --test integration

If the environment variables are not set, all tests are silently skipped.

License

This project is licensed under the MIT License.