Introduction

The WakaTime API follows common REST conventions. This means you should use GET requests to retrieve data and POST, PUT, or PATCH requests to modify data. All API requests must be done over HTTPS.

Every response will be a JSON object, which is a key-value hash. Data for a resource will be returned in the key named data. Errors will be returned in the key named errors or error.

HTTP response codes indicate the status of your request:

  • 200 - Ok: The request has succeeded.
  • 201 - Created: The request has been fulfilled and resulted in a new resource being created.
  • 202 - Accepted: The request has been accepted for processing, but the processing has not been completed. The stats resource may return this code.
  • 400 - Bad Request: The request is invalid. Check error message and try again.
  • 401 - Unauthorized: The request requires authentication, or your authentication was invalid.
  • 403 - Forbidden: You are authenticated, but do not have permission to access the resource.
  • 404 - Not Found: The resource does not exist.
  • 50x - Server Error: Service unavailable, try again later.

All API resources have the url prefix https://wakatime.com/api/v1/.

When using the WakaTime trademark or logo in your application, please follow our usage guidelines.

Security

Do NOT use the API with your secret key on a public website. Instead, create an embeddable chart that's safe to share publicly. Choose the JSON format to securely access your coding activity with JavaScript:

Embeddable SVG Charts and JSON

Authentication

OAuth 2.0 Endpoints

Create an app to get an OAuth 2.0 client token.

The OAuth 2.0 provider endpoints are:

  • https://wakatime.com/oauth/authorize - Redirect your users here to request permission to access their account. Required url arguments are client_id, response_type of code or token, redirect_uri, scope. Optional parameters are state and force_approve.
  • https://wakatime.com/oauth/token - Make a server-side POST request here to get the secret access token. Required x-www-form-urlencoded data is client_id, client_secret, redirect_uri must be the same url used in authorize step, grant_type of authorization_code, and the code received from the authorize step.

For information about using these endpoints, see RFC6749 OAuth 2.0.

Using Access Token

After getting the bearer (access) token from https://wakatime.com/oauth/token, you can now make authenticated api calls using the Authorization request header (RFC 6750).

For example, if your user's access token is sec_12345, you would add this header to your request:
Authorization: Bearer sec_12345.

Alternatively, you can authenticate with url args named access_token, or just token and app_secret, client_secret, or just secret.

Using the Refresh Token

You should always get a refresh_token from the /oauth/token response. The refresh_token can be used when your access_token has expired, to re-authorize without having to prompt the user.

To use the refresh_token, make a POST request to https://wakatime.com/oauth/token to get a new secret access token. Required x-www-form-urlencoded data is client_id, client_secret, redirect_uri must be the same url used in authorize step, grant_type of refresh_token, and the refresh_token received from a previous token response.

Available Scopes

Scopes are sent to the authorize url as a comma separated list.

  • email - access user’s email and identity information.
  • read_logged_time - access user’s coding activity and other stats.
  • write_logged_time - modify user’s coding activity.
  • read_stats - access user’s languages, editors, and operating systems used.
  • read_teams - access user’s teams, and coding activity for team members.

Example

OAuth 2.0 authentication flow using rauth (Python):

#!/usr/bin/env python

import hashlib
import os
import sys
from rauth import OAuth2Service

if sys.version_info[0] == 3:
    raw_input = input

client_id = raw_input('Enter your App Id: ')
secret = raw_input('Enter your App Secret: ')

service = OAuth2Service(
    client_id=client_id,  # your App ID from https://wakatime.com/apps
    client_secret=secret,  # your App Secret from https://wakatime.com/apps
    name='wakatime',
    authorize_url='https://wakatime.com/oauth/authorize',
    access_token_url='https://wakatime.com/oauth/token',
    base_url='https://wakatime.com/api/v1/')

redirect_uri = 'https://wakatime.com/oauth/test'
state = hashlib.sha1(os.urandom(40)).hexdigest()
params = {'scope': 'email,read_stats',
          'response_type': 'code',
          'state': state,
          'redirect_uri': redirect_uri}

url = service.get_authorize_url(**params)

print('**** Visit {url} in your browser. ****'.format(url=url))
print('**** After clicking Authorize, paste code here and press Enter ****')
code = raw_input('Enter code from url: ')

