Kitsu API
0.20.52

Base URL
http://api.example.com

Welcome to the Kitsu API specification

Version: 0.20.52

The Kitsu API allows to store and manage the data of your animation/VFX production. Through it you can link all the tools of your pipeline and make sure they are all synchronized.

An easy to use Python client to access this API is available: Python Kitsu Client documentation

Authentication

Before you can use any of the endpoints outline below, you will have to get a JWT token to authorize your requests.

You will find the information to retrieve it in the Zou documentation.

OpenAPI definition

This is version 0.20.52 of this API documentation. Last update on Jun 4, 2025.

This API is provided under license AGPL 3.0.



























Resource to allow a user to change his password when he forgets it.

POST /auth/reset-password

It uses a classic scheme: a token is sent by email to the user. Then he can change his password.

Responses

  • Reset token sent

  • Email not listed in database

POST /auth/reset-password
curl \
 --request POST 'http://api.example.com/auth/reset-password' \
 --header "Authorization: $API_KEY"





















































































DELETE /data/assets/{asset_id}
curl \
 --request DELETE 'http://api.example.com/data/assets/{asset_id}' \
 --header "Authorization: $API_KEY"








Responses

  • All task types of tasks related to given asset

GET /data/assets/{asset_id}/task-types
curl \
 --request GET 'http://api.example.com/data/assets/{asset_id}/task-types' \
 --header "Authorization: $API_KEY"
































Create new asset with given parameters.

POST /data/projects/{project_id}/asset-types/{asset_type_id}/assets/new

Path parameters

Responses

  • New asset resource created

POST /data/projects/{project_id}/asset-types/{asset_type_id}/assets/new
curl \
 --request POST 'http://api.example.com/data/projects/{project_id}/asset-types/{asset_type_id}/assets/new' \
 --header "Authorization: $API_KEY"





































Resource to allow the modification of assets linked to an entity.

PUT /data/projects/{project_id}/entities/{entity_id}/casting

Responses

  • Modification of assets linked to an entity

PUT /data/projects/{project_id}/entities/{entity_id}/casting
curl \
 --request PUT 'http://api.example.com/data/projects/{project_id}/entities/{entity_id}/casting' \
 --header "Authorization: $API_KEY"




































Responses

  • All camera instances linked to scene

GET /data/scenes/{scene_id}/camera-instances
curl \
 --request GET 'http://api.example.com/data/scenes/{scene_id}/camera-instances' \
 --header "Authorization: $API_KEY"






































































GET /data/persons/{instance_id}
curl \
 --request GET 'http://api.example.com/data/persons/{instance_id}' \
 --header "Authorization: $API_KEY"




Retrieve all entries for given model.

GET /data/projects

Filters can be specified in the query string.

Responses

GET /data/projects
curl \
 --request GET 'http://api.example.com/data/projects' \
 --header "Authorization: $API_KEY"
























GET /data/project-status/{instance_id}
curl \
 --request GET 'http://api.example.com/data/project-status/{instance_id}' \
 --header "Authorization: $API_KEY"
















GET /data/entity-types/{instance_id}
curl \
 --request GET 'http://api.example.com/data/entity-types/{instance_id}' \
 --header "Authorization: $API_KEY"

Update a model with data given in the request body.

PUT /data/entity-types/{instance_id}

JSON format is expected. Model performs the validation automatically when fields are modified.

Responses

PUT /data/entity-types/{instance_id}
curl \
 --request PUT 'http://api.example.com/data/entity-types/{instance_id}' \
 --header "Authorization: $API_KEY"








Create a model with data given in the request body.

POST /data/entities

JSON format is expected. The model performs the validation automatically when instantiated.

Responses

POST /data/entities
curl \
 --request POST 'http://api.example.com/data/entities' \
 --header "Authorization: $API_KEY"
























Responses

  • Model deleted

  • Statement or integrity error

  • Instance non-existant

DELETE /data/task-types/{instance_id}
curl \
 --request DELETE 'http://api.example.com/data/task-types/{instance_id}' \
 --header "Authorization: $API_KEY"
















Responses

  • Model deleted

  • Statement or integrity error

  • Instance non-existant

DELETE /data/task-status/{instance_id}
curl \
 --request DELETE 'http://api.example.com/data/task-status/{instance_id}' \
 --header "Authorization: $API_KEY"
































































Update a model with data given in the request body.

