vikunja-api/pkg/swagger/swagger.yaml
konrad 6bdddd462a Favorite lists (#654)
Add tests

Remove the favorites pseudo namespace if there are no lists or tasks favorited

Regenerate swagger docs

Fix favorite lists not being updated because of nonexisting users (the favorite list does not have one)

Make the pseudo favorites list always favorited

Add favorited lists to the favorites pseudo namespace

Add favorite field to list

Co-authored-by: kolaente <k@knt.li>
Reviewed-on: https://kolaente.dev/vikunja/api/pulls/654
2020-09-06 14:20:16 +00:00

4883 lines
141 KiB
YAML

basePath: /api/v1
definitions:
afero.File:
type: object
background.Image:
properties:
id:
type: string
info:
description: This can be used to supply extra information from an image provider to clients
type: object
thumb:
type: string
url:
type: string
type: object
files.File:
properties:
created:
type: string
id:
type: integer
mime:
type: string
name:
type: string
size:
type: integer
type: object
handler.AuthURL:
properties:
url:
type: string
type: object
migration.Status:
properties:
id:
type: integer
migrator_name:
type: string
time:
type: string
type: object
models.Bucket:
properties:
created:
description: A timestamp when this bucket was created. You cannot change this value.
type: string
created_by:
$ref: '#/definitions/user.User'
description: The user who initially created the bucket.
type: object
id:
description: The unique, numeric id of this bucket.
type: integer
limit:
description: How many tasks can be at the same time on this board max
type: integer
list_id:
description: The list this bucket belongs to.
type: integer
tasks:
description: All tasks which belong to this bucket.
items:
$ref: '#/definitions/models.Task'
type: array
title:
description: The title of this bucket.
minLength: 1
type: string
updated:
description: A timestamp when this bucket was last updated. You cannot change this value.
type: string
type: object
models.BulkAssignees:
properties:
assignees:
description: A list with all assignees
items:
$ref: '#/definitions/user.User'
type: array
type: object
models.BulkTask:
properties:
assignees:
description: An array of users who are assigned to this task
items:
$ref: '#/definitions/user.User'
type: array
attachments:
description: All attachments this task has
items:
$ref: '#/definitions/models.TaskAttachment'
type: array
bucket_id:
description: BucketID is the ID of the kanban bucket this task belongs to.
type: integer
created:
description: A timestamp when this task was created. You cannot change this value.
type: string
created_by:
$ref: '#/definitions/user.User'
description: The user who initially created the task.
type: object
description:
description: The task description.
type: string
done:
description: Whether a task is done or not.
type: boolean
done_at:
description: The time when a task was marked as done.
type: string
due_date:
description: The time when the task is due.
type: string
end_date:
description: When this task ends.
type: string
hex_color:
description: The task color in hex
maxLength: 6
type: string
id:
description: The unique, numeric id of this task.
type: integer
identifier:
description: The task identifier, based on the list identifier and the task's index
type: string
index:
description: The task index, calculated per list
type: integer
is_favorite:
description: True if a task is a favorite task. Favorite tasks show up in a separate "Important" list
type: boolean
labels:
description: An array of labels which are associated with this task.
items:
$ref: '#/definitions/models.Label'
type: array
list_id:
description: The list this task belongs to.
type: integer
percent_done:
description: Determines how far a task is left from being done
type: number
position:
description: |-
The position of the task - any task list can be sorted as usual by this parameter.
When accessing tasks via kanban buckets, this is primarily used to sort them based on a range
We're using a float64 here to make it possible to put any task within any two other tasks (by changing the number).
You would calculate the new position between two tasks with something like task3.position = (task2.position - task1.position) / 2.
A 64-Bit float leaves plenty of room to initially give tasks a position with 2^16 difference to the previous task
which also leaves a lot of room for rearranging and sorting later.
type: number
priority:
description: The task priority. Can be anything you want, it is possible to sort by this later.
type: integer
related_tasks:
$ref: '#/definitions/models.RelatedTaskMap'
description: All related tasks, grouped by their relation kind
type: object
reminder_dates:
description: An array of datetimes when the user wants to be reminded of the task.
items:
type: string
type: array
repeat_after:
description: An amount in seconds this task repeats itself. If this is set, when marking the task as done, it will mark itself as "undone" and then increase all remindes and the due date by its amount.
type: integer
repeat_from_current_date:
description: If specified, a repeating task will repeat from the current date rather than the last set date.
type: boolean
start_date:
description: When this task starts.
type: string
task_ids:
description: A list of task ids to update
items:
type: integer
type: array
title:
description: The task text. This is what you'll see in the list.
maxLength: 250
minLength: 3
type: string
updated:
description: A timestamp when this task was last updated. You cannot change this value.
type: string
type: object
models.Label:
properties:
created:
description: A timestamp when this label was created. You cannot change this value.
type: string
created_by:
$ref: '#/definitions/user.User'
description: The user who created this label
type: object
description:
description: The label description.
type: string
hex_color:
description: The color this label has
maxLength: 6
type: string
id:
description: The unique, numeric id of this label.
type: integer
title:
description: The title of the lable. You'll see this one on tasks associated with it.
maxLength: 250
minLength: 3
type: string
updated:
description: A timestamp when this label was last updated. You cannot change this value.
type: string
type: object
models.LabelTask:
properties:
created:
description: A timestamp when this task was created. You cannot change this value.
type: string
label_id:
description: The label id you want to associate with a task.
type: integer
type: object
models.LabelTaskBulk:
properties:
labels:
description: All labels you want to update at once.
items:
$ref: '#/definitions/models.Label'
type: array
type: object
models.LinkSharing:
properties:
created:
description: A timestamp when this list was shared. You cannot change this value.
type: string
hash:
description: The public id to get this shared list
type: string
id:
description: The ID of the shared thing
type: integer
right:
default: 0
description: The right this list is shared with. 0 = Read only, 1 = Read & Write, 2 = Admin. See the docs for more details.
maximum: 2
type: integer
shared_by:
$ref: '#/definitions/user.User'
description: The user who shared this list
type: object
sharing_type:
default: 0
description: The kind of this link. 0 = undefined, 1 = without password, 2 = with password (currently not implemented).
maximum: 2
type: integer
updated:
description: A timestamp when this share was last updated. You cannot change this value.
type: string
type: object
models.List:
properties:
background_information:
description: Holds extra information about the background set since some background providers require attribution or similar. If not null, the background can be accessed at /lists/{listID}/background
type: object
created:
description: A timestamp when this list was created. You cannot change this value.
type: string
description:
description: The description of the list.
type: string
hex_color:
description: The hex color of this list
maxLength: 6
type: string
id:
description: The unique, numeric id of this list.
type: integer
identifier:
description: The unique list short identifier. Used to build task identifiers.
maxLength: 10
minLength: 0
type: string
is_archived:
description: Whether or not a list is archived.
type: boolean
is_favorite:
description: True if a list is a favorite. Favorite lists show up in a separate namespace.
type: boolean
namespace_id:
type: integer
owner:
$ref: '#/definitions/user.User'
description: The user who created this list.
type: object
title:
description: The title of the list. You'll see this in the namespace overview.
maxLength: 250
minLength: 3
type: string
updated:
description: A timestamp when this list was last updated. You cannot change this value.
type: string
type: object
models.ListDuplicate:
properties:
list:
$ref: '#/definitions/models.List'
description: The copied list
type: object
namespace_id:
description: The target namespace ID
type: integer
type: object
models.ListUser:
properties:
created:
description: A timestamp when this relation was created. You cannot change this value.
type: string
id:
description: The unique, numeric id of this list <-> user relation.
type: integer
right:
default: 0
description: The right this user has. 0 = Read only, 1 = Read & Write, 2 = Admin. See the docs for more details.
maximum: 2
type: integer
updated:
description: A timestamp when this relation was last updated. You cannot change this value.
type: string
user_id:
description: The username.
type: string
type: object
models.Message:
properties:
message:
description: A standard message.
type: string
type: object
models.Namespace:
properties:
created:
description: A timestamp when this namespace was created. You cannot change this value.
type: string
description:
description: The description of the namespace
type: string
hex_color:
description: The hex color of this namespace
maxLength: 6
type: string
id:
description: The unique, numeric id of this namespace.
type: integer
is_archived:
description: Whether or not a namespace is archived.
type: boolean
owner:
$ref: '#/definitions/user.User'
description: The user who owns this namespace
type: object
title:
description: The name of this namespace.
maxLength: 250
minLength: 5
type: string
updated:
description: A timestamp when this namespace was last updated. You cannot change this value.
type: string
type: object
models.NamespaceUser:
properties:
created:
description: A timestamp when this relation was created. You cannot change this value.
type: string
id:
description: The unique, numeric id of this namespace <-> user relation.
type: integer
right:
default: 0
description: The right this user has. 0 = Read only, 1 = Read & Write, 2 = Admin. See the docs for more details.
maximum: 2
type: integer
updated:
description: A timestamp when this relation was last updated. You cannot change this value.
type: string
user_id:
description: The username.
type: string
type: object
models.NamespaceWithLists:
properties:
created:
description: A timestamp when this namespace was created. You cannot change this value.
type: string
description:
description: The description of the namespace
type: string
hex_color:
description: The hex color of this namespace
maxLength: 6
type: string
id:
description: The unique, numeric id of this namespace.
type: integer
is_archived:
description: Whether or not a namespace is archived.
type: boolean
lists:
items:
$ref: '#/definitions/models.List'
type: array
owner:
$ref: '#/definitions/user.User'
description: The user who owns this namespace
type: object
title:
description: The name of this namespace.
maxLength: 250
minLength: 5
type: string
updated:
description: A timestamp when this namespace was last updated. You cannot change this value.
type: string
type: object
models.RelatedTaskMap:
additionalProperties:
items:
$ref: '#/definitions/models.Task'
type: array
type: object
models.Task:
properties:
assignees:
description: An array of users who are assigned to this task
items:
$ref: '#/definitions/user.User'
type: array
attachments:
description: All attachments this task has
items:
$ref: '#/definitions/models.TaskAttachment'
type: array
bucket_id:
description: BucketID is the ID of the kanban bucket this task belongs to.
type: integer
created:
description: A timestamp when this task was created. You cannot change this value.
type: string
created_by:
$ref: '#/definitions/user.User'
description: The user who initially created the task.
type: object
description:
description: The task description.
type: string
done:
description: Whether a task is done or not.
type: boolean
done_at:
description: The time when a task was marked as done.
type: string
due_date:
description: The time when the task is due.
type: string
end_date:
description: When this task ends.
type: string
hex_color:
description: The task color in hex
maxLength: 6
type: string
id:
description: The unique, numeric id of this task.
type: integer
identifier:
description: The task identifier, based on the list identifier and the task's index
type: string
index:
description: The task index, calculated per list
type: integer
is_favorite:
description: True if a task is a favorite task. Favorite tasks show up in a separate "Important" list
type: boolean
labels:
description: An array of labels which are associated with this task.
items:
$ref: '#/definitions/models.Label'
type: array
list_id:
description: The list this task belongs to.
type: integer
percent_done:
description: Determines how far a task is left from being done
type: number
position:
description: |-
The position of the task - any task list can be sorted as usual by this parameter.
When accessing tasks via kanban buckets, this is primarily used to sort them based on a range
We're using a float64 here to make it possible to put any task within any two other tasks (by changing the number).
You would calculate the new position between two tasks with something like task3.position = (task2.position - task1.position) / 2.
A 64-Bit float leaves plenty of room to initially give tasks a position with 2^16 difference to the previous task
which also leaves a lot of room for rearranging and sorting later.
type: number
priority:
description: The task priority. Can be anything you want, it is possible to sort by this later.
type: integer
related_tasks:
$ref: '#/definitions/models.RelatedTaskMap'
description: All related tasks, grouped by their relation kind
type: object
reminder_dates:
description: An array of datetimes when the user wants to be reminded of the task.
items:
type: string
type: array
repeat_after:
description: An amount in seconds this task repeats itself. If this is set, when marking the task as done, it will mark itself as "undone" and then increase all remindes and the due date by its amount.
type: integer
repeat_from_current_date:
description: If specified, a repeating task will repeat from the current date rather than the last set date.
type: boolean
start_date:
description: When this task starts.
type: string
title:
description: The task text. This is what you'll see in the list.
maxLength: 250
minLength: 3
type: string
updated:
description: A timestamp when this task was last updated. You cannot change this value.
type: string
type: object
models.TaskAssginee:
properties:
created:
type: string
user_id:
type: integer
type: object
models.TaskAttachment:
properties:
created:
type: string
created_by:
$ref: '#/definitions/user.User'
type: object
file:
$ref: '#/definitions/files.File'
type: object
id:
type: integer
task_id:
type: integer
type: object
models.TaskComment:
properties:
author:
$ref: '#/definitions/user.User'
type: object
comment:
type: string
created:
type: string
id:
type: integer
updated:
type: string
type: object
models.TaskRelation:
properties:
created:
description: A timestamp when this label was created. You cannot change this value.
type: string
created_by:
$ref: '#/definitions/user.User'
description: The user who created this relation
type: object
other_task_id:
description: The ID of the other task, the task which is being related.
type: integer
relation_kind:
description: The kind of the relation.
type: string
task_id:
description: The ID of the "base" task, the task which has a relation to another.
type: integer
type: object
models.Team:
properties:
created:
description: A timestamp when this relation was created. You cannot change this value.
type: string
created_by:
$ref: '#/definitions/user.User'
description: The user who created this team.
type: object
description:
description: The team's description.
type: string
id:
description: The unique, numeric id of this team.
type: integer
members:
description: An array of all members in this team.
items:
$ref: '#/definitions/models.TeamUser'
type: array
name:
description: The name of this team.
maxLength: 250
minLength: 5
type: string
updated:
description: A timestamp when this relation was last updated. You cannot change this value.
type: string
type: object
models.TeamList:
properties:
created:
description: A timestamp when this relation was created. You cannot change this value.
type: string
id:
description: The unique, numeric id of this list <-> team relation.
type: integer
right:
default: 0
description: The right this team has. 0 = Read only, 1 = Read & Write, 2 = Admin. See the docs for more details.
maximum: 2
type: integer
team_id:
description: The team id.
type: integer
updated:
description: A timestamp when this relation was last updated. You cannot change this value.
type: string
type: object
models.TeamMember:
properties:
admin:
description: Whether or not the member is an admin of the team. See the docs for more about what a team admin can do
type: boolean
created:
description: A timestamp when this relation was created. You cannot change this value.
type: string
id:
description: The unique, numeric id of this team member relation.
type: integer
username:
description: The username of the member. We use this to prevent automated user id entering.
type: string
type: object
models.TeamNamespace:
properties:
created:
description: A timestamp when this relation was created. You cannot change this value.
type: string
id:
description: The unique, numeric id of this namespace <-> team relation.
type: integer
right:
default: 0
description: The right this team has. 0 = Read only, 1 = Read & Write, 2 = Admin. See the docs for more details.
maximum: 2
type: integer
team_id:
description: The team id.
type: integer
updated:
description: A timestamp when this relation was last updated. You cannot change this value.
type: string
type: object
models.TeamUser:
properties:
admin:
description: Whether or not the member is an admin of the team. See the docs for more about what a team admin can do
type: boolean
created:
description: A timestamp when this task was created. You cannot change this value.
type: string
email:
description: The user's email address.
maxLength: 250
type: string
id:
description: The unique, numeric id of this user.
type: integer
updated:
description: A timestamp when this task was last updated. You cannot change this value.
type: string
username:
description: The username of the user. Is always unique.
maxLength: 250
minLength: 3
type: string
type: object
models.TeamWithRight:
properties:
created:
description: A timestamp when this relation was created. You cannot change this value.
type: string
created_by:
$ref: '#/definitions/user.User'
description: The user who created this team.
type: object
description:
description: The team's description.
type: string
id:
description: The unique, numeric id of this team.
type: integer
members:
description: An array of all members in this team.
items:
$ref: '#/definitions/models.TeamUser'
type: array
name:
description: The name of this team.
maxLength: 250
minLength: 5
type: string
right:
type: integer
updated:
description: A timestamp when this relation was last updated. You cannot change this value.
type: string
type: object
models.UserWithRight:
properties:
created:
description: A timestamp when this task was created. You cannot change this value.
type: string
email:
description: The user's email address.
maxLength: 250
type: string
id:
description: The unique, numeric id of this user.
type: integer
right:
type: integer
updated:
description: A timestamp when this task was last updated. You cannot change this value.
type: string
username:
description: The username of the user. Is always unique.
maxLength: 250
minLength: 3
type: string
type: object
todoist.Migration:
properties:
code:
type: string
type: object
user.APIUserPassword:
properties:
email:
description: The user's email address
maxLength: 250
type: string
id:
description: The unique, numeric id of this user.
type: integer
password:
description: The user's password in clear text. Only used when registering the user.
maxLength: 250
minLength: 8
type: string
username:
description: The username of the username. Is always unique.
maxLength: 250
minLength: 3
type: string
type: object
user.EmailConfirm:
properties:
token:
description: The email confirm token sent via email.
type: string
type: object
user.EmailUpdate:
properties:
new_email:
description: The new email address. Needs to be a valid email address.
type: string
password:
description: The password of the user for confirmation.
type: string
type: object
user.Login:
properties:
password:
description: The password for the user.
type: string
totp_passcode:
description: The totp passcode of a user. Only needs to be provided when enabled.
type: string
username:
description: The username used to log in.
type: string
type: object
user.PasswordReset:
properties:
new_password:
description: The new password for this user.
type: string
token:
description: The previously issued reset token.
type: string
type: object
user.PasswordTokenRequest:
properties:
email:
maxLength: 250
type: string
type: object
user.TOTP:
properties:
enabled:
description: The totp entry will only be enabled after the user verified they have a working totp setup.
type: boolean
secret:
type: string
url:
description: The totp url used to be able to enroll the user later
type: string
type: object
user.TOTPPasscode:
properties:
passcode:
type: string
type: object
user.User:
properties:
created:
description: A timestamp when this task was created. You cannot change this value.
type: string
email:
description: The user's email address.
maxLength: 250
type: string
id:
description: The unique, numeric id of this user.
type: integer
updated:
description: A timestamp when this task was last updated. You cannot change this value.
type: string
username:
description: The username of the user. Is always unique.
maxLength: 250
minLength: 3
type: string
type: object
v1.Token:
properties:
token:
type: string
type: object
v1.UserAvatarProvider:
properties:
avatar_provider:
type: string
type: object
v1.UserPassword:
properties:
new_password:
type: string
old_password:
type: string
type: object
v1.legalInfo:
properties:
imprint_url:
type: string
privacy_policy_url:
type: string
type: object
v1.vikunjaInfos:
properties:
available_migrators:
items:
type: string
type: array
caldav_enabled:
type: boolean
enabled_background_providers:
items:
type: string
type: array
frontend_url:
type: string
legal:
$ref: '#/definitions/v1.legalInfo'
type: object
link_sharing_enabled:
type: boolean
max_file_size:
type: string
motd:
type: string
registration_enabled:
type: boolean
task_attachments_enabled:
type: boolean
totp_enabled:
type: boolean
version:
type: string
type: object
web.HTTPError:
properties:
code:
type: integer
message:
type: string
type: object
wunderlist.Migration:
properties:
code:
description: Code is the code used to get a user api token
type: string
type: object
info:
contact:
email: hello@vikunja.io
name: General Vikunja contact
url: http://vikunja.io/en/contact/
description: |-
# Pagination
Every endpoint capable of pagination will return two headers:
* `x-pagination-total-pages`: The total number of available pages for this request
* `x-pagination-result-count`: The number of items returned for this request.
# Rights
All endpoints which return a single item (list, task, namespace, etc.) - no array - will also return a `x-max-right` header with the max right the user has on this item as an int where `0` is `Read Only`, `1` is `Read & Write` and `2` is `Admin`.
This can be used to show or hide ui elements based on the rights the user has.
# Authorization
**JWT-Auth:** Main authorization method, used for most of the requests. Needs `Authorization: Bearer <jwt-token>`-header to authenticate successfully.
**BasicAuth:** Only used when requesting tasks via caldav.
<!-- ReDoc-Inject: <security-definitions> -->
license:
name: GPLv3
url: http://code.vikunja.io/api/src/branch/master/LICENSE
title: Vikunja API
paths:
/{username}/avatar:
get:
description: Returns the user avatar as image.
parameters:
- description: The username of the user who's avatar you want to get
in: path
name: username
required: true
type: string
- description: The size of the avatar you want to get
in: query
name: size
type: integer
produces:
- application/octet-stream
responses:
"200":
description: The avatar
schema:
type: ""
"404":
description: The user does not exist.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
summary: User Avatar
tags:
- user
/backgrounds/unsplash/image/{image}:
get:
description: Get an unsplash image. **Returns json on error.**
parameters:
- description: Unsplash Image ID
in: path
name: thumb
required: true
type: integer
produces:
- application/octet-stream
responses:
"200":
description: The image
schema:
type: ""
"404":
description: The image does not exist.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get an unsplash image
tags:
- list
/backgrounds/unsplash/image/{image}/thumb:
get:
description: Get an unsplash thumbnail image. The thumbnail is cropped to a max width of 200px. **Returns json on error.**
parameters:
- description: Unsplash Image ID
in: path
name: thumb
required: true
type: integer
produces:
- application/octet-stream
responses:
"200":
description: The thumbnail
schema:
type: ""
"404":
description: The image does not exist.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get an unsplash thumbnail image
tags:
- list
/backgrounds/unsplash/search:
get:
description: Search for a list background from unsplash
parameters:
- description: Search backgrounds from unsplash with this search term.
in: query
name: s
type: string
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: p
type: integer
produces:
- application/json
responses:
"200":
description: An array with photos
schema:
items:
$ref: '#/definitions/background.Image'
type: array
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Search for a background from unsplash
tags:
- list
/info:
get:
description: Returns the version, frontendurl, motd and various settings of Vikunja
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/v1.vikunjaInfos'
summary: Info
tags:
- service
/labels:
get:
consumes:
- application/json
description: Returns all labels which are either created by the user or associated with a task the user has at least read-access to.
parameters:
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search labels by label text.
in: query
name: s
type: string
produces:
- application/json
responses:
"200":
description: The labels
schema:
items:
$ref: '#/definitions/models.Label'
type: array
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get all labels a user has access to
tags:
- labels
put:
consumes:
- application/json
description: Creates a new label.
parameters:
- description: The label object
in: body
name: label
required: true
schema:
$ref: '#/definitions/models.Label'
produces:
- application/json
responses:
"200":
description: The created label object.
schema:
$ref: '#/definitions/models.Label'
"400":
description: Invalid label object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Create a label
tags:
- labels
/labels/{id}:
delete:
consumes:
- application/json
description: Delete an existing label. The user needs to be the creator of the label to be able to do this.
parameters:
- description: Label ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The label was successfully deleted.
schema:
$ref: '#/definitions/models.Label'
"403":
description: Not allowed to delete the label.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: Label not found.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Delete a label
tags:
- labels
get:
consumes:
- application/json
description: Returns one label by its ID.
parameters:
- description: Label ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The label
schema:
$ref: '#/definitions/models.Label'
"403":
description: The user does not have access to the label
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: Label not found
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Gets one label
tags:
- labels
put:
consumes:
- application/json
description: Update an existing label. The user needs to be the creator of the label to be able to do this.
parameters:
- description: Label ID
in: path
name: id
required: true
type: integer
- description: The label object
in: body
name: label
required: true
schema:
$ref: '#/definitions/models.Label'
produces:
- application/json
responses:
"200":
description: The created label object.
schema:
$ref: '#/definitions/models.Label'
"400":
description: Invalid label object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: Not allowed to update the label.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: Label not found.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Update a label
tags:
- labels
/lists:
get:
consumes:
- application/json
description: Returns all lists a user has access to.
parameters:
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search lists by title.
in: query
name: s
type: string
- description: If true, also returns all archived lists.
in: query
name: is_archived
type: boolean
produces:
- application/json
responses:
"200":
description: The lists
schema:
items:
$ref: '#/definitions/models.List'
type: array
"403":
description: The user does not have access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get all lists a user has access to
tags:
- list
/lists/{id}:
delete:
description: Delets a list
parameters:
- description: List ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The list was successfully deleted.
schema:
$ref: '#/definitions/models.Message'
"400":
description: Invalid list object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Deletes a list
tags:
- list
get:
consumes:
- application/json
description: Returns a list by its ID.
parameters:
- description: List ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The list
schema:
$ref: '#/definitions/models.List'
"403":
description: The user does not have access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Gets one list
tags:
- list
post:
consumes:
- application/json
description: Updates a list. This does not include adding a task (see below).
parameters:
- description: List ID
in: path
name: id
required: true
type: integer
- description: The list with updated values you want to update.
in: body
name: list
required: true
schema:
$ref: '#/definitions/models.List'
produces:
- application/json
responses:
"200":
description: The updated list.
schema:
$ref: '#/definitions/models.List'
"400":
description: Invalid list object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Updates a list
tags:
- list
put:
consumes:
- application/json
description: Inserts a task into a list.
parameters:
- description: List ID
in: path
name: id
required: true
type: integer
- description: The task object
in: body
name: task
required: true
schema:
$ref: '#/definitions/models.Task'
produces:
- application/json
responses:
"200":
description: The created task object.
schema:
$ref: '#/definitions/models.Task'
"400":
description: Invalid task object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Create a task
tags:
- task
/lists/{id}/background:
get:
description: Get the list background of a specific list. **Returns json on error.**
parameters:
- description: List ID
in: path
name: id
required: true
type: integer
produces:
- application/octet-stream
responses:
"200":
description: The list background file.
schema:
type: ""
"403":
description: No access to this list.
schema:
$ref: '#/definitions/models.Message'
"404":
description: The list does not exist.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get the list background
tags:
- list
/lists/{id}/backgrounds/unsplash:
post:
consumes:
- application/json
description: Sets a photo from unsplash as list background.
parameters:
- description: List ID
in: path
name: id
required: true
type: integer
- description: The image you want to set as background
in: body
name: list
required: true
schema:
$ref: '#/definitions/background.Image'
produces:
- application/json
responses:
"200":
description: The background has been successfully set.
schema:
$ref: '#/definitions/models.List'
"400":
description: Invalid image object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Set an unsplash photo as list background
tags:
- list
/lists/{id}/backgrounds/upload:
put:
consumes:
- multipart/form-data
description: Upload a list background.
parameters:
- description: List ID
in: path
name: id
required: true
type: integer
- description: The file as single file.
in: formData
name: background
required: true
type: string
produces:
- application/json
responses:
"200":
description: The background was set successfully.
schema:
$ref: '#/definitions/models.Message'
"400":
description: File is no image.
schema:
$ref: '#/definitions/models.Message'
"403":
description: File too large.
schema:
$ref: '#/definitions/models.Message'
"404":
description: The list does not exist.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Upload a list background
tags:
- list
/lists/{id}/buckets:
get:
consumes:
- application/json
description: Returns all kanban buckets with belong to a list including their tasks.
parameters:
- description: List Id
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The buckets with their tasks
schema:
items:
$ref: '#/definitions/models.Bucket'
type: array
"500":
description: Internal server error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get all kanban buckets of a list
tags:
- task
put:
consumes:
- application/json
description: Creates a new kanban bucket on a list.
parameters:
- description: List Id
in: path
name: id
required: true
type: integer
- description: The bucket object
in: body
name: bucket
required: true
schema:
$ref: '#/definitions/models.Bucket'
produces:
- application/json
responses:
"200":
description: The created bucket object.
schema:
$ref: '#/definitions/models.Bucket'
"400":
description: Invalid bucket object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: The list does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Create a new bucket
tags:
- task
/lists/{id}/listusers:
get:
consumes:
- application/json
description: Lists all users (without emailadresses). Also possible to search for a specific user.
parameters:
- description: Search for a user by its name.
in: query
name: s
type: string
- description: List ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: All (found) users.
schema:
items:
$ref: '#/definitions/user.User'
type: array
"400":
description: Something's invalid.
schema:
$ref: '#/definitions/web.HTTPError'
"401":
description: The user does not have the right to see the list.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal server error.
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get users
tags:
- list
/lists/{id}/teams:
get:
consumes:
- application/json
description: Returns a list with all teams which have access on a given list.
parameters:
- description: List ID
in: path
name: id
required: true
type: integer
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search teams by its name.
in: query
name: s
type: string
produces:
- application/json
responses:
"200":
description: The teams with their right.
schema:
items:
$ref: '#/definitions/models.TeamWithRight'
type: array
"403":
description: No right to see the list.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get teams on a list
tags:
- sharing
put:
consumes:
- application/json
description: Gives a team access to a list.
parameters:
- description: List ID
in: path
name: id
required: true
type: integer
- description: The team you want to add to the list.
in: body
name: list
required: true
schema:
$ref: '#/definitions/models.TeamList'
produces:
- application/json
responses:
"200":
description: The created team<->list relation.
schema:
$ref: '#/definitions/models.TeamList'
"400":
description: Invalid team list object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: The team does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Add a team to a list
tags:
- sharing
/lists/{id}/users:
get:
consumes:
- application/json
description: Returns a list with all users which have access on a given list.
parameters:
- description: List ID
in: path
name: id
required: true
type: integer
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search users by its name.
in: query
name: s
type: string
produces:
- application/json
responses:
"200":
description: The users with the right they have.
schema:
items:
$ref: '#/definitions/models.UserWithRight'
type: array
"403":
description: No right to see the list.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get users on a list
tags:
- sharing
put:
consumes:
- application/json
description: Gives a user access to a list.
parameters:
- description: List ID
in: path
name: id
required: true
type: integer
- description: The user you want to add to the list.
in: body
name: list
required: true
schema:
$ref: '#/definitions/models.ListUser'
produces:
- application/json
responses:
"200":
description: The created user<->list relation.
schema:
$ref: '#/definitions/models.ListUser'
"400":
description: Invalid user list object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: The user does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Add a user to a list
tags:
- sharing
/lists/{list}/shares:
get:
consumes:
- application/json
description: Returns all link shares which exist for a given list
parameters:
- description: List ID
in: path
name: list
required: true
type: integer
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search shares by hash.
in: query
name: s
type: string
produces:
- application/json
responses:
"200":
description: The share links
schema:
items:
$ref: '#/definitions/models.LinkSharing'
type: array
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get all link shares for a list
tags:
- sharing
put:
consumes:
- application/json
description: Share a list via link. The user needs to have write-access to the list to be able do this.
parameters:
- description: List ID
in: path
name: list
required: true
type: integer
- description: The new link share object
in: body
name: label
required: true
schema:
$ref: '#/definitions/models.LinkSharing'
produces:
- application/json
responses:
"200":
description: The created link share object.
schema:
$ref: '#/definitions/models.LinkSharing'
"400":
description: Invalid link share object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: Not allowed to add the list share.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: The list does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Share a list via link
tags:
- sharing
/lists/{list}/shares/{share}:
delete:
consumes:
- application/json
description: Remove a link share. The user needs to have write-access to the list to be able do this.
parameters:
- description: List ID
in: path
name: list
required: true
type: integer
- description: Share Link ID
in: path
name: share
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The link was successfully removed.
schema:
$ref: '#/definitions/models.Message'
"403":
description: Not allowed to remove the link.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: Share Link not found.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Remove a link share
tags:
- sharing
get:
consumes:
- application/json
description: Returns one link share by its ID.
parameters:
- description: List ID
in: path
name: list
required: true
type: integer
- description: Share ID
in: path
name: share
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The share links
schema:
$ref: '#/definitions/models.LinkSharing'
"403":
description: No access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: Share Link not found.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get one link shares for a list
tags:
- sharing
/lists/{listID}/buckets/{bucketID}:
delete:
consumes:
- application/json
description: Deletes an existing kanban bucket and dissociates all of its task. It does not delete any tasks. You cannot delete the last bucket on a list.
parameters:
- description: List Id
in: path
name: listID
required: true
type: integer
- description: Bucket Id
in: path
name: bucketID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: Successfully deleted.
schema:
$ref: '#/definitions/models.Message'
"404":
description: The bucket does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Deletes an existing bucket
tags:
- task
post:
consumes:
- application/json
description: Updates an existing kanban bucket.
parameters:
- description: List Id
in: path
name: listID
required: true
type: integer
- description: Bucket Id
in: path
name: bucketID
required: true
type: integer
- description: The bucket object
in: body
name: bucket
required: true
schema:
$ref: '#/definitions/models.Bucket'
produces:
- application/json
responses:
"200":
description: The created bucket object.
schema:
$ref: '#/definitions/models.Bucket'
"400":
description: Invalid bucket object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: The bucket does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Update an existing bucket
tags:
- task
/lists/{listID}/duplicate:
put:
consumes:
- application/json
description: Copies the list, tasks, files, kanban data, assignees, comments, attachments, lables, relations, backgrounds, user/team rights and link shares from one list to a new namespace. The user needs read access in the list and write access in the namespace of the new list.
parameters:
- description: The list ID to duplicate
in: path
name: listID
required: true
type: integer
- description: The target namespace which should hold the copied list.
in: body
name: list
required: true
schema:
$ref: '#/definitions/models.ListDuplicate'
produces:
- application/json
responses:
"200":
description: The created list.
schema:
$ref: '#/definitions/models.ListDuplicate'
"400":
description: Invalid list duplicate object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the list or namespace
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Duplicate an existing list
tags:
- list
/lists/{listID}/tasks:
get:
consumes:
- application/json
description: Returns all tasks for the current list.
parameters:
- description: The list ID.
in: path
name: listID
required: true
type: integer
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search tasks by task text.
in: query
name: s
type: string
- description: The sorting parameter. You can pass this multiple times to get the tasks ordered by multiple different parametes, along with `order_by`. Possible values to sort by are `id`, `title`, `description`, `done`, `done_at`, `due_date`, `created_by_id`, `list_id`, `repeat_after`, `priority`, `start_date`, `end_date`, `hex_color`, `percent_done`, `uid`, `created`, `updated`. Default is `id`.
in: query
name: sort_by
type: string
- description: The ordering parameter. Possible values to order by are `asc` or `desc`. Default is `asc`.
in: query
name: order_by
type: string
- description: The name of the field to filter by. Accepts an array for multiple filters which will be chanied together, all supplied filter must match.
in: query
name: filter_by
type: string
- description: The value to filter for.
in: query
name: filter_value
type: string
- description: The comparator to use for a filter. Available values are `equals`, `greater`, `greater_equals`, `less` and `less_equals`. Defaults to `equals`
in: query
name: filter_comparator
type: string
- description: The concatinator to use for filters. Available values are `and` or `or`. Defaults to `or`.
in: query
name: filter_concat
type: string
- description: If set to true the result will include filtered fields whose value is set to `null`. Available values are `true` or `false`. Defaults to `false`.
in: query
name: filter_include_nulls
type: string
produces:
- application/json
responses:
"200":
description: The tasks
schema:
items:
$ref: '#/definitions/models.Task'
type: array
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get tasks in a list
tags:
- task
/lists/{listID}/teams/{teamID}:
delete:
description: Delets a team from a list. The team won't have access to the list anymore.
parameters:
- description: List ID
in: path
name: listID
required: true
type: integer
- description: Team ID
in: path
name: teamID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The team was successfully deleted.
schema:
$ref: '#/definitions/models.Message'
"403":
description: The user does not have access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: Team or list does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Delete a team from a list
tags:
- sharing
post:
consumes:
- application/json
description: Update a team <-> list relation. Mostly used to update the right that team has.
parameters:
- description: List ID
in: path
name: listID
required: true
type: integer
- description: Team ID
in: path
name: teamID
required: true
type: integer
- description: The team you want to update.
in: body
name: list
required: true
schema:
$ref: '#/definitions/models.TeamList'
produces:
- application/json
responses:
"200":
description: The updated team <-> list relation.
schema:
$ref: '#/definitions/models.TeamList'
"403":
description: The user does not have admin-access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: Team or list does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Update a team <-> list relation
tags:
- sharing
/lists/{listID}/users/{userID}:
delete:
description: Delets a user from a list. The user won't have access to the list anymore.
parameters:
- description: List ID
in: path
name: listID
required: true
type: integer
- description: User ID
in: path
name: userID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The user was successfully removed from the list.
schema:
$ref: '#/definitions/models.Message'
"403":
description: The user does not have access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: user or list does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Delete a user from a list
tags:
- sharing
post:
consumes:
- application/json
description: Update a user <-> list relation. Mostly used to update the right that user has.
parameters:
- description: List ID
in: path
name: listID
required: true
type: integer
- description: User ID
in: path
name: userID
required: true
type: integer
- description: The user you want to update.
in: body
name: list
required: true
schema:
$ref: '#/definitions/models.ListUser'
produces:
- application/json
responses:
"200":
description: The updated user <-> list relation.
schema:
$ref: '#/definitions/models.ListUser'
"403":
description: The user does not have admin-access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: User or list does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Update a user <-> list relation
tags:
- sharing
/login:
post:
consumes:
- application/json
description: Logs a user in. Returns a JWT-Token to authenticate further requests.
parameters:
- description: The login credentials
in: body
name: credentials
required: true
schema:
$ref: '#/definitions/user.Login'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/v1.Token'
"400":
description: Invalid user password model.
schema:
$ref: '#/definitions/models.Message'
"403":
description: Invalid username or password.
schema:
$ref: '#/definitions/models.Message'
"412":
description: Invalid totp passcode.
schema:
$ref: '#/definitions/models.Message'
summary: Login
tags:
- user
/migration/todoist/auth:
get:
description: Returns the auth url where the user needs to get its auth code. This code can then be used to migrate everything from todoist to Vikunja.
produces:
- application/json
responses:
"200":
description: The auth url.
schema:
$ref: '#/definitions/handler.AuthURL'
"500":
description: Internal server error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get the auth url from todoist
tags:
- migration
/migration/todoist/migrate:
post:
consumes:
- application/json
description: Migrates all projects, tasks, notes, reminders, subtasks and files from todoist to vikunja.
parameters:
- description: The auth code previously obtained from the auth url. See the docs for /migration/todoist/auth.
in: body
name: migrationCode
required: true
schema:
$ref: '#/definitions/todoist.Migration'
produces:
- application/json
responses:
"200":
description: A message telling you everything was migrated successfully.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal server error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Migrate all lists, tasks etc. from todoist
tags:
- migration
/migration/todoist/status:
get:
description: Returns if the current user already did the migation or not. This is useful to show a confirmation message in the frontend if the user is trying to do the same migration again.
produces:
- application/json
responses:
"200":
description: The migration status
schema:
$ref: '#/definitions/migration.Status'
"500":
description: Internal server error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get migration status
tags:
- migration
/migration/wunderlist/auth:
get:
description: Returns the auth url where the user needs to get its auth code. This code can then be used to migrate everything from wunderlist to Vikunja.
produces:
- application/json
responses:
"200":
description: The auth url.
schema:
$ref: '#/definitions/handler.AuthURL'
"500":
description: Internal server error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get the auth url from wunderlist
tags:
- migration
/migration/wunderlist/migrate:
post:
consumes:
- application/json
description: Migrates all folders, lists, tasks, notes, reminders, subtasks and files from wunderlist to vikunja.
parameters:
- description: The auth code previously obtained from the auth url. See the docs for /migration/wunderlist/auth.
in: body
name: migrationCode
required: true
schema:
$ref: '#/definitions/wunderlist.Migration'
produces:
- application/json
responses:
"200":
description: A message telling you everything was migrated successfully.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal server error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Migrate all lists, tasks etc. from wunderlist
tags:
- migration
/migration/wunderlist/status:
get:
description: Returns if the current user already did the migation or not. This is useful to show a confirmation message in the frontend if the user is trying to do the same migration again.
produces:
- application/json
responses:
"200":
description: The migration status
schema:
$ref: '#/definitions/migration.Status'
"500":
description: Internal server error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get migration status
tags:
- migration
/namespace/{id}:
post:
consumes:
- application/json
description: Updates a namespace.
parameters:
- description: Namespace ID
in: path
name: id
required: true
type: integer
- description: The namespace with updated values you want to update.
in: body
name: namespace
required: true
schema:
$ref: '#/definitions/models.Namespace'
produces:
- application/json
responses:
"200":
description: The updated namespace.
schema:
$ref: '#/definitions/models.Namespace'
"400":
description: Invalid namespace object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the namespace
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Updates a namespace
tags:
- namespace
/namespaces:
get:
consumes:
- application/json
description: Returns all namespaces a user has access to.
parameters:
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search namespaces by name.
in: query
name: s
type: string
- description: If true, also returns all archived namespaces.
in: query
name: is_archived
type: boolean
produces:
- application/json
responses:
"200":
description: The Namespaces.
schema:
items:
$ref: '#/definitions/models.NamespaceWithLists'
type: array
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get all namespaces a user has access to
tags:
- namespace
put:
consumes:
- application/json
description: Creates a new namespace.
parameters:
- description: The namespace you want to create.
in: body
name: namespace
required: true
schema:
$ref: '#/definitions/models.Namespace'
produces:
- application/json
responses:
"200":
description: The created namespace.
schema:
$ref: '#/definitions/models.Namespace'
"400":
description: Invalid namespace object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the namespace
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Creates a new namespace
tags:
- namespace
/namespaces/{id}:
delete:
description: Delets a namespace
parameters:
- description: Namespace ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The namespace was successfully deleted.
schema:
$ref: '#/definitions/models.Message'
"400":
description: Invalid namespace object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the namespace
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Deletes a namespace
tags:
- namespace
get:
consumes:
- application/json
description: Returns a namespace by its ID.
parameters:
- description: Namespace ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The Namespace
schema:
$ref: '#/definitions/models.Namespace'
"403":
description: The user does not have access to that namespace.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Gets one namespace
tags:
- namespace
/namespaces/{id}/lists:
get:
consumes:
- application/json
description: Returns all lists inside of a namespace.
parameters:
- description: Namespace ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The lists.
schema:
items:
$ref: '#/definitions/models.List'
type: array
"403":
description: No access to that namespace.
schema:
$ref: '#/definitions/models.Message'
"404":
description: The namespace does not exist.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get all lists in a namespace
tags:
- namespace
/namespaces/{id}/teams:
get:
consumes:
- application/json
description: Returns a namespace with all teams which have access on a given namespace.
parameters:
- description: Namespace ID
in: path
name: id
required: true
type: integer
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search teams by its name.
in: query
name: s
type: string
produces:
- application/json
responses:
"200":
description: The teams with the right they have.
schema:
items:
$ref: '#/definitions/models.TeamWithRight'
type: array
"403":
description: No right to see the namespace.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get teams on a namespace
tags:
- sharing
put:
consumes:
- application/json
description: Gives a team access to a namespace.
parameters:
- description: Namespace ID
in: path
name: id
required: true
type: integer
- description: The team you want to add to the namespace.
in: body
name: namespace
required: true
schema:
$ref: '#/definitions/models.TeamNamespace'
produces:
- application/json
responses:
"200":
description: The created team<->namespace relation.
schema:
$ref: '#/definitions/models.TeamNamespace'
"400":
description: Invalid team namespace object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The team does not have access to the namespace
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: The team does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Add a team to a namespace
tags:
- sharing
/namespaces/{id}/users:
get:
consumes:
- application/json
description: Returns a namespace with all users which have access on a given namespace.
parameters:
- description: Namespace ID
in: path
name: id
required: true
type: integer
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search users by its name.
in: query
name: s
type: string
produces:
- application/json
responses:
"200":
description: The users with the right they have.
schema:
items:
$ref: '#/definitions/models.UserWithRight'
type: array
"403":
description: No right to see the namespace.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get users on a namespace
tags:
- sharing
put:
consumes:
- application/json
description: Gives a user access to a namespace.
parameters:
- description: Namespace ID
in: path
name: id
required: true
type: integer
- description: The user you want to add to the namespace.
in: body
name: namespace
required: true
schema:
$ref: '#/definitions/models.NamespaceUser'
produces:
- application/json
responses:
"200":
description: The created user<->namespace relation.
schema:
$ref: '#/definitions/models.NamespaceUser'
"400":
description: Invalid user namespace object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the namespace
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: The user does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Add a user to a namespace
tags:
- sharing
/namespaces/{namespaceID}/lists:
put:
consumes:
- application/json
description: Creates a new list in a given namespace. The user needs write-access to the namespace.
parameters:
- description: Namespace ID
in: path
name: namespaceID
required: true
type: integer
- description: The list you want to create.
in: body
name: list
required: true
schema:
$ref: '#/definitions/models.List'
produces:
- application/json
responses:
"200":
description: The created list.
schema:
$ref: '#/definitions/models.List'
"400":
description: Invalid list object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Creates a new list
tags:
- list
/namespaces/{namespaceID}/teams/{teamID}:
delete:
description: Delets a team from a namespace. The team won't have access to the namespace anymore.
parameters:
- description: Namespace ID
in: path
name: namespaceID
required: true
type: integer
- description: team ID
in: path
name: teamID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The team was successfully deleted.
schema:
$ref: '#/definitions/models.Message'
"403":
description: The team does not have access to the namespace
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: team or namespace does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Delete a team from a namespace
tags:
- sharing
post:
consumes:
- application/json
description: Update a team <-> namespace relation. Mostly used to update the right that team has.
parameters:
- description: Namespace ID
in: path
name: namespaceID
required: true
type: integer
- description: Team ID
in: path
name: teamID
required: true
type: integer
- description: The team you want to update.
in: body
name: namespace
required: true
schema:
$ref: '#/definitions/models.TeamNamespace'
produces:
- application/json
responses:
"200":
description: The updated team <-> namespace relation.
schema:
$ref: '#/definitions/models.TeamNamespace'
"403":
description: The team does not have admin-access to the namespace
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: Team or namespace does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Update a team <-> namespace relation
tags:
- sharing
/namespaces/{namespaceID}/users/{userID}:
delete:
description: Delets a user from a namespace. The user won't have access to the namespace anymore.
parameters:
- description: Namespace ID
in: path
name: namespaceID
required: true
type: integer
- description: user ID
in: path
name: userID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The user was successfully deleted.
schema:
$ref: '#/definitions/models.Message'
"403":
description: The user does not have access to the namespace
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: user or namespace does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Delete a user from a namespace
tags:
- sharing
post:
consumes:
- application/json
description: Update a user <-> namespace relation. Mostly used to update the right that user has.
parameters:
- description: Namespace ID
in: path
name: namespaceID
required: true
type: integer
- description: User ID
in: path
name: userID
required: true
type: integer
- description: The user you want to update.
in: body
name: namespace
required: true
schema:
$ref: '#/definitions/models.NamespaceUser'
produces:
- application/json
responses:
"200":
description: The updated user <-> namespace relation.
schema:
$ref: '#/definitions/models.NamespaceUser'
"403":
description: The user does not have admin-access to the namespace
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: User or namespace does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Update a user <-> namespace relation
tags:
- sharing
/register:
post:
consumes:
- application/json
description: Creates a new user account.
parameters:
- description: The user credentials
in: body
name: credentials
required: true
schema:
$ref: '#/definitions/user.APIUserPassword'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/user.User'
"400":
description: No or invalid user register object provided / User already exists.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
summary: Register
tags:
- user
/shares/{share}/auth:
post:
consumes:
- application/json
description: Get a jwt auth token for a shared list from a share hash.
parameters:
- description: The share hash
in: path
name: share
required: true
type: string
produces:
- application/json
responses:
"200":
description: The valid jwt auth token.
schema:
$ref: '#/definitions/v1.Token'
"400":
description: Invalid link share object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
summary: Get an auth token for a share
tags:
- sharing
/tasks/{ID}:
get:
consumes:
- application/json
description: Returns one task by its ID
parameters:
- description: The task ID
in: path
name: ID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The task
schema:
$ref: '#/definitions/models.Task'
"404":
description: Task not found
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get one task
tags:
- task
/tasks/{id}:
delete:
description: Deletes a task from a list. This does not mean "mark it done".
parameters:
- description: Task ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The created task object.
schema:
$ref: '#/definitions/models.Message'
"400":
description: Invalid task ID provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the list
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Delete a task
tags:
- task
post:
consumes:
- application/json
description: Updates a task. This includes marking it as done. Assignees you pass will be updated, see their individual endpoints for more details on how this is done. To update labels, see the description of the endpoint.
parameters:
- description: Task ID
in: path
name: id
required: true
type: integer
- description: The task object
in: body
name: task
required: true
schema:
$ref: '#/definitions/models.Task'
produces:
- application/json
responses:
"200":
description: The updated task object.
schema:
$ref: '#/definitions/models.Task'
"400":
description: Invalid task object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the task (aka its list)
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Update a task
tags:
- task
/tasks/{id}/attachments:
get:
consumes:
- application/json
description: Get all task attachments for one task.
parameters:
- description: Task ID
in: path
name: id
required: true
type: integer
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
produces:
- application/json
responses:
"200":
description: All attachments for this task
schema:
items:
$ref: '#/definitions/models.TaskAttachment'
type: array
"403":
description: No access to this task.
schema:
$ref: '#/definitions/models.Message'
"404":
description: The task does not exist.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get all attachments for one task.
tags:
- task
put:
consumes:
- multipart/form-data
description: Upload a task attachment. You can pass multiple files with the files form param.
parameters:
- description: Task ID
in: path
name: id
required: true
type: integer
- description: The file, as multipart form file. You can pass multiple.
in: formData
name: files
required: true
type: string
produces:
- application/json
responses:
"200":
description: Attachments were uploaded successfully.
schema:
$ref: '#/definitions/models.Message'
"403":
description: No access to the task.
schema:
$ref: '#/definitions/models.Message'
"404":
description: The task does not exist.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Upload a task attachment
tags:
- task
/tasks/{id}/attachments/{attachmentID}:
delete:
consumes:
- application/json
description: Delete an attachment.
parameters:
- description: Task ID
in: path
name: id
required: true
type: integer
- description: Attachment ID
in: path
name: attachmentID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The attachment was deleted successfully.
schema:
$ref: '#/definitions/models.Message'
"403":
description: No access to this task.
schema:
$ref: '#/definitions/models.Message'
"404":
description: The task does not exist.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Delete an attachment
tags:
- task
get:
description: Get one attachment for download. **Returns json on error.**
parameters:
- description: Task ID
in: path
name: id
required: true
type: integer
- description: Attachment ID
in: path
name: attachmentID
required: true
type: integer
produces:
- application/octet-stream
responses:
"200":
description: The attachment file.
schema:
type: ""
"403":
description: No access to this task.
schema:
$ref: '#/definitions/models.Message'
"404":
description: The task does not exist.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get one attachment.
tags:
- task
/tasks/{task}/labels:
get:
consumes:
- application/json
description: Returns all labels which are assicociated with a given task.
parameters:
- description: Task ID
in: path
name: task
required: true
type: integer
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search labels by label text.
in: query
name: s
type: string
produces:
- application/json
responses:
"200":
description: The labels
schema:
items:
$ref: '#/definitions/models.Label'
type: array
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get all labels on a task
tags:
- labels
put:
consumes:
- application/json
description: Add a label to a task. The user needs to have write-access to the list to be able do this.
parameters:
- description: Task ID
in: path
name: task
required: true
type: integer
- description: The label object
in: body
name: label
required: true
schema:
$ref: '#/definitions/models.LabelTask'
produces:
- application/json
responses:
"200":
description: The created label relation object.
schema:
$ref: '#/definitions/models.LabelTask'
"400":
description: Invalid label object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: Not allowed to add the label.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: The label does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Add a label to a task
tags:
- labels
/tasks/{task}/labels/{label}:
delete:
consumes:
- application/json
description: Remove a label from a task. The user needs to have write-access to the list to be able do this.
parameters:
- description: Task ID
in: path
name: task
required: true
type: integer
- description: Label ID
in: path
name: label
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The label was successfully removed.
schema:
$ref: '#/definitions/models.Message'
"403":
description: Not allowed to remove the label.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: Label not found.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Remove a label from a task
tags:
- labels
/tasks/{taskID}/assignees:
get:
consumes:
- application/json
description: Returns an array with all assignees for this task.
parameters:
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search assignees by their username.
in: query
name: s
type: string
- description: Task ID
in: path
name: taskID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The assignees
schema:
items:
$ref: '#/definitions/user.User'
type: array
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get all assignees for a task
tags:
- assignees
put:
consumes:
- application/json
description: Adds a new assignee to a task. The assignee needs to have access to the list, the doer must be able to edit this task.
parameters:
- description: The assingee object
in: body
name: assignee
required: true
schema:
$ref: '#/definitions/models.TaskAssginee'
- description: Task ID
in: path
name: taskID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The created assingee object.
schema:
$ref: '#/definitions/models.TaskAssginee'
"400":
description: Invalid assignee object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Add a new assignee to a task
tags:
- assignees
/tasks/{taskID}/assignees/{userID}:
delete:
consumes:
- application/json
description: Un-assign a user from a task.
parameters:
- description: Task ID
in: path
name: taskID
required: true
type: integer
- description: Assignee user ID
in: path
name: userID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The assignee was successfully deleted.
schema:
$ref: '#/definitions/models.Message'
"403":
description: Not allowed to delete the assignee.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Delete an assignee
tags:
- assignees
/tasks/{taskID}/assignees/bulk:
post:
consumes:
- application/json
description: Adds multiple new assignees to a task. The assignee needs to have access to the list, the doer must be able to edit this task. Every user not in the list will be unassigned from the task, pass an empty array to unassign everyone.
parameters:
- description: The array of assignees
in: body
name: assignee
required: true
schema:
$ref: '#/definitions/models.BulkAssignees'
- description: Task ID
in: path
name: taskID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The created assingees object.
schema:
$ref: '#/definitions/models.TaskAssginee'
"400":
description: Invalid assignee object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Add multiple new assignees to a task
tags:
- assignees
/tasks/{taskID}/comments:
get:
consumes:
- application/json
description: Get all task comments. The user doing this need to have at least read access to the task.
parameters:
- description: Task ID
in: path
name: taskID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The array with all task comments
schema:
items:
$ref: '#/definitions/models.TaskComment'
type: array
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get all task comments
tags:
- task
put:
consumes:
- application/json
description: Create a new task comment. The user doing this need to have at least write access to the task this comment should belong to.
parameters:
- description: The task comment object
in: body
name: relation
required: true
schema:
$ref: '#/definitions/models.TaskComment'
- description: Task ID
in: path
name: taskID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The created task comment object.
schema:
$ref: '#/definitions/models.TaskComment'
"400":
description: Invalid task comment object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Create a new task comment
tags:
- task
/tasks/{taskID}/comments/{commentID}:
delete:
consumes:
- application/json
description: Remove a task comment. The user doing this need to have at least write access to the task this comment belongs to.
parameters:
- description: Task ID
in: path
name: taskID
required: true
type: integer
- description: Comment ID
in: path
name: commentID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The task comment was successfully deleted.
schema:
$ref: '#/definitions/models.Message'
"400":
description: Invalid task comment object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: The task comment was not found.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Remove a task comment
tags:
- task
get:
consumes:
- application/json
description: Remove a task comment. The user doing this need to have at least read access to the task this comment belongs to.
parameters:
- description: Task ID
in: path
name: taskID
required: true
type: integer
- description: Comment ID
in: path
name: commentID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The task comment object.
schema:
$ref: '#/definitions/models.TaskComment'
"400":
description: Invalid task comment object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: The task comment was not found.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Remove a task comment
tags:
- task
post:
consumes:
- application/json
description: Update an existing task comment. The user doing this need to have at least write access to the task this comment belongs to.
parameters:
- description: Task ID
in: path
name: taskID
required: true
type: integer
- description: Comment ID
in: path
name: commentID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The updated task comment object.
schema:
$ref: '#/definitions/models.TaskComment'
"400":
description: Invalid task comment object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: The task comment was not found.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Update an existing task comment
tags:
- task
/tasks/{taskID}/labels/bulk:
post:
consumes:
- application/json
description: Updates all labels on a task. Every label which is not passed but exists on the task will be deleted. Every label which does not exist on the task will be added. All labels which are passed and already exist on the task won't be touched.
parameters:
- description: The array of labels
in: body
name: label
required: true
schema:
$ref: '#/definitions/models.LabelTaskBulk'
- description: Task ID
in: path
name: taskID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The updated labels object.
schema:
$ref: '#/definitions/models.LabelTaskBulk'
"400":
description: Invalid label object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Update all labels on a task.
tags:
- labels
/tasks/{taskID}/relations:
delete:
consumes:
- application/json
parameters:
- description: The relation object
in: body
name: relation
required: true
schema:
$ref: '#/definitions/models.TaskRelation'
- description: Task ID
in: path
name: taskID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The task relation was successfully deleted.
schema:
$ref: '#/definitions/models.Message'
"400":
description: Invalid task relation object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: The task relation was not found.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Remove a task relation
tags:
- task
put:
consumes:
- application/json
description: Creates a new relation between two tasks. The user needs to have update rights on the base task and at least read rights on the other task. Both tasks do not need to be on the same list. Take a look at the docs for available task relation kinds.
parameters:
- description: The relation object
in: body
name: relation
required: true
schema:
$ref: '#/definitions/models.TaskRelation'
- description: Task ID
in: path
name: taskID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The created task relation object.
schema:
$ref: '#/definitions/models.TaskRelation'
"400":
description: Invalid task relation object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Create a new relation between two tasks
tags:
- task
/tasks/all:
get:
consumes:
- application/json
description: Returns all tasks on any list the user has access to.
parameters:
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search tasks by task text.
in: query
name: s
type: string
- description: The sorting parameter. You can pass this multiple times to get the tasks ordered by multiple different parametes, along with `order_by`. Possible values to sort by are `id`, `text`, `description`, `done`, `done_at`, `due_date`, `created_by_id`, `list_id`, `repeat_after`, `priority`, `start_date`, `end_date`, `hex_color`, `percent_done`, `uid`, `created`, `updated`. Default is `id`.
in: query
name: sort_by
type: string
- description: The ordering parameter. Possible values to order by are `asc` or `desc`. Default is `asc`.
in: query
name: order_by
type: string
- description: The name of the field to filter by. Accepts an array for multiple filters which will be chanied together, all supplied filter must match.
in: query
name: filter_by
type: string
- description: The value to filter for.
in: query
name: filter_value
type: string
- description: The comparator to use for a filter. Available values are `equals`, `greater`, `greater_equals`, `less` and `less_equals`. Defaults to `equals`
in: query
name: filter_comparator
type: string
- description: The concatinator to use for filters. Available values are `and` or `or`. Defaults to `or`.
in: query
name: filter_concat
type: string
produces:
- application/json
responses:
"200":
description: The tasks
schema:
items:
$ref: '#/definitions/models.Task'
type: array
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get tasks
tags:
- task
/tasks/bulk:
post:
consumes:
- application/json
description: 'Updates a bunch of tasks at once. This includes marking them as done. Note: although you could supply another ID, it will be ignored. Use task_ids instead.'
parameters:
- description: The task object. Looks like a normal task, the only difference is it uses an array of list_ids to update.
in: body
name: task
required: true
schema:
$ref: '#/definitions/models.BulkTask'
produces:
- application/json
responses:
"200":
description: The updated task object.
schema:
$ref: '#/definitions/models.Task'
"400":
description: Invalid task object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the task (aka its list)
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Update a bunch of tasks at once
tags:
- task
/teams:
get:
consumes:
- application/json
description: Returns all teams the current user is part of.
parameters:
- description: The page number. Used for pagination. If not provided, the first page of results is returned.
in: query
name: page
type: integer
- description: The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
in: query
name: per_page
type: integer
- description: Search teams by its name.
in: query
name: s
type: string
produces:
- application/json
responses:
"200":
description: The teams.
schema:
items:
$ref: '#/definitions/models.Team'
type: array
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get teams
tags:
- team
put:
consumes:
- application/json
description: Creates a new team in a given namespace. The user needs write-access to the namespace.
parameters:
- description: The team you want to create.
in: body
name: team
required: true
schema:
$ref: '#/definitions/models.Team'
produces:
- application/json
responses:
"200":
description: The created team.
schema:
$ref: '#/definitions/models.Team'
"400":
description: Invalid team object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Creates a new team
tags:
- team
/teams/{id}:
delete:
description: Delets a team. This will also remove the access for all users in that team.
parameters:
- description: Team ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The team was successfully deleted.
schema:
$ref: '#/definitions/models.Message'
"400":
description: Invalid team object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Deletes a team
tags:
- team
get:
consumes:
- application/json
description: Returns a team by its ID.
parameters:
- description: Team ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The team
schema:
$ref: '#/definitions/models.Team'
"403":
description: The user does not have access to the team
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Gets one team
tags:
- team
post:
consumes:
- application/json
description: Updates a team.
parameters:
- description: Team ID
in: path
name: id
required: true
type: integer
- description: The team with updated values you want to update.
in: body
name: team
required: true
schema:
$ref: '#/definitions/models.Team'
produces:
- application/json
responses:
"200":
description: The updated team.
schema:
$ref: '#/definitions/models.Team'
"400":
description: Invalid team object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Updates a team
tags:
- team
/teams/{id}/members:
put:
consumes:
- application/json
description: Add a user to a team.
parameters:
- description: Team ID
in: path
name: id
required: true
type: integer
- description: The user to be added to a team.
in: body
name: team
required: true
schema:
$ref: '#/definitions/models.TeamMember'
produces:
- application/json
responses:
"200":
description: The newly created member object
schema:
$ref: '#/definitions/models.TeamMember'
"400":
description: Invalid member object provided.
schema:
$ref: '#/definitions/web.HTTPError'
"403":
description: The user does not have access to the team
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Add a user to a team
tags:
- team
/teams/{id}/members/{userID}:
delete:
description: Remove a user from a team. This will also revoke any access this user might have via that team.
parameters:
- description: Team ID
in: path
name: id
required: true
type: integer
- description: User ID
in: path
name: userID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The user was successfully removed from the team.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Remove a user from a team
tags:
- team
/teams/{id}/members/{userID}/admin:
post:
description: If a user is team admin, this will make them member and vise-versa.
parameters:
- description: Team ID
in: path
name: id
required: true
type: integer
- description: User ID
in: path
name: userID
required: true
type: integer
produces:
- application/json
responses:
"200":
description: The member right was successfully changed.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Toggle a team member's admin status
tags:
- team
/user:
get:
consumes:
- application/json
description: Returns the current user object.
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/user.User'
"404":
description: User does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal server error.
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get user information
tags:
- user
/user/confirm:
post:
consumes:
- application/json
description: Confirms the email of a newly registered user.
parameters:
- description: The token.
in: body
name: credentials
required: true
schema:
$ref: '#/definitions/user.EmailConfirm'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Message'
"412":
description: Bad token provided.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
summary: Confirm the email of a new user
tags:
- user
/user/password:
post:
consumes:
- application/json
description: Lets the current user change its password.
parameters:
- description: The current and new password.
in: body
name: userPassword
required: true
schema:
$ref: '#/definitions/v1.UserPassword'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Message'
"400":
description: Something's invalid.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: User does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal server error.
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Change password
tags:
- user
/user/password/reset:
post:
consumes:
- application/json
description: Resets a user email with a previously reset token.
parameters:
- description: The token with the new password.
in: body
name: credentials
required: true
schema:
$ref: '#/definitions/user.PasswordReset'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Message'
"400":
description: Bad token provided.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
summary: Resets a password
tags:
- user
/user/password/token:
post:
consumes:
- application/json
description: Requests a token to reset a users password. The token is sent via email.
parameters:
- description: The username of the user to request a token for.
in: body
name: credentials
required: true
schema:
$ref: '#/definitions/user.PasswordTokenRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Message'
"404":
description: The user does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
summary: Request password reset token
tags:
- user
/user/settings/avatar:
get:
consumes:
- application/json
description: Returns the current user's avatar setting.
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/v1.UserAvatarProvider'
"400":
description: Something's invalid.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal server error.
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Return user avatar setting
tags:
- user
post:
consumes:
- application/json
description: Changes the user avatar. Valid types are gravatar (uses the user email), upload, initials, default.
parameters:
- description: The user's avatar setting
in: body
name: avatar
required: true
schema:
$ref: '#/definitions/v1.UserAvatarProvider'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/v1.UserAvatarProvider'
"400":
description: Something's invalid.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal server error.
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Set the user's avatar
tags:
- user
/user/settings/avatar/upload:
put:
consumes:
- multipart/form-data
description: Upload a user avatar. This will also set the user's avatar provider to "upload"
parameters:
- description: The avatar as single file.
in: formData
name: avatar
required: true
type: string
produces:
- application/json
responses:
"200":
description: The avatar was set successfully.
schema:
$ref: '#/definitions/models.Message'
"400":
description: File is no image.
schema:
$ref: '#/definitions/models.Message'
"403":
description: File too large.
schema:
$ref: '#/definitions/models.Message'
"500":
description: Internal error
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Upload a user avatar
tags:
- user
/user/settings/email:
post:
consumes:
- application/json
description: Lets the current user change their email address.
parameters:
- description: The new email address and current password.
in: body
name: userEmailUpdate
required: true
schema:
$ref: '#/definitions/user.EmailUpdate'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Message'
"400":
description: Something's invalid.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: User does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal server error.
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Update email address
tags:
- user
/user/settings/totp:
get:
consumes:
- application/json
description: Returns the current user totp setting or an error if it is not enabled.
produces:
- application/json
responses:
"200":
description: The totp settings.
schema:
$ref: '#/definitions/user.TOTP'
"500":
description: Internal server error.
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Totp setting for the current user
tags:
- user
/user/settings/totp/disable:
post:
consumes:
- application/json
description: Disables any totp settings for the current user.
parameters:
- description: The current user's password (only password is enough).
in: body
name: totp
required: true
schema:
$ref: '#/definitions/user.Login'
produces:
- application/json
responses:
"200":
description: Successfully disabled
schema:
$ref: '#/definitions/models.Message'
"400":
description: Something's invalid.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: User does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal server error.
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Disable totp settings
tags:
- user
/user/settings/totp/enable:
post:
consumes:
- application/json
description: Enables a previously enrolled totp setting by providing a totp passcode.
parameters:
- description: The totp passcode.
in: body
name: totp
required: true
schema:
$ref: '#/definitions/user.TOTPPasscode'
produces:
- application/json
responses:
"200":
description: Successfully enabled
schema:
$ref: '#/definitions/models.Message'
"400":
description: Something's invalid.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: User does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"412":
description: TOTP is not enrolled.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal server error.
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Enable a previously enrolled totp setting.
tags:
- user
/user/settings/totp/enroll:
post:
consumes:
- application/json
description: Creates an initial setup for the user in the db. After this step, the user needs to verify they have a working totp setup with the "enable totp" endpoint.
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/user.TOTP'
"400":
description: Something's invalid.
schema:
$ref: '#/definitions/web.HTTPError'
"404":
description: User does not exist.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal server error.
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Enroll a user into totp
tags:
- user
/user/settings/totp/qrcode:
get:
consumes:
- application/json
description: Returns a qr code for easier setup at end user's devices.
produces:
- application/json
responses:
"200":
description: The qr code as jpeg image
schema:
type: ""
"500":
description: Internal server error.
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Totp QR Code
tags:
- user
/user/token:
post:
consumes:
- application/json
description: Returns a new valid jwt user token with an extended length.
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/v1.Token'
"400":
description: Only user token are available for renew.
schema:
$ref: '#/definitions/models.Message'
summary: Renew user token
tags:
- user
/users:
get:
consumes:
- application/json
description: Lists all users (without emailadresses). Also possible to search for a specific user.
parameters:
- description: Search for a user by its name.
in: query
name: s
type: string
produces:
- application/json
responses:
"200":
description: All (found) users.
schema:
items:
$ref: '#/definitions/user.User'
type: array
"400":
description: Something's invalid.
schema:
$ref: '#/definitions/web.HTTPError'
"500":
description: Internal server error.
schema:
$ref: '#/definitions/models.Message'
security:
- JWTKeyAuth: []
summary: Get users
tags:
- user
securityDefinitions:
BasicAuth:
type: basic
JWTKeyAuth:
in: header
name: Authorization
type: apiKey
swagger: "2.0"