openapi: 3.2.0 info: title: wger Video API version: 2.7.0a2 description: "Self hosted FLOSS workout and fitness tracker.\n\n## Authentication\n\nSystem-wide data such as the exercise database, ingredients and units can be\nread without authenticating. Everything tied to a user account needs one of the\nfollowing, which are tried in this order:\n\n* `Authorization: Token ` with a personal API key. Users create one on the\n API key page of their profile, e.g. `/en/user/api-key`.\n* `Authorization: Bearer ` with a JWT access token.\n* The session cookie, which is what a logged-in browser uses.\n\n## Pagination\n\nList endpoints take `limit` and `offset`, and answer with `count`, `next`,\n`previous` and `results`. The default page size is 20 and `limit` is capped\nat 999.\n\n`/api/v2/ingredient-sync/` is the exception. It uses cursor pagination so that\nsyncing the catalogue stays fast no matter how far a client has paginated. That\nresponse carries no `count`, and clients follow `next` instead of picking an\noffset.\n\n## Filtering and ordering\n\nMost list endpoints accept filters on a subset of their fields, plus `ordering`\nwith a field name that can be prefixed with `-` to reverse it. Both are listed\nper endpoint.\n\n## Unknown fields are dropped on write\n\nA field that the endpoint does not declare is ignored instead of rejected. Such\na request still answers 200 or 201, and the unknown field simply has no effect,\nso check a write against the response body rather than the status code.\n\n## Rate limits\n\nThe ingredient endpoints are rate limited because the catalogue holds millions\nof rows, and creating exercises is capped as well. Limits count per user for\nauthenticated callers and per IP otherwise. Exceeding one answers 429.\n" license: name: AGPL-3.0-or-later url: https://www.gnu.org/licenses/agpl-3.0.html servers: - url: / description: This server - url: https://wger.de description: The "official" upstream wger instance tags: - name: video paths: /api/v2/video/: get: operationId: video_list description: API endpoint for exercise video objects parameters: - in: query name: exercise schema: type: integer - in: query name: is_main schema: type: boolean - in: query name: license schema: type: integer - in: query name: license_author schema: type: string - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string tags: - video security: - cookieAuth: [] - tokenAuth: [] - headlessJwtAuth: [] - oidcAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedExerciseVideoList' description: '' post: operationId: video_create description: API endpoint for exercise video objects tags: - video requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/ExerciseVideoRequest' required: true security: - cookieAuth: [] - tokenAuth: [] - headlessJwtAuth: [] - oidcAuth: [] - jwtAuth: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/ExerciseVideo' description: '' /api/v2/video/{id}/: get: operationId: video_retrieve description: API endpoint for exercise video objects parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this exercise video. required: true tags: - video security: - cookieAuth: [] - tokenAuth: [] - headlessJwtAuth: [] - oidcAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ExerciseVideo' description: '' put: operationId: video_update description: API endpoint for exercise video objects parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this exercise video. required: true tags: - video requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/ExerciseVideoRequest' required: true security: - cookieAuth: [] - tokenAuth: [] - headlessJwtAuth: [] - oidcAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ExerciseVideo' description: '' patch: operationId: video_partial_update description: API endpoint for exercise video objects parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this exercise video. required: true tags: - video requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/PatchedExerciseVideoRequest' security: - cookieAuth: [] - tokenAuth: [] - headlessJwtAuth: [] - oidcAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ExerciseVideo' description: '' delete: operationId: video_destroy description: API endpoint for exercise video objects parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this exercise video. required: true tags: - video security: - cookieAuth: [] - tokenAuth: [] - headlessJwtAuth: [] - oidcAuth: [] - jwtAuth: [] responses: '204': description: No response body components: schemas: ExerciseVideoRequest: type: object description: ExerciseVideo serializer properties: exercise: type: integer video: type: string format: binary is_main: type: boolean title: Is main video license: type: integer license_title: type: string title: The original title of this object, if available maxLength: 300 license_object_url: title: Link to original object, if available oneOf: - type: string format: uri maxLength: 200 - type: string maxLength: 0 license_author: type: string title: Author(s) description: If you are not the author, enter the name or source here. maxLength: 3500 license_author_url: title: Link to author profile, if available oneOf: - type: string format: uri maxLength: 200 - type: string maxLength: 0 license_derivative_source_url: title: Link to the original source, if this is a derivative work description: Note that a derivative work is one which is not only based on a previous work, but which also contains sufficient new, creative content to entitle it to its own copyright. oneOf: - type: string format: uri maxLength: 200 - type: string maxLength: 0 required: - exercise - video PatchedExerciseVideoRequest: type: object description: ExerciseVideo serializer properties: exercise: type: integer video: type: string format: binary is_main: type: boolean title: Is main video license: type: integer license_title: type: string title: The original title of this object, if available maxLength: 300 license_object_url: title: Link to original object, if available oneOf: - type: string format: uri maxLength: 200 - type: string maxLength: 0 license_author: type: string title: Author(s) description: If you are not the author, enter the name or source here. maxLength: 3500 license_author_url: title: Link to author profile, if available oneOf: - type: string format: uri maxLength: 200 - type: string maxLength: 0 license_derivative_source_url: title: Link to the original source, if this is a derivative work description: Note that a derivative work is one which is not only based on a previous work, but which also contains sufficient new, creative content to entitle it to its own copyright. oneOf: - type: string format: uri maxLength: 200 - type: string maxLength: 0 ExerciseVideo: type: object description: ExerciseVideo serializer properties: id: type: integer readOnly: true uuid: type: string format: uuid readOnly: true exercise: type: integer exercise_uuid: type: string format: uuid readOnly: true video: type: string format: uri is_main: type: boolean title: Is main video size: type: integer readOnly: true duration: type: string format: decimal pattern: ^-?\d{0,10}(?:\.\d{0,2})?$ readOnly: true width: type: integer readOnly: true height: type: integer readOnly: true codec: type: string readOnly: true codec_long: type: string readOnly: true title: Codec, long name license: type: integer license_title: type: string title: The original title of this object, if available maxLength: 300 license_object_url: title: Link to original object, if available oneOf: - type: string format: uri maxLength: 200 - type: string maxLength: 0 license_author: type: string title: Author(s) description: If you are not the author, enter the name or source here. maxLength: 3500 license_author_url: title: Link to author profile, if available oneOf: - type: string format: uri maxLength: 200 - type: string maxLength: 0 license_derivative_source_url: title: Link to the original source, if this is a derivative work description: Note that a derivative work is one which is not only based on a previous work, but which also contains sufficient new, creative content to entitle it to its own copyright. oneOf: - type: string format: uri maxLength: 200 - type: string maxLength: 0 author_history: type: array items: type: string readOnly: true required: - author_history - codec - codec_long - duration - exercise - exercise_uuid - height - id - size - uuid - video - width PaginatedExerciseVideoList: type: object required: - count - results properties: count: type: integer example: 123 next: type: - string - 'null' format: uri example: http://api.example.org/accounts/?offset=400&limit=100 previous: type: - string - 'null' format: uri example: http://api.example.org/accounts/?offset=200&limit=100 results: type: array items: $ref: '#/components/schemas/ExerciseVideo' securitySchemes: cookieAuth: type: apiKey in: cookie name: sessionid headlessJwtAuth: type: http scheme: bearer bearerFormat: JWT description: Access token issued by the allauth headless endpoints jwtAuth: type: http scheme: bearer bearerFormat: JWT oidcAuth: type: oauth2 description: Access token issued by the OAuth2/OIDC provider flows: authorizationCode: authorizationUrl: https://wger.de/identity/o/authorize tokenUrl: https://wger.de/identity/o/api/token scopes: api:read: View your training, nutrition and body data api:write: Add and change your training, nutrition and body data tokenAuth: type: apiKey in: header name: Authorization description: Token-based authentication with required prefix "Token" externalDocs: url: https://wger.readthedocs.io description: wger documentation