PUT /data/file-status/{instance_id}

JSON format is expected. Model performs the validation automatically when fields are modified.

Responses

PUT /data/file-status/{instance_id}
curl \
 --request PUT 'http://api.example.com/data/file-status/{instance_id}' \
 --header "Authorization: $API_KEY"












Responses

GET /data/softwares/{instance_id}
curl \
 --request GET 'http://api.example.com/data/softwares/{instance_id}' \
 --header "Authorization: $API_KEY"




















































































































GET /data/comments/{instance_id}
curl \
 --request GET 'http://api.example.com/data/comments/{instance_id}' \
 --header "Authorization: $API_KEY"




















Responses

  • Model deleted

  • Statement or integrity error

  • Instance non-existant

DELETE /data/time-spents/{instance_id}
curl \
 --request DELETE 'http://api.example.com/data/time-spents/{instance_id}' \
 --header "Authorization: $API_KEY"












































Create a model with data given in the request body.

POST /data/status-automations/

JSON format is expected. The model performs the validation automatically when instantiated.

Responses

POST /data/status-automations/
curl \
 --request POST 'http://api.example.com/data/status-automations/' \
 --header "Authorization: $API_KEY"




























































































































Responses

  • Model deleted

  • Statement or integrity error

  • Instance non-existant

DELETE /data/search-filter-groups/{instance_id}
curl \
 --request DELETE 'http://api.example.com/data/search-filter-groups/{instance_id}' \
 --header "Authorization: $API_KEY"




















Retrieve all entries for given model.

GET /data/news/

Filters can be specified in the query string.

Responses

GET /data/news/
curl \
 --request GET 'http://api.example.com/data/news/' \
 --header "Authorization: $API_KEY"




































































Update a model with data given in the request body.

PUT /data/subscriptions/{instance_id}

JSON format is expected. Model performs the validation automatically when fields are modified.

Responses

PUT /data/subscriptions/{instance_id}
curl \
 --request PUT 'http://api.example.com/data/subscriptions/{instance_id}' \
 --header "Authorization: $API_KEY"




































Update a model with data given in the request body.

PUT /data/chats/{instance_id}

JSON format is expected. Model performs the validation automatically when fields are modified.

Responses

PUT /data/chats/{instance_id}
curl \
 --request PUT 'http://api.example.com/data/chats/{instance_id}' \
 --header "Authorization: $API_KEY"








Create a model with data given in the request body.

POST /data/chat-messages/

JSON format is expected. The model performs the validation automatically when instantiated.

Responses

POST /data/chat-messages/
curl \
 --request POST 'http://api.example.com/data/chat-messages/' \
 --header "Authorization: $API_KEY"




























































GET /data/salary-scales/{instance_id}
curl \
 --request GET 'http://api.example.com/data/salary-scales/{instance_id}' \
 --header "Authorization: $API_KEY"

















































Responses

  • All task types related to given edit

GET /data/edits/{edit_id}/task-types
curl \
 --request GET 'http://api.example.com/data/edits/{edit_id}/task-types' \
 --header "Authorization: $API_KEY"








































































































Responses

  • Last working files revision for each file name for given task

GET /data/tasks/{task_id}/working-files/last-revisions
curl \
 --request GET 'http://api.example.com/data/tasks/{task_id}/working-files/last-revisions' \
 --header "Authorization: $API_KEY"
















































































Update comment on given working file.

PUT /actions/working-files/{working_file_id}/comment

Responses

  • Comment updated on given working file

PUT /actions/working-files/{working_file_id}/comment
curl \
 --request PUT 'http://api.example.com/actions/working-files/{working_file_id}/comment' \
 --header "Authorization: $API_KEY"

































































Delete error.

DELETE /import/shotgun/errors/{error_id}

Responses

  • Error deleted

  • Error non-existant or Statement error

DELETE /import/shotgun/errors/{error_id}
curl \
 --request DELETE 'http://api.example.com/import/shotgun/errors/{error_id}' \
 --header "Authorization: $API_KEY"




















Import remove instance.

POST /import/shotgun/remove/sequence

Responses

POST /import/shotgun/remove/sequence
curl \
 --request POST 'http://api.example.com/import/shotgun/remove/sequence' \
 --header "Authorization: $API_KEY"




































































Responses

POST /import/kitsu/entities
curl \
 --request POST 'http://api.example.com/import/kitsu/entities' \
 --header "Authorization: $API_KEY"






































