# Make sure returned state has not changed for security reasons, and exchange
# code for an Access Token.
headers = {'Accept': 'application/x-www-form-urlencoded'}
session = service.get_auth_session(headers=headers,
                                   data={'code': code,
                                         'grant_type': 'authorization_code',
                                         'redirect_uri': redirect_uri})

user = session.get('users/current').json()
print(user['data']['email'])
stats = session.get('users/current/stats').json()
print(stats.get('data', {}).get('human_readable_total', 'Calculating...'))

400 Error (Invalid redirect_uri: Not valid for this client.)

If you see this error when running the example, add https://wakatime.com/oauth/test as an authorized redirect url in your App's settings.

Using API Key

Most apps should use OAuth, but you can also authenticate to the WakaTime API using your secret API key .

Using HTTP Basic Auth pass your API key base64 encoded in the Authorization header. Don't forget to prepend Basic to your api key after base64 encoding it.

For example, when using HTTP Basic Auth with an api key of 12345 you should add this header to your request:
Authorization: Basic MTIzNDU=

Alternatively, you can pass your api key as a query parameter in your request like ?api_key=XXXX.

Do NOT use your API Key on a public website. Instead, use embeddable charts and JSON.

Commits

GET users/:user/projects/:project/commits

GET users/current/projects/:project/commits

Description

List of commits for a WakaTime project showing the time spent coding in each commit.

URL Parameters

author (string) - optional - Filter commits to only those authored by the given username.

page (integer) - optional - Page number of commits.

Scope Required

read_logged_time

Example Response

Response Code: 200

{
  "commits": [
    {
      "author_avatar_url": <string: url of author's avatar image>
      "author_date": <datetime: time when commit was authored in ISO 8601 format>,
      "author_email": <string: email address of author>,
      "author_html_url": <string: link to author's profile on GitHub, Bitbucket, GitLab, etc>,
      "author_name": <string: name of author>,
      "author_url": <string: api url for author's profile>,
      "author_username": <string: author's username>,
      "committer_avatar_url": <string: url of committer's avatar image>,
      "committer_date": <datetime: commit time in ISO 8601 format>,
      "committer_email": <string: email address of committer>,
      "committer_html_url": <string: link to committer's profile on GitHub, Bitbucket, GitLab, etc>,
      "committer_name": <string: name of committer>,
      "committer_url": <string: api url for committer's profile>,
      "committer_username": <string: committer's username>,
      "created_at": <datetime: time commit was synced in ISO 8601 format>,
      "hash": <string: revision control hash of this commit>,
      "html_url": <string: link to an html page with details about current commit>,
      "human_readable_total": <string: time coded in editor for this commit>,
      "human_readable_total_with_seconds": <string: time coded in editor for this commit>,
      "id": <string: unique id of commit>,
      "message": <string: author's description of this commit>,
      "ref": <string: refs/heads/master>,
      "total_seconds": <integer: time coded in editor for this commit>,
      "truncated_hash": <string: truncated revision control hash of this commit>,
      "url": <string: api url with details about current commit>,
    }, …
  ],
  "author": <string: current author or null if showing commits from all authors>,
  "next_page": <integer: next page number or null if last page>
  "next_page_url": <string: url for next page or null if last page>
  "page": <integer: current page number>
  "prev_page": <integer: previous page number or null if first page>
  "prev_page_url": <string: url for previous page or null if first page>
  "project": {
    "id": <string: unique id of project>,
    "name": <string: project name>,
    "privacy": <string: project privacy setting>,
    "repository": {
      "default_branch": <string: default branch if given for this repo>,
      "description": <string: remote repository description>,
      "fork_count": <integer: number of repo forks if available>
      "full_name": <string: username and repo name, ex: wakatime/wakadump>,
      "homepage": <string: homepage of repository>,
      "html_url": <string: html url for repository>,
      "id": <string: unique id of repository>,
      "is_fork": <boolean: whether this repo is a fork or original>,
      "is_private": <boolean: whether this repo is private or public>,
      "last_synced_at": <datetime: last time this repo was synced with remote provider iSO 8601 format>,
      "name": <string: repository name>,
      "provider": <string: remote provider of repository, ex: github>,
      "star_count": <integer: number of repo stars if available>
      "url": <string: api url of remote repository>,
      "watch_count": <integer: number of watchers of repo if available>,
    }
  },
  "status": <string: project's sync status>,
  "total": <integer: number of commits available>,
  "total_pages": <integer: number of pages available>,
}

Durations

GET users/:user/durations

GET users/current/durations

