mirror of
https://github.com/muety/wakapi.git
synced 2023-08-10 21:12:56 +03:00
799 lines
18 KiB
YAML
799 lines
18 KiB
YAML
basePath: /api
|
|
definitions:
|
|
models.Diagnostics:
|
|
properties:
|
|
architecture:
|
|
type: string
|
|
cli_version:
|
|
type: string
|
|
id:
|
|
type: integer
|
|
logs:
|
|
type: string
|
|
platform:
|
|
type: string
|
|
plugin:
|
|
type: string
|
|
stacktrace:
|
|
type: string
|
|
type: object
|
|
models.Heartbeat:
|
|
properties:
|
|
branch:
|
|
type: string
|
|
category:
|
|
type: string
|
|
created_at:
|
|
description: https://gorm.io/docs/conventions.html#CreatedAt
|
|
type: number
|
|
editor:
|
|
description: ignored because editor might be parsed differently by wakatime
|
|
type: string
|
|
entity:
|
|
type: string
|
|
id:
|
|
type: integer
|
|
is_write:
|
|
type: boolean
|
|
language:
|
|
type: string
|
|
machine:
|
|
description: ignored because wakatime api doesn't return machines currently
|
|
type: string
|
|
operating_system:
|
|
description: ignored because os might be parsed differently by wakatime
|
|
type: string
|
|
project:
|
|
type: string
|
|
time:
|
|
type: number
|
|
type:
|
|
type: string
|
|
type: object
|
|
models.Summary:
|
|
properties:
|
|
editors:
|
|
items:
|
|
$ref: '#/definitions/models.SummaryItem'
|
|
type: array
|
|
from:
|
|
example: "2006-01-02 15:04:05.000"
|
|
format: date
|
|
type: string
|
|
labels:
|
|
description: labels are not persisted, but calculated at runtime, i.e. when
|
|
summary is retrieved
|
|
items:
|
|
$ref: '#/definitions/models.SummaryItem'
|
|
type: array
|
|
languages:
|
|
items:
|
|
$ref: '#/definitions/models.SummaryItem'
|
|
type: array
|
|
machines:
|
|
items:
|
|
$ref: '#/definitions/models.SummaryItem'
|
|
type: array
|
|
operating_systems:
|
|
items:
|
|
$ref: '#/definitions/models.SummaryItem'
|
|
type: array
|
|
projects:
|
|
items:
|
|
$ref: '#/definitions/models.SummaryItem'
|
|
type: array
|
|
to:
|
|
example: "2006-01-02 15:04:05.000"
|
|
format: date
|
|
type: string
|
|
user_id:
|
|
type: string
|
|
type: object
|
|
models.SummaryItem:
|
|
properties:
|
|
key:
|
|
type: string
|
|
total:
|
|
type: integer
|
|
type: object
|
|
v1.AllTimeData:
|
|
properties:
|
|
is_up_to_date:
|
|
description: true if the stats are up to date; when false, a 202 response
|
|
code is returned and stats will be refreshed soon>
|
|
type: boolean
|
|
range:
|
|
$ref: '#/definitions/v1.AllTimeRange'
|
|
text:
|
|
description: total time logged since account created as human readable string>
|
|
type: string
|
|
total_seconds:
|
|
description: total number of seconds logged since account created
|
|
type: number
|
|
type: object
|
|
v1.AllTimeRange:
|
|
properties:
|
|
end:
|
|
type: string
|
|
end_date:
|
|
type: string
|
|
start:
|
|
type: string
|
|
start_date:
|
|
type: string
|
|
timezone:
|
|
type: string
|
|
type: object
|
|
v1.AllTimeViewModel:
|
|
properties:
|
|
data:
|
|
$ref: '#/definitions/v1.AllTimeData'
|
|
type: object
|
|
v1.BadgeData:
|
|
properties:
|
|
color:
|
|
type: string
|
|
label:
|
|
type: string
|
|
message:
|
|
type: string
|
|
schemaVersion:
|
|
type: integer
|
|
type: object
|
|
v1.Project:
|
|
properties:
|
|
id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
repository:
|
|
type: string
|
|
type: object
|
|
v1.ProjectsViewModel:
|
|
properties:
|
|
data:
|
|
items:
|
|
$ref: '#/definitions/v1.Project'
|
|
type: array
|
|
type: object
|
|
v1.StatsData:
|
|
properties:
|
|
daily_average:
|
|
type: number
|
|
days_including_holidays:
|
|
type: integer
|
|
editors:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesEntry'
|
|
type: array
|
|
end:
|
|
type: string
|
|
languages:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesEntry'
|
|
type: array
|
|
machines:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesEntry'
|
|
type: array
|
|
operating_systems:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesEntry'
|
|
type: array
|
|
projects:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesEntry'
|
|
type: array
|
|
start:
|
|
type: string
|
|
total_seconds:
|
|
type: number
|
|
user_id:
|
|
type: string
|
|
username:
|
|
type: string
|
|
type: object
|
|
v1.StatsViewModel:
|
|
properties:
|
|
data:
|
|
$ref: '#/definitions/v1.StatsData'
|
|
type: object
|
|
v1.SummariesData:
|
|
properties:
|
|
categories:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesEntry'
|
|
type: array
|
|
dependencies:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesEntry'
|
|
type: array
|
|
editors:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesEntry'
|
|
type: array
|
|
grand_total:
|
|
$ref: '#/definitions/v1.SummariesGrandTotal'
|
|
languages:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesEntry'
|
|
type: array
|
|
machines:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesEntry'
|
|
type: array
|
|
operating_systems:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesEntry'
|
|
type: array
|
|
projects:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesEntry'
|
|
type: array
|
|
range:
|
|
$ref: '#/definitions/v1.SummariesRange'
|
|
type: object
|
|
v1.SummariesEntry:
|
|
properties:
|
|
digital:
|
|
type: string
|
|
hours:
|
|
type: integer
|
|
minutes:
|
|
type: integer
|
|
name:
|
|
type: string
|
|
percent:
|
|
type: number
|
|
seconds:
|
|
type: integer
|
|
text:
|
|
type: string
|
|
total_seconds:
|
|
type: number
|
|
type: object
|
|
v1.SummariesGrandTotal:
|
|
properties:
|
|
digital:
|
|
type: string
|
|
hours:
|
|
type: integer
|
|
minutes:
|
|
type: integer
|
|
text:
|
|
type: string
|
|
total_seconds:
|
|
type: number
|
|
type: object
|
|
v1.SummariesRange:
|
|
properties:
|
|
date:
|
|
type: string
|
|
end:
|
|
type: string
|
|
start:
|
|
type: string
|
|
text:
|
|
type: string
|
|
timezone:
|
|
type: string
|
|
type: object
|
|
v1.SummariesViewModel:
|
|
properties:
|
|
data:
|
|
items:
|
|
$ref: '#/definitions/v1.SummariesData'
|
|
type: array
|
|
end:
|
|
type: string
|
|
start:
|
|
type: string
|
|
type: object
|
|
v1.User:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
email:
|
|
type: string
|
|
full_name:
|
|
type: string
|
|
id:
|
|
type: string
|
|
is_email_confirmed:
|
|
type: boolean
|
|
is_email_public:
|
|
type: boolean
|
|
last_heartbeat_at:
|
|
type: string
|
|
last_plugin_name:
|
|
type: string
|
|
last_project:
|
|
type: string
|
|
modified_at:
|
|
type: string
|
|
timezone:
|
|
type: string
|
|
username:
|
|
type: string
|
|
website:
|
|
type: string
|
|
type: object
|
|
v1.UserViewModel:
|
|
properties:
|
|
data:
|
|
$ref: '#/definitions/v1.User'
|
|
type: object
|
|
info:
|
|
contact:
|
|
email: ferdinand@muetsch.io
|
|
name: Ferdinand Mütsch
|
|
url: https://github.com/muety
|
|
description: |-
|
|
REST API to interact with [Wakapi](https://wakapi.dev)
|
|
|
|
## Authentication
|
|
Set header `Authorization` to your API Key encoded as Base64 and prefixed with `Basic`
|
|
**Example:** `Basic ODY2NDhkNzQtMTljNS00NTJiLWJhMDEtZmIzZWM3MGQ0YzJmCg==`
|
|
license:
|
|
name: GPL-3.0
|
|
url: https://github.com/muety/wakapi/blob/master/LICENSE
|
|
title: Wakapi API
|
|
version: "1.0"
|
|
paths:
|
|
/compat/shields/v1/{user}/{interval}/{filter}:
|
|
get:
|
|
description: Retrieve total time for a given entity (e.g. a project) within
|
|
a given range (e.g. one week) in a format compatible with [Shields.io](https://shields.io/endpoint).
|
|
Requires public data access to be allowed.
|
|
operationId: get-badge
|
|
parameters:
|
|
- description: User ID to fetch data for
|
|
in: path
|
|
name: user
|
|
required: true
|
|
type: string
|
|
- description: Interval to aggregate data for
|
|
enum:
|
|
- today
|
|
- yesterday
|
|
- week
|
|
- month
|
|
- year
|
|
- 7_days
|
|
- last_7_days
|
|
- 30_days
|
|
- last_30_days
|
|
- 12_months
|
|
- last_12_months
|
|
- any
|
|
in: path
|
|
name: interval
|
|
required: true
|
|
type: string
|
|
- description: Filter to apply (e.g. 'project:wakapi' or 'language:Go')
|
|
in: path
|
|
name: filter
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/v1.BadgeData'
|
|
summary: Get badge data
|
|
tags:
|
|
- badges
|
|
/compat/wakatime/v1/users/{user}:
|
|
get:
|
|
description: Mimics https://wakatime.com/developers#users
|
|
operationId: get-wakatime-user
|
|
parameters:
|
|
- description: User ID to fetch (or 'current')
|
|
in: path
|
|
name: user
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/v1.UserViewModel'
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Retrieve the given user
|
|
tags:
|
|
- wakatime
|
|
/compat/wakatime/v1/users/{user}/all_time_since_today:
|
|
get:
|
|
description: Mimics https://wakatime.com/developers#all_time_since_today
|
|
operationId: get-all-time
|
|
parameters:
|
|
- description: User ID to fetch data for (or 'current')
|
|
in: path
|
|
name: user
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/v1.AllTimeViewModel'
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Retrieve summary for all time
|
|
tags:
|
|
- wakatime
|
|
/compat/wakatime/v1/users/{user}/heartbeats:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
operationId: post-heartbeat-3
|
|
parameters:
|
|
- description: A single heartbeat
|
|
in: body
|
|
name: heartbeat
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/models.Heartbeat'
|
|
responses:
|
|
"201":
|
|
description: ""
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Push a new heartbeat
|
|
tags:
|
|
- heartbeat
|
|
/compat/wakatime/v1/users/{user}/heartbeats.bulk:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
operationId: post-heartbeat-7
|
|
parameters:
|
|
- description: Multiple heartbeats
|
|
in: body
|
|
name: heartbeat
|
|
required: true
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/models.Heartbeat'
|
|
type: array
|
|
responses:
|
|
"201":
|
|
description: ""
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Push new heartbeats
|
|
tags:
|
|
- heartbeat
|
|
/compat/wakatime/v1/users/{user}/projects:
|
|
get:
|
|
description: Mimics https://wakatime.com/developers#projects
|
|
operationId: get-wakatime-projects
|
|
parameters:
|
|
- description: User ID to fetch data for (or 'current')
|
|
in: path
|
|
name: user
|
|
required: true
|
|
type: string
|
|
- description: Query to filter projects by
|
|
in: query
|
|
name: q
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/v1.ProjectsViewModel'
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Retrieve and fitler the user's projects
|
|
tags:
|
|
- wakatime
|
|
/compat/wakatime/v1/users/{user}/stats/{range}:
|
|
get:
|
|
description: Mimics https://wakatime.com/developers#stats
|
|
operationId: get-wakatimes-tats
|
|
parameters:
|
|
- description: User ID to fetch data for (or 'current')
|
|
in: path
|
|
name: user
|
|
required: true
|
|
type: string
|
|
- description: Range interval identifier
|
|
enum:
|
|
- today
|
|
- yesterday
|
|
- week
|
|
- month
|
|
- year
|
|
- 7_days
|
|
- last_7_days
|
|
- 30_days
|
|
- last_30_days
|
|
- 12_months
|
|
- last_12_months
|
|
- any
|
|
in: query
|
|
name: range
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/v1.StatsViewModel'
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Retrieve statistics for a given user
|
|
tags:
|
|
- wakatime
|
|
/compat/wakatime/v1/users/{user}/summaries:
|
|
get:
|
|
description: Mimics https://wakatime.com/developers#summaries.
|
|
operationId: get-wakatime-summaries
|
|
parameters:
|
|
- description: User ID to fetch data for (or 'current')
|
|
in: path
|
|
name: user
|
|
required: true
|
|
type: string
|
|
- description: Range interval identifier
|
|
enum:
|
|
- today
|
|
- yesterday
|
|
- week
|
|
- month
|
|
- year
|
|
- 7_days
|
|
- last_7_days
|
|
- 30_days
|
|
- last_30_days
|
|
- 12_months
|
|
- last_12_months
|
|
- any
|
|
in: query
|
|
name: range
|
|
type: string
|
|
- description: Start date (e.g. '2021-02-07')
|
|
in: query
|
|
name: start
|
|
type: string
|
|
- description: End date (e.g. '2021-02-08')
|
|
in: query
|
|
name: end
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/v1.SummariesViewModel'
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Retrieve WakaTime-compatible summaries
|
|
tags:
|
|
- wakatime
|
|
/health:
|
|
get:
|
|
operationId: get-health
|
|
produces:
|
|
- text/plain
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
type: string
|
|
summary: Check the application's health status
|
|
tags:
|
|
- misc
|
|
/heartbeat:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
operationId: post-heartbeat
|
|
parameters:
|
|
- description: A single heartbeat
|
|
in: body
|
|
name: heartbeat
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/models.Heartbeat'
|
|
responses:
|
|
"201":
|
|
description: ""
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Push a new heartbeat
|
|
tags:
|
|
- heartbeat
|
|
/heartbeats:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
operationId: post-heartbeat-5
|
|
parameters:
|
|
- description: Multiple heartbeats
|
|
in: body
|
|
name: heartbeat
|
|
required: true
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/models.Heartbeat'
|
|
type: array
|
|
responses:
|
|
"201":
|
|
description: ""
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Push new heartbeats
|
|
tags:
|
|
- heartbeat
|
|
/plugins/errors:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
operationId: post-diagnostics
|
|
parameters:
|
|
- description: A single diagnostics object sent by WakaTime CLI
|
|
in: body
|
|
name: diagnostics
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/models.Diagnostics'
|
|
responses:
|
|
"201":
|
|
description: ""
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Push a new diagnostics object
|
|
tags:
|
|
- diagnostics
|
|
/summary:
|
|
get:
|
|
operationId: get-summary
|
|
parameters:
|
|
- description: Interval identifier
|
|
enum:
|
|
- today
|
|
- yesterday
|
|
- week
|
|
- month
|
|
- year
|
|
- 7_days
|
|
- last_7_days
|
|
- 30_days
|
|
- last_30_days
|
|
- 12_months
|
|
- last_12_months
|
|
- any
|
|
in: query
|
|
name: interval
|
|
type: string
|
|
- description: Start date (e.g. '2021-02-07')
|
|
in: query
|
|
name: from
|
|
type: string
|
|
- description: End date (e.g. '2021-02-08')
|
|
in: query
|
|
name: to
|
|
type: string
|
|
- description: Whether to recompute the summary from raw heartbeat or use cache
|
|
in: query
|
|
name: recompute
|
|
type: boolean
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/models.Summary'
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Retrieve a summary
|
|
tags:
|
|
- summary
|
|
/users/{user}/heartbeats:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
operationId: post-heartbeat-4
|
|
parameters:
|
|
- description: A single heartbeat
|
|
in: body
|
|
name: heartbeat
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/models.Heartbeat'
|
|
responses:
|
|
"201":
|
|
description: ""
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Push a new heartbeat
|
|
tags:
|
|
- heartbeat
|
|
/users/{user}/heartbeats.bulk:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
operationId: post-heartbeat-8
|
|
parameters:
|
|
- description: Multiple heartbeats
|
|
in: body
|
|
name: heartbeat
|
|
required: true
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/models.Heartbeat'
|
|
type: array
|
|
responses:
|
|
"201":
|
|
description: ""
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Push new heartbeats
|
|
tags:
|
|
- heartbeat
|
|
/v1/users/{user}/heartbeats:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
operationId: post-heartbeat-2
|
|
parameters:
|
|
- description: A single heartbeat
|
|
in: body
|
|
name: heartbeat
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/models.Heartbeat'
|
|
responses:
|
|
"201":
|
|
description: ""
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Push a new heartbeat
|
|
tags:
|
|
- heartbeat
|
|
/v1/users/{user}/heartbeats.bulk:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
operationId: post-heartbeat-6
|
|
parameters:
|
|
- description: Multiple heartbeats
|
|
in: body
|
|
name: heartbeat
|
|
required: true
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/models.Heartbeat'
|
|
type: array
|
|
responses:
|
|
"201":
|
|
description: ""
|
|
security:
|
|
- ApiKeyAuth: []
|
|
summary: Push new heartbeats
|
|
tags:
|
|
- heartbeat
|
|
securityDefinitions:
|
|
ApiKeyAuth:
|
|
in: header
|
|
name: Authorization
|
|
type: apiKey
|
|
swagger: "2.0"
|