Get time spents for given person and date.

GET /data/persons/{person_id}/time-spents/{date}

Responses

  • Time spents for given person and date

  • Wrong date format

GET /data/persons/{person_id}/time-spents/{date}
curl \
 --request GET 'http://api.example.com/data/persons/{person_id}/time-spents/{date}' \
 --header "Authorization: $API_KEY"












Get aggregated time spents for given person and week.

GET /data/persons/{person_id}/time-spents/week/{year}/{week}

Responses

  • Aggregated time spents for given person and week

  • Wrong date format

GET /data/persons/{person_id}/time-spents/week/{year}/{week}
curl \
 --request GET 'http://api.example.com/data/persons/{person_id}/time-spents/week/{year}/{week}' \
 --header "Authorization: $API_KEY"

Get aggregated time spents for given person and day.

GET /data/persons/{person_id}/time-spents/day/{year}/{month}/{day}

Path parameters

Responses

  • Aggregated time spents for given person and day

  • Wrong date format

GET /data/persons/{person_id}/time-spents/day/{year}/{month}/{day}
curl \
 --request GET 'http://api.example.com/data/persons/{person_id}/time-spents/day/{year}/{month}/{day}' \
 --header "Authorization: $API_KEY"





















































































Retrieve all previews related to a given entity.

GET /data/playlists/entities/{entity_id}/preview-files

It sends them as a dict. Keys are related task type ids and values are arrays of preview for this task type.

Responses

  • All previews related to given entity

GET /data/playlists/entities/{entity_id}/preview-files
curl \
 --request GET 'http://api.example.com/data/playlists/entities/{entity_id}/preview-files' \
 --header "Authorization: $API_KEY"

















































Download a thumbnail.

GET /pictures/thumbnails/preview-files/{instance_id}.png

Responses

  • Thumbnail downloaded

  • Instance not allowed

  • Picture file not found

GET /pictures/thumbnails/preview-files/{instance_id}.png
curl \
 --request GET 'http://api.example.com/pictures/thumbnails/preview-files/{instance_id}.png' \
 --header "Authorization: $API_KEY"

Download the thumbnail representing given attachment file.

GET /pictures/thumbnails/attachment-files/{attachment_file_id}.png

Responses

  • Thumbnail downloaded

  • Instance not allowed

  • Picture file not found

GET /pictures/thumbnails/attachment-files/{attachment_file_id}.png
curl \
 --request GET 'http://api.example.com/pictures/thumbnails/attachment-files/{attachment_file_id}.png' \
 --header "Authorization: $API_KEY"








Download a generic file preview.

GET /pictures/originals/preview-files/{instance_id}.{extension}

Responses

  • Generic file preview downloaded

  • Instance not allowed

  • Non-movie file not found

GET /pictures/originals/preview-files/{instance_id}.{extension}
curl \
 --request GET 'http://api.example.com/pictures/originals/preview-files/{instance_id}.{extension}' \
 --header "Authorization: $API_KEY"




























Responses

  • Thumbnail downloaded

  • Access not allowed

  • Object instance not found

GET /pictures/thumbnails/persons/{instance_id}
curl \
 --request GET 'http://api.example.com/pictures/thumbnails/persons/{instance_id}' \
 --header "Authorization: $API_KEY"





































































































































































Retrieve asset types schedule items for given task type

GET /data/projects/{project_id}/schedule-items/{task_type_id}/asset-types

Responses

  • All asset types schedule items for given task type

GET /data/projects/{project_id}/schedule-items/{task_type_id}/asset-types
curl \
 --request GET 'http://api.example.com/data/projects/{project_id}/schedule-items/{task_type_id}/asset-types' \
 --header "Authorization: $API_KEY"
















POST /data/projects/{project_id}/budgets
curl \
 --request POST 'http://api.example.com/data/projects/{project_id}/budgets' \
 --header "Authorization: $API_KEY"

Retrieve a budget for given production

GET /data/projects/{project_id}/budgets/{budget_id}

Responses

GET /data/projects/{project_id}/budgets/{budget_id}
curl \
 --request GET 'http://api.example.com/data/projects/{project_id}/budgets/{budget_id}' \
 --header "Authorization: $API_KEY"








Retrieve budget entries for given production

GET /data/projects/{project_id}/budgets/{budget_id}/entries