Description

A user's coding activity for the given day as an array of duration blocks.

URL Parameters

date (Date) - required - Requested day; Durations will be returned from 12am until 11:59pm in user's timezone for this day.

project (string) - optional - Only show durations for this project.

branches (string) - optional - Only show durations for these branches; comma separated list of branch names.

Scope Required

read_logged_time

Example Response

Response Code: 200

{
  "data": [
    {
      "project": <string: project name>,
      "time": <float: start of this duration as ISO 8601 UTC datetime; numbers after decimal point are fractions of a second>,
      "duration": <integer: length of time of this duration in seconds>
    }, …
  ],
  "branches": <list of strings: branches included in this response>,
  "start": <integer: start of time range as ISO 8601 UTC datetime>,
  "end": <integer: end of time range as ISO 8601 UTC datetime>,
  "timezone": <string: timezone used for this request in Olson Country/Region format>
}

Heartbeats

GET users/:user/heartbeats

GET users/current/heartbeats

Description

A user's heartbeats sent from plugins for the given day as an array.

URL Parameters

date (Date) - required - Requested day; Heartbeats will be returned from 12am until 11:59pm in user's timezone for this day.

Scope Required

read_logged_time

Example Response

Response Code: 200

{
  "data": [
    {
      "entity": <string: entity heartbeat is logging time against, such as an absolute file path or domain>,
      "type": <string: type of entity; can be file, app, or domain>,
      "time": <float: UNIX epoch timestamp; numbers after decimal point are fractions of a second>,
      "project": <string: project name (optional)>,
      "branch": <string: branch name (optional)>,
      "language": <string: language name (optional)>,
      "dependencies": <string: optional comma separated list of dependencies detected from entity file (optional)>,
      "lines": <integer: total number of lines in the entity (when entity type is file)>,
      "lineno": <integer: current line row number of cursor (optional)>,
      "cursorpos": <integer: current cursor column position (optional)>,
      "is_write": <boolean: whether this heartbeat was triggered from writing to a file>,
      "is_debugging": <boolean: whether this heartbeat was triggered while debuggging>,
    }, …
  ],
  "start": <integer: start of time range as ISO 8601 UTC datetime>,
  "end": <integer: end of time range as ISO 8601 UTC datetime>,
  "timezone": <string: timezone used for this request in Olson Country/Region format>
}


POST users/:user/heartbeats

POST users/current/heartbeats

Description

Creates a heartbeat representing activity for a user.

URL Parameters

None

Scope Required

write_logged_time

JSON POST Data

{
  "entity": <string: entity heartbeat is logging time against, such as an absolute file path or domain>,
  "type": <string: type of entity; can be file, app, or domain>,
  "time": <float: UNIX epoch timestamp; numbers after decimal point are fractions of a second>,
  "project": <string: project name (optional)>,
  "branch": <string: branch name (optional)>,
  "language": <string: language name (optional)>,
  "dependencies": <string: comma separated list of dependencies detected from entity file (optional)>,
  "lines": <integer: total number of lines in the entity (when entity type is file)>,
  "lineno": <integer: current line row number of cursor (optional)>,
  "cursorpos": <integer: current cursor column position (optional)>,
  "is_write": <boolean: whether this heartbeat was triggered from writing to a file (optional)>,
  "is_debugging": <boolean: whether this heartbeat was triggered while debuggging (optional)>,
}

Example Response

Response Code: 201

{
  "data": {
    "id": <string: unique id of newly created heartbeat>,
    "entity": <string: entity heartbeat is logging time against, such as an absolute file path or domain>,
    "type": <string: type of entity; can be file, app, or domain>,
    "time": <float: UNIX epoch timestamp; numbers after decimal point are fractions of a second>,
  }
}

Leaders

GET leaders

Description

List of users ranked by coding activity in descending order. Same as the public leaderboards.

URL Parameters

language (string) - optional - filter leaders by a specific language.

page (integer) - optional - Page number of leaderboard.

Example Response

