Skip to main content

Crate wakapi

Crate wakapi 

Source
Expand description

§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:

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:

VariableDescription
WAKAPI_URLBase URL of the server, e.g. https://wakatime.com
WAKAPI_KEYPlain-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.

Modules§

atst
All time since today endpoint.
commit
Commit endpoint
commits
Commits endpoint
durations
Durations endpoint
heartbeats
Heartbeats endpoint
projects
Projects endpoint.
stats
Stats endpoint.
summaries
Summaries endpoint.

Structs§

AllTimeSinceTodayParams
Request parameters for the AllTimeSinceToday endpoint.
Commit
Commit endpoint
CommitParams
Request parameters for the Commit endpoint.
Commits
Commits endpoint
CommitsParams
Request parameters for the Commits endpoint.
Durations
Durations endpoint
DurationsParams
Request parameters for the Durations endpoint.
ErrorMessage
Heartbeats
Heartbeats endpoint
HeartbeatsParams
Request parameters for the Heartbeats endpoint.
Projects
Projects endpoint.
ProjectsParams
Request parameters for the Projects endpoint.
Stats
Stats endpoint.
StatsParams
Request parameters for the Stats endpoint.
Summaries
Summaries endpoint body
SummariesParams
Request parameters for the Summaries endpoint.
WakapiClient
WakatimeConfig
Wakatime INI config file.

Enums§

AllTimeSinceToday
Successful response from the AllTimeSinceToday endpoint, with two possible states :
SummaryRange
Summary range : https://wakatime.com/developers#summaries Alternative way to supply start and end dates. Can be one of “Today”, “Yesterday”, “Last 7 Days”, “Last 7 Days from Yesterday”, “Last 14 Days”, “Last 30 Days”, “This Week”, “Last Week”, “This Month”, or “Last Month”.
WakapiError