Activity uploads
Activity APIs accept aggregated time and metadata. They do not accept file contents, diffs, keystrokes, or clipboard data.
Time values are measured in seconds.
Submit one activity
import Analog_WakaTime_SDK
from datetime import date
import asyncio
import os
async def main() -> None:
configuration = Analog_WakaTime_SDK.Configuration(
access_token=os.environ["ANALOG_WAKATIME_API_TOKEN"],
)
activity = Analog_WakaTime_SDK.MainApiV1CreateActivityPostRequest(
language="Python",
lines=120,
time=60,
var_date=date.today(),
hour=14,
path="/workspace/example/main.py",
project_name="example-project",
ide_name="PyCharm",
filename="main.py",
)
async with Analog_WakaTime_SDK.ApiClient(configuration) as api_client:
activities_api = Analog_WakaTime_SDK.ActivitiesApi(api_client)
result = await activities_api.main_api_v1_create_activity_post(activity)
print(result.to_dict())
if __name__ == "__main__":
asyncio.run(main())
The generated Python property is named var_date because date is represented through a model alias. The outgoing JSON field is still date.
Batch synchronization
Plugins and agents should send compact batches instead of one request per event:
import Analog_WakaTime_SDK
from datetime import date
item = Analog_WakaTime_SDK.MainApiV1SyncActivitiesPostRequestActivitiesInner(
language="Python",
lines=120,
time=60,
var_date=date.today(),
hour=14,
project_name="example-project",
ide_name="PyCharm",
filename="main.py",
)
request = Analog_WakaTime_SDK.MainApiV1SyncActivitiesPostRequest(
activities=[item],
)
result = await activities_api.main_api_v1_sync_activities_post(request)
Upload guidance
- Aggregate activity by project, language, date, and hour.
- Keep an offline queue during network failures.
- Retry network failures and
5xxresponses with backoff. - Do not retry invalid
4xxpayloads without correcting them. - Identify the editor through
ide_name. - Never upload source-code contents.
Desktop and Android clients have separate typed create and batch-sync models under the same ActivitiesApi class.