{
    "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"
        }
    }
}