Skip to content

Instantly share code, notes, and snippets.

@0x7466
Created November 9, 2023 18:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 0x7466/0a435c207d1d57ef90aaa91303b82119 to your computer and use it in GitHub Desktop.
Save 0x7466/0a435c207d1d57ef90aaa91303b82119 to your computer and use it in GitHub Desktop.
{
"openapi": "3.0.0",
"info": {
"title": "Kimai - API Docs",
"description": "JSON API for the Kimai time-tracking software: [API documentation](https://www.kimai.org/documentation/rest-api.html), [Swagger definition file](doc.json)\n",
"version": "0.7"
},
"paths": {
"/api/actions/timesheet/{id}/{view}/{locale}": {
"get": {
"tags": [
"Actions"
],
"summary": "Get all item actions for the given Timesheet [for internal use]",
"operationId": "get_get_timesheet_actions",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Timesheet ID to fetch",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "view",
"in": "path",
"description": "View to display the actions at (e.g. index, custom)",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "locale",
"in": "path",
"description": "Language to translate the action title to (e.g. de, en)",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Returns item actions for the timesheet",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PageAction"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/actions/activity/{id}/{view}/{locale}": {
"get": {
"tags": [
"Actions"
],
"summary": "Get all item actions for the given Activity [for internal use]",
"operationId": "get_get_activity_actions",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Activity ID to fetch",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "view",
"in": "path",
"description": "View to display the actions at (e.g. index, custom)",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "locale",
"in": "path",
"description": "Language to translate the action title to (e.g. de, en)",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Returns item actions for the activity",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PageAction"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/actions/project/{id}/{view}/{locale}": {
"get": {
"tags": [
"Actions"
],
"summary": "Get all item actions for the given Project [for internal use]",
"operationId": "get_get_project_actions",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Project ID to fetch",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "view",
"in": "path",
"description": "View to display the actions at (e.g. index, custom)",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "locale",
"in": "path",
"description": "Language to translate the action title to (e.g. de, en)",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Returns item actions for the project",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PageAction"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/actions/customer/{id}/{view}/{locale}": {
"get": {
"tags": [
"Actions"
],
"summary": "Get all item actions for the given Customer [for internal use]",
"operationId": "get_get_customer_actions",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Customer ID to fetch",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "view",
"in": "path",
"description": "View to display the actions at (e.g. index, custom)",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "locale",
"in": "path",
"description": "Language to translate the action title to (e.g. de, en)",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Returns item actions for the customer",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PageAction"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/activities": {
"get": {
"tags": [
"Activity"
],
"summary": "Returns a collection of activities (which are visible to the user)",
"operationId": "get_get_activities",
"parameters": [
{
"name": "project",
"in": "query",
"description": "Project ID to filter activities",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "\\d+"
}
},
{
"name": "projects[]",
"in": "query",
"description": "List of project IDs to filter activities, e.g.: projects[]=1&projects[]=2",
"required": false,
"allowEmptyValue": true,
"explode": true,
"schema": {
"type": "array",
"items": {},
"default": [],
"pattern": "\\d+"
}
},
{
"name": "visible",
"in": "query",
"description": "Visibility status to filter activities: 1=visible, 2=hidden, 3=all",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": 1,
"pattern": "1|2|3"
}
},
{
"name": "globals",
"in": "query",
"description": "Use if you want to fetch only global activities. Allowed values: true (default: false)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null
}
},
{
"name": "orderBy",
"in": "query",
"description": "The field by which results will be ordered. Allowed values: id, name, project (default: name)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "id|name|project"
}
},
{
"name": "order",
"in": "query",
"description": "The result order. Allowed values: ASC, DESC (default: ASC)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "ASC|DESC"
}
},
{
"name": "term",
"in": "query",
"description": "Free search term",
"required": false,
"allowEmptyValue": false,
"schema": {
"type": "string",
"default": null
}
}
],
"responses": {
"200": {
"description": "Returns a collection of activities",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ActivityCollection"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"post": {
"tags": [
"Activity"
],
"summary": "Creates a new activity",
"description": "Creates a new activity and returns it afterwards",
"operationId": "post_post_activity",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActivityEditForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the new created activity",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActivityEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/activities/{id}": {
"get": {
"tags": [
"Activity"
],
"summary": "Returns one activity",
"operationId": "get_get_activity",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Activity ID to fetch",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Returns one activity entity",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActivityEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"patch": {
"tags": [
"Activity"
],
"summary": "Update an existing activity",
"description": "Update an existing activity, you can pass all or just a subset of all attributes",
"operationId": "patch_patch_activity",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Activity ID to update",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActivityEditForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the updated activity",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActivityEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/activities/{id}/meta": {
"patch": {
"tags": [
"Activity"
],
"summary": "Sets the value of a meta-field for an existing activity",
"operationId": "patch_app_api_activity_meta",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Activity record ID to set the meta-field value for",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"default": null
},
"value": {
"type": "string",
"default": null
}
},
"type": "object"
}
}
}
},
"responses": {
"200": {
"description": "Sets the value of an existing/configured meta-field. You cannot create unknown meta-fields, if the given name is not a configured meta-field, this will return an exception.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActivityEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/activities/{id}/rates": {
"get": {
"tags": [
"Activity"
],
"summary": "Returns a collection of all rates for one activity",
"operationId": "get_get_activity_rates",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The activity whose rates will be returned",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Returns a collection of activity rate entities",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ActivityRate"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"post": {
"tags": [
"Activity"
],
"summary": "Adds a new rate to an activity",
"operationId": "post_post_activity_rate",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The activity to add the rate for",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActivityRateForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the new created rate",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActivityRate"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/activities/{id}/rates/{rateId}": {
"delete": {
"tags": [
"Activity"
],
"summary": "Deletes one rate for an activity",
"operationId": "delete_delete_activity_rate",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The activity whose rate will be removed",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "rateId",
"in": "path",
"description": "The rate to remove",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"204": {
"description": "Returns no content: 204 on successful delete"
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/config/timesheet": {
"get": {
"tags": [
"Default"
],
"summary": "Returns the timesheet configuration",
"operationId": "get_app_api_configuration_timesheetconfig",
"responses": {
"200": {
"description": "Returns the instance specific timesheet configuration",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetConfig"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/customers": {
"get": {
"tags": [
"Customer"
],
"summary": "Returns a collection of customers (which are visible to the user)",
"operationId": "get_get_customers",
"parameters": [
{
"name": "visible",
"in": "query",
"description": "Visibility status to filter customers: 1=visible, 2=hidden, 3=both",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": 1,
"pattern": "1|2|3"
}
},
{
"name": "order",
"in": "query",
"description": "The result order. Allowed values: ASC, DESC (default: ASC)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "ASC|DESC"
}
},
{
"name": "orderBy",
"in": "query",
"description": "The field by which results will be ordered. Allowed values: id, name (default: name)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "id|name"
}
},
{
"name": "term",
"in": "query",
"description": "Free search term",
"required": false,
"allowEmptyValue": false,
"schema": {
"type": "string",
"default": null
}
}
],
"responses": {
"200": {
"description": "Returns a collection of customers",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomerCollection"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"post": {
"tags": [
"Customer"
],
"summary": "Creates a new customer",
"description": "Creates a new customer and returns it afterwards",
"operationId": "post_post_customer",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CustomerEditForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the new created customer",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CustomerEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/customers/{id}": {
"get": {
"tags": [
"Customer"
],
"summary": "Returns one customer",
"operationId": "get_get_customer",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Returns one customer entity",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CustomerEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"patch": {
"tags": [
"Customer"
],
"summary": "Update an existing customer",
"description": "Update an existing customer, you can pass all or just a subset of all attributes",
"operationId": "patch_patch_customer",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Customer ID to update",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CustomerEditForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the updated customer",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CustomerEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/customers/{id}/meta": {
"patch": {
"tags": [
"Customer"
],
"summary": "Sets the value of a meta-field for an existing customer",
"operationId": "patch_app_api_customer_meta",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Customer record ID to set the meta-field value for",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"default": null
},
"value": {
"type": "string",
"default": null
}
},
"type": "object"
}
}
}
},
"responses": {
"200": {
"description": "Sets the value of an existing/configured meta-field. You cannot create unknown meta-fields, if the given name is not a configured meta-field, this will return an exception.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CustomerEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/customers/{id}/rates": {
"get": {
"tags": [
"Customer"
],
"summary": "Returns a collection of all rates for one customer",
"operationId": "get_get_customer_rates",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The customer whose rates will be returned",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Returns a collection of customer rate entities",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomerRate"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"post": {
"tags": [
"Customer"
],
"summary": "Adds a new rate to a customer",
"operationId": "post_post_customer_rate",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The customer to add the rate for",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CustomerRateForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the new created rate",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CustomerRate"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/customers/{id}/rates/{rateId}": {
"delete": {
"tags": [
"Customer"
],
"summary": "Deletes one rate for a customer",
"operationId": "delete_delete_customer_rate",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The customer whose rate will be removed",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "rateId",
"in": "path",
"description": "The rate to remove",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"204": {
"description": "Returns no content: 204 on successful delete"
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/projects": {
"get": {
"tags": [
"Project"
],
"summary": "Returns a collection of projects (which are visible to the user)",
"operationId": "get_get_projects",
"parameters": [
{
"name": "customer",
"in": "query",
"description": "Customer ID to filter projects",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "\\d+"
}
},
{
"name": "customers[]",
"in": "query",
"description": "List of customer IDs to filter, e.g.: customers[]=1&customers[]=2",
"required": false,
"allowEmptyValue": true,
"explode": true,
"schema": {
"type": "array",
"items": {},
"default": [],
"pattern": "\\d+"
}
},
{
"name": "visible",
"in": "query",
"description": "Visibility status to filter projects: 1=visible, 2=hidden, 3=both",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": 1,
"pattern": "1|2|3"
}
},
{
"name": "start",
"in": "query",
"description": "Only projects that started before this date will be included. Allowed format: HTML5 (default: now, if end is also empty)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null
}
},
{
"name": "end",
"in": "query",
"description": "Only projects that ended after this date will be included. Allowed format: HTML5 (default: now, if start is also empty)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null
}
},
{
"name": "ignoreDates",
"in": "query",
"description": "If set, start and end are completely ignored. Allowed values: 1 (default: off)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null
}
},
{
"name": "globalActivities",
"in": "query",
"description": "If given, filters projects by their 'global activity' support. Allowed values: 1 (supports global activities) and 0 (without global activities) (default: all)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "0|1"
}
},
{
"name": "order",
"in": "query",
"description": "The result order. Allowed values: ASC, DESC (default: ASC)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "ASC|DESC"
}
},
{
"name": "orderBy",
"in": "query",
"description": "The field by which results will be ordered. Allowed values: id, name, customer (default: name)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "id|name|customer"
}
},
{
"name": "term",
"in": "query",
"description": "Free search term",
"required": false,
"allowEmptyValue": false,
"schema": {
"type": "string",
"default": null
}
}
],
"responses": {
"200": {
"description": "Returns a collection of projects",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProjectCollection"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"post": {
"tags": [
"Project"
],
"summary": "Creates a new project",
"description": "Creates a new project and returns it afterwards",
"operationId": "post_post_project",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectEditForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the new created project",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/projects/{id}": {
"get": {
"tags": [
"Project"
],
"summary": "Returns one project",
"operationId": "get_get_project",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Returns one project entity",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"patch": {
"tags": [
"Project"
],
"summary": "Update an existing project",
"description": "Update an existing project, you can pass all or just a subset of all attributes",
"operationId": "patch_patch_project",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Project ID to update",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectEditForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the updated project",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/projects/{id}/meta": {
"patch": {
"tags": [
"Project"
],
"summary": "Sets the value of a meta-field for an existing project",
"operationId": "patch_app_api_project_meta",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Project record ID to set the meta-field value for",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"default": null
},
"value": {
"type": "string",
"default": null
}
},
"type": "object"
}
}
}
},
"responses": {
"200": {
"description": "Sets the value of an existing/configured meta-field. You cannot create unknown meta-fields, if the given name is not a configured meta-field, this will return an exception.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/projects/{id}/rates": {
"get": {
"tags": [
"Project"
],
"summary": "Returns a collection of all rates for one project",
"operationId": "get_get_project_rates",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The project whose rates will be returned",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Returns a collection of project rate entities",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProjectRate"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"post": {
"tags": [
"Project"
],
"summary": "Adds a new rate to a project",
"operationId": "post_post_project_rate",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The project to add the rate for",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectRateForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the new created rate",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectRate"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/projects/{id}/rates/{rateId}": {
"delete": {
"tags": [
"Project"
],
"summary": "Deletes one rate for a project",
"operationId": "delete_delete_project_rate",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The project whose rate will be removed",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "rateId",
"in": "path",
"description": "The rate to remove",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"204": {
"description": "Returns no content: 204 on successful delete"
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/ping": {
"get": {
"tags": [
"Default"
],
"summary": "A testing route for the API",
"operationId": "get_app_api_status_ping",
"responses": {
"200": {
"description": "A simple route that returns a 'pong', which you can use for testing the API",
"content": {
"application/json": {
"schema": {},
"example": "{'message': 'pong'}"
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/version": {
"get": {
"tags": [
"Default"
],
"summary": "Returns information about the Kimai release",
"operationId": "get_app_api_status_version",
"responses": {
"200": {
"description": "Returns version information about the current release",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Version"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/plugins": {
"get": {
"tags": [
"Default"
],
"summary": "Returns information about installed Plugins",
"operationId": "get_app_api_status_plugin",
"responses": {
"200": {
"description": "Returns a list of plugin names and versions",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Plugin"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/tags": {
"get": {
"tags": [
"Tag"
],
"summary": "Fetch all existing tags",
"operationId": "get_get_tags",
"parameters": [
{
"name": "name",
"in": "query",
"description": "Search term to filter tag list",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null
}
}
],
"responses": {
"200": {
"description": "Returns the collection of all existing tags as string array",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"post": {
"tags": [
"Tag"
],
"summary": "Creates a new tag",
"description": "Creates a new tag and returns it afterwards",
"operationId": "post_post_tag",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TagEditForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the new created tag",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TagEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/tags/{id}": {
"delete": {
"tags": [
"Tag"
],
"summary": "Delete a tag",
"operationId": "delete_delete_tag",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Tag ID to delete",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"description": "HTTP code 204 for a successful delete"
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/teams": {
"get": {
"tags": [
"Team"
],
"summary": "Fetch all existing teams (which are visible to the user)",
"operationId": "get_get_teams",
"responses": {
"200": {
"description": "Returns the collection of teams",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TeamCollection"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"post": {
"tags": [
"Team"
],
"summary": "Creates a new team",
"description": "Creates a new team and returns it afterwards",
"operationId": "post_post_team",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TeamEditForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the new created team",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Team"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/teams/{id}": {
"get": {
"tags": [
"Team"
],
"summary": "Returns one team",
"operationId": "get_get_team",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Returns one team entity",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Team"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"delete": {
"tags": [
"Team"
],
"summary": "Delete a team",
"operationId": "delete_delete_team",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Team ID to delete",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"204": {
"description": "Delete one team"
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"patch": {
"tags": [
"Team"
],
"summary": "Update an existing team",
"description": "Update an existing team, you can pass all or just a subset of all attributes (passing members will replace all existing ones)",
"operationId": "patch_patch_team",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Team ID to update",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TeamEditForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the updated team",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Team"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/teams/{id}/members/{userId}": {
"post": {
"tags": [
"Team"
],
"summary": "Add a new member to a team",
"operationId": "post_post_team_member",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The team which will receive the new member",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "userId",
"in": "path",
"description": "The team member to add (User ID)",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Adds a new user to a team.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Team"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"delete": {
"tags": [
"Team"
],
"summary": "Removes a member from the team",
"operationId": "delete_delete_team_member",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The team from which the member will be removed",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "userId",
"in": "path",
"description": "The team member to remove (User ID)",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Removes a user from the team. The teamlead cannot be removed.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Team"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/teams/{id}/customers/{customerId}": {
"post": {
"tags": [
"Team"
],
"summary": "Grant the team access to a customer",
"operationId": "post_post_team_customer",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The team that is granted access",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "customerId",
"in": "path",
"description": "The customer to grant acecess to (Customer ID)",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Adds a new customer to a team.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Team"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"delete": {
"tags": [
"Team"
],
"summary": "Revokes access for a customer from a team",
"operationId": "delete_delete_team_customer",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The team whose permission will be revoked",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "customerId",
"in": "path",
"description": "The customer to remove (Customer ID)",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Removes a customer from the team.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Team"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/teams/{id}/projects/{projectId}": {
"post": {
"tags": [
"Team"
],
"summary": "Grant the team access to a project",
"operationId": "post_post_team_project",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The team that is granted access",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "projectId",
"in": "path",
"description": "The project to grant acecess to (Project ID)",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Adds a new project to a team.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Team"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"delete": {
"tags": [
"Team"
],
"summary": "Revokes access for a project from a team",
"operationId": "delete_delete_team_project",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The team whose permission will be revoked",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "projectId",
"in": "path",
"description": "The project to remove (Project ID)",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Removes a project from the team.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Team"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/teams/{id}/activities/{activityId}": {
"post": {
"tags": [
"Team"
],
"summary": "Grant the team access to an activity",
"operationId": "post_post_team_activity",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The team that is granted access",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "activityId",
"in": "path",
"description": "The activity to grant acecess to (Activity ID)",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Adds a new activity to a team.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Team"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"delete": {
"tags": [
"Team"
],
"summary": "Revokes access for an activity from a team",
"operationId": "delete_delete_team_activity",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The team whose permission will be revoked",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
},
{
"name": "activityId",
"in": "path",
"description": "The activity to remove (Activity ID)",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Removes a activity from the team.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Team"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/timesheets": {
"get": {
"tags": [
"Timesheet"
],
"summary": "Returns a collection of timesheet records (which are visible to the user)",
"operationId": "get_get_timesheets",
"parameters": [
{
"name": "user",
"in": "query",
"description": "User ID to filter timesheets. Needs permission 'view_other_timesheet', pass 'all' to fetch data for all user (default: current user)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "\\d+|all"
}
},
{
"name": "users[]",
"in": "query",
"description": "List of user IDs to filter, e.g.: users[]=1&users[]=2 (ignored if user=all)",
"required": false,
"allowEmptyValue": true,
"explode": true,
"schema": {
"type": "array",
"items": {},
"default": [],
"pattern": "\\d+"
}
},
{
"name": "customer",
"in": "query",
"description": "Customer ID to filter timesheets",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "\\d+"
}
},
{
"name": "customers[]",
"in": "query",
"description": "List of customer IDs to filter, e.g.: customers[]=1&customers[]=2",
"required": false,
"allowEmptyValue": true,
"explode": true,
"schema": {
"type": "array",
"items": {},
"default": [],
"pattern": "\\d+"
}
},
{
"name": "project",
"in": "query",
"description": "Project ID to filter timesheets",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "\\d+"
}
},
{
"name": "projects[]",
"in": "query",
"description": "List of project IDs to filter, e.g.: projects[]=1&projects[]=2",
"required": false,
"allowEmptyValue": true,
"explode": true,
"schema": {
"type": "array",
"items": {},
"default": [],
"pattern": "\\d+"
}
},
{
"name": "activity",
"in": "query",
"description": "Activity ID to filter timesheets",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "\\d+"
}
},
{
"name": "activities[]",
"in": "query",
"description": "List of activity IDs to filter, e.g.: activities[]=1&activities[]=2",
"required": false,
"allowEmptyValue": true,
"explode": true,
"schema": {
"type": "array",
"items": {},
"default": [],
"pattern": "\\d+"
}
},
{
"name": "page",
"in": "query",
"description": "The page to display, renders a 404 if not found (default: 1)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "\\d+"
}
},
{
"name": "size",
"in": "query",
"description": "The amount of entries for each page (default: 50)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "\\d+"
}
},
{
"name": "tags[]",
"in": "query",
"description": "List of tag names, e.g. tags[]=bar&tags[]=foo",
"required": false,
"allowEmptyValue": true,
"explode": true,
"schema": {
"type": "array",
"items": {},
"default": []
}
},
{
"name": "orderBy",
"in": "query",
"description": "The field by which results will be ordered. Allowed values: id, begin, end, rate (default: begin)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "id|begin|end|rate"
}
},
{
"name": "order",
"in": "query",
"description": "The result order. Allowed values: ASC, DESC (default: DESC)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "ASC|DESC"
}
},
{
"name": "begin",
"in": "query",
"description": "Only records after this date will be included (format: HTML5)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null
}
},
{
"name": "end",
"in": "query",
"description": "Only records before this date will be included (format: HTML5)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null
}
},
{
"name": "exported",
"in": "query",
"description": "Use this flag if you want to filter for export state. Allowed values: 0=not exported, 1=exported (default: all)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "0|1"
}
},
{
"name": "active",
"in": "query",
"description": "Filter for running/active records. Allowed values: 0=stopped, 1=active (default: all)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "0|1"
}
},
{
"name": "billable",
"in": "query",
"description": "Filter for non-/billable records. Allowed values: 0=non-billable, 1=billable (default: all)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "0|1"
}
},
{
"name": "full",
"in": "query",
"description": "Allows to fetch fully serialized objects including subresources. Allowed values: true (default: false)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null
}
},
{
"name": "term",
"in": "query",
"description": "Free search term",
"required": false,
"allowEmptyValue": false,
"schema": {
"type": "string",
"default": null
}
},
{
"name": "modified_after",
"in": "query",
"description": "Only records changed after this date will be included (format: HTML5). Available since Kimai 1.10 and works only for records that were created/updated since then.",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null
}
}
],
"responses": {
"200": {
"description": "Returns a collection of timesheet records. The datetime fields are given in the users local time including the timezone offset (ISO-8601).",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TimesheetCollection"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"post": {
"tags": [
"Timesheet"
],
"summary": "Creates a new timesheet record",
"description": "Creates a new timesheet record for the current user and returns it afterwards.",
"operationId": "post_post_timesheet",
"parameters": [
{
"name": "full",
"in": "query",
"description": "Allows to fetch fully serialized objects including subresources (TimesheetExpanded). Allowed values: true (default: false)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetEditForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the new created timesheet",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/timesheets/{id}": {
"get": {
"tags": [
"Timesheet"
],
"summary": "Returns one timesheet record",
"operationId": "get_get_timesheet",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Timesheet record ID to fetch",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Returns one timesheet record. Be aware that the datetime fields are given in the users local time including the timezone offset via ISO 8601.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"delete": {
"tags": [
"Timesheet"
],
"summary": "Delete an existing timesheet record",
"operationId": "delete_delete_timesheet",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Timesheet record ID to delete",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"204": {
"description": "Delete one timesheet record"
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"patch": {
"tags": [
"Timesheet"
],
"summary": "Update an existing timesheet record",
"description": "Update an existing timesheet record, you can pass all or just a subset of the attributes.",
"operationId": "patch_patch_timesheet",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Timesheet record ID to update",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetEditForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the updated timesheet",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/timesheets/recent": {
"get": {
"tags": [
"Timesheet"
],
"summary": "Returns the collection of recent user activities",
"operationId": "get_recent_timesheet",
"parameters": [
{
"name": "begin",
"in": "query",
"description": "Only records after this date will be included. Default: today - 1 year (format: HTML5)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null
}
},
{
"name": "size",
"in": "query",
"description": "The amount of entries (default: 10)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Returns the collection of recent user activities (always the latest entry of a unique working set grouped by customer, project and activity)",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TimesheetCollectionExpanded"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/timesheets/active": {
"get": {
"tags": [
"Timesheet"
],
"summary": "Returns the collection of active timesheet records",
"operationId": "get_active_timesheet",
"responses": {
"200": {
"description": "Returns the collection of active timesheet records for the current user",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TimesheetCollectionExpanded"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/timesheets/{id}/stop": {
"get": {
"tags": [
"Timesheet"
],
"summary": "Stops an active timesheet record.",
"description": "This route is available via GET and PATCH, as users over and over again run into errors when stopping.\nLikely caused by a slow JS engine and a fast-click after page reload.",
"operationId": "get_stop_timesheet_get",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Timesheet record ID to stop",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Stops an active timesheet record and returns it afterwards.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"patch": {
"tags": [
"Timesheet"
],
"summary": "Stops an active timesheet record.",
"description": "This route is available via GET and PATCH, as users over and over again run into errors when stopping.\nLikely caused by a slow JS engine and a fast-click after page reload.",
"operationId": "patch_stop_timesheet",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Timesheet record ID to stop",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Stops an active timesheet record and returns it afterwards.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/timesheets/{id}/restart": {
"get": {
"tags": [
"Timesheet"
],
"summary": "Restarts a previously stopped timesheet record for the current user",
"operationId": "get_restart_timesheet_get",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Timesheet record ID to restart",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"properties": {
"copy": {
"type": "string",
"default": null,
"pattern": "all"
},
"begin": {
"type": "string",
"default": null
}
},
"type": "object"
}
}
}
},
"responses": {
"200": {
"description": "Restarts a timesheet record for the same customer, project, activity combination. The current user will be the owner of the new record. Kimai tries to stop running records, which is expected to fail depending on the configured rules. Data will be copied from the original record if requested.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"patch": {
"tags": [
"Timesheet"
],
"summary": "Restarts a previously stopped timesheet record for the current user",
"operationId": "patch_restart_timesheet",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Timesheet record ID to restart",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"properties": {
"copy": {
"type": "string",
"default": null,
"pattern": "all"
},
"begin": {
"type": "string",
"default": null
}
},
"type": "object"
}
}
}
},
"responses": {
"200": {
"description": "Restarts a timesheet record for the same customer, project, activity combination. The current user will be the owner of the new record. Kimai tries to stop running records, which is expected to fail depending on the configured rules. Data will be copied from the original record if requested.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/timesheets/{id}/duplicate": {
"patch": {
"tags": [
"Timesheet"
],
"summary": "Duplicates an existing timesheet record",
"operationId": "patch_duplicate_timesheet",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Timesheet record ID to duplicate",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Duplicates a timesheet record, resetting the export state only.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/timesheets/{id}/export": {
"patch": {
"tags": [
"Timesheet"
],
"summary": "Switch the export state of a timesheet record to (un-)lock it",
"operationId": "patch_export_timesheet",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Timesheet record ID to switch export state",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Switches the exported state on the record and therefor locks / unlocks it for further updates. Needs edit_export_*_timesheet permission.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/timesheets/{id}/meta": {
"patch": {
"tags": [
"Timesheet"
],
"summary": "Sets the value of a meta-field for an existing timesheet.",
"operationId": "patch_app_api_timesheet_meta",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Timesheet record ID to set the meta-field value for",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"default": null
},
"value": {
"type": "string",
"default": null
}
},
"type": "object"
}
}
}
},
"responses": {
"200": {
"description": "Sets the value of an existing/configured meta-field. You cannot create unknown meta-fields, if the given name is not a configured meta-field, this will return an exception.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimesheetEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/users": {
"get": {
"tags": [
"User"
],
"summary": "Returns the collection of users (which are visible to the user)",
"operationId": "get_get_users",
"parameters": [
{
"name": "visible",
"in": "query",
"description": "Visibility status to filter users: 1=visible, 2=hidden, 3=all",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": 1,
"pattern": "1|2|3"
}
},
{
"name": "orderBy",
"in": "query",
"description": "The field by which results will be ordered. Allowed values: id, username, alias, email (default: username)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "id|username|alias|email"
}
},
{
"name": "order",
"in": "query",
"description": "The result order. Allowed values: ASC, DESC (default: ASC)",
"required": false,
"allowEmptyValue": true,
"schema": {
"type": "string",
"default": null,
"pattern": "ASC|DESC"
}
},
{
"name": "term",
"in": "query",
"description": "Free search term",
"required": false,
"allowEmptyValue": false,
"schema": {
"type": "string",
"default": null
}
}
],
"responses": {
"200": {
"description": "Returns the collection of users. Required permission: view_user",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/UserCollection"
}
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"post": {
"tags": [
"User"
],
"summary": "Creates a new user",
"description": "Creates a new user and returns it afterwards",
"operationId": "post_post_user",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UserCreateForm"
}
}
}
},
"responses": {
"default": {
"description": ""
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/users/{id}": {
"get": {
"tags": [
"User"
],
"summary": "Return one user entity",
"operationId": "get_get_user",
"parameters": [
{
"name": "id",
"in": "path",
"description": "User ID to fetch",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"responses": {
"200": {
"description": "Return one user entity.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UserEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
},
"patch": {
"tags": [
"User"
],
"summary": "Update an existing user",
"description": "Update an existing user, you can pass all or just a subset of all attributes (passing roles will replace all existing ones)",
"operationId": "patch_patch_user",
"parameters": [
{
"name": "id",
"in": "path",
"description": "User ID to update",
"required": true,
"schema": {
"type": "string",
"pattern": "\\d+"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UserEditForm"
}
}
}
},
"responses": {
"200": {
"description": "Returns the updated user",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UserEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
},
"/api/users/me": {
"get": {
"tags": [
"User"
],
"summary": "Return the current user entity",
"operationId": "get_me_user",
"responses": {
"200": {
"description": "Return the current user entity.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UserEntity"
}
}
}
}
},
"security": [
{
"apiUser": []
},
{
"apiToken": []
}
]
}
}
},
"components": {
"schemas": {
"TeamMembership": {
"required": [
"team",
"teamlead"
],
"properties": {
"team": {
"$ref": "#/components/schemas/Team"
},
"teamlead": {
"type": "boolean"
}
},
"type": "object"
},
"TeamMember": {
"required": [
"user",
"teamlead"
],
"properties": {
"user": {
"$ref": "#/components/schemas/User"
},
"teamlead": {
"type": "boolean"
}
},
"type": "object"
},
"TeamCollection": {
"required": [
"name"
],
"properties": {
"id": {
"type": "integer"
},
"name": {
"title": "Team name",
"type": "string",
"maxLength": 100,
"minLength": 2
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"Team": {
"required": [
"name"
],
"properties": {
"id": {
"type": "integer"
},
"name": {
"title": "Team name",
"type": "string",
"maxLength": 100,
"minLength": 2
},
"members": {
"title": "All team member (including team leads)",
"type": "array",
"items": {
"$ref": "#/components/schemas/TeamMember"
},
"minItems": 1
},
"customers": {
"title": "Customers assigned to the team",
"type": "array",
"items": {
"$ref": "#/components/schemas/Customer"
}
},
"projects": {
"title": "Projects assigned to the team",
"type": "array",
"items": {
"$ref": "#/components/schemas/Project"
}
},
"activities": {
"title": "Activities assigned to the team",
"type": "array",
"items": {
"$ref": "#/components/schemas/Activity"
}
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"TeamEditForm": {
"required": [
"name",
"members"
],
"properties": {
"name": {
"description": "Name of the team",
"type": "string"
},
"color": {
"description": "The hexadecimal color code (default: #d2d6de)",
"type": "string"
},
"members": {
"description": "All team members",
"type": "array",
"items": {
"type": "object",
"properties": {
"user": {
"type": "integer",
"description": "User ID"
},
"teamlead": {
"type": "boolean",
"description": "Whether the user is a teamlead"
}
}
}
}
},
"type": "object"
},
"UserCollection": {
"required": [
"username"
],
"properties": {
"initials": {
"type": "string"
},
"id": {
"title": "Unique User ID",
"type": "integer"
},
"alias": {
"title": "The user alias will be displayed in the frontend instead of the username",
"type": "string",
"maxLength": 60
},
"title": {
"title": "An additional title for the user, like the Job position or Department",
"type": "string",
"maxLength": 50
},
"username": {
"type": "string",
"maxLength": 60,
"minLength": 2,
"pattern": "((?!/).)*"
},
"accountNumber": {
"type": "string",
"maxLength": 30
},
"enabled": {
"type": "boolean"
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"UserEntity": {
"required": [
"memberships",
"username"
],
"properties": {
"preferences": {
"title": "Read-only list of of all visible user preferences.",
"type": "array",
"items": {
"$ref": "#/components/schemas/UserPreference"
}
},
"language": {
"type": "string"
},
"timezone": {
"type": "string"
},
"teams": {
"title": "List of all teams, this user is part of",
"type": "array",
"items": {
"$ref": "#/components/schemas/Team"
}
},
"initials": {
"type": "string"
},
"id": {
"title": "Unique User ID",
"type": "integer"
},
"alias": {
"title": "The user alias will be displayed in the frontend instead of the username",
"type": "string",
"maxLength": 60
},
"title": {
"title": "An additional title for the user, like the Job position or Department",
"type": "string",
"maxLength": 50
},
"avatar": {
"title": "URL to the user avatar, will be auto-generated if empty",
"type": "string",
"maxLength": 255
},
"memberships": {
"title": "List of all team memberships.",
"type": "array",
"items": {
"$ref": "#/components/schemas/TeamMembership"
}
},
"username": {
"type": "string",
"maxLength": 60,
"minLength": 2,
"pattern": "((?!/).)*"
},
"accountNumber": {
"type": "string",
"maxLength": 30
},
"enabled": {
"type": "boolean"
},
"roles": {
"title": "List of all role names",
"type": "array",
"items": {
"type": "string"
}
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"UserPreference": {
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 50,
"minLength": 2
},
"value": {
"type": "string",
"maxLength": 250
}
},
"type": "object"
},
"User": {
"required": [
"username"
],
"properties": {
"initials": {
"type": "string"
},
"id": {
"title": "Unique User ID",
"type": "integer"
},
"alias": {
"title": "The user alias will be displayed in the frontend instead of the username",
"type": "string",
"maxLength": 60
},
"title": {
"title": "An additional title for the user, like the Job position or Department",
"type": "string",
"maxLength": 50
},
"username": {
"type": "string",
"maxLength": 60,
"minLength": 2,
"pattern": "((?!/).)*"
},
"accountNumber": {
"type": "string",
"maxLength": 30
},
"enabled": {
"type": "boolean"
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"UserEditForm": {
"required": [
"email",
"language",
"timezone"
],
"properties": {
"alias": {
"type": "string"
},
"title": {
"type": "string"
},
"accountNumber": {
"type": "string"
},
"color": {
"description": "The hexadecimal color code (default: #d2d6de)",
"type": "string"
},
"email": {
"type": "string"
},
"language": {
"type": "string",
"enum": [
"ar",
"cs",
"cs_CZ",
"da",
"da_DK",
"da_GL",
"de",
"de_AT",
"de_BE",
"de_CH",
"de_DE",
"de_IT",
"de_LI",
"de_LU",
"el",
"el_CY",
"el_GR",
"en",
"en_AE",
"en_AG",
"en_AI",
"en_AS",
"en_AT",
"en_AU",
"en_BB",
"en_BE",
"en_BI",
"en_BM",
"en_BS",
"en_BW",
"en_BZ",
"en_CA",
"en_CC",
"en_CH",
"en_CK",
"en_CM",
"en_CX",
"en_CY",
"en_DE",
"en_DK",
"en_DM",
"en_ER",
"en_FI",
"en_FJ",
"en_FK",
"en_FM",
"en_GB",
"en_GD",
"en_GG",
"en_GH",
"en_GI",
"en_GM",
"en_GU",
"en_GY",
"en_HK",
"en_IE",
"en_IL",
"en_IM",
"en_IN",
"en_IO",
"en_JE",
"en_JM",
"en_KE",
"en_KI",
"en_KN",
"en_KY",
"en_LC",
"en_LR",
"en_LS",
"en_MG",
"en_MH",
"en_MO",
"en_MP",
"en_MS",
"en_MT",
"en_MU",
"en_MV",
"en_MW",
"en_MY",
"en_NA",
"en_NF",
"en_NG",
"en_NL",
"en_NR",
"en_NU",
"en_NZ",
"en_PG",
"en_PH",
"en_PK",
"en_PN",
"en_PR",
"en_PW",
"en_RW",
"en_SB",
"en_SC",
"en_SD",
"en_SE",
"en_SG",
"en_SH",
"en_SI",
"en_SL",
"en_SS",
"en_SX",
"en_SZ",
"en_TC",
"en_TK",
"en_TO",
"en_TT",
"en_TV",
"en_TZ",
"en_UG",
"en_UM",
"en_US",
"en_VC",
"en_VG",
"en_VI",
"en_VU",
"en_WS",
"en_ZA",
"en_ZM",
"en_ZW",
"eo",
"es",
"es_AR",
"es_BO",
"es_BR",
"es_BZ",
"es_CL",
"es_CO",
"es_CR",
"es_CU",
"es_DO",
"es_EC",
"es_ES",
"es_GQ",
"es_GT",
"es_HN",
"es_MX",
"es_NI",
"es_PA",
"es_PE",
"es_PH",
"es_PR",
"es_PY",
"es_SV",
"es_US",
"es_UY",
"es_VE",
"eu",
"eu_ES",
"fa",
"fa_AF",
"fa_IR",
"fi",
"fi_FI",
"fo",
"fo_DK",
"fo_FO",
"fr",
"fr_BE",
"fr_BF",
"fr_BI",
"fr_BJ",
"fr_BL",
"fr_CA",
"fr_CD",
"fr_CF",
"fr_CG",
"fr_CH",
"fr_CI",
"fr_CM",
"fr_DJ",
"fr_DZ",
"fr_FR",
"fr_GA",
"fr_GF",
"fr_GN",
"fr_GP",
"fr_GQ",
"fr_HT",
"fr_KM",
"fr_LU",
"fr_MA",
"fr_MC",
"fr_MF",
"fr_MG",
"fr_ML",
"fr_MQ",
"fr_MR",
"fr_MU",
"fr_NC",
"fr_NE",
"fr_PF",
"fr_PM",
"fr_RE",
"fr_RW",
"fr_SC",
"fr_SN",
"fr_SY",
"fr_TD",
"fr_TG",
"fr_TN",
"fr_VU",
"fr_WF",
"fr_YT",
"he",
"he_IL",
"hr",
"hr_BA",
"hr_HR",
"hu",
"hu_HU",
"it",
"it_CH",
"it_IT",
"it_SM",
"it_VA",
"ja",
"ja_JP",
"ko",
"ko_KP",
"ko_KR",
"nb_NO",
"nl",
"nl_AW",
"nl_BE",
"nl_BQ",
"nl_CW",
"nl_NL",
"nl_SR",
"nl_SX",
"pl",
"pl_PL",
"pt",
"pt_AO",
"pt_BR",
"pt_CH",
"pt_CV",
"pt_GQ",
"pt_GW",
"pt_LU",
"pt_MO",
"pt_MZ",
"pt_PT",
"pt_ST",
"pt_TL",
"ro",
"ro_MD",
"ro_RO",
"ru",
"ru_BY",
"ru_KG",
"ru_KZ",
"ru_MD",
"ru_RU",
"ru_UA",
"sk",
"sk_SK",
"sv",
"sv_AX",
"sv_FI",
"sv_SE",
"tr",
"tr_CY",
"tr_TR",
"uk",
"vi",
"vi_VN",
"zh_CN",
"zh_Hant"
]
},
"timezone": {
"type": "string"
},
"roles": {
"type": "array",
"items": {
"type": "string",
"enum": [
"ROLE_TEAMLEAD",
"ROLE_ADMIN",
"ROLE_SUPER_ADMIN"
]
}
},
"enabled": {
"type": "boolean"
},
"systemAccount": {
"type": "boolean"
}
},
"type": "object"
},
"UserCreateForm": {
"required": [
"username",
"email",
"language",
"timezone",
"plainPassword"
],
"properties": {
"username": {
"type": "string"
},
"alias": {
"type": "string"
},
"title": {
"type": "string"
},
"accountNumber": {
"type": "string"
},
"color": {
"description": "The hexadecimal color code (default: #d2d6de)",
"type": "string"
},
"email": {
"type": "string"
},
"language": {
"type": "string",
"enum": [
"ar",
"cs",
"cs_CZ",
"da",
"da_DK",
"da_GL",
"de",
"de_AT",
"de_BE",
"de_CH",
"de_DE",
"de_IT",
"de_LI",
"de_LU",
"el",
"el_CY",
"el_GR",
"en",
"en_AE",
"en_AG",
"en_AI",
"en_AS",
"en_AT",
"en_AU",
"en_BB",
"en_BE",
"en_BI",
"en_BM",
"en_BS",
"en_BW",
"en_BZ",
"en_CA",
"en_CC",
"en_CH",
"en_CK",
"en_CM",
"en_CX",
"en_CY",
"en_DE",
"en_DK",
"en_DM",
"en_ER",
"en_FI",
"en_FJ",
"en_FK",
"en_FM",
"en_GB",
"en_GD",
"en_GG",
"en_GH",
"en_GI",
"en_GM",
"en_GU",
"en_GY",
"en_HK",
"en_IE",
"en_IL",
"en_IM",
"en_IN",
"en_IO",
"en_JE",
"en_JM",
"en_KE",
"en_KI",
"en_KN",
"en_KY",
"en_LC",
"en_LR",
"en_LS",
"en_MG",
"en_MH",
"en_MO",
"en_MP",
"en_MS",
"en_MT",
"en_MU",
"en_MV",
"en_MW",
"en_MY",
"en_NA",
"en_NF",
"en_NG",
"en_NL",
"en_NR",
"en_NU",
"en_NZ",
"en_PG",
"en_PH",
"en_PK",
"en_PN",
"en_PR",
"en_PW",
"en_RW",
"en_SB",
"en_SC",
"en_SD",
"en_SE",
"en_SG",
"en_SH",
"en_SI",
"en_SL",
"en_SS",
"en_SX",
"en_SZ",
"en_TC",
"en_TK",
"en_TO",
"en_TT",
"en_TV",
"en_TZ",
"en_UG",
"en_UM",
"en_US",
"en_VC",
"en_VG",
"en_VI",
"en_VU",
"en_WS",
"en_ZA",
"en_ZM",
"en_ZW",
"eo",
"es",
"es_AR",
"es_BO",
"es_BR",
"es_BZ",
"es_CL",
"es_CO",
"es_CR",
"es_CU",
"es_DO",
"es_EC",
"es_ES",
"es_GQ",
"es_GT",
"es_HN",
"es_MX",
"es_NI",
"es_PA",
"es_PE",
"es_PH",
"es_PR",
"es_PY",
"es_SV",
"es_US",
"es_UY",
"es_VE",
"eu",
"eu_ES",
"fa",
"fa_AF",
"fa_IR",
"fi",
"fi_FI",
"fo",
"fo_DK",
"fo_FO",
"fr",
"fr_BE",
"fr_BF",
"fr_BI",
"fr_BJ",
"fr_BL",
"fr_CA",
"fr_CD",
"fr_CF",
"fr_CG",
"fr_CH",
"fr_CI",
"fr_CM",
"fr_DJ",
"fr_DZ",
"fr_FR",
"fr_GA",
"fr_GF",
"fr_GN",
"fr_GP",
"fr_GQ",
"fr_HT",
"fr_KM",
"fr_LU",
"fr_MA",
"fr_MC",
"fr_MF",
"fr_MG",
"fr_ML",
"fr_MQ",
"fr_MR",
"fr_MU",
"fr_NC",
"fr_NE",
"fr_PF",
"fr_PM",
"fr_RE",
"fr_RW",
"fr_SC",
"fr_SN",
"fr_SY",
"fr_TD",
"fr_TG",
"fr_TN",
"fr_VU",
"fr_WF",
"fr_YT",
"he",
"he_IL",
"hr",
"hr_BA",
"hr_HR",
"hu",
"hu_HU",
"it",
"it_CH",
"it_IT",
"it_SM",
"it_VA",
"ja",
"ja_JP",
"ko",
"ko_KP",
"ko_KR",
"nb_NO",
"nl",
"nl_AW",
"nl_BE",
"nl_BQ",
"nl_CW",
"nl_NL",
"nl_SR",
"nl_SX",
"pl",
"pl_PL",
"pt",
"pt_AO",
"pt_BR",
"pt_CH",
"pt_CV",
"pt_GQ",
"pt_GW",
"pt_LU",
"pt_MO",
"pt_MZ",
"pt_PT",
"pt_ST",
"pt_TL",
"ro",
"ro_MD",
"ro_RO",
"ru",
"ru_BY",
"ru_KG",
"ru_KZ",
"ru_MD",
"ru_RU",
"ru_UA",
"sk",
"sk_SK",
"sv",
"sv_AX",
"sv_FI",
"sv_SE",
"tr",
"tr_CY",
"tr_TR",
"uk",
"vi",
"vi_VN",
"zh_CN",
"zh_Hant"
]
},
"timezone": {
"type": "string"
},
"roles": {
"type": "array",
"items": {
"type": "string",
"enum": [
"ROLE_TEAMLEAD",
"ROLE_ADMIN",
"ROLE_SUPER_ADMIN"
]
}
},
"plainPassword": {
"description": "Plain text password",
"type": "string"
},
"plainApiToken": {
"description": "Plain API token",
"type": "string"
},
"enabled": {
"type": "boolean"
},
"systemAccount": {
"type": "boolean"
}
},
"type": "object"
},
"TimesheetCollectionExpanded": {
"required": [
"begin",
"user",
"activity",
"project",
"exported",
"billable"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"title": "Unique Timesheet ID",
"type": "integer"
},
"begin": {
"title": "Time records start date-time.",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"end": {
"title": "Time records end date-time.",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"duration": {
"type": "integer"
},
"user": {
"$ref": "#/components/schemas/User"
},
"activity": {
"$ref": "#/components/schemas/ActivityExpanded"
},
"project": {
"$ref": "#/components/schemas/ProjectExpanded"
},
"description": {
"type": "string"
},
"rate": {
"type": "number",
"format": "float",
"minimum": 0
},
"internalRate": {
"type": "number",
"format": "float"
},
"exported": {
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"metaFields": {
"title": "Meta fields registered with the timesheet",
"type": "array",
"items": {
"$ref": "#/components/schemas/TimesheetMeta"
}
}
},
"type": "object"
},
"TimesheetCollection": {
"required": [
"begin",
"exported",
"billable"
],
"properties": {
"activity": {
"type": "integer"
},
"project": {
"type": "integer"
},
"user": {
"type": "integer"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"title": "Unique Timesheet ID",
"type": "integer"
},
"begin": {
"title": "Time records start date-time.",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"end": {
"title": "Time records end date-time.",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"duration": {
"type": "integer"
},
"description": {
"type": "string"
},
"rate": {
"type": "number",
"format": "float",
"minimum": 0
},
"internalRate": {
"type": "number",
"format": "float"
},
"exported": {
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"metaFields": {
"title": "Meta fields registered with the timesheet",
"type": "array",
"items": {
"$ref": "#/components/schemas/TimesheetMeta"
}
}
},
"type": "object"
},
"TimesheetExpanded": {
"required": [
"begin",
"user",
"activity",
"project",
"exported",
"billable"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"title": "Unique Timesheet ID",
"type": "integer"
},
"begin": {
"title": "Time records start date-time.",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"end": {
"title": "Time records end date-time.",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"duration": {
"type": "integer"
},
"user": {
"$ref": "#/components/schemas/User"
},
"activity": {
"$ref": "#/components/schemas/ActivityExpanded"
},
"project": {
"$ref": "#/components/schemas/ProjectExpanded"
},
"description": {
"type": "string"
},
"rate": {
"type": "number",
"format": "float",
"minimum": 0
},
"internalRate": {
"type": "number",
"format": "float"
},
"fixedRate": {
"type": "number",
"format": "float",
"minimum": 0
},
"hourlyRate": {
"type": "number",
"format": "float",
"minimum": 0
},
"exported": {
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"metaFields": {
"title": "Meta fields registered with the timesheet",
"type": "array",
"items": {
"$ref": "#/components/schemas/TimesheetMeta"
}
}
},
"type": "object"
},
"TimesheetEntity": {
"required": [
"begin",
"exported",
"billable"
],
"properties": {
"activity": {
"type": "integer"
},
"project": {
"type": "integer"
},
"user": {
"type": "integer"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"title": "Unique Timesheet ID",
"type": "integer"
},
"begin": {
"title": "Time records start date-time.",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"end": {
"title": "Time records end date-time.",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"duration": {
"type": "integer"
},
"description": {
"type": "string"
},
"rate": {
"type": "number",
"format": "float",
"minimum": 0
},
"internalRate": {
"type": "number",
"format": "float"
},
"fixedRate": {
"type": "number",
"format": "float",
"minimum": 0
},
"hourlyRate": {
"type": "number",
"format": "float",
"minimum": 0
},
"exported": {
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"metaFields": {
"title": "Meta fields registered with the timesheet",
"type": "array",
"items": {
"$ref": "#/components/schemas/TimesheetMeta"
}
}
},
"type": "object"
},
"TimesheetEditForm": {
"required": [
"begin",
"project",
"activity"
],
"properties": {
"begin": {
"type": "string",
"format": "date-time",
"example": "2023-11-09T19:13:13"
},
"end": {
"type": "string",
"format": "date-time",
"example": "2023-11-09T19:13:13"
},
"project": {
"description": "Project ID",
"type": "integer"
},
"activity": {
"description": "Activity ID",
"type": "integer"
},
"description": {
"type": "string"
},
"fixedRate": {
"description": "Fixed rate",
"type": "number"
},
"hourlyRate": {
"description": "Hourly rate",
"type": "number"
},
"user": {
"description": "User ID",
"type": "integer"
},
"tags": {
"description": "Comma separated list of tags",
"type": "string"
},
"exported": {
"type": "boolean"
},
"billable": {
"type": "boolean"
}
},
"type": "object"
},
"TagEntity": {
"required": [
"name"
],
"properties": {
"id": {
"title": "Internal Tag ID",
"type": "integer"
},
"name": {
"title": "The tag name",
"type": "string",
"maxLength": 100,
"minLength": 2,
"pattern": "((?!,).)*"
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"TagEditForm": {
"required": [
"name"
],
"properties": {
"name": {
"description": "The tag name (forbidden character: comma)",
"type": "string"
},
"color": {
"description": "The hexadecimal color code (default: #d2d6de)",
"type": "string"
}
},
"type": "object"
},
"ActivityCollection": {
"required": [
"name",
"visible",
"billable"
],
"properties": {
"parentTitle": {
"type": "string"
},
"project": {
"type": "integer"
},
"id": {
"title": "Unique activity ID",
"type": "integer"
},
"name": {
"title": "Name of this activity",
"type": "string",
"maxLength": 150,
"minLength": 3
},
"comment": {
"title": "Description of this activity",
"type": "string"
},
"visible": {
"title": "Whether this activity is visible and can be selected",
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"metaFields": {
"title": "Meta fields registered with the activity",
"type": "array",
"items": {
"$ref": "#/components/schemas/ActivityMeta"
}
},
"teams": {
"title": "Teams with access to the activity",
"type": "array",
"items": {
"$ref": "#/components/schemas/Team"
}
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"ActivityRateForm": {
"required": [
"rate"
],
"properties": {
"user": {
"description": "User ID",
"type": "integer"
},
"rate": {
"description": "The rate (eg. 10.5)",
"type": "number"
},
"internalRate": {
"description": "The internal rate (eg. 10.0 or 10)",
"type": "number"
},
"isFixed": {
"type": "boolean"
}
},
"type": "object"
},
"ActivityRate": {
"required": [
"isFixed"
],
"properties": {
"id": {
"type": "integer"
},
"user": {
"$ref": "#/components/schemas/User"
},
"rate": {
"type": "number",
"format": "float",
"minimum": 0
},
"internalRate": {
"type": "number",
"format": "float"
},
"isFixed": {
"type": "boolean"
}
},
"type": "object"
},
"ActivityExpanded": {
"required": [
"name",
"visible",
"billable"
],
"properties": {
"id": {
"title": "Unique activity ID",
"type": "integer"
},
"project": {
"$ref": "#/components/schemas/ProjectExpanded"
},
"name": {
"title": "Name of this activity",
"type": "string",
"maxLength": 150,
"minLength": 3
},
"comment": {
"title": "Description of this activity",
"type": "string"
},
"visible": {
"title": "Whether this activity is visible and can be selected",
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"Activity": {
"required": [
"name",
"visible",
"billable"
],
"properties": {
"project": {
"type": "integer"
},
"id": {
"title": "Unique activity ID",
"type": "integer"
},
"name": {
"title": "Name of this activity",
"type": "string",
"maxLength": 150,
"minLength": 3
},
"comment": {
"title": "Description of this activity",
"type": "string"
},
"visible": {
"title": "Whether this activity is visible and can be selected",
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"ActivityEntity": {
"required": [
"name",
"visible",
"billable",
"budget",
"timeBudget"
],
"properties": {
"parentTitle": {
"type": "string"
},
"project": {
"type": "integer"
},
"id": {
"title": "Unique activity ID",
"type": "integer"
},
"name": {
"title": "Name of this activity",
"type": "string",
"maxLength": 150,
"minLength": 3
},
"comment": {
"title": "Description of this activity",
"type": "string"
},
"visible": {
"title": "Whether this activity is visible and can be selected",
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"metaFields": {
"title": "Meta fields registered with the activity",
"type": "array",
"items": {
"$ref": "#/components/schemas/ActivityMeta"
}
},
"teams": {
"title": "Teams with access to the activity",
"type": "array",
"items": {
"$ref": "#/components/schemas/Team"
}
},
"budget": {
"title": "The total monetary budget, will be zero if not configured.",
"type": "number",
"format": "float",
"maximum": 900000000000,
"minimum": 0
},
"timeBudget": {
"title": "The time budget in seconds, will be zero if not configured.",
"type": "integer",
"maximum": 2145600000,
"minimum": 0
},
"budgetType": {
"title": "The type of budget:\n - null = default / full time\n - month = monthly budget",
"type": "string"
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"ActivityEditForm": {
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"comment": {
"type": "string"
},
"invoiceText": {
"type": "string"
},
"project": {
"description": "Project ID",
"type": "integer"
},
"teams": {
"description": "Team ID",
"type": "integer"
},
"color": {
"description": "The hexadecimal color code (default: #d2d6de)",
"type": "string"
},
"visible": {
"type": "boolean"
},
"billable": {
"type": "boolean"
}
},
"type": "object"
},
"ProjectCollection": {
"required": [
"name",
"visible",
"billable",
"globalActivities"
],
"properties": {
"parentTitle": {
"type": "string"
},
"customer": {
"type": "integer"
},
"id": {
"title": "Unique Project ID",
"type": "integer"
},
"name": {
"title": "Project name",
"type": "string",
"maxLength": 150,
"minLength": 3
},
"start": {
"title": "Project start date (times before this date cannot be recorded)",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"end": {
"title": "Project end time (times after this date cannot be recorded)",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"comment": {
"type": "string"
},
"visible": {
"title": "If the project is not visible, times cannot be recorded",
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"metaFields": {
"title": "Meta fields registered with the project",
"type": "array",
"items": {
"$ref": "#/components/schemas/ProjectMeta"
}
},
"teams": {
"title": "Teams with access to the project",
"type": "array",
"items": {
"$ref": "#/components/schemas/Team"
}
},
"globalActivities": {
"title": "Whether this project allows booking of global activities",
"type": "boolean"
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"ProjectRateForm": {
"required": [
"rate"
],
"properties": {
"user": {
"description": "User ID",
"type": "integer"
},
"rate": {
"description": "The rate (eg. 10.5)",
"type": "number"
},
"internalRate": {
"description": "The internal rate (eg. 10.0 or 10)",
"type": "number"
},
"isFixed": {
"type": "boolean"
}
},
"type": "object"
},
"ProjectRate": {
"required": [
"isFixed"
],
"properties": {
"id": {
"type": "integer"
},
"user": {
"$ref": "#/components/schemas/User"
},
"rate": {
"type": "number",
"format": "float",
"minimum": 0
},
"internalRate": {
"type": "number",
"format": "float"
},
"isFixed": {
"type": "boolean"
}
},
"type": "object"
},
"ProjectExpanded": {
"required": [
"customer",
"name",
"visible",
"billable",
"globalActivities"
],
"properties": {
"id": {
"title": "Unique Project ID",
"type": "integer"
},
"customer": {
"$ref": "#/components/schemas/Customer"
},
"name": {
"title": "Project name",
"type": "string",
"maxLength": 150,
"minLength": 3
},
"comment": {
"type": "string"
},
"visible": {
"title": "If the project is not visible, times cannot be recorded",
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"globalActivities": {
"title": "Whether this project allows booking of global activities",
"type": "boolean"
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"Project": {
"required": [
"name",
"visible",
"billable",
"globalActivities"
],
"properties": {
"customer": {
"type": "integer"
},
"id": {
"title": "Unique Project ID",
"type": "integer"
},
"name": {
"title": "Project name",
"type": "string",
"maxLength": 150,
"minLength": 3
},
"comment": {
"type": "string"
},
"visible": {
"title": "If the project is not visible, times cannot be recorded",
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"globalActivities": {
"title": "Whether this project allows booking of global activities",
"type": "boolean"
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"ProjectEntity": {
"required": [
"name",
"visible",
"billable",
"globalActivities",
"budget",
"timeBudget"
],
"properties": {
"parentTitle": {
"type": "string"
},
"customer": {
"type": "integer"
},
"id": {
"title": "Unique Project ID",
"type": "integer"
},
"name": {
"title": "Project name",
"type": "string",
"maxLength": 150,
"minLength": 3
},
"orderNumber": {
"title": "Project order number",
"type": "string",
"maxLength": 50
},
"orderDate": {
"title": "Order date for the project",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"start": {
"title": "Project start date (times before this date cannot be recorded)",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"end": {
"title": "Project end time (times after this date cannot be recorded)",
"description": "Attention: Accessor MUST be used, otherwise date will be serialized in UTC.",
"type": "string",
"format": "date-time"
},
"comment": {
"type": "string"
},
"visible": {
"title": "If the project is not visible, times cannot be recorded",
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"metaFields": {
"title": "Meta fields registered with the project",
"type": "array",
"items": {
"$ref": "#/components/schemas/ProjectMeta"
}
},
"teams": {
"title": "Teams with access to the project",
"type": "array",
"items": {
"$ref": "#/components/schemas/Team"
}
},
"globalActivities": {
"title": "Whether this project allows booking of global activities",
"type": "boolean"
},
"budget": {
"title": "The total monetary budget, will be zero if not configured.",
"type": "number",
"format": "float",
"maximum": 900000000000,
"minimum": 0
},
"timeBudget": {
"title": "The time budget in seconds, will be zero if not configured.",
"type": "integer",
"maximum": 2145600000,
"minimum": 0
},
"budgetType": {
"title": "The type of budget:\n - null = default / full time\n - month = monthly budget",
"type": "string"
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"ProjectEditForm": {
"required": [
"name",
"customer"
],
"properties": {
"name": {
"type": "string"
},
"comment": {
"type": "string"
},
"invoiceText": {
"type": "string"
},
"orderNumber": {
"type": "string"
},
"orderDate": {
"type": "string",
"format": "date"
},
"start": {
"type": "string",
"format": "date"
},
"end": {
"type": "string",
"format": "date"
},
"customer": {
"description": "Customer ID",
"type": "integer"
},
"color": {
"description": "The hexadecimal color code (default: #d2d6de)",
"type": "string"
},
"globalActivities": {
"type": "boolean"
},
"visible": {
"type": "boolean"
},
"billable": {
"type": "boolean"
}
},
"type": "object"
},
"CustomerCollection": {
"required": [
"name",
"visible",
"billable",
"currency"
],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string",
"maxLength": 150,
"minLength": 3
},
"number": {
"type": "string",
"maxLength": 50
},
"comment": {
"type": "string"
},
"visible": {
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"currency": {
"type": "string",
"maxLength": 3
},
"metaFields": {
"title": "Meta fields registered with the customer",
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomerMeta"
}
},
"teams": {
"title": "Teams with access to the customer",
"type": "array",
"items": {
"$ref": "#/components/schemas/Team"
}
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"CustomerRateForm": {
"required": [
"rate"
],
"properties": {
"user": {
"description": "User ID",
"type": "integer"
},
"rate": {
"description": "The rate (eg. 10.5)",
"type": "number"
},
"internalRate": {
"description": "The internal rate (eg. 10.0 or 10)",
"type": "number"
},
"isFixed": {
"type": "boolean"
}
},
"type": "object"
},
"CustomerRate": {
"required": [
"isFixed"
],
"properties": {
"id": {
"type": "integer"
},
"user": {
"$ref": "#/components/schemas/User"
},
"rate": {
"type": "number",
"format": "float",
"minimum": 0
},
"internalRate": {
"type": "number",
"format": "float"
},
"isFixed": {
"type": "boolean"
}
},
"type": "object"
},
"Customer": {
"required": [
"name",
"visible",
"billable"
],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string",
"maxLength": 150,
"minLength": 3
},
"number": {
"type": "string",
"maxLength": 50
},
"comment": {
"type": "string"
},
"visible": {
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"CustomerEntity": {
"required": [
"name",
"visible",
"billable",
"country",
"currency",
"timezone",
"budget",
"timeBudget"
],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string",
"maxLength": 150,
"minLength": 3
},
"number": {
"type": "string",
"maxLength": 50
},
"comment": {
"type": "string"
},
"visible": {
"type": "boolean"
},
"billable": {
"type": "boolean"
},
"company": {
"type": "string",
"maxLength": 100
},
"vatId": {
"type": "string",
"maxLength": 50
},
"contact": {
"type": "string",
"maxLength": 100
},
"address": {
"type": "string"
},
"country": {
"type": "string",
"maxLength": 2
},
"currency": {
"type": "string",
"maxLength": 3
},
"phone": {
"type": "string",
"maxLength": 30
},
"fax": {
"type": "string",
"maxLength": 30
},
"mobile": {
"type": "string",
"maxLength": 30
},
"email": {
"title": "Customers contact email",
"type": "string",
"maxLength": 75
},
"homepage": {
"type": "string",
"maxLength": 100
},
"timezone": {
"title": "Timezone of begin and end",
"type": "string",
"maxLength": 64
},
"metaFields": {
"title": "Meta fields registered with the customer",
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomerMeta"
}
},
"teams": {
"title": "Teams with access to the customer",
"type": "array",
"items": {
"$ref": "#/components/schemas/Team"
}
},
"budget": {
"title": "The total monetary budget, will be zero if not configured.",
"type": "number",
"format": "float",
"maximum": 900000000000,
"minimum": 0
},
"timeBudget": {
"title": "The time budget in seconds, will be zero if not configured.",
"type": "integer",
"maximum": 2145600000,
"minimum": 0
},
"budgetType": {
"title": "The type of budget:\n - null = default / full time\n - month = monthly budget",
"type": "string"
},
"color": {
"title": "The assigned color in HTML hex format, e.g. #dd1d00",
"type": "string"
}
},
"type": "object"
},
"CustomerEditForm": {
"required": [
"name",
"country",
"currency",
"timezone"
],
"properties": {
"name": {
"type": "string"
},
"number": {
"type": "string"
},
"comment": {
"type": "string"
},
"company": {
"type": "string"
},
"vatId": {
"type": "string"
},
"contact": {
"type": "string"
},
"address": {
"type": "string"
},
"country": {
"type": "string"
},
"currency": {
"type": "string"
},
"phone": {
"type": "string"
},
"fax": {
"type": "string"
},
"mobile": {
"type": "string"
},
"email": {
"type": "string"
},
"homepage": {
"type": "string"
},
"timezone": {
"type": "string"
},
"invoiceText": {
"type": "string"
},
"invoiceTemplate": {
"type": "string",
"format": "App\\Entity\\InvoiceTemplate id"
},
"color": {
"description": "The hexadecimal color code (default: #d2d6de)",
"type": "string"
},
"visible": {
"type": "boolean"
},
"billable": {
"type": "boolean"
}
},
"type": "object"
},
"PageAction": {
"properties": {
"id": {
"title": "ID of the action",
"type": "string"
},
"title": {
"title": "Translated title to show the user",
"type": "string"
},
"url": {
"title": "URL of the action",
"type": "string"
},
"class": {
"title": "HTML classes to be used",
"type": "string"
},
"attr": {
"title": "HTML (data) attributes to render the action",
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"divider": {
"title": "Whether to render a divider before this item",
"type": "boolean"
}
},
"type": "object"
},
"TimesheetConfig": {
"properties": {
"trackingMode": {
"title": "The time-tracking mode, see also: https://www.kimai.org/documentation/timesheet.html#tracking-modes",
"type": "string"
},
"defaultBeginTime": {
"title": "Default begin datetime in PHP format",
"type": "string"
},
"activeEntriesHardLimit": {
"title": "How many running timesheets a user is allowed to have at the same time",
"type": "integer"
},
"isAllowFutureTimes": {
"title": "Whether entries for future times are allowed",
"type": "boolean"
},
"isAllowOverlapping": {
"title": "Whether overlapping entries are allowed",
"type": "boolean"
}
},
"type": "object"
},
"Version": {
"properties": {
"version": {
"title": "Kimai Version, eg. \"2.0.0\"",
"type": "string"
},
"versionId": {
"title": "Kimai Version as integer, eg. 20000",
"description": "Follows the same logic as PHP_VERSION_ID, see https://www.php.net/manual/de/function.phpversion.php",
"type": "integer"
},
"copyright": {
"title": "A full copyright notice",
"type": "string"
}
},
"type": "object"
},
"Plugin": {
"properties": {
"name": {
"title": "The plugin name, eg. \"ExpensesBundle\"",
"type": "string"
},
"version": {
"title": "The plugin version, eg. \"1.14\"",
"type": "string"
}
},
"type": "object"
},
"TimesheetMeta": {
"required": [
"name"
],
"properties": {
"name": {
"title": "Name of the meta (custom) field",
"type": "string",
"maxLength": 50,
"minLength": 2
},
"value": {
"title": "Value of the meta (custom) field",
"description": "ATTENTION:\nThis field can be used to temporary hold data in another format (e.g. array) during form transformation,",
"type": "string",
"maxLength": 65535
}
},
"type": "object"
},
"ActivityMeta": {
"required": [
"name"
],
"properties": {
"name": {
"title": "Name of the meta (custom) field",
"type": "string",
"maxLength": 50,
"minLength": 2
},
"value": {
"title": "Value of the meta (custom) field",
"description": "ATTENTION:\nThis field can be used to temporary hold data in another format (e.g. array) during form transformation,",
"type": "string",
"maxLength": 65535
}
},
"type": "object"
},
"ProjectMeta": {
"required": [
"name"
],
"properties": {
"name": {
"title": "Name of the meta (custom) field",
"type": "string",
"maxLength": 50,
"minLength": 2
},
"value": {
"title": "Value of the meta (custom) field",
"description": "ATTENTION:\nThis field can be used to temporary hold data in another format (e.g. array) during form transformation,",
"type": "string",
"maxLength": 65535
}
},
"type": "object"
},
"CustomerMeta": {
"required": [
"name"
],
"properties": {
"name": {
"title": "Name of the meta (custom) field",
"type": "string",
"maxLength": 50,
"minLength": 2
},
"value": {
"title": "Value of the meta (custom) field",
"description": "ATTENTION:\nThis field can be used to temporary hold data in another format (e.g. array) during form transformation,",
"type": "string",
"maxLength": 65535
}
},
"type": "object"
}
},
"securitySchemes": {
"apiUser": {
"type": "apiKey",
"description": "Value: {Username}",
"name": "X-AUTH-USER",
"in": "header"
},
"apiToken": {
"type": "apiKey",
"description": "Value: {API Token}",
"name": "X-AUTH-TOKEN",
"in": "header"
}
}
},
"security": [
{
"X-AUTH-USER": [],
"X-AUTH-TOKEN": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment