{ "swagger": "2.0", "info": {}, "paths": { "/items/{itemID}": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lists" ], "summary": "Updates a list item", "operationId": "updateListItem", "parameters": [ { "type": "string", "description": "ID of the item to update", "name": "itemID", "in": "path", "required": true }, { "name": "body", "in": "body", "schema": { "$ref": "#/definitions/ListItem" } } ], "responses": { "200": { "$ref": "#/responses/ListItem" }, "400": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } }, "delete": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lists" ], "summary": "Deletes a list item", "operationId": "deleteListItem", "parameters": [ { "type": "string", "description": "ID of the list item to delete", "name": "itemID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/Message" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "404": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/lists": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lists" ], "summary": "Gets all lists owned by the current user", "operationId": "getLists", "responses": { "200": { "$ref": "#/responses/List" }, "500": { "$ref": "#/responses/Message" } } } }, "/lists/{listID}": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lists" ], "summary": "gets one list with all todo items", "operationId": "getList", "parameters": [ { "type": "string", "description": "ID of the list to show", "name": "listID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/List" }, "400": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } }, "put": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lists" ], "summary": "Adds an item to a list", "operationId": "addListItem", "parameters": [ { "type": "string", "description": "ID of the list to use", "name": "listID", "in": "path", "required": true }, { "name": "body", "in": "body", "schema": { "$ref": "#/definitions/ListItem" } } ], "responses": { "200": { "$ref": "#/responses/ListItem" }, "400": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lists" ], "summary": "Updates a list", "operationId": "upadteList", "parameters": [ { "type": "string", "description": "ID of the list to update", "name": "listID", "in": "path", "required": true }, { "name": "body", "in": "body", "schema": { "$ref": "#/definitions/List" } } ], "responses": { "200": { "$ref": "#/responses/List" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } }, "delete": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lists" ], "summary": "Deletes a list with all items on it", "operationId": "deleteList", "parameters": [ { "type": "string", "description": "ID of the list to delete", "name": "listID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/Message" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "404": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/lists/{listID}/teams": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "gets all teams which have access to the list", "operationId": "getTeamsByList", "parameters": [ { "type": "string", "description": "ID of the list to show", "name": "listID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/Team" }, "400": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } }, "put": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "adds a team to a list", "operationId": "addTeamToList", "parameters": [ { "type": "string", "description": "ID of the list to show", "name": "listID", "in": "path", "required": true }, { "name": "body", "in": "body", "schema": { "$ref": "#/definitions/TeamList" } } ], "responses": { "200": { "$ref": "#/responses/TeamList" }, "400": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/lists/{listID}/teams/{teamID}": { "delete": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "removes a team from a list", "operationId": "deleteTeamFromList", "parameters": [ { "type": "string", "description": "ID of the list", "name": "listID", "in": "path", "required": true }, { "type": "string", "description": "ID of the team to remove", "name": "teamID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/Message" }, "400": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/login": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Logs a user in. Returns a JWT-Token to authenticate requests", "operationId": "login", "parameters": [ { "name": "body", "in": "body", "schema": { "$ref": "#/definitions/UserLogin" } } ], "responses": { "200": { "$ref": "#/responses/Token" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" } } } }, "/namespaces": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "namespaces" ], "summary": "Get all namespaces the currently logged in user has at least read access", "operationId": "getNamespaces", "responses": { "200": { "$ref": "#/responses/Namespace" }, "500": { "$ref": "#/responses/Message" } } }, "put": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "namespaces" ], "summary": "Creates a new namespace owned by the currently logged in user", "operationId": "addNamespace", "parameters": [ { "name": "body", "in": "body", "schema": { "$ref": "#/definitions/Namespace" } } ], "responses": { "200": { "$ref": "#/responses/Namespace" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/namespaces/{namespaceID}": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "namespaces" ], "summary": "gets one namespace with all todo items", "operationId": "getNamespace", "parameters": [ { "type": "string", "description": "ID of the namespace to show", "name": "namespaceID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/Namespace" }, "400": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "namespaces" ], "summary": "Updates a namespace", "operationId": "upadteNamespace", "parameters": [ { "type": "string", "description": "ID of the namespace to update", "name": "namespaceID", "in": "path", "required": true }, { "name": "body", "in": "body", "schema": { "$ref": "#/definitions/Namespace" } } ], "responses": { "200": { "$ref": "#/responses/Namespace" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } }, "delete": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "namespaces" ], "summary": "Deletes a namespace with all lists", "operationId": "deleteNamespace", "parameters": [ { "type": "string", "description": "ID of the namespace to delete", "name": "namespaceID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/Message" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "404": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/namespaces/{namespaceID}/lists": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lists" ], "summary": "gets all lists in that namespace", "operationId": "getNamespaceLists", "parameters": [ { "type": "string", "description": "ID of the namespace to show", "name": "namespaceID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/List" }, "400": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } }, "put": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lists" ], "summary": "Creates a new list owned by the currently logged in user in that namespace", "operationId": "addList", "parameters": [ { "type": "string", "description": "ID of the namespace that list should belong to", "name": "namespaceID", "in": "path", "required": true }, { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/List" } } ], "responses": { "200": { "$ref": "#/responses/List" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/namespaces/{namespaceID}/teams": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "gets all teams which have access to that namespace", "operationId": "getNamespaceTeams", "parameters": [ { "type": "string", "description": "ID of the namespace to show", "name": "namespaceID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/Team" }, "400": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } }, "put": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Gives a team access to a namespace", "operationId": "addTeamToNamespace", "parameters": [ { "type": "string", "description": "ID of the namespace that list should belong to", "name": "namespaceID", "in": "path", "required": true }, { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/TeamNamespace" } } ], "responses": { "200": { "$ref": "#/responses/TeamNamespace" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/namespaces/{namespaceID}/teams/{teamID}": { "delete": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Removes a team from a namespace", "operationId": "removeTeamFromNamespace", "parameters": [ { "type": "string", "description": "ID of the namespace", "name": "namespaceID", "in": "path", "required": true }, { "type": "string", "description": "ID of the team you want to remove", "name": "teamID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/Message" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/register": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Creates a new user account", "operationId": "register", "parameters": [ { "name": "body", "in": "body", "schema": { "$ref": "#/definitions/APIUserPassword" } } ], "responses": { "200": { "$ref": "#/responses/User" }, "400": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/teams": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "gets all teams the current user is part of", "operationId": "getTeams", "responses": { "200": { "$ref": "#/responses/Team" }, "400": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } }, "put": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Creates a team", "operationId": "createTeam", "parameters": [ { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/Team" } } ], "responses": { "200": { "$ref": "#/responses/Team" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/teams/{teamID}": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "gets infos about the team", "operationId": "getTeamByID", "parameters": [ { "type": "string", "description": "ID of the team", "name": "teamID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/Team" }, "400": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Updates a team", "operationId": "updateTeam", "parameters": [ { "type": "string", "description": "ID of the team you want to update", "name": "teamID", "in": "path", "required": true }, { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/Team" } } ], "responses": { "200": { "$ref": "#/responses/Team" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } }, "delete": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Deletes a team", "operationId": "deleteTeam", "parameters": [ { "type": "string", "description": "ID of the team you want to delete", "name": "teamID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/Message" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/teams/{teamID}/members": { "put": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Adds a member to a team", "operationId": "addTeamMember", "parameters": [ { "type": "string", "description": "ID of the team you want to add a member to", "name": "teamID", "in": "path", "required": true }, { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/TeamMember" } } ], "responses": { "200": { "$ref": "#/responses/TeamMember" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } }, "/teams/{teamID}/members/{userID}": { "delete": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Removes a member from a team", "operationId": "removeTeamMember", "parameters": [ { "type": "string", "description": "ID of the team you want to delete a member", "name": "teamID", "in": "path", "required": true }, { "type": "string", "description": "ID of the user you want to remove from the team", "name": "userID", "in": "path", "required": true } ], "responses": { "200": { "$ref": "#/responses/Message" }, "400": { "$ref": "#/responses/Message" }, "403": { "$ref": "#/responses/Message" }, "500": { "$ref": "#/responses/Message" } } } } }, "definitions": { "APIUserPassword": { "type": "object", "title": "APIUserPassword represents a user object without timestamps and a json password field.", "properties": { "email": { "type": "string", "x-go-name": "Email" }, "id": { "type": "integer", "format": "int64", "x-go-name": "ID" }, "password": { "type": "string", "x-go-name": "Password" }, "username": { "type": "string", "x-go-name": "Username" } }, "x-go-package": "code.vikunja.io/api/models" }, "List": { "description": "List represents a list of items", "type": "object", "properties": { "created": { "type": "integer", "format": "int64", "x-go-name": "Created" }, "description": { "type": "string", "x-go-name": "Description" }, "id": { "type": "integer", "format": "int64", "x-go-name": "ID" }, "items": { "type": "array", "items": { "$ref": "#/definitions/ListItem" }, "x-go-name": "Items" }, "owner": { "$ref": "#/definitions/User" }, "title": { "type": "string", "x-go-name": "Title" }, "updated": { "type": "integer", "format": "int64", "x-go-name": "Updated" } }, "x-go-package": "code.vikunja.io/api/models" }, "ListItem": { "description": "ListItem represents an item in a todolist", "type": "object", "properties": { "created": { "type": "integer", "format": "int64", "x-go-name": "Created" }, "createdBy": { "$ref": "#/definitions/User" }, "description": { "type": "string", "x-go-name": "Description" }, "done": { "type": "boolean", "x-go-name": "Done" }, "dueDate": { "type": "integer", "format": "int64", "x-go-name": "DueDateUnix" }, "id": { "type": "integer", "format": "int64", "x-go-name": "ID" }, "listID": { "type": "integer", "format": "int64", "x-go-name": "ListID" }, "reminderDate": { "type": "integer", "format": "int64", "x-go-name": "ReminderUnix" }, "text": { "type": "string", "x-go-name": "Text" }, "updated": { "type": "integer", "format": "int64", "x-go-name": "Updated" } }, "x-go-package": "code.vikunja.io/api/models" }, "Message": { "description": "Message is a standard message", "type": "object", "properties": { "message": { "type": "string", "x-go-name": "Message" } }, "x-go-package": "code.vikunja.io/api/models" }, "Namespace": { "description": "Namespace holds informations about a namespace", "type": "object", "properties": { "created": { "type": "integer", "format": "int64", "x-go-name": "Created" }, "description": { "type": "string", "x-go-name": "Description" }, "id": { "type": "integer", "format": "int64", "x-go-name": "ID" }, "name": { "type": "string", "x-go-name": "Name" }, "owner": { "$ref": "#/definitions/User" }, "updated": { "type": "integer", "format": "int64", "x-go-name": "Updated" } }, "x-go-package": "code.vikunja.io/api/models" }, "Team": { "description": "Team holds a team object", "type": "object", "properties": { "created": { "type": "integer", "format": "int64", "x-go-name": "Created" }, "created_by": { "$ref": "#/definitions/User" }, "description": { "type": "string", "x-go-name": "Description" }, "id": { "type": "integer", "format": "int64", "x-go-name": "ID" }, "members": { "type": "array", "items": { "$ref": "#/definitions/TeamUser" }, "x-go-name": "Members" }, "name": { "type": "string", "x-go-name": "Name" }, "updated": { "type": "integer", "format": "int64", "x-go-name": "Updated" } }, "x-go-package": "code.vikunja.io/api/models" }, "TeamList": { "description": "TeamList defines the relation between a team and a list", "type": "object", "properties": { "created": { "type": "integer", "format": "int64", "x-go-name": "Created" }, "id": { "type": "integer", "format": "int64", "x-go-name": "ID" }, "list_id": { "type": "integer", "format": "int64", "x-go-name": "ListID" }, "right": { "$ref": "#/definitions/TeamRight" }, "team_id": { "type": "integer", "format": "int64", "x-go-name": "TeamID" }, "updated": { "type": "integer", "format": "int64", "x-go-name": "Updated" } }, "x-go-package": "code.vikunja.io/api/models" }, "TeamMember": { "description": "TeamMember defines the relationship between a user and a team", "type": "object", "properties": { "admin": { "type": "boolean", "x-go-name": "Admin" }, "created": { "type": "integer", "format": "int64", "x-go-name": "Created" }, "id": { "type": "integer", "format": "int64", "x-go-name": "ID" }, "team_id": { "type": "integer", "format": "int64", "x-go-name": "TeamID" }, "updated": { "type": "integer", "format": "int64", "x-go-name": "Updated" }, "user_id": { "type": "integer", "format": "int64", "x-go-name": "UserID" } }, "x-go-package": "code.vikunja.io/api/models" }, "TeamNamespace": { "description": "TeamNamespace defines the relationship between a Team and a Namespace", "type": "object", "properties": { "created": { "type": "integer", "format": "int64", "x-go-name": "Created" }, "id": { "type": "integer", "format": "int64", "x-go-name": "ID" }, "namespace_id": { "type": "integer", "format": "int64", "x-go-name": "NamespaceID" }, "right": { "$ref": "#/definitions/TeamRight" }, "team_id": { "type": "integer", "format": "int64", "x-go-name": "TeamID" }, "updated": { "type": "integer", "format": "int64", "x-go-name": "Updated" } }, "x-go-package": "code.vikunja.io/api/models" }, "TeamRight": { "description": "TeamRight defines the rights teams can have for lists/namespaces", "type": "integer", "format": "int64", "x-go-package": "code.vikunja.io/api/models" }, "TeamUser": { "description": "TeamUser is the team member type", "type": "object", "properties": { "admin": { "type": "boolean", "x-go-name": "Admin" }, "email": { "type": "string", "x-go-name": "Email" }, "id": { "type": "integer", "format": "int64", "x-go-name": "ID" }, "username": { "type": "string", "x-go-name": "Username" } }, "x-go-package": "code.vikunja.io/api/models" }, "User": { "description": "User holds information about an user", "type": "object", "properties": { "email": { "type": "string", "x-go-name": "Email" }, "id": { "type": "integer", "format": "int64", "x-go-name": "ID" }, "username": { "type": "string", "x-go-name": "Username" } }, "x-go-package": "code.vikunja.io/api/models" }, "UserLogin": { "description": "UserLogin Object to recive user credentials in JSON format", "type": "object", "properties": { "password": { "type": "string", "x-go-name": "Password" }, "username": { "type": "string", "x-go-name": "Username" } }, "x-go-package": "code.vikunja.io/api/models" } }, "responses": { "List": { "description": "List", "schema": { "$ref": "#/definitions/List" } }, "ListItem": { "description": "ListItem", "schema": { "$ref": "#/definitions/ListItem" } }, "Message": { "description": "Message", "schema": { "$ref": "#/definitions/Message" } }, "Namespace": { "description": "Namespace", "schema": { "$ref": "#/definitions/Namespace" } }, "Team": { "description": "Team", "schema": { "$ref": "#/definitions/Team" } }, "TeamList": { "description": "TeamList", "schema": { "$ref": "#/definitions/TeamList" } }, "TeamMember": { "description": "TeamMember", "schema": { "$ref": "#/definitions/TeamMember" } }, "TeamNamespace": { "description": "TeamNamespace", "schema": { "$ref": "#/definitions/TeamNamespace" } }, "Token": { "description": "Token", "schema": { "type": "object", "required": [ "token" ], "properties": { "token": { "description": "The token", "type": "string", "x-go-name": "Token" } } } }, "User": { "description": "User Object", "schema": { "$ref": "#/definitions/User" } }, "parameterBodies": { "description": "parameterBodies", "schema": { "$ref": "#/definitions/TeamNamespace" } } } }