{
  "current_user": {
    "rank": <integer: rank of the currently authorized user>,
    "running_total": {
      "total_seconds": <integer: total coding activity for this user as seconds>,
      "human_readable_total": <string: total coding activity for this user as human readable string>,
      "daily_average": <integer: daily average for this user as seconds>,
      "human_readable_daily_average": <string: daily average for this user as human readable string>,
      "languages": [
        {
          "name": <string: language name>,
          "total_seconds": <integer: total seconds user has logged in this language>,
        }, …
      ],
    },
    "user": {
      "id": <string: unique id of user>,
      "email": <string: email address of user, if public>,
      "username": <string: users public username>,
      "full_name": <string: full name of user>,
      "display_name": <string: display name of this user taken from full_name or @username. Defaults to 'Anonymous User'>,
      "website": <string: website of user>,
      "human_readable_website": <string: website of user without url scheme>,
      "location": <string: location of user>,
      "email_public": <boolean: whether this user's email should be shown publicly on leader boards>,
      "photo_public": <boolean: whether this user's photo should be shown publicly on leader boards>,
    },
  },
  "data": [
    {
      "rank": <integer: rank of this leader>,
      "running_total": {
        "total_seconds": <integer: total coding activity for this user as seconds>,
        "human_readable_total": <string: total coding activity for this user as human readable string>,
        "daily_average": <integer: daily average for this user as seconds>,
        "human_readable_daily_average": <string: daily average for this user as human readable string>,
        "languages": [
          {
            "name": <string: language name>,
            "total_seconds": <integer: total seconds user has logged in this language>,
          }, …
        ],
      },
      "user": {
        "id": <string: unique id of user>,
        "email": <string: email address of user, if public>,
        "username": <string: users public username>,
        "full_name": <string: full name of user>,
        "display_name": <string: display name of this user taken from full_name or @username. Defaults to 'Anonymous User'>,
        "website": <string: website of user>,
        "human_readable_website": <string: website of user without url scheme>,
        "location": <string: location of user>,
        "email_public": <boolean: whether this user's email should be shown publicly on leader boards>,
        "photo_public": <boolean: whether this user's photo should be shown publicly on leader boards>,
      },
    }, …
  ],
  "page": <integer: current page number>
  "total_pages": <integer: number of pages available>,
  "range": <string: time range of this leaderboard>,
  "language": <string: language of this leaderboard>,
  "modified_at": <datetime: time when this leaderboard was last updated in ISO 8601 format>
}

Try it out

Projects

GET users/:user/projects

GET users/current/projects

Description

List of WakaTime projects for the current user.

Scope Required

read_logged_time

Example Response

Response Code: 200

{
  "data": [
    {
      "id": <string: unique project id>,
      "name": <string: project name>,
      "privacy": <string: project privacy setting>,
      "repository": <string: associated repository if connected>,
    }, …
  ],
}

Stats

GET users/:user/stats/:range

GET users/current/stats/:range

Description

A user's coding activity for the given time range. range can be one of last_7_days, last_30_days, last_6_months, or last_year.

URL Parameters

timeout (integer) - optional - The timeout value used to calculate these stats. Defaults the the user's timeout value.

writes_only (boolean) - optional - The writes_only value used to calculate these stats. Defaults to the user's writes_only setting.

project (string) - optional - Show more detailed stats limited to this project.

Scope Required

read_stats

Example Response