Responses

  • All budget entries of given production and budget

GET /data/projects/{project_id}/budgets/{budget_id}/entries
curl \
 --request GET 'http://api.example.com/data/projects/{project_id}/budgets/{budget_id}/entries' \
 --header "Authorization: $API_KEY"


























GET /data/shots/all
curl \
 --request GET 'http://api.example.com/data/shots/all' \
 --header "Authorization: $API_KEY"
GET /data/shots/with-tasks
curl \
 --request GET 'http://api.example.com/data/shots/with-tasks' \
 --header "Authorization: $API_KEY"








DELETE /data/shots/{shot_id}
curl \
 --request DELETE 'http://api.example.com/data/shots/{shot_id}' \
 --header "Authorization: $API_KEY"




































GET /data/scenes/{scene_id}/tasks
curl \
 --request GET 'http://api.example.com/data/scenes/{scene_id}/tasks' \
 --header "Authorization: $API_KEY"

Responses

  • All task types related to given scene

GET /data/scenes/{scene_id}/task-types
curl \
 --request GET 'http://api.example.com/data/scenes/{scene_id}/task-types' \
 --header "Authorization: $API_KEY"












Retrieve all episode entries.

GET /data/episodes

Filters can be specified in the query string.

Responses

  • All episode entries

GET /data/episodes
curl \
 --request GET 'http://api.example.com/data/episodes' \
 --header "Authorization: $API_KEY"












































GET /data/sequences/{sequence_id}
curl \
 --request GET 'http://api.example.com/data/sequences/{sequence_id}' \
 --header "Authorization: $API_KEY"

Delete given sequence.

DELETE /data/sequences/{sequence_id}

Responses

  • Given sequence deleted

DELETE /data/sequences/{sequence_id}
curl \
 --request DELETE 'http://api.example.com/data/sequences/{sequence_id}' \
 --header "Authorization: $API_KEY"




















Responses

  • All shots related to given project

GET /data/projects/{project_id}/shots
curl \
 --request GET 'http://api.example.com/data/projects/{project_id}/shots' \
 --header "Authorization: $API_KEY"

Create a shot for given project.

POST /data/projects/{project_id}/shots

Path parameters

Responses

  • Shot created for given project

POST /data/projects/{project_id}/shots
curl \
 --request POST 'http://api.example.com/data/projects/{project_id}/shots' \
 --header "Authorization: $API_KEY"








































Set frames for given shots.

POST /actions/projects/{project_id}/task-types/{task_type_id}/set-shot-nb-frames

Responses

  • Frames set for given shots

POST /actions/projects/{project_id}/task-types/{task_type_id}/set-shot-nb-frames
curl \
 --request POST 'http://api.example.com/actions/projects/{project_id}/task-types/{task_type_id}/set-shot-nb-frames' \
 --header "Authorization: $API_KEY"





































Return task assigned to given user of which status has is_done flag sets to true.

GET /data/persons/{person_id}/done-tasks

It return only tasks related to open projects.

Responses

  • Tasks assigned to user that are done

GET /data/persons/{person_id}/done-tasks
curl \
 --request GET 'http://api.example.com/data/persons/{person_id}/done-tasks' \
 --header "Authorization: $API_KEY"




Retrieve all comments to tasks related to given project.

GET /data/projects/{project_id}/comments

It's mainly used for synchronisation purpose.

Responses

  • All comments to tasks related to given project

GET /data/projects/{project_id}/comments
curl \
 --request GET 'http://api.example.com/data/projects/{project_id}/comments' \
 --header "Authorization: $API_KEY"




















Delete all tasks for a given task type and project.

DELETE /actions/projects/{project_id}/task-types/{task_type_id}/delete-tasks

It's mainly used when tasks are created by mistake at the beginning of the project.

Responses

  • All tasks for given task type and project deleted

DELETE /actions/projects/{project_id}/task-types/{task_type_id}/delete-tasks
curl \
 --request DELETE 'http://api.example.com/actions/projects/{project_id}/task-types/{task_type_id}/delete-tasks' \
 --header "Authorization: $API_KEY"




Responses

  • Given task assigned to given person

  • Assignee non-existent in database

PUT /actions/tasks/{task_id}/assign
curl \
 --request PUT 'http://api.example.com/actions/tasks/{task_id}/assign' \
 --header "Authorization: $API_KEY"

