{ "swagger": "2.0", "info": { "description": "REST API to interact with [Wakapi](https://wakapi.dev)\n\n## Authentication\nSet header `Authorization` to your API Key encoded as Base64 and prefixed with `Basic`\n**Example:** `Basic ODY2NDhkNzQtMTljNS00NTJiLWJhMDEtZmIzZWM3MGQ0YzJmCg==`", "title": "Wakapi API", "contact": { "name": "Ferdinand Mütsch", "url": "https://github.com/muety", "email": "ferdinand@muetsch.io" }, "license": { "name": "GPL-3.0", "url": "https://github.com/muety/wakapi/blob/master/LICENSE" }, "version": "1.0" }, "basePath": "/api", "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.", "produces": [ "application/json" ], "tags": [ "badges" ], "summary": "Get badge data", "operationId": "get-badge", "parameters": [ { "type": "string", "description": "User ID to fetch data for", "name": "user", "in": "path", "required": true }, { "enum": [ "today", "yesterday", "week", "month", "year", "7_days", "last_7_days", "30_days", "last_30_days", "12_months", "last_12_months", "any" ], "type": "string", "description": "Interval to aggregate data for", "name": "interval", "in": "path", "required": true }, { "type": "string", "description": "Filter to apply (e.g. 'project:wakapi' or 'language:Go')", "name": "filter", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/v1.BadgeData" } } } } }, "/compat/wakatime/v1/users/{user}/all_time_since_today": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Mimics https://wakatime.com/developers#all_time_since_today", "produces": [ "application/json" ], "tags": [ "wakatime" ], "summary": "Retrieve summary for all time", "operationId": "get-all-time", "parameters": [ { "type": "string", "description": "User ID to fetch data for (or 'current')", "name": "user", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/v1.AllTimeViewModel" } } } } }, "/compat/wakatime/v1/users/{user}/summaries": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Mimics https://wakatime.com/developers#summaries.", "produces": [ "application/json" ], "tags": [ "wakatime" ], "summary": "Retrieve WakaTime-compatible summaries", "operationId": "get-wakatime-summaries", "parameters": [ { "type": "string", "description": "User ID to fetch data for (or 'current')", "name": "user", "in": "path", "required": true }, { "enum": [ "today", "yesterday", "week", "month", "year", "7_days", "last_7_days", "30_days", "last_30_days", "12_months", "last_12_months", "any" ], "type": "string", "description": "Range interval identifier", "name": "range", "in": "query" }, { "type": "string", "description": "Start date (e.g. '2021-02-07')", "name": "start", "in": "query" }, { "type": "string", "description": "End date (e.g. '2021-02-08')", "name": "end", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/v1.SummariesViewModel" } } } } }, "/health": { "get": { "produces": [ "text/plain" ], "tags": [ "misc" ], "summary": "Check the application's health status", "operationId": "get-health", "responses": { "200": { "description": "OK", "schema": { "type": "string" } } } } }, "/heartbeat": { "post": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "application/json" ], "tags": [ "heartbeat" ], "summary": "Push a new heartbeat", "operationId": "post-heartbeat", "parameters": [ { "description": "A heartbeat", "name": "heartbeat", "in": "body", "required": true, "schema": { "$ref": "#/definitions/models.Heartbeat" } } ], "responses": { "201": { "description": "" } } } }, "/summary": { "get": { "security": [ { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "summary" ], "summary": "Retrieve a summary", "operationId": "get-summary", "parameters": [ { "enum": [ "today", "yesterday", "week", "month", "year", "7_days", "last_7_days", "30_days", "last_30_days", "12_months", "last_12_months", "any" ], "type": "string", "description": "Interval identifier", "name": "interval", "in": "query" }, { "type": "string", "description": "Start date (e.g. '2021-02-07')", "name": "from", "in": "query" }, { "type": "string", "description": "End date (e.g. '2021-02-08')", "name": "to", "in": "query" }, { "type": "boolean", "description": "Whether to recompute the summary from raw heartbeat or use cache", "name": "recompute", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Summary" } } } } }, "/v1/users/{user}/stats/{range}": { "get": { "description": "Mimics https://wakatime.com/developers#stats. Requires public data access to be allowed.", "produces": [ "application/json" ], "tags": [ "wakatime" ], "summary": "Retrieve stats", "operationId": "get-stats", "parameters": [ { "type": "string", "description": "User ID to fetch data for (or 'current')", "name": "user", "in": "path", "required": true }, { "enum": [ "today", "yesterday", "week", "month", "year", "7_days", "last_7_days", "30_days", "last_30_days", "12_months", "last_12_months", "any" ], "type": "string", "description": "Range interval identifier", "name": "range", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/v1.StatsViewModel" } } } } } }, "definitions": { "models.Heartbeat": { "type": "object", "properties": { "branch": { "type": "string" }, "category": { "type": "string" }, "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" } } }, "models.Summary": { "type": "object", "properties": { "editors": { "type": "array", "items": { "$ref": "#/definitions/models.SummaryItem" } }, "from": { "type": "string", "format": "date", "example": "2006-01-02 15:04:05.000" }, "languages": { "type": "array", "items": { "$ref": "#/definitions/models.SummaryItem" } }, "machines": { "type": "array", "items": { "$ref": "#/definitions/models.SummaryItem" } }, "operating_systems": { "type": "array", "items": { "$ref": "#/definitions/models.SummaryItem" } }, "projects": { "type": "array", "items": { "$ref": "#/definitions/models.SummaryItem" } }, "to": { "type": "string", "format": "date", "example": "2006-01-02 15:04:05.000" }, "user_id": { "type": "string" } } }, "models.SummaryItem": { "type": "object", "properties": { "key": { "type": "string" }, "total": { "type": "integer" } } }, "v1.AllTimeData": { "type": "object", "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\u003e", "type": "boolean" }, "text": { "description": "total time logged since account created as human readable string\u003e", "type": "string" }, "total_seconds": { "description": "total number of seconds logged since account created", "type": "number" } } }, "v1.AllTimeViewModel": { "type": "object", "properties": { "data": { "$ref": "#/definitions/v1.AllTimeData" } } }, "v1.BadgeData": { "type": "object", "properties": { "color": { "type": "string" }, "label": { "type": "string" }, "message": { "type": "string" }, "schemaVersion": { "type": "integer" } } }, "v1.StatsData": { "type": "object", "properties": { "daily_average": { "type": "number" }, "days_including_holidays": { "type": "integer" }, "editors": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesEntry" } }, "end": { "type": "string" }, "languages": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesEntry" } }, "machines": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesEntry" } }, "operating_systems": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesEntry" } }, "projects": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesEntry" } }, "start": { "type": "string" }, "total_seconds": { "type": "number" }, "user_id": { "type": "string" }, "username": { "type": "string" } } }, "v1.StatsViewModel": { "type": "object", "properties": { "data": { "$ref": "#/definitions/v1.StatsData" } } }, "v1.SummariesData": { "type": "object", "properties": { "categories": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesEntry" } }, "dependencies": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesEntry" } }, "editors": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesEntry" } }, "grand_total": { "$ref": "#/definitions/v1.SummariesGrandTotal" }, "languages": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesEntry" } }, "machines": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesEntry" } }, "operating_systems": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesEntry" } }, "projects": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesEntry" } }, "range": { "$ref": "#/definitions/v1.SummariesRange" } } }, "v1.SummariesEntry": { "type": "object", "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" } } }, "v1.SummariesGrandTotal": { "type": "object", "properties": { "digital": { "type": "string" }, "hours": { "type": "integer" }, "minutes": { "type": "integer" }, "text": { "type": "string" }, "total_seconds": { "type": "number" } } }, "v1.SummariesRange": { "type": "object", "properties": { "date": { "type": "string" }, "end": { "type": "string" }, "start": { "type": "string" }, "text": { "type": "string" }, "timezone": { "type": "string" } } }, "v1.SummariesViewModel": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/v1.SummariesData" } }, "end": { "type": "string" }, "start": { "type": "string" } } } }, "securityDefinitions": { "ApiKeyAuth": { "type": "apiKey", "name": "Authorization", "in": "header" } } }