{
  "data": {
    "total_seconds": <integer: total coding activity as seconds for the given range of time>,
    "human_readable_total": <string: total coding activity as human readable string>,
    "daily_average": <integer: average coding activity per day as seconds for the given range of time>,
    "human_readable_daily_average": <string: daily average as human readable string>,
    "projects": [
      {
        "name": <string: project name>,
        "total_seconds": <integer: total coding activity as seconds>,
        "percent": <float: percent of time spent in this project>,
        "digital": <string: total coding activity for this project in digital clock format>,
        "text": <string: total coding activity in human readable format>,
        "hours": <integer: hours portion of coding activity for this project>,
        "minutes": <integer: minutes portion of coding activity for this project>
      }, …
    ],
    "languages": [
      {
        "name": <string: language name>,
        "total_seconds": <integer: total coding activity spent in this language as seconds>,
        "percent": <float: percent of time spent in this language>,
        "digital": <string: total coding activity for this language in digital clock format>,
        "text": <string: total coding activity in human readable format>,
        "hours": <integer: hours portion of coding activity for this language>,
        "minutes": <integer: minutes portion of coding activity for this language>,
        "seconds": <integer: seconds portion of coding activity for this language>
      }, …
    ],
    "editors": [
      {
        "name": <string: editor name>,
        "total_seconds": <integer: total coding activity spent in this editor as seconds>,
        "percent": <float: percent of time spent in this editor>,
        "digital": <string: total coding activity for this editor in digital clock format>,
        "text": <string: total coding activity in human readable format>,
        "hours": <integer: hours portion of coding activity for this editor>,
        "minutes": <integer: minutes portion of coding activity for this editor>,
        "seconds": <integer: seconds portion of coding activity for this editor>
      }, …
    ],
    "operating_systems": [
      {
        "name": <string: os name>,
        "total_seconds": <integer: total coding activity spent in this os as seconds>,
        "percent": <float: percent of time spent in this os>,
        "digital": <string: total coding activity for this os in digital clock format>,
        "text": <string: total coding activity in human readable format>,
        "hours": <integer: hours portion of coding activity for this os>,
        "minutes": <integer: minutes portion of coding activity for this os>,
        "seconds": <integer: seconds portion of coding activity for this os>
      }, …
    ],
    "best_day": {
      "date": <string: day with most coding time logged as Date string in YEAR-MONTH-DAY format>,
      "total_seconds": <integer: number of seconds of coding activity for this day>
    },
    "range": <string: time range of these stats>,
    "holidays": <integer: number of days in this range with no coding time logged>,
    "days_including_holidays": <integer: number of days in this range>,
    "days_minus_holidays": <integer: number of days in this range excluding days with no coding time logged>,
    "status": <string: status of these stats in the cache>,
    "is_already_updating": <boolean: true if these stats are being updated in the background>,
    "is_stuck": <boolean: true if these stats got stuck while processing and will be recalculated in the background>,
    "is_up_to_date": <boolean: true if these stats are up to date>,
    "start": <integer: start of this time range as ISO 8601 UTC datetime>,
    "end": <integer: end of this time range as ISO 8601 UTC datetime>,
    "timezone": <string: timezone used in Olson Country/Region format>,
    "timeout": <integer: value of the user's timeout setting in minutes>,
    "writes_only": <boolean: status of the user's writes_only setting>,
    "user_id": <string: unique id of this user>,
    "username": <string: public username for this user>,
    "created_at": <datetime: time when these stats were created in ISO 8601 format>,
    "modified_at": <datetime: time when these stats were last updated in ISO 8601 format>
  }
}

Summaries

GET users/:user/summaries

GET users/current/summaries

Description

A user's coding activity for the given time range as an array of summaries segmented by day.

URL Parameters

start (Date) - required - Start date of the time range.

end (Date) - required - End date of the time range.

project (string) - optional - Only show time logged to this project.

branches (string) - optional - Only show coding activity for these branches; comma separated list of branch names.

Scope Required

read_logged_time

Example Response

Response Code: 200