Responses

  • All assignations removed

PUT /actions/tasks/clear-assignation
curl \
 --request PUT 'http://api.example.com/actions/tasks/clear-assignation' \
 --header "Authorization: $API_KEY"












































Create a new task for given asset and task type.

POST /actions/projects/{project_id}/task-types/{task_type_id}/assets/create-tasks

Path parameters

Responses

  • New task for given asset and task type created

POST /actions/projects/{project_id}/task-types/{task_type_id}/assets/create-tasks
curl \
 --request POST 'http://api.example.com/actions/projects/{project_id}/task-types/{task_type_id}/assets/create-tasks' \
 --header "Authorization: $API_KEY"

Create a new task for given edit and task type.

POST /actions/projects/{project_id}/task-types/{task_type_id}/edits/create-tasks

Path parameters

Responses

  • New task for given edit and task type created

POST /actions/projects/{project_id}/task-types/{task_type_id}/edits/create-tasks
curl \
 --request POST 'http://api.example.com/actions/projects/{project_id}/task-types/{task_type_id}/edits/create-tasks' \
 --header "Authorization: $API_KEY"





























GET /data/user/sequences/{sequence_id}/tasks
curl \
 --request GET 'http://api.example.com/data/user/sequences/{sequence_id}/tasks' \
 --header "Authorization: $API_KEY"
















Responses

  • Open projects for which the user has at least one task assigned

GET /data/user/projects/open
curl \
 --request GET 'http://api.example.com/data/user/projects/open' \
 --header "Authorization: $API_KEY"




























Return tasks requiring feedback for current user departments.

GET /data/user/tasks-to-check


If the user is not a supervisor, it returns an empty list.

Responses

  • Tasks requiring feedback in current user departments.

GET /data/user/tasks-to-check
curl \
 --request GET 'http://api.example.com/data/user/tasks-to-check' \
 --header "Authorization: $API_KEY"








































Retrieve desktop login logs.

GET /data/user/desktop-login-logs

Responses

GET /data/user/desktop-login-logs
curl \
 --request GET 'http://api.example.com/data/user/desktop-login-logs' \
 --header "Authorization: $API_KEY"
































POST /actions/user/chats/{entity_id}/join
curl \
 --request POST 'http://api.example.com/actions/user/chats/{entity_id}/join' \
 --header "Authorization: $API_KEY"








Remove the subscription entry matching given task and current user.

DELETE /actions/user/tasks/{task_id}/unsubscribe

The user will no longer receive notifications for this task.

Responses

  • Subscription entry removed

DELETE /actions/user/tasks/{task_id}/unsubscribe
curl \
 --request DELETE 'http://api.example.com/actions/user/tasks/{task_id}/unsubscribe' \
 --header "Authorization: $API_KEY"




Return true if current user has subscribed to given sequence and

GET /data/user/entities/{sequence_id}/task-types/{task_type_id}/subscribed

task type.

Responses

  • True if current user has subscribed to given sequence and task type, False otherwise

GET /data/user/entities/{sequence_id}/task-types/{task_type_id}/subscribed
curl \
 --request GET 'http://api.example.com/data/user/entities/{sequence_id}/task-types/{task_type_id}/subscribed' \
 --header "Authorization: $API_KEY"












Mark all notifications as read for the current user.

POST /actions/user/notifications/mark-all-as-read

Responses

  • All notifications marked as read

POST /actions/user/notifications/mark-all-as-read
curl \
 --request POST 'http://api.example.com/actions/user/notifications/mark-all-as-read' \
 --header "Authorization: $API_KEY"









Create a new chat message.

POST /data/entities/{entity_id}/chat/messages

Path parameters

  • entity_id Required

    ID of the entity related to the chat

Responses

  • Chat message created

  • Not participant of the chat

POST /data/entities/{entity_id}/chat/messages
curl \
 --request POST 'http://api.example.com/data/entities/{entity_id}/chat/messages' \
 --header "Authorization: $API_KEY"














Set last preview from given task as main preview of the related entity.

PUT /actions/tasks/{task_id}/set-main-preview

This preview will be used as thumbnail to illustrate the entity.

Responses

  • Given preview set as main preview

PUT /actions/tasks/{task_id}/set-main-preview
curl \
 --request PUT 'http://api.example.com/actions/tasks/{task_id}/set-main-preview' \
 --header "Authorization: $API_KEY"