{
  "data": [
    {
      "grand_total": {
        "digital": <string: total coding activity in digital clock format>,
        "hours": <integer: hours portion of coding activity>,
        "minutes": <integer: minutes portion of coding activity>,
        "text": <string: total coding activity in human readable format>,
        "total_seconds": <integer: total coding activity as seconds>
      },
      "projects": [
        {
          "name": <string: project name>,
          "total_seconds": <integer: total coding activity as seconds>,
          "percent": <float: percent of time spent in this project>,
          "digital": <string: total coding activity for this project in digital clock format>,
          "text": <string: total coding activity in human readable format>,
          "hours": <integer: hours portion of coding activity for this project>,
          "minutes": <integer: minutes portion of coding activity for this project>
        }, …
      ],
      "languages": [
        {
          "name": <string: language name>,
          "total_seconds": <integer: total coding activity spent in this language as seconds>,
          "percent": <float: percent of time spent in this language>,
          "digital": <string: total coding activity for this language in digital clock format>,
          "text": <string: total coding activity in human readable format>,
          "hours": <integer: hours portion of coding activity for this language>,
          "minutes": <integer: minutes portion of coding activity for this language>,
          "seconds": <integer: seconds portion of coding activity for this language>
        }, …
      ],
      "editors": [
        {
          "name": <string: editor name>,
          "total_seconds": <integer: total coding activity spent in this editor as seconds>,
          "percent": <float: percent of time spent in this editor>,
          "digital": <string: total coding activity for this editor in digital clock format>,
          "text": <string: total coding activity in human readable format>,
          "hours": <integer: hours portion of coding activity for this editor>,
          "minutes": <integer: minutes portion of coding activity for this editor>,
          "seconds": <integer: seconds portion of coding activity for this editor>
        }, …
      ],
      "operating_systems": [
        {
          "name": <string: os name>,
          "total_seconds": <integer: total coding activity spent in this os as seconds>,
          "percent": <float: percent of time spent in this os>,
          "digital": <string: total coding activity for this os in digital clock format>,
          "text": <string: total coding activity in human readable format>,
          "hours": <integer: hours portion of coding activity for this os>,
          "minutes": <integer: minutes portion of coding activity for this os>,
          "seconds": <integer: seconds portion of coding activity for this os>
        }, …
      ],
      "branches": [ // included only when project url parameter used
        {
          "name": <string: branch name>,
          "total_seconds": <integer: total coding activity spent in this branch as seconds>,
          "percent": <float: percent of time spent in this branch>,
          "digital": <string: total coding activity for this branch in digital clock format>,
          "text": <string: total coding activity in human readable format>,
          "hours": <integer: hours portion of coding activity for this branch>,
          "minutes": <integer: minutes portion of coding activity for this branch>,
          "seconds": <integer: seconds portion of coding activity for this branch>
        }, …
      ],
      "entities": [ // included only when project url parameter used
        {
          "name": <string: entity name>,
          "total_seconds": <integer: total coding activity spent in this entity as seconds>,
          "percent": <float: percent of time spent in this entity>,
          "digital": <string: total coding activity for this entity in digital clock format>,
          "text": <string: total coding activity in human readable format>,
          "hours": <integer: hours portion of coding activity for this entity>,
          "minutes": <integer: minutes portion of coding activity for this entity>,
          "seconds": <integer: seconds portion of coding activity for this entity>
        }, …
      ],
      "range": {
        "date": <string: this day as Date string in YEAR-MONTH-DAY format>,
        "start": <integer: start of this day as ISO 8601 UTC datetime>,
        "end": <integer: end of this day as ISO 8601 UTC datetime>,
        "text": <string: this day in human-readable format relative to the current day>,
        "timezone": <string: timezone used in Olson Country/Region format>
      }
    }, …
  ],
  "start": <integer: start of time range as ISO 8601 UTC datetime>,
  "end": <integer: end of time range as ISO 8601 UTC datetime>,
}

Users

GET users/:user

GET users/current

Description

A single user.

URL Parameters

None

Scope Required

email

Example Response

Response Code: 200

{
  "data": {
    "id": <string: unique id of user>,
    "has_premium_features": <boolean: true if user has access to premium features>,
    "display_name": <string: display name of this user taken from full_name or @username. Defaults to 'Anonymous User'>,
    "full_name": <string: full name of user>,
    "email": <string: email address>,
    "photo": <string: url of photo for this user>,
    "email_public": <boolean: whether this user's email should be shown on the public leader board>,
    "is_email_confirmed": <boolean: whether this user's email address has been verified with a confirmation email>,
    "photo_public": <boolean: whether this user's photo should be shown on the public leader board>,
    "timezone": <string: user's timezone in Olson Country/Region format>,
    "last_heartbeat": <datetime: time of most recent heartbeat received>,
    "last_plugin": <string: user-agent string from the last plugin used>,
    "last_plugin_name": <string: name of editor last used>,
    "last_project": <string: name of last project coded in>,
    "plan": <string: users subscription plan>,
    "username": <string: users public username>,
    "website": <string: website of user>,
    "human_readable_website": <string: website of user without protocol part>,
    "location": <string: location of user>,
    "logged_time_public": <boolean: coding activity should be shown on the public leader board>,
    "languages_used_public": <boolean: languages used should be shown on the public leader board>,
    "is_hireable": <boolean: user preference, not currently used>,
    "created_at": <datetime: time when user was created in ISO 8601 format>,
    "modified_at": <datetime: time when user was last modified in ISO 8601 format>,
  },
}

User Agents

GET users/:user/user_agents

GET users/current/user_agents

Description

List of plugins which have sent data for this user.

URL Parameters

None

Scope Required

read_logged_time

Example Response

Response Code: 200

{
  "data": {
    "id": <string: unique id of this user agent>,
    "value": <string: a user agent string>,
    "editor": <string: the editor/IDE name of this user agent>,
    "version": <string: the wakatime plugin version of this user agent>,
    "os": <string: operating system of this user agent>,
    "last_seen": <datetime: time when this user agent was last seen in ISO 8601 format>,
    "created_at": <datetime: time when this user agent was first seen in ISO 8601 format>,
  },
}