openapi: 3.0.3
info:
    title: 'Aether API'
    description: ''
    version: 1.0.0
servers:
    -
        url: 'https://api-preprod.aetherdigitaltherapy.com'
paths:
    /api/activation-codes:
        get:
            summary: 'Get activation codes'
            description: ''
            parameters:
                -
                    in: query
                    name: sortby
                    description: 'Sort by field (available: <code>date</code>). Default: <code>date</code> (<code>desc</code>).'
                    example: date
                    required: false
                    schema:
                        type: string
                        description: 'Sort by field (available: <code>date</code>). Default: <code>date</code> (<code>desc</code>).'
                        example: date
                -
                    in: query
                    name: sortdir
                    description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                    example: asc
                    required: false
                    schema:
                        type: string
                        description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                        example: asc
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage activation codes'
                                    code: 'ACTIVATION_CODE:MANAGE:INSUFFICIENT_PERMISSION'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage activation codes' }
                                    code: { type: string, example: 'ACTIVATION_CODE:MANAGE:INSUFFICIENT_PERMISSION' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 486, code: RZAGJS, created_by: 14931, used_by: 14932, used_at: null, active: 0, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z' }, { id: 487, code: 46GAJI, created_by: 14933, used_by: 14934, used_at: null, active: 0, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 486, code: RZAGJS, created_by: 14931, used_by: 14932, used_at: null, active: 0, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z' }, { id: 487, code: 46GAJI, created_by: 14933, used_by: 14934, used_at: null, active: 0, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z' }], items: { type: object } }
            tags:
                - 'Activation codes'
        post:
            summary: 'Create activation code'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage activation codes'
                                    code: 'ACTIVATION_CODE:MANAGE:INSUFFICIENT_PERMISSION'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage activation codes' }
                                    code: { type: string, example: 'ACTIVATION_CODE:MANAGE:INSUFFICIENT_PERMISSION' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 490
                                    code: VWQUUI
                                    created_by: 14939
                                    used_by: 14940
                                    used_at: null
                                    active: 1
                                    created_at: '2025-01-08T10:15:41.000000Z'
                                    updated_at: '2025-01-08T10:15:41.000000Z'
                                properties:
                                    id: { type: integer, example: 490 }
                                    code: { type: string, example: VWQUUI }
                                    created_by: { type: integer, example: 14939 }
                                    used_by: { type: integer, example: 14940 }
                                    used_at: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    created_at: { type: string, example: '2025-01-08T10:15:41.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:41.000000Z' }
            tags:
                - 'Activation codes'
    /api/activation-codes/active:
        get:
            summary: 'Get active activation codes'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage activation codes'
                                    code: 'ACTIVATION_CODE:MANAGE:INSUFFICIENT_PERMISSION'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage activation codes' }
                                    code: { type: string, example: 'ACTIVATION_CODE:MANAGE:INSUFFICIENT_PERMISSION' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 488, code: P0O4XG, created_by: 14935, used_by: 14936, used_at: null, active: 0, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z' }, { id: 489, code: GG9AO5, created_by: 14937, used_by: 14938, used_at: null, active: 1, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 488, code: P0O4XG, created_by: 14935, used_by: 14936, used_at: null, active: 0, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z' }, { id: 489, code: GG9AO5, created_by: 14937, used_by: 14938, used_at: null, active: 1, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z' }], items: { type: object } }
            tags:
                - 'Activation codes'
    '/api/activation-codes/{codeId}':
        delete:
            summary: 'Deactivate activation code'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Activation code is not active'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot deactivate: code is not active'
                                    code: 'ACTIVATION_CODE:DEACTIVATE:CODE_NOT_ACTIVE'
                                properties:
                                    message: { type: string, example: 'Cannot deactivate: code is not active' }
                                    code: { type: string, example: 'ACTIVATION_CODE:DEACTIVATE:CODE_NOT_ACTIVE' }
                404:
                    description: '404, Activation code not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Activation code not found'
                                properties:
                                    message: { type: string, example: 'Activation code not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 491
                                    code: 0AB6VY
                                    created_by: 14941
                                    used_by: 14942
                                    used_at: null
                                    active: 1
                                    created_at: '2025-01-08T10:15:41.000000Z'
                                    updated_at: '2025-01-08T10:15:41.000000Z'
                                properties:
                                    id: { type: integer, example: 491 }
                                    code: { type: string, example: 0AB6VY }
                                    created_by: { type: integer, example: 14941 }
                                    used_by: { type: integer, example: 14942 }
                                    used_at: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    created_at: { type: string, example: '2025-01-08T10:15:41.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:41.000000Z' }
            tags:
                - 'Activation codes'
        parameters:
            -
                in: path
                name: codeId
                description: 'Activation Code ID'
                example: 18
                required: true
                schema:
                    type: integer
    /api/login:
        post:
            summary: 'Login user'
            description: ''
            parameters:
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                422:
                    description: '422, Invalid credentials'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'The given data was invalid.'
                                    errors: { email: ['Given credentials not found'] }
                                properties:
                                    message: { type: string, example: 'The given data was invalid.' }
                                    errors: { type: object, example: { email: ['Given credentials not found'] } }
                403:
                    description: '403, Too many attempts'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Login: too many attempts'
                                properties:
                                    message: { type: string, example: 'Login: too many attempts' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    access_token: 7|x7de9EgE0xiBNLgHU91DHvhj85HVgTG1bekCssIA
                                    expires: '2021-10-25 17:05:25'
                                properties:
                                    access_token: { type: string, example: 7|x7de9EgE0xiBNLgHU91DHvhj85HVgTG1bekCssIA }
                                    expires: { type: string, example: '2021-10-25 17:05:25' }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                email:
                                    type: string
                                    description: 'User email. The value must be a valid email address.'
                                    example: test@example.com
                                password:
                                    type: string
                                    description: 'User password.'
                                    example: secretpassword
                            required:
                                - email
                                - password
            security: []
    /api/register:
        post:
            summary: 'Register user'
            description: ''
            parameters:
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Activation code is incorrect'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Activation code is incorrect'
                                    code: 'AUTH:REGISTER:INCORRECT_CODE'
                                properties:
                                    message: { type: string, example: 'Activation code is incorrect' }
                                    code: { type: string, example: 'AUTH:REGISTER:INCORRECT_CODE' }
                500:
                    description: '500, Server error'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Server error: user not created'
                                    code: 'AUTH:REGISTER:SERVER_ERROR'
                                properties:
                                    message: { type: string, example: 'Server error: user not created' }
                                    code: { type: string, example: 'AUTH:REGISTER:SERVER_ERROR' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 14914
                                    mrn: H4SIGP4E
                                    name: 'Larry Fadel'
                                    email: 1736331338jeff68@example.net
                                    language: en
                                    phone: 361.655.8288
                                    phone_country: KM
                                    phone_verified_at: null
                                    address1: '57113 Goodwin Drives'
                                    address2: 'West Stuart, WY 03356-0795'
                                    postal_code: '64334'
                                    city: Bahringer-Lindgren
                                    clinic_name: 'Lake Chaimport'
                                    clinic_location: "7296 Charlene Summit Apt. 526\nBergstromborough, AR 75864-3881"
                                    image: null
                                    mfa_enabled: 0
                                    mfa_method: null
                                    mfa_verified_to: null
                                    created_by: null
                                    active: 1
                                    notifications_timezone: null
                                    notifications_at: null
                                    created_at: '2025-01-08T10:15:38.000000Z'
                                    updated_at: '2025-01-08T10:15:38.000000Z'
                                    invitation_status: accepted
                                    roles: [{ id: 4, name: ClinicAdmin }]
                                    devices_as_clinician: []
                                properties:
                                    id: { type: integer, example: 14914 }
                                    mrn: { type: string, example: H4SIGP4E }
                                    name: { type: string, example: 'Larry Fadel' }
                                    email: { type: string, example: 1736331338jeff68@example.net }
                                    language: { type: string, example: en }
                                    phone: { type: string, example: 361.655.8288 }
                                    phone_country: { type: string, example: KM }
                                    phone_verified_at: { type: string, example: null }
                                    address1: { type: string, example: '57113 Goodwin Drives' }
                                    address2: { type: string, example: 'West Stuart, WY 03356-0795' }
                                    postal_code: { type: string, example: '64334' }
                                    city: { type: string, example: Bahringer-Lindgren }
                                    clinic_name: { type: string, example: 'Lake Chaimport' }
                                    clinic_location: { type: string, example: "7296 Charlene Summit Apt. 526\nBergstromborough, AR 75864-3881" }
                                    image: { type: string, example: null }
                                    mfa_enabled: { type: integer, example: 0 }
                                    mfa_method: { type: string, example: null }
                                    mfa_verified_to: { type: string, example: null }
                                    created_by: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    notifications_timezone: { type: string, example: null }
                                    notifications_at: { type: string, example: null }
                                    created_at: { type: string, example: '2025-01-08T10:15:38.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:38.000000Z' }
                                    invitation_status: { type: string, example: accepted }
                                    roles: { type: array, example: [{ id: 4, name: ClinicAdmin }], items: { type: object } }
                                    devices_as_clinician: { type: array, example: [] }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                region:
                                    type: string
                                    description: ''
                                    example: a
                                name:
                                    type: string
                                    description: 'User name.'
                                    example: 'Tom Smith'
                                email:
                                    type: string
                                    description: 'User e-mail address. The value must be a valid email address.'
                                    example: name@domain.com
                                password:
                                    type: string
                                    description: 'User password.'
                                    example: Test123!
                                phone:
                                    type: string
                                    description: 'User phone number.'
                                    example: '(564) 639-8537'
                                phone_country:
                                    type: string
                                    description: 'Phone number''s country (2 characters).'
                                    example: US
                                language:
                                    type: string
                                    description: ''
                                    example: perferendis
                                clinic_name:
                                    type: string
                                    description: 'Clinic name.'
                                    example: 'Lubowitz and Sons'
                                clinic_location:
                                    type: string
                                    description: 'Clinic location.'
                                    example: 'North Rustyton'
                                address1:
                                    type: string
                                    description: 'Address line 1.'
                                    example: '2813 Runolfsson Park'
                                address2:
                                    type: string
                                    description: 'Address line 2.'
                                    example: 'East Clotildebury, DC 08792-3173'
                                mfa_enabled:
                                    type: boolean
                                    description: 'MFA enabled.'
                                    example: true
                                mfa_method:
                                    type: string
                                    description: 'MFA method. The value must be one of <code>email</code> or <code>sms</code>.'
                                    example: email
                                activation_code:
                                    type: string
                                    description: 'Activation code.'
                                    example: 1A2B3C
                            required:
                                - region
                                - name
                                - email
                                - password
                                - phone
                                - phone_country
                                - language
                                - activation_code
            security: []
    /api/mobile/register:
        post:
            summary: 'Register mobile user'
            description: ''
            parameters:
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, E-mail in use (in another region)'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'E-mail address already in use (in another region)'
                                    code: 'AUTH:MOBILE_REGISTER:EMAIL_IN_USE'
                                properties:
                                    message: { type: string, example: 'E-mail address already in use (in another region)' }
                                    code: { type: string, example: 'AUTH:MOBILE_REGISTER:EMAIL_IN_USE' }
                500:
                    description: '500, Server error'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Server error: user not created'
                                    code: 'AUTH:MOBILE_REGISTER:SERVER_ERROR'
                                properties:
                                    message: { type: string, example: 'Server error: user not created' }
                                    code: { type: string, example: 'AUTH:MOBILE_REGISTER:SERVER_ERROR' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 14915
                                    mrn: K4MLHFEB
                                    name: 'Dr. Gregory Osinski PhD'
                                    email: 1736331338khaag@example.org
                                    language: en
                                    phone: +1-478-386-0110
                                    phone_country: DK
                                    phone_verified_at: null
                                    address1: '65059 Arvilla Valleys Apt. 530'
                                    address2: 'Roweburgh, DC 62586-4930'
                                    postal_code: 07080-7637
                                    city: 'Maggio, Bogan and Franecki'
                                    clinic_name: 'West Maryjane'
                                    clinic_location: "569 Betsy Stream\nWest Joanieview, CT 30186-9919"
                                    image: null
                                    mfa_enabled: 0
                                    mfa_method: null
                                    mfa_verified_to: null
                                    created_by: null
                                    active: 1
                                    notifications_timezone: null
                                    notifications_at: null
                                    created_at: '2025-01-08T10:15:38.000000Z'
                                    updated_at: '2025-01-08T10:15:38.000000Z'
                                    invitation_status: accepted
                                    roles: [{ id: 4, name: ClinicAdmin }]
                                    devices_as_clinician: []
                                properties:
                                    id: { type: integer, example: 14915 }
                                    mrn: { type: string, example: K4MLHFEB }
                                    name: { type: string, example: 'Dr. Gregory Osinski PhD' }
                                    email: { type: string, example: 1736331338khaag@example.org }
                                    language: { type: string, example: en }
                                    phone: { type: string, example: +1-478-386-0110 }
                                    phone_country: { type: string, example: DK }
                                    phone_verified_at: { type: string, example: null }
                                    address1: { type: string, example: '65059 Arvilla Valleys Apt. 530' }
                                    address2: { type: string, example: 'Roweburgh, DC 62586-4930' }
                                    postal_code: { type: string, example: 07080-7637 }
                                    city: { type: string, example: 'Maggio, Bogan and Franecki' }
                                    clinic_name: { type: string, example: 'West Maryjane' }
                                    clinic_location: { type: string, example: "569 Betsy Stream\nWest Joanieview, CT 30186-9919" }
                                    image: { type: string, example: null }
                                    mfa_enabled: { type: integer, example: 0 }
                                    mfa_method: { type: string, example: null }
                                    mfa_verified_to: { type: string, example: null }
                                    created_by: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    notifications_timezone: { type: string, example: null }
                                    notifications_at: { type: string, example: null }
                                    created_at: { type: string, example: '2025-01-08T10:15:38.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:38.000000Z' }
                                    invitation_status: { type: string, example: accepted }
                                    roles: { type: array, example: [{ id: 4, name: ClinicAdmin }], items: { type: object } }
                                    devices_as_clinician: { type: array, example: [] }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                region:
                                    type: string
                                    description: ''
                                    example: nihil
                                name:
                                    type: string
                                    description: 'User name.'
                                    example: 'Tom Smith'
                                email:
                                    type: string
                                    description: 'User e-mail address. The value must be a valid email address.'
                                    example: name@domain.com
                                password:
                                    type: string
                                    description: 'User password.'
                                    example: Test123!
                                language:
                                    type: string
                                    description: 'User language.'
                                    example: en
                                terms_accepted:
                                    type: string
                                    description: 'User accepted terms. The value must be one of <code>1</code>.'
                                    example: '1'
                            required:
                                - region
                                - name
                                - email
                                - password
            security: []
    /api/password/reset:
        post:
            summary: "Request password reset\nRequest sending password reset email message with token that allows to change the password"
            description: ''
            parameters:
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    code: passwords.user
                                    message: 'User not found'
                                properties:
                                    code: { type: string, example: passwords.user }
                                    message: { type: string, example: 'User not found' }
                400:
                    description: '400, Throttled request'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    code: passwords.throttled
                                    message: 'You have requested password reset recently'
                                properties:
                                    code: { type: string, example: passwords.throttled }
                                    message: { type: string, example: 'You have requested password reset recently' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    code: passwords.sent
                                    message: 'Reset password link successfully sent'
                                properties:
                                    code: { type: string, example: passwords.sent }
                                    message: { type: string, example: 'Reset password link successfully sent' }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                email:
                                    type: string
                                    description: 'User email. The value must be a valid email address.'
                                    example: test@example.com
                            required:
                                - email
            security: []
    /api/password/reset/verify:
        post:
            summary: "Verify password reset token\nCheck if token is valid before using it to reset password"
            description: ''
            parameters:
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                400:
                    description: '400, Invalid token'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Invalid token'
                                properties:
                                    message: { type: string, example: 'Invalid token' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Valid token'
                                properties:
                                    message: { type: string, example: 'Valid token' }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                token:
                                    type: string
                                    description: 'Password reset token.'
                                    example: 158bed12188492617e43ecfcca43f5990b3f5f0383b5083247389482b70af019
                                email:
                                    type: string
                                    description: 'User email. The value must be a valid email address.'
                                    example: test@example.com
                            required:
                                - token
                                - email
            security: []
    /api/password/reset/change:
        post:
            summary: "Change password with token\nChange user password using password reset token sent to email address"
            description: ''
            parameters:
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    code: passwords.user
                                    message: 'User not found'
                                properties:
                                    code: { type: string, example: passwords.user }
                                    message: { type: string, example: 'User not found' }
                400:
                    description: '400, Invalid token'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    code: passwords.token
                                    message: 'Invalid token'
                                properties:
                                    code: { type: string, example: passwords.token }
                                    message: { type: string, example: 'Invalid token' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    code: passwords.reset
                                    message: 'Password changed successfully'
                                properties:
                                    code: { type: string, example: passwords.reset }
                                    message: { type: string, example: 'Password changed successfully' }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                token:
                                    type: string
                                    description: 'Password reset token.'
                                    example: 158bed12188492617e43ecfcca43f5990b3f5f0383b5083247389482b70af019
                                email:
                                    type: string
                                    description: 'User email. The value must be a valid email address.'
                                    example: test@example.com
                                password:
                                    type: string
                                    description: 'User new password.'
                                    example: secretpassword
                            required:
                                - token
                                - email
                                - password
            security: []
    /api/logout:
        post:
            summary: "Logout current device\nLogout and delete current access token"
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example: []
            tags:
                - Authentication
    /api/logout/everywhere:
        post:
            summary: "Logout everywhere\nLogout and delete all access tokens owned by account"
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example: []
            tags:
                - Authentication
    /api/token/refresh:
        post:
            summary: "Refresh access token\nRefresh the new access token from the expiring token"
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    access_token: 7|x7de9EgE0xiBNLgHU91DHvhj85HVgTG1bekCssIA
                                    expires: '2021-10-25 17:05:25'
                                properties:
                                    access_token: { type: string, example: 7|x7de9EgE0xiBNLgHU91DHvhj85HVgTG1bekCssIA }
                                    expires: { type: string, example: '2021-10-25 17:05:25' }
            tags:
                - Authentication
    /api/mfa/status:
        get:
            summary: "Check MFA status\nCheck any of available MFA methods."
            description: 'Supported methods: email, sms, otp.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    enabled: 1
                                    method: email
                                    phone: 1
                                    otp: 1
                                properties:
                                    enabled: { type: integer, example: 1, description: 'Determines if user enabled MFA' }
                                    method: { type: string, example: email, description: 'Preferred MFA method' }
                                    phone: { type: integer, example: 1, description: 'Determines if user has verified phone number and sms channel could be used' }
                                    otp: { type: integer, example: 1, description: 'Determines if user has setup OTP with authenticator application' }
            tags:
                - Authentication
        post:
            summary: "Set MFA status\nSet MFA status and preferred method."
            description: 'Supported methods: email, sms, otp.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    enabled: 1
                                    method: email
                                    phone: 1
                                    otp: 1
                                properties:
                                    enabled: { type: integer, example: 1 }
                                    method: { type: string, example: email }
                                    phone: { type: integer, example: 1 }
                                    otp: { type: integer, example: 1 }
            tags:
                - Authentication
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                enabled:
                                    type: integer
                                    description: 'Use MFA after login. The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
                                method:
                                    type: string
                                    description: 'Preferred MFA method. The value must be one of <code>email</code>, <code>sms</code>, or <code>otp</code>.'
                                    example: email
    /api/mfa/recovery-code:
        post:
            summary: "Use recovery code\nUse generated recovery code in order to access account in case when other MFA methods couldn't be used."
            description: "This method only checks if code is valid, implement account access scenario on your own.\nSent code is removed and couldn't be used anymore.\nIf remaining_codes counter equals zero, <a href=\"#generate-recovery-codes\">generate a new set</a>."
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                401:
                    description: '401, Invalid code'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Invalid code'
                                properties:
                                    message: { type: string, example: 'Invalid code' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    access_token: 7|x7de9EgE0xiBNLgHU91DHvhj85HVgTG1bekCssIA
                                    expires: '2021-10-25 17:05:25'
                                    remaining_codes: 9
                                properties:
                                    access_token: { type: string, example: 7|x7de9EgE0xiBNLgHU91DHvhj85HVgTG1bekCssIA }
                                    expires: { type: string, example: '2021-10-25 17:05:25' }
                                    remaining_codes: { type: integer, example: 9 }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                code:
                                    type: string
                                    description: 'Recovery code.'
                                    example: ZZASRM6S
                            required:
                                - code
    /api/mfa/send:
        post:
            summary: "Send MFA code\nSend multi-factor authentication code via selected channel."
            description: 'Code is valid for 15 minutes.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                400:
                    description: '400, Channel SMS, phone number not verified'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Phone number is not verified'
                                properties:
                                    message: { type: string, example: 'Phone number is not verified' }
                500:
                    description: '500, Channel SMS, provider problem'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Code sending failed'
                                properties:
                                    message: { type: string, example: 'Code sending failed' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Code sent'
                                properties:
                                    message: { type: string, example: 'Code sent' }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                channel:
                                    type: string
                                    description: 'Authentication channel. The value must be one of <code>email</code> or <code>sms</code>.'
                                    example: email
                            required:
                                - channel
    /api/mfa/verify:
        post:
            summary: "Verify MFA code\nVerify multi-factor code obtained from selected channel."
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                401:
                    description: '401, Invalid code'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Invalid code'
                                properties:
                                    message: { type: string, example: 'Invalid code' }
                200:
                    description: '200, OK, cookie auth'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: OK
                                    mfa_token: fd63e55c-2a67-44b2-95b9-a771778e9971
                                    mfa_expires: '2023-04-25 21:00:00'
                                properties:
                                    message: { type: string, example: OK }
                                    mfa_token: { type: string, example: fd63e55c-2a67-44b2-95b9-a771778e9971 }
                                    mfa_expires: { type: string, example: '2023-04-25 21:00:00' }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                channel:
                                    type: string
                                    description: 'Authentication channel. The value must be one of <code>email</code> or <code>sms</code>.'
                                    example: email
                                remember_mfa_session:
                                    type: boolean
                                    description: 'Do not require MFA code. By default, for 30 days.'
                                    example: true
                                code:
                                    type: string
                                    description: 'Authentication code.'
                                    example: '445566'
                                machine_key:
                                    type: string
                                    description: 'Unique machine identifier.'
                                    example: 35282880-244a-4328-9435-2aaf432f3619
                            required:
                                - channel
                                - code
    /api/mfa/phone/verify:
        post:
            summary: "Verify phone number\nVerify phone number with text message"
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                401:
                    description: '401, Invalid code'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Invalid code'
                                properties:
                                    message: { type: string, example: 'Invalid code' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Phone number verified'
                                properties:
                                    message: { type: string, example: 'Phone number verified' }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                code:
                                    type: string
                                    description: 'Verification code.'
                                    example: '445566'
                            required:
                                - code
    /api/mfa/otp/verify:
        post:
            summary: "Verify MFA OTP\nVerify one-time password (OTP)."
            description: 'If verification is successful, new access token with additional permissions will be generated.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                401:
                    description: '401, Invalid code'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Invalid code'
                                properties:
                                    message: { type: string, example: 'Invalid code' }
                200:
                    description: '200, OK, cookie auth'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: OK
                                properties:
                                    message: { type: string, example: OK }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                code:
                                    type: string
                                    description: 'One-time password from app.'
                                    example: '445566'
                            required:
                                - code
    /api/password/change:
        post:
            summary: "Change password\nChange authenticated user password"
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                422:
                    description: '422, Invalid old password'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'The given data was invalid.'
                                    errors: { old_password: ['Old password is incorrect'] }
                                properties:
                                    message: { type: string, example: 'The given data was invalid.' }
                                    errors: { type: object, example: { old_password: ['Old password is incorrect'] } }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Password changed successfully'
                                properties:
                                    message: { type: string, example: 'Password changed successfully' }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                old_password:
                                    type: string
                                    description: 'User old password.'
                                    example: oldpassword
                                new_password:
                                    type: string
                                    description: 'User new password.'
                                    example: newpassword
                            required:
                                - old_password
                                - new_password
    /api/mfa/recovery-codes:
        get:
            summary: "Generate recovery codes\nGenerate recovery codes for authenticated user and revoke old ones."
            description: 'User could use these codes in case when couldn''t use any of MFA methods (e.g. lost device with OTP app or device is not accessible right now).'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    recovery_codes: [A3H8PF8P, IZ8CGK2H, DTYENLLT, 0RKEZFST, 9MPW91BS, S38Z6HS6, UF5ATOKP, HSZXP8EL, ZZASRM6S, 07GR4CD1]
                                properties:
                                    recovery_codes: { type: array, example: [A3H8PF8P, IZ8CGK2H, DTYENLLT, 0RKEZFST, 9MPW91BS, S38Z6HS6, UF5ATOKP, HSZXP8EL, ZZASRM6S, 07GR4CD1], items: { type: string } }
            tags:
                - Authentication
    /api/mfa/otp/setup:
        post:
            summary: "Setup MFA OTP\nSetup multi-factor authentication with one-time passwords (OTP)."
            description: "Use secret on your own or generate QR code with given url.\nThen user could scan QR code with authentication app (e.g. Microsoft Authenticator, Authy).\nIf secret has been already generated, new secret will override existing one and revoke previous setup."
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    secret: VXGJ6JMIAWWDFXYDLKO3VG3RSGTS34BGMVTGQIEHMVVMJ2JBGCSNPQZDV4B6OMDIGI4UKCVCVKVMA7EASLHZEJWW4ZNKLAUTSZYN7EA
                                    url: 'otpauth://totp/AetherDigitalTherapy?issuer=AetherDigitalTherapy&secret=VXGJ6JMIAWWDFXYDLKO3VG3RSGTS34BGMVTGQIEHMVVMJ2JBGCSNPQZDV4B6OMDIGI4UKCVCVKVMA7EASLHZEJWW4ZNKLAUTSZYN7EA'
                                    recovery_codes: [A3H8PF8P, IZ8CGK2H, DTYENLLT, 0RKEZFST, 9MPW91BS, S38Z6HS6, UF5ATOKP, HSZXP8EL, ZZASRM6S, 07GR4CD1]
                                properties:
                                    secret: { type: string, example: VXGJ6JMIAWWDFXYDLKO3VG3RSGTS34BGMVTGQIEHMVVMJ2JBGCSNPQZDV4B6OMDIGI4UKCVCVKVMA7EASLHZEJWW4ZNKLAUTSZYN7EA }
                                    url: { type: string, example: 'otpauth://totp/AetherDigitalTherapy?issuer=AetherDigitalTherapy&secret=VXGJ6JMIAWWDFXYDLKO3VG3RSGTS34BGMVTGQIEHMVVMJ2JBGCSNPQZDV4B6OMDIGI4UKCVCVKVMA7EASLHZEJWW4ZNKLAUTSZYN7EA' }
                                    recovery_codes: { type: array, example: [A3H8PF8P, IZ8CGK2H, DTYENLLT, 0RKEZFST, 9MPW91BS, S38Z6HS6, UF5ATOKP, HSZXP8EL, ZZASRM6S, 07GR4CD1], items: { type: string } }
            tags:
                - Authentication
    /login:
        post:
            summary: "Login user (SPA)\nAuthorize user and create cookie-based session."
            description: "Hit GET /sanctum/csrf-cookie endpoint to retrieve XSRF-TOKEN cookie. Then attach X-XSRF-TOKEN HTTP header to any request to authorize.\nSee more: <a href=\"https://laravel.com/docs/8.x/sanctum#spa-authenticating\" target=\"_blank\">Laravel Sanctum documentation</a>"
            parameters:
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                422:
                    description: '422, Invalid credentials'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'The given data was invalid.'
                                    errors: { email: ['Given credentials not found'] }
                                properties:
                                    message: { type: string, example: 'The given data was invalid.' }
                                    errors: { type: object, example: { email: ['Given credentials not found'] } }
                403:
                    description: '403, Too many attempts'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Login: too many attempts'
                                properties:
                                    message: { type: string, example: 'Login: too many attempts' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    mrn: OJN1OH2C
                                    name: 'Della Rippin'
                                    email: 1736331358althea48@example.org
                                    language: en
                                    phone: '+19076134994'
                                    phone_country: FM
                                    address1: '587 Herzog Villages'
                                    address2: 'Lake Ines, FL 84363'
                                    postal_code: '19346'
                                    city: 'Feest and Sons'
                                    clinic_name: 'West Carlotta'
                                    clinic_location: "1997 Emerson Overpass Apt. 655\nEast Chelsey, CO 75942-9387"
                                    created_by: null
                                    active: 1
                                    updated_at: '2025-01-08T10:15:58.000000Z'
                                    created_at: '2025-01-08T10:15:58.000000Z'
                                    id: 15129
                                    invitation_status: null
                                    roles: []
                                properties:
                                    mrn: { type: string, example: OJN1OH2C }
                                    name: { type: string, example: 'Della Rippin' }
                                    email: { type: string, example: 1736331358althea48@example.org }
                                    language: { type: string, example: en }
                                    phone: { type: string, example: '+19076134994' }
                                    phone_country: { type: string, example: FM }
                                    address1: { type: string, example: '587 Herzog Villages' }
                                    address2: { type: string, example: 'Lake Ines, FL 84363' }
                                    postal_code: { type: string, example: '19346' }
                                    city: { type: string, example: 'Feest and Sons' }
                                    clinic_name: { type: string, example: 'West Carlotta' }
                                    clinic_location: { type: string, example: "1997 Emerson Overpass Apt. 655\nEast Chelsey, CO 75942-9387" }
                                    created_by: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    updated_at: { type: string, example: '2025-01-08T10:15:58.000000Z' }
                                    created_at: { type: string, example: '2025-01-08T10:15:58.000000Z' }
                                    id: { type: integer, example: 15129 }
                                    invitation_status: { type: string, example: null }
                                    roles: { type: array, example: [] }
            tags:
                - Authentication
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                email:
                                    type: string
                                    description: 'User email. The value must be a valid email address.'
                                    example: test@example.com
                                password:
                                    type: string
                                    description: 'User password.'
                                    example: secretpassword
                            required:
                                - email
                                - password
            security: []
    /api/chat/authorize-user:
        get:
            summary: 'Authorize a user'
            description: "This method authorizes a user using Ably service. Endpoint used only by Ably SDK\n\nCheck more details on https://ably.com/docs/auth/token"
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                401:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: Unauthenticated.
                                properties:
                                    message: { type: string, example: Unauthenticated. }
            tags:
                - Chat
    /api/chat/rooms:
        get:
            summary: 'List all chat rooms'
            description: "This method retrieves all chat rooms.\nPossible extend options:\n<ul>\n    <li>participants - user assigned to chat room</li>\n    <li>participants.roles - roles assigned to chat participants</li>\n    <li>owner - the clinician assigned to patient</li>\n    <li>patient - the patient for whom the chat was created</li>\n    <li>messages - the messages related to chat room</li>\n    <li>messages.author - the author of message/li>\n</ul>"
            parameters:
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to list chat room'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to list chat room' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 4266, owner: null, patient_id: null, encryption_key: f/hk0Xa0+V1jI+QRTEwljHSAOmON9f6KJmoFAnhbHsc=, name: molestiae, friendly_name: molestiae, created_at: '2025-01-08T10:15:56.000000Z', deleted_at: null, updated_at: '2025-01-08T10:15:56.000000Z' }, { id: 4267, owner: null, patient_id: null, encryption_key: F23MT30g8piPDDm+aVZvQJLmuVi2PB97F/6pvZQdloA=, name: perferendis, friendly_name: perferendis, created_at: '2025-01-08T10:15:56.000000Z', deleted_at: null, updated_at: '2025-01-08T10:15:56.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 4266, owner: null, patient_id: null, encryption_key: f/hk0Xa0+V1jI+QRTEwljHSAOmON9f6KJmoFAnhbHsc=, name: molestiae, friendly_name: molestiae, created_at: '2025-01-08T10:15:56.000000Z', deleted_at: null, updated_at: '2025-01-08T10:15:56.000000Z' }, { id: 4267, owner: null, patient_id: null, encryption_key: F23MT30g8piPDDm+aVZvQJLmuVi2PB97F/6pvZQdloA=, name: perferendis, friendly_name: perferendis, created_at: '2025-01-08T10:15:56.000000Z', deleted_at: null, updated_at: '2025-01-08T10:15:56.000000Z' }], items: { type: object } }
            tags:
                - Chat
    '/api/chat/room/{roomName}':
        get:
            summary: 'Retrieve a chat room'
            description: "This method retrieves a single chat room identified by roomId.\nPossible extend options:\n<ul>\n    <li>participants - user assigned to chat room</li>\n    <li>owner - the clinician assigned to patient</li>\n    <li>patient - the patient for whom the chat was created</li>\n    <li>messages - the messages related to chat room</li>\n    <li>messages.author - the author of message/li>\n</ul>"
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view chat room'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view chat room' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4268
                                    owner: null
                                    patient_id: null
                                    encryption_key: puqrvMjlHjucorkyKmi+hmpXbzvP49Aqno8Z1DpiU9E=
                                    name: et
                                    friendly_name: et
                                    created_at: '2025-01-08T10:15:56.000000Z'
                                    deleted_at: null
                                    updated_at: '2025-01-08T10:15:56.000000Z'
                                properties:
                                    id: { type: integer, example: 4268 }
                                    owner: { type: string, example: null }
                                    patient_id: { type: string, example: null }
                                    encryption_key: { type: string, example: puqrvMjlHjucorkyKmi+hmpXbzvP49Aqno8Z1DpiU9E= }
                                    name: { type: string, example: et }
                                    friendly_name: { type: string, example: et }
                                    created_at: { type: string, example: '2025-01-08T10:15:56.000000Z' }
                                    deleted_at: { type: string, example: null }
                                    updated_at: { type: string, example: '2025-01-08T10:15:56.000000Z' }
            tags:
                - Chat
        parameters:
            -
                in: path
                name: roomName
                description: ''
                example: quia
                required: true
                schema:
                    type: string
    /api/chat/room:
        post:
            summary: 'Create a new chat room'
            description: "This method creates a new chat room using the authenticated user's ID,\na name for the room, and a list of participants.\n\nThe list of participants should contain the IDs of the users who will be participants in the room."
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to create chat room'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to create chat room' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4269
                                    owner: null
                                    patient_id: null
                                    encryption_key: Kc8D8Px64hw1psKm7DvVa3CVdyL2SdnBwQU945utQ74=
                                    name: exercitationem
                                    friendly_name: exercitationem
                                    created_at: '2025-01-08T10:15:56.000000Z'
                                    deleted_at: null
                                    updated_at: '2025-01-08T10:15:56.000000Z'
                                properties:
                                    id: { type: integer, example: 4269 }
                                    owner: { type: string, example: null }
                                    patient_id: { type: string, example: null }
                                    encryption_key: { type: string, example: Kc8D8Px64hw1psKm7DvVa3CVdyL2SdnBwQU945utQ74= }
                                    name: { type: string, example: exercitationem }
                                    friendly_name: { type: string, example: exercitationem }
                                    created_at: { type: string, example: '2025-01-08T10:15:56.000000Z' }
                                    deleted_at: { type: string, example: null }
                                    updated_at: { type: string, example: '2025-01-08T10:15:56.000000Z' }
            tags:
                - Chat
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                owner:
                                    type: string
                                    description: ''
                                    example: 1
                                name:
                                    type: string
                                    description: 'Name of chat room.'
                                    example: my-chat
                                patient_id:
                                    type: string
                                    description: ''
                                    example: 1
                                participants:
                                    type: array
                                    description: 'Chat room participants.'
                                    example: '[1, 2]'
                                    items: { type: string }
                            required:
                                - owner
                                - name
                                - patient_id
                                - participants
    '/api/chat/room/{id}':
        put:
            summary: 'Update an existing chat room'
            description: "This method updates an existing chat room using the authenticated user's ID,\na new name for the room, and a list of participants.\n\nThe list of participants should contain the IDs of the users who will be participants in the room."
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update chat room'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update chat room' }
                404:
                    description: '404, Chat room not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Chat room not found'
                                properties:
                                    message: { type: string, example: 'Chat room not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4270
                                    owner: null
                                    patient_id: null
                                    encryption_key: FU0IJspN0e2ni/S+O5IXkLD8Cd6RcS712/caR2y3/Is=
                                    name: est
                                    friendly_name: est
                                    created_at: '2025-01-08T10:15:56.000000Z'
                                    deleted_at: null
                                    updated_at: '2025-01-08T10:15:56.000000Z'
                                properties:
                                    id: { type: integer, example: 4270 }
                                    owner: { type: string, example: null }
                                    patient_id: { type: string, example: null }
                                    encryption_key: { type: string, example: FU0IJspN0e2ni/S+O5IXkLD8Cd6RcS712/caR2y3/Is= }
                                    name: { type: string, example: est }
                                    friendly_name: { type: string, example: est }
                                    created_at: { type: string, example: '2025-01-08T10:15:56.000000Z' }
                                    deleted_at: { type: string, example: null }
                                    updated_at: { type: string, example: '2025-01-08T10:15:56.000000Z' }
            tags:
                - Chat
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                owner:
                                    type: string
                                    description: ''
                                    example: 1
                                name:
                                    type: string
                                    description: 'Name of chat room.'
                                    example: my-chat
                                participants:
                                    type: array
                                    description: 'Chat room participants.'
                                    example: '[1, 2]'
                                    items: { type: string }
                                participants_del:
                                    type: array
                                    description: 'Chat room participants.'
                                    example: '[1, 2]'
                                    items: { type: string }
        parameters:
            -
                in: path
                name: id
                description: ''
                example: voluptas
                required: true
                schema:
                    type: string
    '/api/chat/room/{id}/archive':
        get:
            summary: 'Chat room archives'
            description: "Get archived messages for room\n\nPossible extend options:\n <ul>\n     <li>author - this field represent user who send message</li>\n </ul>"
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                    example: author
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                        example: author
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: query
                    name: sortby
                    description: 'Sort by field (available: <code>timestamp</code>).'
                    example: timestamp
                    required: false
                    schema:
                        type: string
                        description: 'Sort by field (available: <code>timestamp</code>).'
                        example: timestamp
                -
                    in: query
                    name: sortdir
                    description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                    example: asc
                    required: false
                    schema:
                        type: string
                        description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                        example: asc
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view archived messages'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view archived messages' }
                200:
                    description: '200, Response'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 1, count: 1, perpage: 5, current_page: 1, last_page: 1 }
                                    items: [{ id: 651a8e4868d5dc27c0000cc2, channel: chat.messages.room.44.56bf7d37-4ed6-4db4-947b-d68a1066677c.communication-channel, clientId: '95', msgId: b8673175-01e6-4b6d-9032-226d3df20637, data: '{"encryptedMessage":{"message":"z6z1zNihCjlEePltz+BG8g==","initialVector":"7376fcbf0b32fbdcd5c5b62c087b7600"},"user":{"id":95,"name":"Bartosz Druga firmaa","email":"bartosz+drugafirma@refericon.pl","image":"https://aether-dev-bucket.s3.amazonaws.com/users/7T6im01PAj4cahksWHllrL7se2SQ9buquIjGGFtp.jpg","permissions":[],"roles":[{"id":2,"name":"Clinician"}]},"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","recipients":[{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"95"},{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"44"},{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"1250"},{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"3067"}]}', name: message, recipients: [{ delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: true, clientId: '95' }, { delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: false, clientId: '44' }, { delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: false, clientId: '1250' }, { delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: false, clientId: '3067' }], timestamp: 1696239176715, created_at: '2023-10-02 09:32:56' }]
                                properties:
                                    paginator: { type: object, example: { total: 1, count: 1, perpage: 5, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 651a8e4868d5dc27c0000cc2, channel: chat.messages.room.44.56bf7d37-4ed6-4db4-947b-d68a1066677c.communication-channel, clientId: '95', msgId: b8673175-01e6-4b6d-9032-226d3df20637, data: '{"encryptedMessage":{"message":"z6z1zNihCjlEePltz+BG8g==","initialVector":"7376fcbf0b32fbdcd5c5b62c087b7600"},"user":{"id":95,"name":"Bartosz Druga firmaa","email":"bartosz+drugafirma@refericon.pl","image":"https://aether-dev-bucket.s3.amazonaws.com/users/7T6im01PAj4cahksWHllrL7se2SQ9buquIjGGFtp.jpg","permissions":[],"roles":[{"id":2,"name":"Clinician"}]},"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","recipients":[{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"95"},{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"44"},{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"1250"},{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"3067"}]}', name: message, recipients: [{ delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: true, clientId: '95' }, { delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: false, clientId: '44' }, { delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: false, clientId: '1250' }, { delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: false, clientId: '3067' }], timestamp: 1696239176715, created_at: '2023-10-02 09:32:56' }], items: { type: object } }
            tags:
                - Chat
        parameters:
            -
                in: path
                name: id
                description: ''
                example: quia
                required: true
                schema:
                    type: string
    /api/chat/messages/unread:
        get:
            summary: 'Unread messages'
            description: "Get unread messaged for chat room.\n\nPossible extend options:\n <ul>\n    <li>author - this field represent user who send message</li>\n </ul>"
            parameters:
                -
                    in: query
                    name: room
                    description: "Filter unread messages by room.\nProvide single ID (<code>room=1</code>), array of IDs (<code>room[]=1&room[]=2</code>) or comma-separated list of IDs (<code>room=1,2</code>)."
                    example: 18
                    required: false
                    schema:
                        type: integer
                        description: "Filter unread messages by room.\nProvide single ID (<code>room=1</code>), array of IDs (<code>room[]=1&room[]=2</code>) or comma-separated list of IDs (<code>room=1,2</code>)."
                        example: 18
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view unread messages list'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view unread messages list' }
                200:
                    description: '200, Success'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 1, count: 1, perpage: 5, current_page: 1, last_page: 1 }
                                    items: [{ id: 651a8e4868d5dc27c0000cc2, channel: chat.messages.room.44.56bf7d37-4ed6-4db4-947b-d68a1066677c.communication-channel, clientId: '95', msgId: b8673175-01e6-4b6d-9032-226d3df20637, data: '{"encryptedMessage":{"message":"z6z1zNihCjlEePltz+BG8g==","initialVector":"7376fcbf0b32fbdcd5c5b62c087b7600"},"user":{"id":95,"name":"Bartosz Druga firmaa","email":"bartosz+drugafirma@refericon.pl","image":"https://aether-dev-bucket.s3.amazonaws.com/users/7T6im01PAj4cahksWHllrL7se2SQ9buquIjGGFtp.jpg","permissions":[],"roles":[{"id":2,"name":"Clinician"}]},"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","recipients":[{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"95"},{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"44"},{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"1250"},{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"3067"}]}', name: message, recipients: [{ delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: true, clientId: '95' }, { delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: false, clientId: '44' }, { delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: false, clientId: '1250' }, { delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: false, clientId: '3067' }], timestamp: 1696239176715, created_at: '2023-10-02 09:32:56' }]
                                properties:
                                    paginator: { type: object, example: { total: 1, count: 1, perpage: 5, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 651a8e4868d5dc27c0000cc2, channel: chat.messages.room.44.56bf7d37-4ed6-4db4-947b-d68a1066677c.communication-channel, clientId: '95', msgId: b8673175-01e6-4b6d-9032-226d3df20637, data: '{"encryptedMessage":{"message":"z6z1zNihCjlEePltz+BG8g==","initialVector":"7376fcbf0b32fbdcd5c5b62c087b7600"},"user":{"id":95,"name":"Bartosz Druga firmaa","email":"bartosz+drugafirma@refericon.pl","image":"https://aether-dev-bucket.s3.amazonaws.com/users/7T6im01PAj4cahksWHllrL7se2SQ9buquIjGGFtp.jpg","permissions":[],"roles":[{"id":2,"name":"Clinician"}]},"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","recipients":[{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"95"},{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"44"},{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"1250"},{"delivered":true,"msgId":"b8673175-01e6-4b6d-9032-226d3df20637","seen":false,"clientId":"3067"}]}', name: message, recipients: [{ delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: true, clientId: '95' }, { delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: false, clientId: '44' }, { delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: false, clientId: '1250' }, { delivered: true, msgId: b8673175-01e6-4b6d-9032-226d3df20637, seen: false, clientId: '3067' }], timestamp: 1696239176715, created_at: '2023-10-02 09:32:56' }], items: { type: object } }
            tags:
                - Chat
    '/api/chat/messages/{msgId}':
        delete:
            summary: 'Delete chat message'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to delete message'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to delete message' }
                404:
                    description: '404, Message not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Chat message not found'
                                properties:
                                    message: { type: string, example: 'Chat message not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Message deleted'
                                properties:
                                    message: { type: string, example: 'Message deleted' }
            tags:
                - Chat
        parameters:
            -
                in: path
                name: msgId
                description: 'Message ID'
                example: dicta
                required: true
                schema:
                    type: string
    '/api/chat/tickets/{roomId}':
        get:
            summary: 'Get tickets list for chat room'
            description: "Possible extend options:\n<ul>\n    <li>sender - the user who created ticket</li>\n    <li>recipient - the user who was ticket recipient</li>\n    <li>messages - message allocated to ticket</li>\n    <li>messages.attachments - list of attachments assigned to message and ticket</li>\n    <li>messages.sender - the user who wrote the message</li>\n</ul>"
            parameters:
                -
                    in: query
                    name: status
                    description: 'Filter tickets by status (available: <code>new</code>,<code>in_progress</code>,<code>closed</code>,<code>reopened</code>).'
                    example: facilis
                    required: false
                    schema:
                        type: string
                        description: 'Filter tickets by status (available: <code>new</code>,<code>in_progress</code>,<code>closed</code>,<code>reopened</code>).'
                        example: facilis
                -
                    in: query
                    name: sender
                    description: 'Filter tickets by sender.'
                    example: 12
                    required: false
                    schema:
                        type: integer
                        description: 'Filter tickets by sender.'
                        example: 12
                -
                    in: query
                    name: recipient
                    description: 'Filter tickets by recipient.'
                    example: 12
                    required: false
                    schema:
                        type: integer
                        description: 'Filter tickets by recipient.'
                        example: 12
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>sender</code>, <code> recipient</code>, <code> messages</code>, <code> messages.attachments</code>, <code> messages.sender</code>).'
                    example: 'sender, recipient, messages, messages.attachments, messages.sender'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>sender</code>, <code> recipient</code>, <code> messages</code>, <code> messages.attachments</code>, <code> messages.sender</code>).'
                        example: 'sender, recipient, messages, messages.attachments, messages.sender'
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: query
                    name: sortby
                    description: 'Sort by field (available: <code>date</code>).'
                    example: date
                    required: false
                    schema:
                        type: string
                        description: 'Sort by field (available: <code>date</code>).'
                        example: date
                -
                    in: query
                    name: sortdir
                    description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                    example: asc
                    required: false
                    schema:
                        type: string
                        description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                        example: asc
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view chat room tickets'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view chat room tickets' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 4453, sender_id: 15115, recipient_id: 15116, device_id: 6027, meeting_date: '2025-01-08T10:15:56.000000Z', meeting_type: online_meeting, contact_email: breanne.west@yahoo.com, status: new, created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z', sender: { id: 15115, mrn: KHWKSXNV, name: 'Francesca Rath', email: 1736331356ruecker.johanna@example.net, language: en, phone: 1-804-395-7436, phone_country: BZ, phone_verified_at: null, address1: '596 Schoen Creek', address2: 'Genevieveview, SC 69177', postal_code: 44241-7689, city: 'Rosenbaum, Doyle and Howell', clinic_name: Rathfurt, clinic_location: "56483 Nels Square Suite 960\nSouth Kierachester, IA 80382-0693", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z', invitation_status: null, roles: [] }, recipient: { id: 15116, mrn: I3KPE0WV, name: 'Addison Willms', email: 1736331356rschmidt@example.org, language: en, phone: 743-623-6555, phone_country: SJ, phone_verified_at: null, address1: '7727 Kassulke Parkways', address2: 'New Ila, LA 24885-1305', postal_code: '28773', city: 'Bailey, Kilback and Kihn', clinic_name: 'North Scot', clinic_location: "61049 Delmer Mills\nZulaufmouth, MS 03163-0569", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z', invitation_status: null, roles: [] }, messages: [{ id: 4545, ticket_id: 4453, sender_id: 15117, title: Prof., content: 'Et exercitationem atque qui qui possimus aut nam eum.', is_read: false, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', attachments: [{ id: 6600, ticket_id: 4453, ticket_message_id: 4545, type: application/vnd.kde.kword, title: 'Laura Mertz', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/002255%3Ftext%3Dest', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }, { id: 6601, ticket_id: 4453, ticket_message_id: 4545, type: application/vnd.wt.stf, title: 'Jaiden Bosco II', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/0077bb%3Ftext%3Dnesciunt', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }, { id: 6602, ticket_id: 4453, ticket_message_id: 4545, type: application/vnd.trueapp, title: 'Thelma Schimmel DVM', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00aa22%3Ftext%3Domnis', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }], sender: { id: 15117, mrn: 01OHGBFC, name: 'Santina Willms', email: 1736331356carroll.alexander@example.org, language: en, phone: 575.971.8352, phone_country: UY, phone_verified_at: null, address1: '67339 Ratke Stravenue Suite 080', address2: 'Turnermouth, NE 30724', postal_code: 12684-2981, city: 'Schaden, Konopelski and Carroll', clinic_name: Kaylinshire, clinic_location: "8196 Kling Mountains\nMcDermottville, TN 03564", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [] } }] }, { id: 4454, sender_id: 15121, recipient_id: 15122, device_id: 6028, meeting_date: '2025-01-08T10:15:57.000000Z', meeting_type: online_meeting, contact_email: nolson@roberts.com, status: new, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', sender: { id: 15121, mrn: EWEF5AWS, name: 'Marietta Hansen', email: 1736331357ltorp@example.net, language: en, phone: 682-237-9482, phone_country: GL, phone_verified_at: null, address1: '173 Maye Isle Apt. 870', address2: 'East Keeganbury, OK 94305-5456', postal_code: 07609-7744, city: 'Effertz, Heaney and Welch', clinic_name: Myrnaberg, clinic_location: "585 Dayton Spur\nEast Angelicahaven, TN 80284", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [] }, recipient: { id: 15122, mrn: 09CS9HVM, name: 'Ward Torphy', email: 1736331357fernando66@example.com, language: en, phone: 1-878-312-9045, phone_country: SR, phone_verified_at: null, address1: '90657 Laury Roads', address2: 'Roslynstad, OR 67779-3206', postal_code: '03053', city: Weissnat-Kautzer, clinic_name: 'New Velmastad', clinic_location: "7811 Purdy Plaza Suite 740\nEast Friedrichhaven, CO 29875-3648", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [] }, messages: [{ id: 4546, ticket_id: 4454, sender_id: 15123, title: Ms., content: 'Eos aut est doloremque quis excepturi ipsam consectetur.', is_read: false, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', attachments: [{ id: 6603, ticket_id: 4454, ticket_message_id: 4546, type: model/x3d+vrml, title: 'Mrs. Filomena Reilly', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/007777%3Ftext%3Dqui', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }, { id: 6604, ticket_id: 4454, ticket_message_id: 4546, type: image/x-freehand, title: 'Madie Moore', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/0088dd%3Ftext%3Dvoluptatum', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }, { id: 6605, ticket_id: 4454, ticket_message_id: 4546, type: application/vnd.ms-cab-compressed, title: 'Myra Jacobi', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/0055bb%3Ftext%3Dquia', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }], sender: { id: 15123, mrn: P92CBW17, name: 'Karine Heidenreich III', email: 1736331357karl11@example.com, language: en, phone: '+1 (470) 556-6433', phone_country: MF, phone_verified_at: null, address1: '19931 Jamey Island', address2: 'Haleyville, NY 35633-9819', postal_code: '20095', city: 'Kshlerin Ltd', clinic_name: 'Lake Maryse', clinic_location: "853 Ritchie Island Apt. 905\nPort Deven, CA 64442-6934", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [] } }] }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 4453, sender_id: 15115, recipient_id: 15116, device_id: 6027, meeting_date: '2025-01-08T10:15:56.000000Z', meeting_type: online_meeting, contact_email: breanne.west@yahoo.com, status: new, created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z', sender: { id: 15115, mrn: KHWKSXNV, name: 'Francesca Rath', email: 1736331356ruecker.johanna@example.net, language: en, phone: 1-804-395-7436, phone_country: BZ, phone_verified_at: null, address1: '596 Schoen Creek', address2: 'Genevieveview, SC 69177', postal_code: 44241-7689, city: 'Rosenbaum, Doyle and Howell', clinic_name: Rathfurt, clinic_location: "56483 Nels Square Suite 960\nSouth Kierachester, IA 80382-0693", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z', invitation_status: null, roles: [] }, recipient: { id: 15116, mrn: I3KPE0WV, name: 'Addison Willms', email: 1736331356rschmidt@example.org, language: en, phone: 743-623-6555, phone_country: SJ, phone_verified_at: null, address1: '7727 Kassulke Parkways', address2: 'New Ila, LA 24885-1305', postal_code: '28773', city: 'Bailey, Kilback and Kihn', clinic_name: 'North Scot', clinic_location: "61049 Delmer Mills\nZulaufmouth, MS 03163-0569", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z', invitation_status: null, roles: [] }, messages: [{ id: 4545, ticket_id: 4453, sender_id: 15117, title: Prof., content: 'Et exercitationem atque qui qui possimus aut nam eum.', is_read: false, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', attachments: [{ id: 6600, ticket_id: 4453, ticket_message_id: 4545, type: application/vnd.kde.kword, title: 'Laura Mertz', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/002255%3Ftext%3Dest', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }, { id: 6601, ticket_id: 4453, ticket_message_id: 4545, type: application/vnd.wt.stf, title: 'Jaiden Bosco II', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/0077bb%3Ftext%3Dnesciunt', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }, { id: 6602, ticket_id: 4453, ticket_message_id: 4545, type: application/vnd.trueapp, title: 'Thelma Schimmel DVM', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00aa22%3Ftext%3Domnis', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }], sender: { id: 15117, mrn: 01OHGBFC, name: 'Santina Willms', email: 1736331356carroll.alexander@example.org, language: en, phone: 575.971.8352, phone_country: UY, phone_verified_at: null, address1: '67339 Ratke Stravenue Suite 080', address2: 'Turnermouth, NE 30724', postal_code: 12684-2981, city: 'Schaden, Konopelski and Carroll', clinic_name: Kaylinshire, clinic_location: "8196 Kling Mountains\nMcDermottville, TN 03564", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [] } }] }, { id: 4454, sender_id: 15121, recipient_id: 15122, device_id: 6028, meeting_date: '2025-01-08T10:15:57.000000Z', meeting_type: online_meeting, contact_email: nolson@roberts.com, status: new, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', sender: { id: 15121, mrn: EWEF5AWS, name: 'Marietta Hansen', email: 1736331357ltorp@example.net, language: en, phone: 682-237-9482, phone_country: GL, phone_verified_at: null, address1: '173 Maye Isle Apt. 870', address2: 'East Keeganbury, OK 94305-5456', postal_code: 07609-7744, city: 'Effertz, Heaney and Welch', clinic_name: Myrnaberg, clinic_location: "585 Dayton Spur\nEast Angelicahaven, TN 80284", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [] }, recipient: { id: 15122, mrn: 09CS9HVM, name: 'Ward Torphy', email: 1736331357fernando66@example.com, language: en, phone: 1-878-312-9045, phone_country: SR, phone_verified_at: null, address1: '90657 Laury Roads', address2: 'Roslynstad, OR 67779-3206', postal_code: '03053', city: Weissnat-Kautzer, clinic_name: 'New Velmastad', clinic_location: "7811 Purdy Plaza Suite 740\nEast Friedrichhaven, CO 29875-3648", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [] }, messages: [{ id: 4546, ticket_id: 4454, sender_id: 15123, title: Ms., content: 'Eos aut est doloremque quis excepturi ipsam consectetur.', is_read: false, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', attachments: [{ id: 6603, ticket_id: 4454, ticket_message_id: 4546, type: model/x3d+vrml, title: 'Mrs. Filomena Reilly', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/007777%3Ftext%3Dqui', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }, { id: 6604, ticket_id: 4454, ticket_message_id: 4546, type: image/x-freehand, title: 'Madie Moore', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/0088dd%3Ftext%3Dvoluptatum', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }, { id: 6605, ticket_id: 4454, ticket_message_id: 4546, type: application/vnd.ms-cab-compressed, title: 'Myra Jacobi', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/0055bb%3Ftext%3Dquia', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }], sender: { id: 15123, mrn: P92CBW17, name: 'Karine Heidenreich III', email: 1736331357karl11@example.com, language: en, phone: '+1 (470) 556-6433', phone_country: MF, phone_verified_at: null, address1: '19931 Jamey Island', address2: 'Haleyville, NY 35633-9819', postal_code: '20095', city: 'Kshlerin Ltd', clinic_name: 'Lake Maryse', clinic_location: "853 Ritchie Island Apt. 905\nPort Deven, CA 64442-6934", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [] } }] }], items: { type: object } }
            tags:
                - Chat
        parameters:
            -
                in: path
                name: roomId
                description: ''
                example: dolorem
                required: true
                schema:
                    type: string
    /api/chat/available-patients:
        get:
            summary: 'List of available patients for chat'
            description: "Possible extend options:\n<ul>\n    <li>clinician - clinician assigned to this user</li>\n    <li>devices - products assigned to user</li>\n    <li>roles - user roles</li>\n</ul>"
            parameters:
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to list available patients'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to list available patients' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 15125, mrn: RW9G44FB, name: 'Josie Rippin', email: 1736331357margot47@example.com, language: en, phone: +1-678-607-2188, phone_country: LB, phone_verified_at: null, address1: '46050 Lyda Port', address2: 'Ferryburgh, NE 50404-0033', postal_code: 31459-1036, city: 'Hegmann Ltd', clinic_name: Pourostown, clinic_location: "57141 Lorena Knoll\nWuckertstad, NE 84153", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], devices: [{ id: 6029, serial: 0f3667fe-7fe2-31d7-8302-a70496ba2118, bluetooth_id: 6cb66fa7-449f-3e47-9754-2e7fbaa78eca, model_id: null, amputee_id: 15125, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }] }, { id: 15126, mrn: X7LH0IL3, name: 'Prof. Georgette Haley', email: 1736331357pollich.ulises@example.net, language: en, phone: '+14429885852', phone_country: PE, phone_verified_at: null, address1: '462 Gabriella Cliffs', address2: 'Sawaynbury, IL 04293', postal_code: '50269', city: Mann-Moore, clinic_name: 'South Lolita', clinic_location: "1744 Block Locks\nSouth Logan, PA 82919-3674", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], devices: [{ id: 6030, serial: 9fb67235-ef88-3d88-8f3e-34e784dc530c, bluetooth_id: 166b6c23-49e3-3b15-840d-3750bd615264, model_id: null, amputee_id: 15126, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }] }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 15125, mrn: RW9G44FB, name: 'Josie Rippin', email: 1736331357margot47@example.com, language: en, phone: +1-678-607-2188, phone_country: LB, phone_verified_at: null, address1: '46050 Lyda Port', address2: 'Ferryburgh, NE 50404-0033', postal_code: 31459-1036, city: 'Hegmann Ltd', clinic_name: Pourostown, clinic_location: "57141 Lorena Knoll\nWuckertstad, NE 84153", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], devices: [{ id: 6029, serial: 0f3667fe-7fe2-31d7-8302-a70496ba2118, bluetooth_id: 6cb66fa7-449f-3e47-9754-2e7fbaa78eca, model_id: null, amputee_id: 15125, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }] }, { id: 15126, mrn: X7LH0IL3, name: 'Prof. Georgette Haley', email: 1736331357pollich.ulises@example.net, language: en, phone: '+14429885852', phone_country: PE, phone_verified_at: null, address1: '462 Gabriella Cliffs', address2: 'Sawaynbury, IL 04293', postal_code: '50269', city: Mann-Moore, clinic_name: 'South Lolita', clinic_location: "1744 Block Locks\nSouth Logan, PA 82919-3674", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], devices: [{ id: 6030, serial: 9fb67235-ef88-3d88-8f3e-34e784dc530c, bluetooth_id: 166b6c23-49e3-3b15-840d-3750bd615264, model_id: null, amputee_id: 15126, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z' }] }], items: { type: object } }
            tags:
                - Chat
    '/api/chat/room/{id}/available-participants':
        get:
            summary: 'List of available participants for chat'
            description: "Possible extend options:\n<ul>\n    <li>roles - user roles</li>\n    <li>permissions - user permissions</li>\n</ul>"
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>roles</code>, <code> permissions</code>).'
                    example: 'roles, permissions'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>roles</code>, <code> permissions</code>).'
                        example: 'roles, permissions'
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to list available participants'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to list available participants' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 15127, mrn: IQGYX4LL, name: 'Kenton Bins', email: 1736331357pedro.rice@example.net, language: en, phone: 1-915-409-5429, phone_country: UA, phone_verified_at: null, address1: '8209 Walton Course Suite 037', address2: 'East Margaretta, AK 72975-5451', postal_code: '77697', city: 'Yundt, Stanton and Mraz', clinic_name: Botsfordfort, clinic_location: "33792 Nicolas Divide\nFisherfort, CT 56117", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], permissions: [] }, { id: 15128, mrn: BEV5TGHC, name: 'Raina Romaguera', email: 1736331357glarkin@example.net, language: en, phone: +1-380-379-9377, phone_country: KE, phone_verified_at: null, address1: '19425 Howe Island Apt. 892', address2: 'North Porterside, NJ 24184-6082', postal_code: 60388-3558, city: Luettgen-Hayes, clinic_name: 'North Name', clinic_location: "72378 O'Reilly Burgs\nRomagueraberg, MA 73328", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:58.000000Z', updated_at: '2025-01-08T10:15:58.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], permissions: [] }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 15127, mrn: IQGYX4LL, name: 'Kenton Bins', email: 1736331357pedro.rice@example.net, language: en, phone: 1-915-409-5429, phone_country: UA, phone_verified_at: null, address1: '8209 Walton Course Suite 037', address2: 'East Margaretta, AK 72975-5451', postal_code: '77697', city: 'Yundt, Stanton and Mraz', clinic_name: Botsfordfort, clinic_location: "33792 Nicolas Divide\nFisherfort, CT 56117", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:57.000000Z', updated_at: '2025-01-08T10:15:57.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], permissions: [] }, { id: 15128, mrn: BEV5TGHC, name: 'Raina Romaguera', email: 1736331357glarkin@example.net, language: en, phone: +1-380-379-9377, phone_country: KE, phone_verified_at: null, address1: '19425 Howe Island Apt. 892', address2: 'North Porterside, NJ 24184-6082', postal_code: 60388-3558, city: Luettgen-Hayes, clinic_name: 'North Name', clinic_location: "72378 O'Reilly Burgs\nRomagueraberg, MA 73328", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:58.000000Z', updated_at: '2025-01-08T10:15:58.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], permissions: [] }], items: { type: object } }
            tags:
                - Chat
        parameters:
            -
                in: path
                name: id
                description: ''
                example: ut
                required: true
                schema:
                    type: string
    '/api/device/{deviceId}/config':
        get:
            summary: 'Get device config'
            description: "Definitions:\n- config - current config entries\n- config history entry - set of changes in config, updated during the session\n- config history change - single change made to config (part of config history entry)"
            parameters:
                -
                    in: query
                    name: _format
                    description: 'Config format. Pass <code>collection</code> to receive config as resource collection.'
                    example: voluptas
                    required: false
                    schema:
                        type: string
                        description: 'Config format. Pass <code>collection</code> to receive config as resource collection.'
                        example: voluptas
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view device config'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view device config' }
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { device_id: null, mode_id: null, key: perspiciatis, value: eius }
                                    - { device_id: null, mode_id: null, key: voluptatem, value: esse }
            tags:
                - Config
        post:
            summary: 'Update device config'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update device config'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update device config' }
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                422:
                    description: '422, Invalid config'
                    content:
                        text/plain:
                            schema:
                                type: string
                                example: "{\n\t\"message\": \"Config has some problems and cannot be saved.\",\n\t\"errors\": {\n\t\t\"modes\": {\n\t\t\t\"mode_3\": \"Config mode 3 does not belong to device 12.\"\n\t\t},\n\t\t\"values\": {\n\t\t\t\"common.inputSite\": \"Invalid value [\\\"11\\\"] for key inputSite - contains string values.\",\n\t\t\t\"common.gripsPositions.1.initial\": \"Invalid value [200,\\\"100\\\",\\\"100\\\",\\\"100\\\",\\\"100\\\"] for key gripsPositions.1.initial - contains string values.\",\n\t\t\t\"mode_1.inputSite\": \"Invalid value [\\\"11\\\"] for key inputSite - contains string values.\",\n\t\t\t\"mode_1.gripsPositions.0.initial\": \"Invalid value [\\\"200\\\",\\\"100\\\",\\\"100\\\",\\\"100\\\",\\\"100\\\"] for key gripsPositions.1.initial - contains string values.\",\n\t\t}\n\t}\n}\n"
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    common: { gripPairsConfig: [1, 4, 2, 3, 6, 7, 9, 8], controlConfig: [0, 1, 0, 0, 0], emgThresholds: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], interval: [100], gripSequentialConfig: [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255] }
                                    modes: [{ id: 100, name: 'Mode 1', slot: 0, config: { interval: [300], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 101, name: 'Mode 2', slot: 1, config: { interval: [400], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 102, name: 'Mode 3', slot: 2, config: { interval: [500], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }]
                                properties:
                                    common: { type: object, example: { gripPairsConfig: [1, 4, 2, 3, 6, 7, 9, 8], controlConfig: [0, 1, 0, 0, 0], emgThresholds: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], interval: [100], gripSequentialConfig: [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255] } }
                                    modes: { type: array, example: [{ id: 100, name: 'Mode 1', slot: 0, config: { interval: [300], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 101, name: 'Mode 2', slot: 1, config: { interval: [400], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 102, name: 'Mode 3', slot: 2, config: { interval: [500], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }], items: { type: object } }
            tags:
                - Config
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Config history entry name (session name).'
                                    example: 'Remote session 2022-05-30'
                                common:
                                    type: string
                                    description: 'Common config as JSON string. The value must be a valid JSON string.'
                                    example: '{"gripPairsConfig": [1, 4, 2, 3, 6, 7, 9, 8], "controlConfig": [0, 1, 0, 0, 0], "gripSequentialConfig": [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255]'
                                modes:
                                    type: array
                                    description: ''
                                    example: [[]]
                                    items: { type: object, properties: { id: { type: string, description: 'Config mode ID.', example: 1 }, config: { type: string, description: 'Config specific for mode as JSON string. The value must be a valid JSON string.', example: '{"gripPairsConfig": [1, 4, 2, 3, 6, 7, 9, 8], "controlConfig": [0, 1, 0, 0, 0], "gripSequentialConfig": [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255]' } } }
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/device/{deviceId}/config/history':
        get:
            summary: 'Get device config history'
            description: 'For amputees only restore points are returned.'
            parameters:
                -
                    in: query
                    name: restore_point
                    description: 'Filter config entries by restore point status. The value must be one of <code>0</code> or <code>1</code>.'
                    example: 6
                    required: false
                    schema:
                        type: integer
                        description: 'Filter config entries by restore point status. The value must be one of <code>0</code> or <code>1</code>.'
                        example: 6
                -
                    in: query
                    name: date_from
                    description: 'Filter config entries from date (timestamp).'
                    example: 1642003200
                    required: false
                    schema:
                        type: integer
                        description: 'Filter config entries from date (timestamp).'
                        example: 1642003200
                -
                    in: query
                    name: date_to
                    description: 'Filter config entries to date (timestamp).'
                    example: 1642003200
                    required: false
                    schema:
                        type: integer
                        description: 'Filter config entries to date (timestamp).'
                        example: 1642003200
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>author</code>, <code> entries</code>).'
                    example: 'author, entries'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>author</code>, <code> entries</code>).'
                        example: 'author, entries'
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: query
                    name: sortby
                    description: 'Sort by field (available: <code>date</code>). Default: <code>date</code> (<code>desc</code>).'
                    example: date
                    required: false
                    schema:
                        type: string
                        description: 'Sort by field (available: <code>date</code>). Default: <code>date</code> (<code>desc</code>).'
                        example: date
                -
                    in: query
                    name: sortdir
                    description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                    example: asc
                    required: false
                    schema:
                        type: string
                        description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                        example: asc
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view device config'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view device config' }
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 4347, device_id: 5898, index: null, name: 'Veniam esse error eius quia.', config: '{"common":{"fingerStrength":[1,100],"gripPositions":{"_":0,"0":{"initial":[8,15,87,18,61],"limit":[35,75,94,92,70]},"1":{"initial":[14,15,34,13,18],"limit":[24,84,43,83,95]},"2":{"initial":[77,7,75,5,77],"limit":[84,10,88,10,93]},"3":{"initial":[74,21,31,3,33],"limit":[94,62,82,85,91]},"4":{"initial":[52,58,19,33,6],"limit":[66,65,88,63,28]},"5":{"initial":[51,45,6,44,12],"limit":[75,88,50,91,17]},"6":{"initial":[56,41,32,35,1],"limit":[65,61,50,92,12]},"7":{"initial":[25,41,28,5,35],"limit":[88,93,56,94,68]},"8":{"initial":[38,29,57,78,31],"limit":[59,70,58,90,57]},"9":{"initial":[9,6,9,8,26],"limit":[21,52,86,28,61]},"10":{"initial":[22,2,45,30,8],"limit":[32,36,48,48,77]},"11":{"initial":[9,67,15,14,33],"limit":[13,82,21,90,76]},"12":{"initial":[16,23,23,37,10],"limit":[19,93,61,94,80]},"13":{"initial":[7,38,58,22,4],"limit":[16,72,81,44,54]}},"inputSite":[1]},"modes":[{"id":14045,"name":"Inventore nulla ducimus possimus eveniet earum quidem sint.","slot":0,"config":{"autoGrasp":[0,0],"coContractionTimings":[500,100],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[0,70,20,20,70,0,20,80,0,50],"gripPairsConfig":[5,13,8,3,6,9,12,2],"gripSequentialConfig":[255,10,5,4,13,1,3,7,12,6,8,2],"gripSwitchingMode":[2],"holdOpen":[1500,2000],"pulseTimings":[810,130,700,100],"softGrip":[1],"speedControlStrategy":[1]}},{"id":14046,"name":"Perferendis eos rerum et aliquam asperiores at.","slot":1,"config":{"autoGrasp":[0,100],"coContractionTimings":[500,500],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[90,0,0,40,90,30,0,0,30,80],"gripPairsConfig":[6,10,3,9,12,7,2,11],"gripSequentialConfig":[3,2,9,255,255,11,4,12,255,5,255,6],"gripSwitchingMode":[1],"holdOpen":[2000,2500],"pulseTimings":[780,80,420,390],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14047,"name":"Consectetur ea non modi.","slot":2,"config":{"autoGrasp":[0,100],"coContractionTimings":[400,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[40,20,90,80,70,50,10,0,50,60],"gripPairsConfig":[3,12,11,2,6,9,13,7],"gripSequentialConfig":[3,255,1,4,11,10,255,2,5,255,13,9],"gripSwitchingMode":[2],"holdOpen":[2500,2500],"pulseTimings":[380,330,260,780],"softGrip":[1],"speedControlStrategy":[1]}}]}', restore_point: 0, changed_by: 14943, created_at: '2025-01-08T10:15:41.000000Z', updated_at: '2025-01-08T10:15:41.000000Z', author: { id: 14943, mrn: 40HMFCPJ, name: 'Prof. Dandre Mitchell', email: 1736331341hudson.cooper@example.net, language: en, phone: +1.337.699.7138, phone_country: PW, phone_verified_at: null, address1: '7600 Fisher Throughway Suite 667', address2: 'Roelstad, IA 98990-1783', postal_code: 46124-0617, city: 'Leannon and Sons', clinic_name: 'East Remington', clinic_location: "49392 Gorczany Stravenue\nHillaryborough, TN 84297", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:41.000000Z', updated_at: '2025-01-08T10:15:41.000000Z', invitation_status: null, roles: [] }, entries: [] }, { id: 4348, device_id: 5902, index: null, name: 'Ad dignissimos quo dicta ex atque est delectus reprehenderit.', config: '{"common":{"fingerStrength":[1,200],"gripPositions":{"_":0,"0":{"initial":[66,5,73,42,69],"limit":[66,71,80,60,74]},"1":{"initial":[23,10,49,80,44],"limit":[74,54,69,95,73]},"2":{"initial":[42,39,22,49,46],"limit":[44,95,72,78,74]},"3":{"initial":[55,4,31,11,34],"limit":[89,11,82,77,94]},"4":{"initial":[32,22,42,71,15],"limit":[87,47,79,80,39]},"5":{"initial":[10,13,31,35,53],"limit":[55,51,48,77,78]},"6":{"initial":[48,5,24,11,1],"limit":[60,34,50,14,95]},"7":{"initial":[22,54,35,15,4],"limit":[23,64,39,42,73]},"8":{"initial":[89,73,10,1,35],"limit":[95,81,73,13,79]},"9":{"initial":[6,6,40,31,23],"limit":[35,62,94,42,31]},"10":{"initial":[32,17,65,20,34],"limit":[39,64,81,56,80]},"11":{"initial":[62,31,8,47,37],"limit":[91,41,21,67,70]},"12":{"initial":[10,48,59,53,5],"limit":[39,78,95,64,71]},"13":{"initial":[16,7,24,13,29],"limit":[29,59,68,66,36]}},"inputSite":[0]},"modes":[{"id":14048,"name":"Ducimus cum rerum omnis est sequi.","slot":0,"config":{"autoGrasp":[1,100],"coContractionTimings":[400,300],"controlMode":[1],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[30,70,10,0,0,100,30,90,40,10],"gripPairsConfig":[10,13,1,4,5,6,8,2],"gripSequentialConfig":[255,6,255,255,10,4,1,255,8,13,12,11],"gripSwitchingMode":[1],"holdOpen":[1500,2500],"pulseTimings":[660,280,230,680],"softGrip":[1],"speedControlStrategy":[1]}},{"id":14049,"name":"Est sit recusandae ut sint.","slot":1,"config":{"autoGrasp":[1,100],"coContractionTimings":[500,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[100,100,90,20,90,10,20,80,100,80],"gripPairsConfig":[9,7,13,6,11,8,10,5],"gripSequentialConfig":[1,10,255,3,6,9,2,255,12,13,8,11],"gripSwitchingMode":[1],"holdOpen":[2500,2500],"pulseTimings":[580,410,410,670],"softGrip":[0],"speedControlStrategy":[0]}},{"id":14050,"name":"Qui non illo exercitationem quidem quasi.","slot":2,"config":{"autoGrasp":[0,0],"coContractionTimings":[200,200],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[30,100,30,50,100,90,70,40,30,70],"gripPairsConfig":[6,8,9,4,3,13,2,1],"gripSequentialConfig":[12,255,255,5,255,255,4,13,10,3,2,7],"gripSwitchingMode":[1],"holdOpen":[1500,2500],"pulseTimings":[640,260,370,620],"softGrip":[0],"speedControlStrategy":[1]}}]}', restore_point: 0, changed_by: 14944, created_at: '2025-01-08T10:15:41.000000Z', updated_at: '2025-01-08T10:15:41.000000Z', author: { id: 14944, mrn: A32DSV0F, name: 'Ms. Jana Fay Jr.', email: 1736331341elvie.halvorson@example.com, language: en, phone: 1-267-936-3222, phone_country: TJ, phone_verified_at: null, address1: '58217 Braun Coves Apt. 513', address2: 'Bayerborough, IN 23174-0404', postal_code: '88597', city: Casper-Kemmer, clinic_name: Pacochastad, clinic_location: "32813 Leora Estates Apt. 113\nHiramport, MD 26666", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:41.000000Z', updated_at: '2025-01-08T10:15:41.000000Z', invitation_status: null, roles: [] }, entries: [] }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 4347, device_id: 5898, index: null, name: 'Veniam esse error eius quia.', config: '{"common":{"fingerStrength":[1,100],"gripPositions":{"_":0,"0":{"initial":[8,15,87,18,61],"limit":[35,75,94,92,70]},"1":{"initial":[14,15,34,13,18],"limit":[24,84,43,83,95]},"2":{"initial":[77,7,75,5,77],"limit":[84,10,88,10,93]},"3":{"initial":[74,21,31,3,33],"limit":[94,62,82,85,91]},"4":{"initial":[52,58,19,33,6],"limit":[66,65,88,63,28]},"5":{"initial":[51,45,6,44,12],"limit":[75,88,50,91,17]},"6":{"initial":[56,41,32,35,1],"limit":[65,61,50,92,12]},"7":{"initial":[25,41,28,5,35],"limit":[88,93,56,94,68]},"8":{"initial":[38,29,57,78,31],"limit":[59,70,58,90,57]},"9":{"initial":[9,6,9,8,26],"limit":[21,52,86,28,61]},"10":{"initial":[22,2,45,30,8],"limit":[32,36,48,48,77]},"11":{"initial":[9,67,15,14,33],"limit":[13,82,21,90,76]},"12":{"initial":[16,23,23,37,10],"limit":[19,93,61,94,80]},"13":{"initial":[7,38,58,22,4],"limit":[16,72,81,44,54]}},"inputSite":[1]},"modes":[{"id":14045,"name":"Inventore nulla ducimus possimus eveniet earum quidem sint.","slot":0,"config":{"autoGrasp":[0,0],"coContractionTimings":[500,100],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[0,70,20,20,70,0,20,80,0,50],"gripPairsConfig":[5,13,8,3,6,9,12,2],"gripSequentialConfig":[255,10,5,4,13,1,3,7,12,6,8,2],"gripSwitchingMode":[2],"holdOpen":[1500,2000],"pulseTimings":[810,130,700,100],"softGrip":[1],"speedControlStrategy":[1]}},{"id":14046,"name":"Perferendis eos rerum et aliquam asperiores at.","slot":1,"config":{"autoGrasp":[0,100],"coContractionTimings":[500,500],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[90,0,0,40,90,30,0,0,30,80],"gripPairsConfig":[6,10,3,9,12,7,2,11],"gripSequentialConfig":[3,2,9,255,255,11,4,12,255,5,255,6],"gripSwitchingMode":[1],"holdOpen":[2000,2500],"pulseTimings":[780,80,420,390],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14047,"name":"Consectetur ea non modi.","slot":2,"config":{"autoGrasp":[0,100],"coContractionTimings":[400,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[40,20,90,80,70,50,10,0,50,60],"gripPairsConfig":[3,12,11,2,6,9,13,7],"gripSequentialConfig":[3,255,1,4,11,10,255,2,5,255,13,9],"gripSwitchingMode":[2],"holdOpen":[2500,2500],"pulseTimings":[380,330,260,780],"softGrip":[1],"speedControlStrategy":[1]}}]}', restore_point: 0, changed_by: 14943, created_at: '2025-01-08T10:15:41.000000Z', updated_at: '2025-01-08T10:15:41.000000Z', author: { id: 14943, mrn: 40HMFCPJ, name: 'Prof. Dandre Mitchell', email: 1736331341hudson.cooper@example.net, language: en, phone: +1.337.699.7138, phone_country: PW, phone_verified_at: null, address1: '7600 Fisher Throughway Suite 667', address2: 'Roelstad, IA 98990-1783', postal_code: 46124-0617, city: 'Leannon and Sons', clinic_name: 'East Remington', clinic_location: "49392 Gorczany Stravenue\nHillaryborough, TN 84297", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:41.000000Z', updated_at: '2025-01-08T10:15:41.000000Z', invitation_status: null, roles: [] }, entries: [] }, { id: 4348, device_id: 5902, index: null, name: 'Ad dignissimos quo dicta ex atque est delectus reprehenderit.', config: '{"common":{"fingerStrength":[1,200],"gripPositions":{"_":0,"0":{"initial":[66,5,73,42,69],"limit":[66,71,80,60,74]},"1":{"initial":[23,10,49,80,44],"limit":[74,54,69,95,73]},"2":{"initial":[42,39,22,49,46],"limit":[44,95,72,78,74]},"3":{"initial":[55,4,31,11,34],"limit":[89,11,82,77,94]},"4":{"initial":[32,22,42,71,15],"limit":[87,47,79,80,39]},"5":{"initial":[10,13,31,35,53],"limit":[55,51,48,77,78]},"6":{"initial":[48,5,24,11,1],"limit":[60,34,50,14,95]},"7":{"initial":[22,54,35,15,4],"limit":[23,64,39,42,73]},"8":{"initial":[89,73,10,1,35],"limit":[95,81,73,13,79]},"9":{"initial":[6,6,40,31,23],"limit":[35,62,94,42,31]},"10":{"initial":[32,17,65,20,34],"limit":[39,64,81,56,80]},"11":{"initial":[62,31,8,47,37],"limit":[91,41,21,67,70]},"12":{"initial":[10,48,59,53,5],"limit":[39,78,95,64,71]},"13":{"initial":[16,7,24,13,29],"limit":[29,59,68,66,36]}},"inputSite":[0]},"modes":[{"id":14048,"name":"Ducimus cum rerum omnis est sequi.","slot":0,"config":{"autoGrasp":[1,100],"coContractionTimings":[400,300],"controlMode":[1],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[30,70,10,0,0,100,30,90,40,10],"gripPairsConfig":[10,13,1,4,5,6,8,2],"gripSequentialConfig":[255,6,255,255,10,4,1,255,8,13,12,11],"gripSwitchingMode":[1],"holdOpen":[1500,2500],"pulseTimings":[660,280,230,680],"softGrip":[1],"speedControlStrategy":[1]}},{"id":14049,"name":"Est sit recusandae ut sint.","slot":1,"config":{"autoGrasp":[1,100],"coContractionTimings":[500,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[100,100,90,20,90,10,20,80,100,80],"gripPairsConfig":[9,7,13,6,11,8,10,5],"gripSequentialConfig":[1,10,255,3,6,9,2,255,12,13,8,11],"gripSwitchingMode":[1],"holdOpen":[2500,2500],"pulseTimings":[580,410,410,670],"softGrip":[0],"speedControlStrategy":[0]}},{"id":14050,"name":"Qui non illo exercitationem quidem quasi.","slot":2,"config":{"autoGrasp":[0,0],"coContractionTimings":[200,200],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[30,100,30,50,100,90,70,40,30,70],"gripPairsConfig":[6,8,9,4,3,13,2,1],"gripSequentialConfig":[12,255,255,5,255,255,4,13,10,3,2,7],"gripSwitchingMode":[1],"holdOpen":[1500,2500],"pulseTimings":[640,260,370,620],"softGrip":[0],"speedControlStrategy":[1]}}]}', restore_point: 0, changed_by: 14944, created_at: '2025-01-08T10:15:41.000000Z', updated_at: '2025-01-08T10:15:41.000000Z', author: { id: 14944, mrn: A32DSV0F, name: 'Ms. Jana Fay Jr.', email: 1736331341elvie.halvorson@example.com, language: en, phone: 1-267-936-3222, phone_country: TJ, phone_verified_at: null, address1: '58217 Braun Coves Apt. 513', address2: 'Bayerborough, IN 23174-0404', postal_code: '88597', city: Casper-Kemmer, clinic_name: Pacochastad, clinic_location: "32813 Leora Estates Apt. 113\nHiramport, MD 26666", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:41.000000Z', updated_at: '2025-01-08T10:15:41.000000Z', invitation_status: null, roles: [] }, entries: [] }], items: { type: object } }
            tags:
                - Config
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/device/{deviceId}/config/history/{configId}':
        get:
            summary: 'Get device config history entry'
            description: ''
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>author</code>, <code> entries</code>).'
                    example: 'author, entries'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>author</code>, <code> entries</code>).'
                        example: 'author, entries'
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view device config'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view device config' }
                404:
                    description: '404, Config history entry not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config history entry not found'
                                properties:
                                    message: { type: string, example: 'Config history entry not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4349
                                    device_id: 5906
                                    index: null
                                    name: 'Nobis ipsam qui quia harum itaque numquam sit.'
                                    config: '{"common":{"fingerStrength":[1,200],"gripPositions":{"_":0,"0":{"initial":[15,38,3,52,6],"limit":[61,42,17,60,93]},"1":{"initial":[10,15,3,4,32],"limit":[37,42,23,35,41]},"2":{"initial":[51,43,25,33,37],"limit":[52,76,28,68,43]},"3":{"initial":[53,36,27,83,24],"limit":[94,74,35,85,92]},"4":{"initial":[17,19,28,10,57],"limit":[47,55,72,90,87]},"5":{"initial":[11,16,30,7,52],"limit":[20,34,41,34,53]},"6":{"initial":[89,26,22,16,58],"limit":[92,86,72,46,81]},"7":{"initial":[7,38,16,13,2],"limit":[38,61,17,91,72]},"8":{"initial":[9,55,19,8,20],"limit":[15,73,30,47,79]},"9":{"initial":[67,26,19,52,52],"limit":[84,36,69,63,69]},"10":{"initial":[19,67,21,1,15],"limit":[58,82,50,62,24]},"11":{"initial":[42,32,45,60,58],"limit":[54,55,80,72,72]},"12":{"initial":[56,74,25,34,52],"limit":[76,88,90,89,62]},"13":{"initial":[6,39,4,15,60],"limit":[29,44,39,61,75]}},"inputSite":[0]},"modes":[{"id":14051,"name":"Reprehenderit itaque ut sit temporibus ducimus.","slot":0,"config":{"autoGrasp":[0,0],"coContractionTimings":[500,300],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[50,20,40,100,90,100,40,80,90,0],"gripPairsConfig":[1,13,4,2,12,6,9,11],"gripSequentialConfig":[5,12,7,255,11,10,8,13,9,255,255,3],"gripSwitchingMode":[3],"holdOpen":[1500,2000],"pulseTimings":[660,610,950,890],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14052,"name":"Consequatur et distinctio minima incidunt sit.","slot":1,"config":{"autoGrasp":[1,100],"coContractionTimings":[200,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[0,80,90,10,50,10,50,30,0,60],"gripPairsConfig":[6,7,13,11,10,8,3,5],"gripSequentialConfig":[1,6,10,255,255,8,13,5,2,255,4,12],"gripSwitchingMode":[1],"holdOpen":[2500,2500],"pulseTimings":[400,480,120,270],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14053,"name":"Deleniti facere saepe occaecati consequatur id expedita.","slot":2,"config":{"autoGrasp":[1,0],"coContractionTimings":[500,300],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[90,30,40,80,40,10,10,60,40,40],"gripPairsConfig":[10,4,9,1,6,5,12,13],"gripSequentialConfig":[6,8,13,7,255,1,5,4,9,10,3,12],"gripSwitchingMode":[3],"holdOpen":[2500,2500],"pulseTimings":[710,730,570,580],"softGrip":[1],"speedControlStrategy":[0]}}]}'
                                    restore_point: 1
                                    changed_by: 14945
                                    created_at: '2025-01-08T10:15:41.000000Z'
                                    updated_at: '2025-01-08T10:15:41.000000Z'
                                properties:
                                    id: { type: integer, example: 4349 }
                                    device_id: { type: integer, example: 5906 }
                                    index: { type: string, example: null }
                                    name: { type: string, example: 'Nobis ipsam qui quia harum itaque numquam sit.' }
                                    config: { type: string, example: '{"common":{"fingerStrength":[1,200],"gripPositions":{"_":0,"0":{"initial":[15,38,3,52,6],"limit":[61,42,17,60,93]},"1":{"initial":[10,15,3,4,32],"limit":[37,42,23,35,41]},"2":{"initial":[51,43,25,33,37],"limit":[52,76,28,68,43]},"3":{"initial":[53,36,27,83,24],"limit":[94,74,35,85,92]},"4":{"initial":[17,19,28,10,57],"limit":[47,55,72,90,87]},"5":{"initial":[11,16,30,7,52],"limit":[20,34,41,34,53]},"6":{"initial":[89,26,22,16,58],"limit":[92,86,72,46,81]},"7":{"initial":[7,38,16,13,2],"limit":[38,61,17,91,72]},"8":{"initial":[9,55,19,8,20],"limit":[15,73,30,47,79]},"9":{"initial":[67,26,19,52,52],"limit":[84,36,69,63,69]},"10":{"initial":[19,67,21,1,15],"limit":[58,82,50,62,24]},"11":{"initial":[42,32,45,60,58],"limit":[54,55,80,72,72]},"12":{"initial":[56,74,25,34,52],"limit":[76,88,90,89,62]},"13":{"initial":[6,39,4,15,60],"limit":[29,44,39,61,75]}},"inputSite":[0]},"modes":[{"id":14051,"name":"Reprehenderit itaque ut sit temporibus ducimus.","slot":0,"config":{"autoGrasp":[0,0],"coContractionTimings":[500,300],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[50,20,40,100,90,100,40,80,90,0],"gripPairsConfig":[1,13,4,2,12,6,9,11],"gripSequentialConfig":[5,12,7,255,11,10,8,13,9,255,255,3],"gripSwitchingMode":[3],"holdOpen":[1500,2000],"pulseTimings":[660,610,950,890],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14052,"name":"Consequatur et distinctio minima incidunt sit.","slot":1,"config":{"autoGrasp":[1,100],"coContractionTimings":[200,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[0,80,90,10,50,10,50,30,0,60],"gripPairsConfig":[6,7,13,11,10,8,3,5],"gripSequentialConfig":[1,6,10,255,255,8,13,5,2,255,4,12],"gripSwitchingMode":[1],"holdOpen":[2500,2500],"pulseTimings":[400,480,120,270],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14053,"name":"Deleniti facere saepe occaecati consequatur id expedita.","slot":2,"config":{"autoGrasp":[1,0],"coContractionTimings":[500,300],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[90,30,40,80,40,10,10,60,40,40],"gripPairsConfig":[10,4,9,1,6,5,12,13],"gripSequentialConfig":[6,8,13,7,255,1,5,4,9,10,3,12],"gripSwitchingMode":[3],"holdOpen":[2500,2500],"pulseTimings":[710,730,570,580],"softGrip":[1],"speedControlStrategy":[0]}}]}' }
                                    restore_point: { type: integer, example: 1 }
                                    changed_by: { type: integer, example: 14945 }
                                    created_at: { type: string, example: '2025-01-08T10:15:41.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:41.000000Z' }
            tags:
                - Config
        post:
            summary: 'Update config history'
            description: 'Returns updated config history in response.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update device config'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update device config' }
                404:
                    description: '404, Config history entry not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config history entry not found'
                                properties:
                                    message: { type: string, example: 'Config history entry not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4350
                                    device_id: 5910
                                    index: null
                                    name: 'Maxime nihil facilis dolore quod.'
                                    config: '{"common":{"fingerStrength":[1,100],"gripPositions":{"_":0,"0":{"initial":[35,19,18,3,16],"limit":[88,60,61,13,68]},"1":{"initial":[62,79,35,37,8],"limit":[76,94,51,65,18]},"2":{"initial":[15,15,38,50,60],"limit":[33,20,72,70,85]},"3":{"initial":[55,19,77,31,17],"limit":[65,49,83,73,94]},"4":{"initial":[11,14,86,9,56],"limit":[39,71,89,36,69]},"5":{"initial":[39,17,48,79,2],"limit":[71,60,52,85,44]},"6":{"initial":[29,30,28,34,15],"limit":[80,38,47,82,61]},"7":{"initial":[2,15,22,40,6],"limit":[92,65,85,70,95]},"8":{"initial":[1,18,17,53,47],"limit":[3,59,78,84,69]},"9":{"initial":[1,8,50,2,42],"limit":[85,10,58,95,77]},"10":{"initial":[26,16,63,53,54],"limit":[39,83,92,84,69]},"11":{"initial":[82,4,45,87,48],"limit":[84,47,62,92,91]},"12":{"initial":[26,12,35,45,74],"limit":[43,34,42,71,80]},"13":{"initial":[33,9,54,66,26],"limit":[87,93,79,75,70]}},"inputSite":[0]},"modes":[{"id":14054,"name":"Sapiente totam ad in atque vero.","slot":0,"config":{"autoGrasp":[1,0],"coContractionTimings":[400,400],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[60,90,90,70,90,100,10,90,40,80],"gripPairsConfig":[5,7,13,8,3,10,6,11],"gripSequentialConfig":[255,12,11,255,255,255,9,8,1,10,7,4],"gripSwitchingMode":[3],"holdOpen":[1500,2500],"pulseTimings":[350,720,260,670],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14055,"name":"Facilis numquam consequatur accusantium tempora.","slot":1,"config":{"autoGrasp":[1,100],"coContractionTimings":[200,100],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[90,70,40,60,100,10,100,10,90,70],"gripPairsConfig":[2,5,11,3,12,6,13,9],"gripSequentialConfig":[6,8,10,5,255,255,7,12,255,3,255,13],"gripSwitchingMode":[1],"holdOpen":[1500,2000],"pulseTimings":[750,270,670,380],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14056,"name":"Et deleniti et dolores a eveniet.","slot":2,"config":{"autoGrasp":[0,100],"coContractionTimings":[400,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[10,80,100,70,10,70,80,50,90,50],"gripPairsConfig":[8,3,5,9,7,13,6,10],"gripSequentialConfig":[255,255,12,255,13,9,11,4,10,6,3,7],"gripSwitchingMode":[1],"holdOpen":[2000,2500],"pulseTimings":[70,520,190,920],"softGrip":[1],"speedControlStrategy":[1]}}]}'
                                    restore_point: 1
                                    changed_by: 14946
                                    created_at: '2025-01-08T10:15:41.000000Z'
                                    updated_at: '2025-01-08T10:15:41.000000Z'
                                properties:
                                    id: { type: integer, example: 4350 }
                                    device_id: { type: integer, example: 5910 }
                                    index: { type: string, example: null }
                                    name: { type: string, example: 'Maxime nihil facilis dolore quod.' }
                                    config: { type: string, example: '{"common":{"fingerStrength":[1,100],"gripPositions":{"_":0,"0":{"initial":[35,19,18,3,16],"limit":[88,60,61,13,68]},"1":{"initial":[62,79,35,37,8],"limit":[76,94,51,65,18]},"2":{"initial":[15,15,38,50,60],"limit":[33,20,72,70,85]},"3":{"initial":[55,19,77,31,17],"limit":[65,49,83,73,94]},"4":{"initial":[11,14,86,9,56],"limit":[39,71,89,36,69]},"5":{"initial":[39,17,48,79,2],"limit":[71,60,52,85,44]},"6":{"initial":[29,30,28,34,15],"limit":[80,38,47,82,61]},"7":{"initial":[2,15,22,40,6],"limit":[92,65,85,70,95]},"8":{"initial":[1,18,17,53,47],"limit":[3,59,78,84,69]},"9":{"initial":[1,8,50,2,42],"limit":[85,10,58,95,77]},"10":{"initial":[26,16,63,53,54],"limit":[39,83,92,84,69]},"11":{"initial":[82,4,45,87,48],"limit":[84,47,62,92,91]},"12":{"initial":[26,12,35,45,74],"limit":[43,34,42,71,80]},"13":{"initial":[33,9,54,66,26],"limit":[87,93,79,75,70]}},"inputSite":[0]},"modes":[{"id":14054,"name":"Sapiente totam ad in atque vero.","slot":0,"config":{"autoGrasp":[1,0],"coContractionTimings":[400,400],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[60,90,90,70,90,100,10,90,40,80],"gripPairsConfig":[5,7,13,8,3,10,6,11],"gripSequentialConfig":[255,12,11,255,255,255,9,8,1,10,7,4],"gripSwitchingMode":[3],"holdOpen":[1500,2500],"pulseTimings":[350,720,260,670],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14055,"name":"Facilis numquam consequatur accusantium tempora.","slot":1,"config":{"autoGrasp":[1,100],"coContractionTimings":[200,100],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[90,70,40,60,100,10,100,10,90,70],"gripPairsConfig":[2,5,11,3,12,6,13,9],"gripSequentialConfig":[6,8,10,5,255,255,7,12,255,3,255,13],"gripSwitchingMode":[1],"holdOpen":[1500,2000],"pulseTimings":[750,270,670,380],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14056,"name":"Et deleniti et dolores a eveniet.","slot":2,"config":{"autoGrasp":[0,100],"coContractionTimings":[400,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[10,80,100,70,10,70,80,50,90,50],"gripPairsConfig":[8,3,5,9,7,13,6,10],"gripSequentialConfig":[255,255,12,255,13,9,11,4,10,6,3,7],"gripSwitchingMode":[1],"holdOpen":[2000,2500],"pulseTimings":[70,520,190,920],"softGrip":[1],"speedControlStrategy":[1]}}]}' }
                                    restore_point: { type: integer, example: 1 }
                                    changed_by: { type: integer, example: 14946 }
                                    created_at: { type: string, example: '2025-01-08T10:15:41.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:41.000000Z' }
            tags:
                - Config
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Config history entry name.'
                                    example: 'Remote session 2022-05-30'
                                restore_point:
                                    type: integer
                                    description: 'Restore point status. The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
            -
                in: path
                name: configId
                description: 'Config history entry ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/device/{deviceId}/config/history/undo/{configId}':
        delete:
            summary: 'Undo single config history change'
            description: 'Returns updated config in response.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update device config'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update device config' }
                404:
                    description: '404, Config history entry not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config history entry not found'
                                properties:
                                    message: { type: string, example: 'Config history entry not found' }
                200:
                    description: '200, Normal/compact response'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    common: { gripPairsConfig: [1, 4, 2, 3, 6, 7, 9, 8], controlConfig: [0, 1, 0, 0, 0], emgThresholds: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], interval: [100], gripSequentialConfig: [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255] }
                                    modes: [{ id: 100, name: 'Mode 1', slot: 0, config: { interval: [300], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 101, name: 'Mode 2', slot: 1, config: { interval: [400], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 102, name: 'Mode 3', slot: 2, config: { interval: [500], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }]
                                properties:
                                    common: { type: object, example: { gripPairsConfig: [1, 4, 2, 3, 6, 7, 9, 8], controlConfig: [0, 1, 0, 0, 0], emgThresholds: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], interval: [100], gripSequentialConfig: [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255] } }
                                    modes: { type: array, example: [{ id: 100, name: 'Mode 1', slot: 0, config: { interval: [300], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 101, name: 'Mode 2', slot: 1, config: { interval: [400], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 102, name: 'Mode 3', slot: 2, config: { interval: [500], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }], items: { type: object } }
            tags:
                - Config
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
            -
                in: path
                name: configId
                description: 'Config history entry ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/device/{deviceId}/config/restore/{configId}':
        post:
            summary: 'Restore config history entry'
            description: "Restores config from given config history entry (all changes).\nSends support ticket if patient is assigned to device, returns config instead."
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update device config'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update device config' }
                404:
                    description: '404, Config history entry not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config history entry not found'
                                properties:
                                    message: { type: string, example: 'Config history entry not found' }
                200:
                    description: '200, Patient not assigned, returns config'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    common: { gripPairsConfig: [1, 4, 2, 3, 6, 7, 9, 8], controlConfig: [0, 1, 0, 0, 0], emgThresholds: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], interval: [100], gripSequentialConfig: [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255] }
                                    modes: [{ id: 100, name: 'Mode 1', slot: 0, config: { interval: [300], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 101, name: 'Mode 2', slot: 1, config: { interval: [400], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 102, name: 'Mode 3', slot: 2, config: { interval: [500], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }]
                                properties:
                                    common: { type: object, example: { gripPairsConfig: [1, 4, 2, 3, 6, 7, 9, 8], controlConfig: [0, 1, 0, 0, 0], emgThresholds: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], interval: [100], gripSequentialConfig: [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255] } }
                                    modes: { type: array, example: [{ id: 100, name: 'Mode 1', slot: 0, config: { interval: [300], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 101, name: 'Mode 2', slot: 1, config: { interval: [400], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 102, name: 'Mode 3', slot: 2, config: { interval: [500], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }], items: { type: object } }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4432
                                    sender_id: 14949
                                    recipient_id: 14950
                                    device_id: 5914
                                    meeting_date: '2025-01-08T10:15:41.000000Z'
                                    meeting_type: online_meeting
                                    contact_email: kolby99@morissette.info
                                    status: new
                                    created_at: '2025-01-08T10:15:42.000000Z'
                                    updated_at: '2025-01-08T10:15:42.000000Z'
                                    sender: { id: 14949, mrn: MS3LIEKQ, name: 'Lilly Bogisich II', email: 1736331341jewell87@example.com, language: en, phone: +1-458-827-4107, phone_country: BA, phone_verified_at: null, address1: '4319 Sadie Knoll', address2: 'South Lisa, NE 70560', postal_code: 01264-9577, city: 'Wyman, Cummerata and Beer', clinic_name: 'West Modesta', clinic_location: "80420 Rosalyn Ridges\nLake Pinkie, WV 95030", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:41.000000Z', updated_at: '2025-01-08T10:15:41.000000Z', invitation_status: null, roles: [] }
                                    recipient: { id: 14950, mrn: WAH34ZS4, name: 'Sonia Pacocha Sr.', email: 1736331341buck.lynch@example.org, language: en, phone: 772-349-7851, phone_country: MX, phone_verified_at: null, address1: '89463 Shields Camp Suite 985', address2: 'East Patricia, NJ 26795', postal_code: 27803-8208, city: Bashirian-Conroy, clinic_name: 'Lake Rossie', clinic_location: "5933 Emerson Lodge\nOnieview, AZ 97545-4617", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', invitation_status: null, roles: [] }
                                    messages: [{ id: 4530, ticket_id: 4432, sender_id: 14951, title: Dr., content: 'Voluptatem rem pariatur necessitatibus perspiciatis itaque et.', is_read: false, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', attachments: [{ id: 6573, ticket_id: 4432, ticket_message_id: 4530, type: json, title: 'Current config', attachment: '{"common":{"fingerStrength":[1,400],"gripPositions":{"_":0,"0":{"initial":[2,2,20,12,11],"limit":[12,78,63,26,19]},"1":{"initial":[29,37,13,1,72],"limit":[51,86,36,91,77]},"2":{"initial":[18,20,3,43,37],"limit":[60,30,63,80,91]},"3":{"initial":[53,16,29,64,31],"limit":[64,86,67,91,88]},"4":{"initial":[31,18,33,12,10],"limit":[35,19,38,75,51]},"5":{"initial":[39,2,84,56,39],"limit":[58,34,93,66,41]},"6":{"initial":[34,76,17,37,4],"limit":[81,95,26,79,56]},"7":{"initial":[47,11,15,34,52],"limit":[92,60,19,91,60]},"8":{"initial":[32,17,20,36,24],"limit":[72,39,54,79,85]},"9":{"initial":[19,75,60,54,29],"limit":[76,79,94,78,56]},"10":{"initial":[37,7,66,19,19],"limit":[92,34,83,56,75]},"11":{"initial":[8,4,48,12,48],"limit":[88,53,53,67,49]},"12":{"initial":[13,13,22,30,31],"limit":[90,81,67,88,48]},"13":{"initial":[25,8,13,46,4],"limit":[82,56,88,74,59]}},"inputSite":[0]},"modes":[{"id":14057,"name":"Distinctio facilis libero harum eaque.","slot":0,"config":{"autoGrasp":[1,100],"coContractionTimings":[500,400],"controlMode":[1],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[10,30,20,20,90,10,30,90,90,90],"gripPairsConfig":[8,3,11,5,10,12,6,1],"gripSequentialConfig":[2,255,5,9,4,255,8,3,10,255,11,255],"gripSwitchingMode":[3],"holdOpen":[2500,2500],"pulseTimings":[70,830,330,210],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14058,"name":"Doloremque temporibus officiis qui eos ex modi ipsum nihil.","slot":1,"config":{"autoGrasp":[0,100],"coContractionTimings":[300,300],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[50,20,70,50,70,90,90,40,100,30],"gripPairsConfig":[12,1,3,8,2,4,5,7],"gripSequentialConfig":[5,3,8,7,12,255,255,2,6,255,1,13],"gripSwitchingMode":[1],"holdOpen":[2500,2500],"pulseTimings":[450,100,540,70],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14059,"name":"Fuga repudiandae iusto aut aut quasi eveniet totam.","slot":2,"config":{"autoGrasp":[1,0],"coContractionTimings":[400,400],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[0,10,60,100,10,0,30,0,40,90],"gripPairsConfig":[4,3,10,7,6,9,8,1],"gripSequentialConfig":[255,255,5,11,255,7,12,4,3,10,255,9],"gripSwitchingMode":[2],"holdOpen":[2000,2500],"pulseTimings":[330,150,400,990],"softGrip":[1],"speedControlStrategy":[0]}}]}', created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z' }, { id: 6574, ticket_id: 4432, ticket_message_id: 4530, type: json, title: 'New config', attachment: '{"common":{"fingerStrength":[1,400],"gripPositions":{"_":0,"0":{"initial":[29,29,72,16,47],"limit":[32,56,94,53,49]},"1":{"initial":[54,42,72,8,49],"limit":[94,58,86,94,84]},"2":{"initial":[5,65,40,27,46],"limit":[29,92,46,75,68]},"3":{"initial":[37,1,49,51,30],"limit":[62,39,85,54,38]},"4":{"initial":[28,54,35,1,5],"limit":[95,60,88,25,27]},"5":{"initial":[3,64,23,18,2],"limit":[52,79,66,29,72]},"6":{"initial":[24,28,32,19,56],"limit":[46,48,56,76,87]},"7":{"initial":[11,79,28,14,73],"limit":[52,83,88,84,90]},"8":{"initial":[37,52,48,6,17],"limit":[62,74,94,69,91]},"9":{"initial":[3,4,27,55,28],"limit":[39,61,93,74,33]},"10":{"initial":[9,9,6,58,2],"limit":[91,48,32,86,27]},"11":{"initial":[5,30,17,67,80],"limit":[59,88,62,67,92]},"12":{"initial":[53,11,39,17,14],"limit":[85,90,53,87,80]},"13":{"initial":[65,68,45,17,16],"limit":[74,92,51,82,64]}},"inputSite":[0]},"modes":[{"id":14060,"name":"Necessitatibus sit ullam aliquam cupiditate veniam voluptatem eos.","slot":0,"config":{"autoGrasp":[0,100],"coContractionTimings":[500,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[10,20,80,60,40,10,90,70,60,50],"gripPairsConfig":[10,13,6,1,9,11,7,8],"gripSequentialConfig":[4,10,255,255,6,12,8,1,11,3,2,255],"gripSwitchingMode":[3],"holdOpen":[2000,2000],"pulseTimings":[290,400,280,200],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14061,"name":"Ut repudiandae culpa in deserunt quidem.","slot":1,"config":{"autoGrasp":[1,0],"coContractionTimings":[200,100],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[10,60,20,80,70,40,20,0,90,50],"gripPairsConfig":[1,6,2,3,4,9,10,12],"gripSequentialConfig":[255,8,13,6,9,255,4,3,11,5,255,255],"gripSwitchingMode":[2],"holdOpen":[2000,2000],"pulseTimings":[600,120,370,850],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14062,"name":"Asperiores cupiditate sed sit et enim sit dolor.","slot":2,"config":{"autoGrasp":[1,100],"coContractionTimings":[200,200],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[80,40,80,20,40,90,0,10,60,0],"gripPairsConfig":[7,13,10,8,12,4,3,2],"gripSequentialConfig":[8,2,5,1,255,3,255,7,255,4,255,12],"gripSwitchingMode":[2],"holdOpen":[1500,2500],"pulseTimings":[250,10,460,630],"softGrip":[1],"speedControlStrategy":[0]}}]}', created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z' }], config_demo: null }]
                                properties:
                                    id: { type: integer, example: 4432 }
                                    sender_id: { type: integer, example: 14949 }
                                    recipient_id: { type: integer, example: 14950 }
                                    device_id: { type: integer, example: 5914 }
                                    meeting_date: { type: string, example: '2025-01-08T10:15:41.000000Z' }
                                    meeting_type: { type: string, example: online_meeting }
                                    contact_email: { type: string, example: kolby99@morissette.info }
                                    status: { type: string, example: new }
                                    created_at: { type: string, example: '2025-01-08T10:15:42.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:42.000000Z' }
                                    sender: { type: object, example: { id: 14949, mrn: MS3LIEKQ, name: 'Lilly Bogisich II', email: 1736331341jewell87@example.com, language: en, phone: +1-458-827-4107, phone_country: BA, phone_verified_at: null, address1: '4319 Sadie Knoll', address2: 'South Lisa, NE 70560', postal_code: 01264-9577, city: 'Wyman, Cummerata and Beer', clinic_name: 'West Modesta', clinic_location: "80420 Rosalyn Ridges\nLake Pinkie, WV 95030", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:41.000000Z', updated_at: '2025-01-08T10:15:41.000000Z', invitation_status: null, roles: [] } }
                                    recipient: { type: object, example: { id: 14950, mrn: WAH34ZS4, name: 'Sonia Pacocha Sr.', email: 1736331341buck.lynch@example.org, language: en, phone: 772-349-7851, phone_country: MX, phone_verified_at: null, address1: '89463 Shields Camp Suite 985', address2: 'East Patricia, NJ 26795', postal_code: 27803-8208, city: Bashirian-Conroy, clinic_name: 'Lake Rossie', clinic_location: "5933 Emerson Lodge\nOnieview, AZ 97545-4617", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', invitation_status: null, roles: [] } }
                                    messages: { type: array, example: [{ id: 4530, ticket_id: 4432, sender_id: 14951, title: Dr., content: 'Voluptatem rem pariatur necessitatibus perspiciatis itaque et.', is_read: false, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', attachments: [{ id: 6573, ticket_id: 4432, ticket_message_id: 4530, type: json, title: 'Current config', attachment: '{"common":{"fingerStrength":[1,400],"gripPositions":{"_":0,"0":{"initial":[2,2,20,12,11],"limit":[12,78,63,26,19]},"1":{"initial":[29,37,13,1,72],"limit":[51,86,36,91,77]},"2":{"initial":[18,20,3,43,37],"limit":[60,30,63,80,91]},"3":{"initial":[53,16,29,64,31],"limit":[64,86,67,91,88]},"4":{"initial":[31,18,33,12,10],"limit":[35,19,38,75,51]},"5":{"initial":[39,2,84,56,39],"limit":[58,34,93,66,41]},"6":{"initial":[34,76,17,37,4],"limit":[81,95,26,79,56]},"7":{"initial":[47,11,15,34,52],"limit":[92,60,19,91,60]},"8":{"initial":[32,17,20,36,24],"limit":[72,39,54,79,85]},"9":{"initial":[19,75,60,54,29],"limit":[76,79,94,78,56]},"10":{"initial":[37,7,66,19,19],"limit":[92,34,83,56,75]},"11":{"initial":[8,4,48,12,48],"limit":[88,53,53,67,49]},"12":{"initial":[13,13,22,30,31],"limit":[90,81,67,88,48]},"13":{"initial":[25,8,13,46,4],"limit":[82,56,88,74,59]}},"inputSite":[0]},"modes":[{"id":14057,"name":"Distinctio facilis libero harum eaque.","slot":0,"config":{"autoGrasp":[1,100],"coContractionTimings":[500,400],"controlMode":[1],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[10,30,20,20,90,10,30,90,90,90],"gripPairsConfig":[8,3,11,5,10,12,6,1],"gripSequentialConfig":[2,255,5,9,4,255,8,3,10,255,11,255],"gripSwitchingMode":[3],"holdOpen":[2500,2500],"pulseTimings":[70,830,330,210],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14058,"name":"Doloremque temporibus officiis qui eos ex modi ipsum nihil.","slot":1,"config":{"autoGrasp":[0,100],"coContractionTimings":[300,300],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[50,20,70,50,70,90,90,40,100,30],"gripPairsConfig":[12,1,3,8,2,4,5,7],"gripSequentialConfig":[5,3,8,7,12,255,255,2,6,255,1,13],"gripSwitchingMode":[1],"holdOpen":[2500,2500],"pulseTimings":[450,100,540,70],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14059,"name":"Fuga repudiandae iusto aut aut quasi eveniet totam.","slot":2,"config":{"autoGrasp":[1,0],"coContractionTimings":[400,400],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[0,10,60,100,10,0,30,0,40,90],"gripPairsConfig":[4,3,10,7,6,9,8,1],"gripSequentialConfig":[255,255,5,11,255,7,12,4,3,10,255,9],"gripSwitchingMode":[2],"holdOpen":[2000,2500],"pulseTimings":[330,150,400,990],"softGrip":[1],"speedControlStrategy":[0]}}]}', created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z' }, { id: 6574, ticket_id: 4432, ticket_message_id: 4530, type: json, title: 'New config', attachment: '{"common":{"fingerStrength":[1,400],"gripPositions":{"_":0,"0":{"initial":[29,29,72,16,47],"limit":[32,56,94,53,49]},"1":{"initial":[54,42,72,8,49],"limit":[94,58,86,94,84]},"2":{"initial":[5,65,40,27,46],"limit":[29,92,46,75,68]},"3":{"initial":[37,1,49,51,30],"limit":[62,39,85,54,38]},"4":{"initial":[28,54,35,1,5],"limit":[95,60,88,25,27]},"5":{"initial":[3,64,23,18,2],"limit":[52,79,66,29,72]},"6":{"initial":[24,28,32,19,56],"limit":[46,48,56,76,87]},"7":{"initial":[11,79,28,14,73],"limit":[52,83,88,84,90]},"8":{"initial":[37,52,48,6,17],"limit":[62,74,94,69,91]},"9":{"initial":[3,4,27,55,28],"limit":[39,61,93,74,33]},"10":{"initial":[9,9,6,58,2],"limit":[91,48,32,86,27]},"11":{"initial":[5,30,17,67,80],"limit":[59,88,62,67,92]},"12":{"initial":[53,11,39,17,14],"limit":[85,90,53,87,80]},"13":{"initial":[65,68,45,17,16],"limit":[74,92,51,82,64]}},"inputSite":[0]},"modes":[{"id":14060,"name":"Necessitatibus sit ullam aliquam cupiditate veniam voluptatem eos.","slot":0,"config":{"autoGrasp":[0,100],"coContractionTimings":[500,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[10,20,80,60,40,10,90,70,60,50],"gripPairsConfig":[10,13,6,1,9,11,7,8],"gripSequentialConfig":[4,10,255,255,6,12,8,1,11,3,2,255],"gripSwitchingMode":[3],"holdOpen":[2000,2000],"pulseTimings":[290,400,280,200],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14061,"name":"Ut repudiandae culpa in deserunt quidem.","slot":1,"config":{"autoGrasp":[1,0],"coContractionTimings":[200,100],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[10,60,20,80,70,40,20,0,90,50],"gripPairsConfig":[1,6,2,3,4,9,10,12],"gripSequentialConfig":[255,8,13,6,9,255,4,3,11,5,255,255],"gripSwitchingMode":[2],"holdOpen":[2000,2000],"pulseTimings":[600,120,370,850],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14062,"name":"Asperiores cupiditate sed sit et enim sit dolor.","slot":2,"config":{"autoGrasp":[1,100],"coContractionTimings":[200,200],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[80,40,80,20,40,90,0,10,60,0],"gripPairsConfig":[7,13,10,8,12,4,3,2],"gripSequentialConfig":[8,2,5,1,255,3,255,7,255,4,255,12],"gripSwitchingMode":[2],"holdOpen":[1500,2500],"pulseTimings":[250,10,460,630],"softGrip":[1],"speedControlStrategy":[0]}}]}', created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z' }], config_demo: null }], items: { type: object } }
            tags:
                - Config
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
            -
                in: path
                name: configId
                description: 'Config history entry ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/device/{deviceId}/config/send':
        post:
            summary: 'Send test config'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update device config'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update device config' }
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                422:
                    description: '422, Device does not have an amputee assigned'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device does not have an amputee assigned'
                                properties:
                                    message: { type: string, example: 'Device does not have an amputee assigned' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4433
                                    sender_id: 14955
                                    recipient_id: 14956
                                    device_id: 5921
                                    meeting_date: '2025-01-08T10:15:42.000000Z'
                                    meeting_type: online_meeting
                                    contact_email: cleve.connelly@gmail.com
                                    status: new
                                    created_at: '2025-01-08T10:15:42.000000Z'
                                    updated_at: '2025-01-08T10:15:42.000000Z'
                                    sender: { id: 14955, mrn: IUJSJ99A, name: 'Mr. Khalid Kuphal', email: 1736331342gilda.howell@example.net, language: en, phone: '(539) 229-4506', phone_country: GG, phone_verified_at: null, address1: '180 Annabel Street Suite 754', address2: 'Lake Cecileton, VA 00724', postal_code: 77361-5522, city: Hoeger-Ledner, clinic_name: Markschester, clinic_location: "5429 Alexis Corner Suite 090\nKatarinamouth, PA 78133", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', invitation_status: null, roles: [] }
                                    recipient: { id: 14956, mrn: DAI0ZV1R, name: 'Louie Murphy', email: 1736331342emanuel39@example.org, language: en, phone: '+14588418785', phone_country: BA, phone_verified_at: null, address1: '482 Kuphal Loop', address2: 'North Bereniceborough, NC 98083', postal_code: '95498', city: 'Price, Ebert and Jacobs', clinic_name: 'Port Alphonsoville', clinic_location: "930 Kunde Villages\nPagacburgh, VT 78926", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', invitation_status: null, roles: [] }
                                    messages: [{ id: 4531, ticket_id: 4433, sender_id: 14957, title: Prof., content: 'Sapiente enim ex quod culpa inventore nostrum.', is_read: false, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', attachments: [{ id: 6575, ticket_id: 4433, ticket_message_id: 4531, type: json, title: 'Current config', attachment: '{"common":{"fingerStrength":[1,300],"gripPositions":{"_":0,"0":{"initial":[23,25,30,15,17],"limit":[47,29,69,19,53]},"1":{"initial":[18,23,53,3,17],"limit":[68,31,71,78,55]},"2":{"initial":[37,23,5,29,8],"limit":[41,50,33,92,71]},"3":{"initial":[54,9,59,43,7],"limit":[67,50,71,55,21]},"4":{"initial":[5,18,70,39,30],"limit":[31,91,83,49,85]},"5":{"initial":[6,58,41,24,65],"limit":[75,68,54,72,86]},"6":{"initial":[55,45,81,33,6],"limit":[68,84,89,91,48]},"7":{"initial":[82,54,70,25,31],"limit":[83,83,90,54,34]},"8":{"initial":[6,2,13,43,10],"limit":[71,2,51,91,64]},"9":{"initial":[27,6,16,39,21],"limit":[49,43,62,41,91]},"10":{"initial":[4,4,45,74,71],"limit":[49,49,65,85,77]},"11":{"initial":[12,45,25,53,11],"limit":[23,93,80,73,79]},"12":{"initial":[25,56,82,43,45],"limit":[45,92,92,92,93]},"13":{"initial":[57,24,1,27,13],"limit":[63,88,52,90,50]}},"inputSite":[1]},"modes":[{"id":14063,"name":"In sint et sunt.","slot":0,"config":{"autoGrasp":[1,100],"coContractionTimings":[500,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[30,60,20,30,60,60,90,80,40,40],"gripPairsConfig":[10,7,4,13,2,12,3,8],"gripSequentialConfig":[6,10,7,255,4,255,3,2,13,8,1,5],"gripSwitchingMode":[2],"holdOpen":[1500,2000],"pulseTimings":[390,330,50,690],"softGrip":[0],"speedControlStrategy":[0]}},{"id":14064,"name":"Ab mollitia hic ratione non earum minus quia.","slot":1,"config":{"autoGrasp":[1,0],"coContractionTimings":[500,400],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[60,60,50,0,70,20,70,10,60,40],"gripPairsConfig":[7,6,2,12,10,4,5,3],"gripSequentialConfig":[5,13,4,255,1,9,12,3,7,6,8,255],"gripSwitchingMode":[1],"holdOpen":[2000,2000],"pulseTimings":[590,50,930,40],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14065,"name":"Mollitia modi molestiae non illo possimus.","slot":2,"config":{"autoGrasp":[0,0],"coContractionTimings":[300,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[20,80,100,80,10,10,20,50,60,20],"gripPairsConfig":[12,13,10,8,9,11,7,4],"gripSequentialConfig":[255,255,2,10,255,4,9,8,6,5,13,255],"gripSwitchingMode":[3],"holdOpen":[2000,2500],"pulseTimings":[570,920,880,420],"softGrip":[0],"speedControlStrategy":[0]}}]}', created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z' }, { id: 6576, ticket_id: 4433, ticket_message_id: 4531, type: json, title: 'New config', attachment: '{"common":{"fingerStrength":[1,100],"gripPositions":{"_":0,"0":{"initial":[79,1,19,22,3],"limit":[94,43,61,87,15]},"1":{"initial":[5,13,51,23,65],"limit":[70,91,61,71,78]},"2":{"initial":[7,57,36,42,36],"limit":[7,61,41,74,44]},"3":{"initial":[39,44,43,11,37],"limit":[48,84,57,74,56]},"4":{"initial":[50,31,3,1,58],"limit":[57,53,86,27,78]},"5":{"initial":[59,31,58,52,11],"limit":[84,45,92,62,65]},"6":{"initial":[10,20,27,43,28],"limit":[15,38,81,47,38]},"7":{"initial":[16,11,39,19,42],"limit":[40,25,46,73,44]},"8":{"initial":[9,24,3,79,34],"limit":[65,44,83,90,68]},"9":{"initial":[40,29,27,46,9],"limit":[51,87,58,87,85]},"10":{"initial":[24,47,12,11,11],"limit":[86,65,41,72,46]},"11":{"initial":[34,2,50,81,15],"limit":[40,35,53,93,30]},"12":{"initial":[23,49,9,75,3],"limit":[43,87,51,86,76]},"13":{"initial":[41,34,45,7,2],"limit":[65,62,51,44,74]}},"inputSite":[1]},"modes":[{"id":14066,"name":"Voluptatibus nihil vero ut tenetur.","slot":0,"config":{"autoGrasp":[0,0],"coContractionTimings":[200,200],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[0,0,80,40,30,100,0,90,10,70],"gripPairsConfig":[3,9,4,13,7,12,6,10],"gripSequentialConfig":[9,6,5,11,13,3,12,255,8,4,10,1],"gripSwitchingMode":[1],"holdOpen":[1500,1500],"pulseTimings":[110,300,880,890],"softGrip":[1],"speedControlStrategy":[1]}},{"id":14067,"name":"Et a fugiat voluptatum tenetur exercitationem error soluta magni.","slot":1,"config":{"autoGrasp":[1,100],"coContractionTimings":[300,100],"controlMode":[1],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[100,10,20,30,30,50,70,100,30,50],"gripPairsConfig":[2,4,12,8,5,9,6,11],"gripSequentialConfig":[255,1,255,4,3,6,255,255,8,255,9,5],"gripSwitchingMode":[3],"holdOpen":[2000,2500],"pulseTimings":[350,370,920,960],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14068,"name":"Sapiente officiis molestiae odit atque.","slot":2,"config":{"autoGrasp":[0,100],"coContractionTimings":[400,300],"controlMode":[1],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[70,80,100,100,40,80,10,20,20,70],"gripPairsConfig":[4,11,1,10,9,5,7,3],"gripSequentialConfig":[2,255,12,9,7,11,4,255,5,255,3,13],"gripSwitchingMode":[1],"holdOpen":[1500,2000],"pulseTimings":[900,490,900,60],"softGrip":[1],"speedControlStrategy":[0]}}]}', created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z' }], config_demo: null }]
                                properties:
                                    id: { type: integer, example: 4433 }
                                    sender_id: { type: integer, example: 14955 }
                                    recipient_id: { type: integer, example: 14956 }
                                    device_id: { type: integer, example: 5921 }
                                    meeting_date: { type: string, example: '2025-01-08T10:15:42.000000Z' }
                                    meeting_type: { type: string, example: online_meeting }
                                    contact_email: { type: string, example: cleve.connelly@gmail.com }
                                    status: { type: string, example: new }
                                    created_at: { type: string, example: '2025-01-08T10:15:42.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:42.000000Z' }
                                    sender: { type: object, example: { id: 14955, mrn: IUJSJ99A, name: 'Mr. Khalid Kuphal', email: 1736331342gilda.howell@example.net, language: en, phone: '(539) 229-4506', phone_country: GG, phone_verified_at: null, address1: '180 Annabel Street Suite 754', address2: 'Lake Cecileton, VA 00724', postal_code: 77361-5522, city: Hoeger-Ledner, clinic_name: Markschester, clinic_location: "5429 Alexis Corner Suite 090\nKatarinamouth, PA 78133", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', invitation_status: null, roles: [] } }
                                    recipient: { type: object, example: { id: 14956, mrn: DAI0ZV1R, name: 'Louie Murphy', email: 1736331342emanuel39@example.org, language: en, phone: '+14588418785', phone_country: BA, phone_verified_at: null, address1: '482 Kuphal Loop', address2: 'North Bereniceborough, NC 98083', postal_code: '95498', city: 'Price, Ebert and Jacobs', clinic_name: 'Port Alphonsoville', clinic_location: "930 Kunde Villages\nPagacburgh, VT 78926", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', invitation_status: null, roles: [] } }
                                    messages: { type: array, example: [{ id: 4531, ticket_id: 4433, sender_id: 14957, title: Prof., content: 'Sapiente enim ex quod culpa inventore nostrum.', is_read: false, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', attachments: [{ id: 6575, ticket_id: 4433, ticket_message_id: 4531, type: json, title: 'Current config', attachment: '{"common":{"fingerStrength":[1,300],"gripPositions":{"_":0,"0":{"initial":[23,25,30,15,17],"limit":[47,29,69,19,53]},"1":{"initial":[18,23,53,3,17],"limit":[68,31,71,78,55]},"2":{"initial":[37,23,5,29,8],"limit":[41,50,33,92,71]},"3":{"initial":[54,9,59,43,7],"limit":[67,50,71,55,21]},"4":{"initial":[5,18,70,39,30],"limit":[31,91,83,49,85]},"5":{"initial":[6,58,41,24,65],"limit":[75,68,54,72,86]},"6":{"initial":[55,45,81,33,6],"limit":[68,84,89,91,48]},"7":{"initial":[82,54,70,25,31],"limit":[83,83,90,54,34]},"8":{"initial":[6,2,13,43,10],"limit":[71,2,51,91,64]},"9":{"initial":[27,6,16,39,21],"limit":[49,43,62,41,91]},"10":{"initial":[4,4,45,74,71],"limit":[49,49,65,85,77]},"11":{"initial":[12,45,25,53,11],"limit":[23,93,80,73,79]},"12":{"initial":[25,56,82,43,45],"limit":[45,92,92,92,93]},"13":{"initial":[57,24,1,27,13],"limit":[63,88,52,90,50]}},"inputSite":[1]},"modes":[{"id":14063,"name":"In sint et sunt.","slot":0,"config":{"autoGrasp":[1,100],"coContractionTimings":[500,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[30,60,20,30,60,60,90,80,40,40],"gripPairsConfig":[10,7,4,13,2,12,3,8],"gripSequentialConfig":[6,10,7,255,4,255,3,2,13,8,1,5],"gripSwitchingMode":[2],"holdOpen":[1500,2000],"pulseTimings":[390,330,50,690],"softGrip":[0],"speedControlStrategy":[0]}},{"id":14064,"name":"Ab mollitia hic ratione non earum minus quia.","slot":1,"config":{"autoGrasp":[1,0],"coContractionTimings":[500,400],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[60,60,50,0,70,20,70,10,60,40],"gripPairsConfig":[7,6,2,12,10,4,5,3],"gripSequentialConfig":[5,13,4,255,1,9,12,3,7,6,8,255],"gripSwitchingMode":[1],"holdOpen":[2000,2000],"pulseTimings":[590,50,930,40],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14065,"name":"Mollitia modi molestiae non illo possimus.","slot":2,"config":{"autoGrasp":[0,0],"coContractionTimings":[300,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[20,80,100,80,10,10,20,50,60,20],"gripPairsConfig":[12,13,10,8,9,11,7,4],"gripSequentialConfig":[255,255,2,10,255,4,9,8,6,5,13,255],"gripSwitchingMode":[3],"holdOpen":[2000,2500],"pulseTimings":[570,920,880,420],"softGrip":[0],"speedControlStrategy":[0]}}]}', created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z' }, { id: 6576, ticket_id: 4433, ticket_message_id: 4531, type: json, title: 'New config', attachment: '{"common":{"fingerStrength":[1,100],"gripPositions":{"_":0,"0":{"initial":[79,1,19,22,3],"limit":[94,43,61,87,15]},"1":{"initial":[5,13,51,23,65],"limit":[70,91,61,71,78]},"2":{"initial":[7,57,36,42,36],"limit":[7,61,41,74,44]},"3":{"initial":[39,44,43,11,37],"limit":[48,84,57,74,56]},"4":{"initial":[50,31,3,1,58],"limit":[57,53,86,27,78]},"5":{"initial":[59,31,58,52,11],"limit":[84,45,92,62,65]},"6":{"initial":[10,20,27,43,28],"limit":[15,38,81,47,38]},"7":{"initial":[16,11,39,19,42],"limit":[40,25,46,73,44]},"8":{"initial":[9,24,3,79,34],"limit":[65,44,83,90,68]},"9":{"initial":[40,29,27,46,9],"limit":[51,87,58,87,85]},"10":{"initial":[24,47,12,11,11],"limit":[86,65,41,72,46]},"11":{"initial":[34,2,50,81,15],"limit":[40,35,53,93,30]},"12":{"initial":[23,49,9,75,3],"limit":[43,87,51,86,76]},"13":{"initial":[41,34,45,7,2],"limit":[65,62,51,44,74]}},"inputSite":[1]},"modes":[{"id":14066,"name":"Voluptatibus nihil vero ut tenetur.","slot":0,"config":{"autoGrasp":[0,0],"coContractionTimings":[200,200],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[0,0,80,40,30,100,0,90,10,70],"gripPairsConfig":[3,9,4,13,7,12,6,10],"gripSequentialConfig":[9,6,5,11,13,3,12,255,8,4,10,1],"gripSwitchingMode":[1],"holdOpen":[1500,1500],"pulseTimings":[110,300,880,890],"softGrip":[1],"speedControlStrategy":[1]}},{"id":14067,"name":"Et a fugiat voluptatum tenetur exercitationem error soluta magni.","slot":1,"config":{"autoGrasp":[1,100],"coContractionTimings":[300,100],"controlMode":[1],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[100,10,20,30,30,50,70,100,30,50],"gripPairsConfig":[2,4,12,8,5,9,6,11],"gripSequentialConfig":[255,1,255,4,3,6,255,255,8,255,9,5],"gripSwitchingMode":[3],"holdOpen":[2000,2500],"pulseTimings":[350,370,920,960],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14068,"name":"Sapiente officiis molestiae odit atque.","slot":2,"config":{"autoGrasp":[0,100],"coContractionTimings":[400,300],"controlMode":[1],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[70,80,100,100,40,80,10,20,20,70],"gripPairsConfig":[4,11,1,10,9,5,7,3],"gripSequentialConfig":[2,255,12,9,7,11,4,255,5,255,3,13],"gripSwitchingMode":[1],"holdOpen":[1500,2000],"pulseTimings":[900,490,900,60],"softGrip":[1],"speedControlStrategy":[0]}}]}', created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z' }], config_demo: null }], items: { type: object } }
            tags:
                - Config
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                description:
                                    type: string
                                    description: 'Config description to add in message notification.'
                                    example: 'Fixed problem with grips.'
                                p2p_session:
                                    type: integer
                                    description: 'P2P Session ID. If config was prepared during P2P session, pass its ID, if not, pass <code>null</code>.'
                                    example: 1
                                common:
                                    type: string
                                    description: 'Common config as JSON string. The value must be a valid JSON string.'
                                    example: '{"gripPairsConfig": [1, 4, 2, 3, 6, 7, 9, 8], "controlConfig": [0, 1, 0, 0, 0], "gripSequentialConfig": [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255]'
                                modes:
                                    type: array
                                    description: ''
                                    example: [[]]
                                    items: { type: object, properties: { id: { type: string, description: 'Config mode ID.', example: 1 }, config: { type: string, description: 'Config specific for mode as JSON string. The value must be a valid JSON string.', example: '{"gripPairsConfig": [1, 4, 2, 3, 6, 7, 9, 8], "controlConfig": [0, 1, 0, 0, 0], "gripSequentialConfig": [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255]' } } }
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
    /api/config/convert:
        post:
            summary: 'Convert config'
            description: 'Convert config JSON to match given Firmware Version. Keys are moved between common config and modes.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to convert config'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to convert config' }
                404:
                    description: '404, Firmware version not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Firmware version not found'
                                properties:
                                    message: { type: string, example: 'Firmware version not found' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    common: { gripPairsConfig: [1, 4, 2, 3, 6, 7, 9, 8], controlConfig: [0, 1, 0, 0, 0], emgThresholds: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], interval: [100], gripSequentialConfig: [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255] }
                                    modes: [{ id: 100, name: 'Mode 1', slot: 0, config: { interval: [300], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 101, name: 'Mode 2', slot: 1, config: { interval: [400], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 102, name: 'Mode 3', slot: 2, config: { interval: [500], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }]
                                properties:
                                    common: { type: object, example: { gripPairsConfig: [1, 4, 2, 3, 6, 7, 9, 8], controlConfig: [0, 1, 0, 0, 0], emgThresholds: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], interval: [100], gripSequentialConfig: [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255] } }
                                    modes: { type: array, example: [{ id: 100, name: 'Mode 1', slot: 0, config: { interval: [300], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 101, name: 'Mode 2', slot: 1, config: { interval: [400], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 102, name: 'Mode 3', slot: 2, config: { interval: [500], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }], items: { type: object } }
            tags:
                - Config
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                config:
                                    type: string
                                    description: 'Full config JSON. The value must be a valid JSON string.'
                                    example: '["velit","dolore"]'
                                firmware:
                                    type: string
                                    description: 'Firmware Version ID to which config should be adjusted.'
                                    example: 1
                            required:
                                - config
                                - firmware
    '/api/device/{deviceId}/config/demos':
        get:
            summary: 'List config demos'
            description: ''
            parameters:
                -
                    in: query
                    name: accepted
                    description: "Filter config demos by accepted status.\n    If not specified, all entries will be returned.\n    Pass -1 to get entries not accepted or rejected yet.\n    The value must be one of <code>-1</code>, <code>0</code> or <code>1</code>."
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: "Filter config demos by accepted status.\n    If not specified, all entries will be returned.\n    Pass -1 to get entries not accepted or rejected yet.\n    The value must be one of <code>-1</code>, <code>0</code> or <code>1</code>."
                        example: 1
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>message</code>, <code> message.ticket</code>, <code> message.attachments</code>).'
                    example: 'message, message.ticket, message.attachments'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>message</code>, <code> message.ticket</code>, <code> message.attachments</code>).'
                        example: 'message, message.ticket, message.attachments'
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to access config demos'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to access config demos' }
                422:
                    description: '422, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ device_id: 5946, message_id: 4533, config: 'Explicabo debitis esse odit quae et dolor aut at.', is_accepted: 0, notes: 'Quidem optio dignissimos praesentium aliquid et.' }, { device_id: 5950, message_id: 4535, config: 'Dolorem sit necessitatibus est est repudiandae consequatur animi dolore.', is_accepted: 1, notes: 'Reprehenderit occaecati voluptas qui exercitationem.' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ device_id: 5946, message_id: 4533, config: 'Explicabo debitis esse odit quae et dolor aut at.', is_accepted: 0, notes: 'Quidem optio dignissimos praesentium aliquid et.' }, { device_id: 5950, message_id: 4535, config: 'Dolorem sit necessitatibus est est repudiandae consequatur animi dolore.', is_accepted: 1, notes: 'Reprehenderit occaecati voluptas qui exercitationem.' }], items: { type: object } }
            tags:
                - 'Config Demo'
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/device/{deviceId}/config/demos/{demoId}':
        put:
            summary: 'Update config demo'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to access config demos'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to access config demos' }
                422:
                    description: '422, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 2819
                                    device_id: 5952
                                    message_id: 4536
                                    config: 'Blanditiis illo et dignissimos beatae.'
                                    is_accepted: 0
                                    notes: 'Doloremque facere voluptates repudiandae repellendus.'
                                    created_at: '2025-01-08T10:15:44.000000Z'
                                    updated_at: '2025-01-08T10:15:44.000000Z'
                                    device: { id: 5952, serial: 0426e7ec-df0c-31fb-abb3-f0062154afef, bluetooth_id: 180c0268-132f-38f7-acd5-99325235cd34, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:44.000000Z', updated_at: '2025-01-08T10:15:44.000000Z' }
                                properties:
                                    id: { type: integer, example: 2819 }
                                    device_id: { type: integer, example: 5952 }
                                    message_id: { type: integer, example: 4536 }
                                    config: { type: string, example: 'Blanditiis illo et dignissimos beatae.' }
                                    is_accepted: { type: integer, example: 0 }
                                    notes: { type: string, example: 'Doloremque facere voluptates repudiandae repellendus.' }
                                    created_at: { type: string, example: '2025-01-08T10:15:44.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:44.000000Z' }
                                    device: { type: object, example: { id: 5952, serial: 0426e7ec-df0c-31fb-abb3-f0062154afef, bluetooth_id: 180c0268-132f-38f7-acd5-99325235cd34, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:44.000000Z', updated_at: '2025-01-08T10:15:44.000000Z' } }
            tags:
                - 'Config Demo'
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                is_accepted:
                                    type: integer
                                    description: 'Determines if demo config was accepted by patient. The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 0
                                notes:
                                    type: string
                                    description: 'Patient notes about tested config.'
                                    example: 'Something is still not working'
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
            -
                in: path
                name: demoId
                description: 'Config demo ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/device/{deviceId}/config-modes':
        get:
            summary: 'List config modes'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to list config modes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to list config modes' }
                422:
                    description: '422, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 14108, device_id: 5981, slot: null, name: 'Dolores saepe qui dolorem numquam quas autem maiores.', active: 1, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', device: { id: 5981, serial: e93c824d-8240-32eb-8fa8-2499c7bf9d7b, bluetooth_id: 309fa76f-00da-342a-a874-f9f0c6e63a54, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', amputee: null } }
                                    - { id: 14109, device_id: 5982, slot: null, name: 'Exercitationem ratione non fugit deleniti vel.', active: 1, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', device: { id: 5982, serial: a493d6e7-8e96-3188-a1c1-f4a53c2c6000, bluetooth_id: 8ae09ccb-da78-3857-abfd-92a7cb136488, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', amputee: null } }
            tags:
                - 'Config Modes'
        post:
            summary: 'Create config mode'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to create config modes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to create config modes' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 14111
                                    device_id: 5984
                                    slot: null
                                    name: 'Quae et alias beatae ea et sit magni.'
                                    active: 0
                                    created_at: '2025-01-08T10:15:45.000000Z'
                                    updated_at: '2025-01-08T10:15:45.000000Z'
                                properties:
                                    id: { type: integer, example: 14111 }
                                    device_id: { type: integer, example: 5984 }
                                    slot: { type: string, example: null }
                                    name: { type: string, example: 'Quae et alias beatae ea et sit magni.' }
                                    active: { type: integer, example: 0 }
                                    created_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
            tags:
                - 'Config Modes'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                slot:
                                    type: integer
                                    description: 'Mode index on device The value must be one of <code>0</code>, <code>1</code>, or <code>2</code>.'
                                    example: 0
                                name:
                                    type: string
                                    description: 'Name of mode.'
                                    example: 'Sport mode'
                                active:
                                    type: integer
                                    description: 'Active status. Default: 1. The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
                            required:
                                - name
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 14
                required: true
                schema:
                    type: integer
    '/api/device/{deviceId}/config-modes/{modeId}':
        get:
            summary: 'Get config mode'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to list config modes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to list config modes' }
                422:
                    description: '422, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 14110
                                    device_id: 5983
                                    slot: null
                                    name: 'Sint laborum illo id eos quibusdam quia voluptatem.'
                                    active: 1
                                    created_at: '2025-01-08T10:15:45.000000Z'
                                    updated_at: '2025-01-08T10:15:45.000000Z'
                                    device: { id: 5983, serial: d3ad7829-767f-3feb-835e-0a4c31e0f0ce, bluetooth_id: d1d971b9-d753-34dc-b007-15068422613d, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z' }
                                properties:
                                    id: { type: integer, example: 14110 }
                                    device_id: { type: integer, example: 5983 }
                                    slot: { type: string, example: null }
                                    name: { type: string, example: 'Sint laborum illo id eos quibusdam quia voluptatem.' }
                                    active: { type: integer, example: 1 }
                                    created_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    device: { type: object, example: { id: 5983, serial: d3ad7829-767f-3feb-835e-0a4c31e0f0ce, bluetooth_id: d1d971b9-d753-34dc-b007-15068422613d, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z' } }
            tags:
                - 'Config Modes'
        put:
            summary: 'Update config mode'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update config mode'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update config mode' }
                404:
                    description: '404, Config mode not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config mode not found'
                                properties:
                                    message: { type: string, example: 'Config mode not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 14112
                                    device_id: 5985
                                    slot: null
                                    name: 'Ullam quos soluta vitae sint omnis.'
                                    active: 1
                                    created_at: '2025-01-08T10:15:45.000000Z'
                                    updated_at: '2025-01-08T10:15:45.000000Z'
                                properties:
                                    id: { type: integer, example: 14112 }
                                    device_id: { type: integer, example: 5985 }
                                    slot: { type: string, example: null }
                                    name: { type: string, example: 'Ullam quos soluta vitae sint omnis.' }
                                    active: { type: integer, example: 1 }
                                    created_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
            tags:
                - 'Config Modes'
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                slot:
                                    type: integer
                                    description: 'Mode index on device The value must be one of <code>0</code>, <code>1</code>, or <code>2</code>.'
                                    example: 0
                                name:
                                    type: string
                                    description: 'Name of mode.'
                                    example: 'Sport mode'
                                active:
                                    type: integer
                                    description: 'Active status. Default: 1. The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 11
                required: true
                schema:
                    type: integer
            -
                in: path
                name: modeId
                description: ''
                example: exercitationem
                required: true
                schema:
                    type: string
    '/api/device/{deviceId}/config-modes/{modeId}/from-template/{templateId}':
        post:
            summary: 'Copy device config from template'
            description: "Copy config template into selected config mode.\nSends support ticket if patient is assigned to device, returns config instead."
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update device config'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update device config' }
                404:
                    description: '404, Config template not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config template not found'
                                properties:
                                    message: { type: string, example: 'Config template not found' }
                200:
                    description: '200, Patient not assigned, returns config'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    common: { gripPairsConfig: [1, 4, 2, 3, 6, 7, 9, 8], controlConfig: [0, 1, 0, 0, 0], emgThresholds: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], interval: [100], gripSequentialConfig: [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255] }
                                    modes: [{ id: 100, name: 'Mode 1', slot: 0, config: { interval: [300], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 101, name: 'Mode 2', slot: 1, config: { interval: [400], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 102, name: 'Mode 3', slot: 2, config: { interval: [500], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }]
                                properties:
                                    common: { type: object, example: { gripPairsConfig: [1, 4, 2, 3, 6, 7, 9, 8], controlConfig: [0, 1, 0, 0, 0], emgThresholds: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], interval: [100], gripSequentialConfig: [1, 2, 4, 3, 0, 255, 6, 7, 9, 8, 255, 255] } }
                                    modes: { type: array, example: [{ id: 100, name: 'Mode 1', slot: 0, config: { interval: [300], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 101, name: 'Mode 2', slot: 1, config: { interval: [400], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }, { id: 102, name: 'Mode 3', slot: 2, config: { interval: [500], fingerStrength: [1, 100], autoGrasp: [0, 100], emgSpike: [0, 300] } }], items: { type: object } }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4439
                                    sender_id: 14993
                                    recipient_id: 14994
                                    device_id: 5986
                                    meeting_date: '2025-01-08T10:15:45.000000Z'
                                    meeting_type: online_meeting
                                    contact_email: sgislason@bogisich.com
                                    status: new
                                    created_at: '2025-01-08T10:15:45.000000Z'
                                    updated_at: '2025-01-08T10:15:45.000000Z'
                                    sender: { id: 14993, mrn: T6YD6NDR, name: 'Antonietta Murphy', email: 1736331345demetrius68@example.com, language: en, phone: '+19377403611', phone_country: KH, phone_verified_at: null, address1: '495 Heathcote Rapids', address2: 'West Rosariotown, MT 90526-1390', postal_code: '02097', city: 'Erdman, Gibson and Emard', clinic_name: 'New Wilford', clinic_location: "891 Orin Station Suite 876\nGenesishaven, AZ 13131", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] }
                                    recipient: { id: 14994, mrn: PHRK9KA3, name: 'Maye Lang V', email: 1736331345ella.bernier@example.net, language: en, phone: 1-660-721-2221, phone_country: PM, phone_verified_at: null, address1: '42749 Harmon View', address2: 'Port Shanon, MD 60613', postal_code: 31669-8453, city: 'Hill, D''Amore and Gorczany', clinic_name: 'North Jettieberg', clinic_location: "728 Rosalinda Crest\nSydnieshire, WI 53628-4880", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] }
                                    messages: [{ id: 4537, ticket_id: 4439, sender_id: 14995, title: Miss, content: 'Saepe ut voluptate nihil consequatur repellat quam fugit.', is_read: false, created_at: '2025-01-08T10:15:46.000000Z', updated_at: '2025-01-08T10:15:46.000000Z', attachments: [{ id: 6577, ticket_id: 4439, ticket_message_id: 4537, type: json, title: 'Current config', attachment: '{"common":{"fingerStrength":[1,300],"gripPositions":{"_":0,"0":{"initial":[50,59,62,3,1],"limit":[95,59,64,47,23]},"1":{"initial":[32,15,3,56,20],"limit":[50,75,27,82,90]},"2":{"initial":[45,54,60,58,4],"limit":[79,92,65,67,58]},"3":{"initial":[32,72,14,89,81],"limit":[80,82,54,91,89]},"4":{"initial":[13,34,33,19,39],"limit":[95,70,89,37,63]},"5":{"initial":[83,60,2,13,38],"limit":[90,90,39,71,75]},"6":{"initial":[32,2,6,32,7],"limit":[71,63,94,86,34]},"7":{"initial":[59,62,20,13,9],"limit":[82,73,32,19,91]},"8":{"initial":[60,19,4,84,44],"limit":[84,37,82,85,75]},"9":{"initial":[22,5,91,18,3],"limit":[71,15,93,53,76]},"10":{"initial":[80,80,24,68,21],"limit":[80,92,24,73,40]},"11":{"initial":[30,14,71,20,15],"limit":[54,37,76,55,46]},"12":{"initial":[29,48,25,25,22],"limit":[92,77,33,67,78]},"13":{"initial":[32,80,77,9,89],"limit":[65,88,83,74,90]}},"inputSite":[1]},"modes":[{"id":14113,"name":"Dolor vel ut quia suscipit necessitatibus hic.","slot":0,"config":{"autoGrasp":[1,100],"coContractionTimings":[200,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[20,90,40,100,10,70,100,40,70,60],"gripPairsConfig":[6,8,10,9,12,11,13,4],"gripSequentialConfig":[5,13,10,11,8,12,255,3,4,6,255,255],"gripSwitchingMode":[2],"holdOpen":[2000,2000],"pulseTimings":[530,400,500,50],"softGrip":[1],"speedControlStrategy":[1]}},{"id":14114,"name":"Aut repellat distinctio optio.","slot":1,"config":{"autoGrasp":[1,100],"coContractionTimings":[500,300],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[30,50,30,60,30,50,100,0,100,40],"gripPairsConfig":[8,2,12,11,4,7,1,6],"gripSequentialConfig":[255,255,10,2,12,11,8,255,5,255,255,255],"gripSwitchingMode":[1],"holdOpen":[1500,2000],"pulseTimings":[720,950,970,410],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14115,"name":"Quia placeat non iste nobis est.","slot":2,"config":{"autoGrasp":[0,100],"coContractionTimings":[500,300],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[100,50,10,60,40,80,50,60,100,60],"gripPairsConfig":[7,10,8,4,12,11,2,1],"gripSequentialConfig":[255,13,12,11,255,1,2,255,255,10,3,6],"gripSwitchingMode":[3],"holdOpen":[2000,2500],"pulseTimings":[360,880,790,270],"softGrip":[1],"speedControlStrategy":[0]}}]}', created_at: '2025-01-08T10:15:46.000000Z', updated_at: '2025-01-08T10:15:46.000000Z' }, { id: 6578, ticket_id: 4439, ticket_message_id: 4537, type: json, title: 'New config', attachment: '{"common":{"fingerStrength":[1,500],"gripPositions":{"_":0,"0":{"initial":[24,78,33,28,38],"limit":[68,83,84,31,60]},"1":{"initial":[2,22,30,20,41],"limit":[69,57,36,66,90]},"2":{"initial":[20,78,14,73,20],"limit":[57,78,82,86,78]},"3":{"initial":[21,32,31,59,13],"limit":[38,80,39,66,71]},"4":{"initial":[6,84,38,67,47],"limit":[15,93,69,89,48]},"5":{"initial":[8,39,66,21,60],"limit":[49,89,84,31,81]},"6":{"initial":[2,60,21,59,21],"limit":[24,74,89,75,77]},"7":{"initial":[25,16,27,77,61],"limit":[51,51,33,94,78]},"8":{"initial":[23,82,36,27,83],"limit":[55,93,51,35,85]},"9":{"initial":[52,5,43,39,66],"limit":[91,59,91,48,95]},"10":{"initial":[24,37,11,23,45],"limit":[85,57,89,25,83]},"11":{"initial":[28,71,44,69,9],"limit":[89,79,56,78,12]},"12":{"initial":[41,2,4,33,20],"limit":[81,9,41,69,26]},"13":{"initial":[33,23,75,55,29],"limit":[40,61,81,90,70]}},"inputSite":[0]},"modes":[{"id":14116,"name":"Eos sapiente distinctio recusandae cumque expedita.","slot":0,"config":{"autoGrasp":[1,100],"coContractionTimings":[500,300],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[100,10,60,30,10,20,60,40,60,60],"gripPairsConfig":[13,7,12,3,5,6,10,9],"gripSequentialConfig":[255,255,2,255,255,5,11,255,255,9,255,3],"gripSwitchingMode":[3],"holdOpen":[2000,2000],"pulseTimings":[650,550,940,890],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14117,"name":"Excepturi ut sit placeat earum reiciendis.","slot":1,"config":{"autoGrasp":[1,100],"coContractionTimings":[400,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[60,40,60,80,90,70,30,40,100,0],"gripPairsConfig":[10,12,13,4,5,1,11,9],"gripSequentialConfig":[255,8,13,255,255,7,11,6,1,255,9,4],"gripSwitchingMode":[3],"holdOpen":[2000,2500],"pulseTimings":[120,860,790,320],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14118,"name":"Magni officiis modi nihil voluptas vitae ipsa pariatur eum.","slot":2,"config":{"autoGrasp":[1,0],"coContractionTimings":[500,300],"controlMode":[1],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[70,40,30,10,60,100,80,30,30,50],"gripPairsConfig":[3,4,9,7,6,8,2,1],"gripSequentialConfig":[255,255,6,13,8,10,2,255,255,7,4,255],"gripSwitchingMode":[3],"holdOpen":[2000,2000],"pulseTimings":[630,710,590,880],"softGrip":[0],"speedControlStrategy":[1]}}]}', created_at: '2025-01-08T10:15:46.000000Z', updated_at: '2025-01-08T10:15:46.000000Z' }], config_demo: null }]
                                properties:
                                    id: { type: integer, example: 4439 }
                                    sender_id: { type: integer, example: 14993 }
                                    recipient_id: { type: integer, example: 14994 }
                                    device_id: { type: integer, example: 5986 }
                                    meeting_date: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    meeting_type: { type: string, example: online_meeting }
                                    contact_email: { type: string, example: sgislason@bogisich.com }
                                    status: { type: string, example: new }
                                    created_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    sender: { type: object, example: { id: 14993, mrn: T6YD6NDR, name: 'Antonietta Murphy', email: 1736331345demetrius68@example.com, language: en, phone: '+19377403611', phone_country: KH, phone_verified_at: null, address1: '495 Heathcote Rapids', address2: 'West Rosariotown, MT 90526-1390', postal_code: '02097', city: 'Erdman, Gibson and Emard', clinic_name: 'New Wilford', clinic_location: "891 Orin Station Suite 876\nGenesishaven, AZ 13131", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] } }
                                    recipient: { type: object, example: { id: 14994, mrn: PHRK9KA3, name: 'Maye Lang V', email: 1736331345ella.bernier@example.net, language: en, phone: 1-660-721-2221, phone_country: PM, phone_verified_at: null, address1: '42749 Harmon View', address2: 'Port Shanon, MD 60613', postal_code: 31669-8453, city: 'Hill, D''Amore and Gorczany', clinic_name: 'North Jettieberg', clinic_location: "728 Rosalinda Crest\nSydnieshire, WI 53628-4880", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] } }
                                    messages: { type: array, example: [{ id: 4537, ticket_id: 4439, sender_id: 14995, title: Miss, content: 'Saepe ut voluptate nihil consequatur repellat quam fugit.', is_read: false, created_at: '2025-01-08T10:15:46.000000Z', updated_at: '2025-01-08T10:15:46.000000Z', attachments: [{ id: 6577, ticket_id: 4439, ticket_message_id: 4537, type: json, title: 'Current config', attachment: '{"common":{"fingerStrength":[1,300],"gripPositions":{"_":0,"0":{"initial":[50,59,62,3,1],"limit":[95,59,64,47,23]},"1":{"initial":[32,15,3,56,20],"limit":[50,75,27,82,90]},"2":{"initial":[45,54,60,58,4],"limit":[79,92,65,67,58]},"3":{"initial":[32,72,14,89,81],"limit":[80,82,54,91,89]},"4":{"initial":[13,34,33,19,39],"limit":[95,70,89,37,63]},"5":{"initial":[83,60,2,13,38],"limit":[90,90,39,71,75]},"6":{"initial":[32,2,6,32,7],"limit":[71,63,94,86,34]},"7":{"initial":[59,62,20,13,9],"limit":[82,73,32,19,91]},"8":{"initial":[60,19,4,84,44],"limit":[84,37,82,85,75]},"9":{"initial":[22,5,91,18,3],"limit":[71,15,93,53,76]},"10":{"initial":[80,80,24,68,21],"limit":[80,92,24,73,40]},"11":{"initial":[30,14,71,20,15],"limit":[54,37,76,55,46]},"12":{"initial":[29,48,25,25,22],"limit":[92,77,33,67,78]},"13":{"initial":[32,80,77,9,89],"limit":[65,88,83,74,90]}},"inputSite":[1]},"modes":[{"id":14113,"name":"Dolor vel ut quia suscipit necessitatibus hic.","slot":0,"config":{"autoGrasp":[1,100],"coContractionTimings":[200,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[20,90,40,100,10,70,100,40,70,60],"gripPairsConfig":[6,8,10,9,12,11,13,4],"gripSequentialConfig":[5,13,10,11,8,12,255,3,4,6,255,255],"gripSwitchingMode":[2],"holdOpen":[2000,2000],"pulseTimings":[530,400,500,50],"softGrip":[1],"speedControlStrategy":[1]}},{"id":14114,"name":"Aut repellat distinctio optio.","slot":1,"config":{"autoGrasp":[1,100],"coContractionTimings":[500,300],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[30,50,30,60,30,50,100,0,100,40],"gripPairsConfig":[8,2,12,11,4,7,1,6],"gripSequentialConfig":[255,255,10,2,12,11,8,255,5,255,255,255],"gripSwitchingMode":[1],"holdOpen":[1500,2000],"pulseTimings":[720,950,970,410],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14115,"name":"Quia placeat non iste nobis est.","slot":2,"config":{"autoGrasp":[0,100],"coContractionTimings":[500,300],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[100,50,10,60,40,80,50,60,100,60],"gripPairsConfig":[7,10,8,4,12,11,2,1],"gripSequentialConfig":[255,13,12,11,255,1,2,255,255,10,3,6],"gripSwitchingMode":[3],"holdOpen":[2000,2500],"pulseTimings":[360,880,790,270],"softGrip":[1],"speedControlStrategy":[0]}}]}', created_at: '2025-01-08T10:15:46.000000Z', updated_at: '2025-01-08T10:15:46.000000Z' }, { id: 6578, ticket_id: 4439, ticket_message_id: 4537, type: json, title: 'New config', attachment: '{"common":{"fingerStrength":[1,500],"gripPositions":{"_":0,"0":{"initial":[24,78,33,28,38],"limit":[68,83,84,31,60]},"1":{"initial":[2,22,30,20,41],"limit":[69,57,36,66,90]},"2":{"initial":[20,78,14,73,20],"limit":[57,78,82,86,78]},"3":{"initial":[21,32,31,59,13],"limit":[38,80,39,66,71]},"4":{"initial":[6,84,38,67,47],"limit":[15,93,69,89,48]},"5":{"initial":[8,39,66,21,60],"limit":[49,89,84,31,81]},"6":{"initial":[2,60,21,59,21],"limit":[24,74,89,75,77]},"7":{"initial":[25,16,27,77,61],"limit":[51,51,33,94,78]},"8":{"initial":[23,82,36,27,83],"limit":[55,93,51,35,85]},"9":{"initial":[52,5,43,39,66],"limit":[91,59,91,48,95]},"10":{"initial":[24,37,11,23,45],"limit":[85,57,89,25,83]},"11":{"initial":[28,71,44,69,9],"limit":[89,79,56,78,12]},"12":{"initial":[41,2,4,33,20],"limit":[81,9,41,69,26]},"13":{"initial":[33,23,75,55,29],"limit":[40,61,81,90,70]}},"inputSite":[0]},"modes":[{"id":14116,"name":"Eos sapiente distinctio recusandae cumque expedita.","slot":0,"config":{"autoGrasp":[1,100],"coContractionTimings":[500,300],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[100,10,60,30,10,20,60,40,60,60],"gripPairsConfig":[13,7,12,3,5,6,10,9],"gripSequentialConfig":[255,255,2,255,255,5,11,255,255,9,255,3],"gripSwitchingMode":[3],"holdOpen":[2000,2000],"pulseTimings":[650,550,940,890],"softGrip":[0],"speedControlStrategy":[1]}},{"id":14117,"name":"Excepturi ut sit placeat earum reiciendis.","slot":1,"config":{"autoGrasp":[1,100],"coContractionTimings":[400,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[60,40,60,80,90,70,30,40,100,0],"gripPairsConfig":[10,12,13,4,5,1,11,9],"gripSequentialConfig":[255,8,13,255,255,7,11,6,1,255,9,4],"gripSwitchingMode":[3],"holdOpen":[2000,2500],"pulseTimings":[120,860,790,320],"softGrip":[1],"speedControlStrategy":[0]}},{"id":14118,"name":"Magni officiis modi nihil voluptas vitae ipsa pariatur eum.","slot":2,"config":{"autoGrasp":[1,0],"coContractionTimings":[500,300],"controlMode":[1],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[70,40,30,10,60,100,80,30,30,50],"gripPairsConfig":[3,4,9,7,6,8,2,1],"gripSequentialConfig":[255,255,6,13,8,10,2,255,255,7,4,255],"gripSwitchingMode":[3],"holdOpen":[2000,2000],"pulseTimings":[630,710,590,880],"softGrip":[0],"speedControlStrategy":[1]}}]}', created_at: '2025-01-08T10:15:46.000000Z', updated_at: '2025-01-08T10:15:46.000000Z' }], config_demo: null }], items: { type: object } }
            tags:
                - 'Config Modes'
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
            -
                in: path
                name: modeId
                description: 'Config mode ID.'
                example: 1
                required: true
                schema:
                    type: integer
            -
                in: path
                name: templateId
                description: 'Config template ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/device/{deviceId}/config/{configId}/notes':
        get:
            summary: 'Get config entry notes list'
            description: ''
            parameters:
                -
                    in: query
                    name: user
                    description: 'Filter notes by user.'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Filter notes by user.'
                        example: 1
                -
                    in: query
                    name: type
                    description: 'Filter notes by type (available: <code>public</code> and <code>private</code>).'
                    example: fugit
                    required: false
                    schema:
                        type: string
                        description: 'Filter notes by type (available: <code>public</code> and <code>private</code>).'
                        example: fugit
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                    example: author
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                        example: author
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: query
                    name: sortby
                    description: 'Sort by field (available: <code>date</code>). Default: <code>date</code> (<code>desc</code>).'
                    example: date
                    required: false
                    schema:
                        type: string
                        description: 'Sort by field (available: <code>date</code>). Default: <code>date</code> (<code>desc</code>).'
                        example: date
                -
                    in: query
                    name: sortdir
                    description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                    example: asc
                    required: false
                    schema:
                        type: string
                        description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                        example: asc
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to access config notes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to access config notes' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 301, config_history_id: 4351, user_id: 14960, note: 'Repudiandae perspiciatis non necessitatibus facilis dicta illo.', type: public, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', author: { id: 14960, mrn: 5FCBD5K6, name: 'Prof. Austin Lehner V', email: 1736331342kling.cristobal@example.org, language: en, phone: '+12709793263', phone_country: TL, phone_verified_at: null, address1: '769 Dominique Mills Apt. 422', address2: 'East Iliana, HI 71713', postal_code: 08027-1366, city: 'Hane, Gusikowski and Brekke', clinic_name: Docktown, clinic_location: "970 Dooley Groves Suite 959\nLennyside, NC 64274-8956", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', invitation_status: null, roles: [] } }, { id: 302, config_history_id: 4352, user_id: 14962, note: 'Molestias eum quia eos ut.', type: public, created_at: '2025-01-08T10:15:43.000000Z', updated_at: '2025-01-08T10:15:43.000000Z', author: { id: 14962, mrn: 8IPSV2ZQ, name: 'Nannie Johnson', email: 1736331342oconner.kaela@example.com, language: en, phone: 781-742-4326, phone_country: TZ, phone_verified_at: null, address1: '3634 Okuneva Shore', address2: 'East Mallory, AZ 10376', postal_code: '31246', city: Kunze-Kub, clinic_name: 'East Marlonhaven', clinic_location: "56219 Kulas Falls\nPollichstad, AK 27935-5291", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:43.000000Z', updated_at: '2025-01-08T10:15:43.000000Z', invitation_status: null, roles: [] } }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 301, config_history_id: 4351, user_id: 14960, note: 'Repudiandae perspiciatis non necessitatibus facilis dicta illo.', type: public, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', author: { id: 14960, mrn: 5FCBD5K6, name: 'Prof. Austin Lehner V', email: 1736331342kling.cristobal@example.org, language: en, phone: '+12709793263', phone_country: TL, phone_verified_at: null, address1: '769 Dominique Mills Apt. 422', address2: 'East Iliana, HI 71713', postal_code: 08027-1366, city: 'Hane, Gusikowski and Brekke', clinic_name: Docktown, clinic_location: "970 Dooley Groves Suite 959\nLennyside, NC 64274-8956", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:42.000000Z', updated_at: '2025-01-08T10:15:42.000000Z', invitation_status: null, roles: [] } }, { id: 302, config_history_id: 4352, user_id: 14962, note: 'Molestias eum quia eos ut.', type: public, created_at: '2025-01-08T10:15:43.000000Z', updated_at: '2025-01-08T10:15:43.000000Z', author: { id: 14962, mrn: 8IPSV2ZQ, name: 'Nannie Johnson', email: 1736331342oconner.kaela@example.com, language: en, phone: 781-742-4326, phone_country: TZ, phone_verified_at: null, address1: '3634 Okuneva Shore', address2: 'East Mallory, AZ 10376', postal_code: '31246', city: Kunze-Kub, clinic_name: 'East Marlonhaven', clinic_location: "56219 Kulas Falls\nPollichstad, AK 27935-5291", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:43.000000Z', updated_at: '2025-01-08T10:15:43.000000Z', invitation_status: null, roles: [] } }], items: { type: object } }
            tags:
                - 'Config Notes'
        post:
            summary: 'Create config entry note'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to add config notes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to add config notes' }
                404:
                    description: '404, Config history entry not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config history entry not found'
                                properties:
                                    message: { type: string, example: 'Config history entry not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 304
                                    config_history_id: 4354
                                    user_id: 14966
                                    note: 'Mollitia sint ab vero quod voluptates sit rerum.'
                                    type: public
                                    created_at: '2025-01-08T10:15:43.000000Z'
                                    updated_at: '2025-01-08T10:15:43.000000Z'
                                properties:
                                    id: { type: integer, example: 304 }
                                    config_history_id: { type: integer, example: 4354 }
                                    user_id: { type: integer, example: 14966 }
                                    note: { type: string, example: 'Mollitia sint ab vero quod voluptates sit rerum.' }
                                    type: { type: string, example: public }
                                    created_at: { type: string, example: '2025-01-08T10:15:43.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:43.000000Z' }
            tags:
                - 'Config Notes'
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                note:
                                    type: string
                                    description: 'Note text.'
                                    example: 'Natus ut ratione rem impedit magni eos.'
                                type:
                                    type: string
                                    description: 'Type of the note. Default: public. The value must be one of <code>public</code> or <code>private</code>.'
                                    example: public
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
            -
                in: path
                name: configId
                description: 'Config history entry ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/device/{deviceId}/config/{configId}/notes/{noteId}':
        get:
            summary: 'Get config entry note'
            description: 'Returns single config history entry note in response.'
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                    example: author
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                        example: author
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to access config notes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to access config notes' }
                404:
                    description: '404, Config history note not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config history note not found'
                                properties:
                                    message: { type: string, example: 'Config history note not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 303
                                    config_history_id: 4353
                                    user_id: 14964
                                    note: 'Veniam ea distinctio necessitatibus quas corrupti et temporibus mollitia.'
                                    type: public
                                    created_at: '2025-01-08T10:15:43.000000Z'
                                    updated_at: '2025-01-08T10:15:43.000000Z'
                                    author: { id: 14964, mrn: K4JQ7D89, name: 'Myrna Kovacek', email: 1736331343heffertz@example.com, language: en, phone: +1.304.772.5979, phone_country: WF, phone_verified_at: null, address1: '6013 Bosco Mews Suite 646', address2: 'Karleeland, NM 48609-9715', postal_code: '43399', city: Stanton-Jast, clinic_name: Vickieshire, clinic_location: "6488 Swift Flats\nAdalinechester, MN 47883", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:43.000000Z', updated_at: '2025-01-08T10:15:43.000000Z', invitation_status: null, roles: [] }
                                properties:
                                    id: { type: integer, example: 303 }
                                    config_history_id: { type: integer, example: 4353 }
                                    user_id: { type: integer, example: 14964 }
                                    note: { type: string, example: 'Veniam ea distinctio necessitatibus quas corrupti et temporibus mollitia.' }
                                    type: { type: string, example: public }
                                    created_at: { type: string, example: '2025-01-08T10:15:43.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:43.000000Z' }
                                    author: { type: object, example: { id: 14964, mrn: K4JQ7D89, name: 'Myrna Kovacek', email: 1736331343heffertz@example.com, language: en, phone: +1.304.772.5979, phone_country: WF, phone_verified_at: null, address1: '6013 Bosco Mews Suite 646', address2: 'Karleeland, NM 48609-9715', postal_code: '43399', city: Stanton-Jast, clinic_name: Vickieshire, clinic_location: "6488 Swift Flats\nAdalinechester, MN 47883", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:43.000000Z', updated_at: '2025-01-08T10:15:43.000000Z', invitation_status: null, roles: [] } }
            tags:
                - 'Config Notes'
        delete:
            summary: 'Delete config note'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to delete config notes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to delete config notes' }
                404:
                    description: '404, Config history note not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config history note not found'
                                properties:
                                    message: { type: string, example: 'Config history note not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config history note deleted'
                                properties:
                                    message: { type: string, example: 'Config history note deleted' }
            tags:
                - 'Config Notes'
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
            -
                in: path
                name: configId
                description: 'Config history entry ID.'
                example: 1
                required: true
                schema:
                    type: integer
            -
                in: path
                name: noteId
                description: 'Device config entry note ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/versions/firmware/{firmwareId}/schema':
        get:
            summary: 'Get config schema'
            description: 'Returns list of config schema entries for given firmware version.'
            parameters:
                -
                    in: query
                    name: filter
                    description: 'Filter entries by type (available: <code>modes</code>, <code>modes</code>). By default all entries all returned.'
                    example: common
                    required: false
                    schema:
                        type: string
                        description: 'Filter entries by type (available: <code>modes</code>, <code>modes</code>). By default all entries all returned.'
                        example: common
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view config schema'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view config schema' }
                404:
                    description: '404, Firmware version not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Firmware version not found'
                                properties:
                                    message: { type: string, example: 'Firmware version not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 1288, firmware_id: 241, key: quasi, is_common: 1, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
                                    - { id: 1289, firmware_id: 243, key: non, is_common: 1, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
            tags:
                - 'Config Schema'
        post:
            summary: 'Add config schema'
            description: "Add one or many config schema entries. Each entry is one key in config.\nBody of this request is simple array of objects:\n<pre style=\"float: none\">\n[\n    {\"key\": \"key_name\", \"is_common\": 1},\n    {\"key\": \"another_name\", \"is_common\": 0},\n    ...\n]\n</pre>"
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage config schema'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage config schema' }
                404:
                    description: '404, Config schema entry not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config schema entry not found'
                                properties:
                                    message: { type: string, example: 'Config schema entry not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 1290, firmware_id: 245, key: magnam, is_common: 1, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
                                    - { id: 1291, firmware_id: 247, key: eum, is_common: 1, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
            tags:
                - 'Config Schema'
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                -
                                    type: string
                                    description: 'Config key.'
                                    example: gripsPosition.0.initial
                                -
                                    type: integer
                                    description: 'Information if the key belongs to common config (1) or to modes (0). Default: 1.'
                                    example: 1
        parameters:
            -
                in: path
                name: firmwareId
                description: 'Firmware version ID'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/versions/firmware/{firmwareId}/schema/{schemaId}':
        delete:
            summary: 'Delete config schema'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage config schema'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage config schema' }
                404:
                    description: '404, Firmware version not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Firmware version not found'
                                properties:
                                    message: { type: string, example: 'Firmware version not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config schema entry deleted'
                                properties:
                                    message: { type: string, example: 'Config schema entry deleted' }
            tags:
                - 'Config Schema'
        parameters:
            -
                in: path
                name: firmwareId
                description: 'Firmware version ID'
                example: 16
                required: true
                schema:
                    type: integer
            -
                in: path
                name: schemaId
                description: 'Config schema ID'
                example: 1
                required: true
                schema:
                    type: integer
    /api/config/templates:
        get:
            summary: 'Get config templates list'
            description: "Entries where author is present are private and owned by its author.<br />\nEntries where author is null should be considered as global templates prepared by Aether team."
            parameters:
                -
                    in: query
                    name: search
                    description: 'Filter config templates by name.'
                    example: sport
                    required: false
                    schema:
                        type: string
                        description: 'Filter config templates by name.'
                        example: sport
                -
                    in: query
                    name: author
                    description: '<strong>Super Admin only:</strong> Filter config templates by author.'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: '<strong>Super Admin only:</strong> Filter config templates by author.'
                        example: 1
                -
                    in: query
                    name: scope
                    description: "<strong>ClinicAdmin/Clinician/ClinicianSupport only:</strong> Filter config templates by scope.\nThe value must be one of:<br />\n - <code>me</code> (entries where current user is author),<br />\n - <code>global</code> (entries added by Aether)."
                    example: me
                    required: false
                    schema:
                        type: string
                        description: "<strong>ClinicAdmin/Clinician/ClinicianSupport only:</strong> Filter config templates by scope.\nThe value must be one of:<br />\n - <code>me</code> (entries where current user is author),<br />\n - <code>global</code> (entries added by Aether)."
                        example: me
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                    example: author
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                        example: author
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to list config templates'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to list config templates' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 284, name: 'Nostrum aut veniam magnam non.', description: 'Sit eligendi odio eos.', author_id: 14982, config: '{"autoGrasp":[0,0],"coContractionTimings":[100,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[20,40,40,30,20,60,30,0,10,90],"gripPairsConfig":[13,3,10,1,4,7,11,8],"gripSequentialConfig":[7,8,3,1,255,255,13,9,11,10,5,255],"gripSwitchingMode":[3],"holdOpen":[2000,2500],"pulseTimings":[580,670,170,570],"softGrip":[1],"speedControlStrategy":[0]}', created_at: '2025-01-08T10:15:44.000000Z', updated_at: '2025-01-08T10:15:44.000000Z', author: { id: 14982, mrn: PEOOVREM, name: 'Ms. Anabelle Rutherford II', email: 1736331344darby69@example.org, language: en, phone: '(325) 952-5328', phone_country: SB, phone_verified_at: null, address1: '4963 Monahan Walks Suite 775', address2: 'New Felicity, MD 93722', postal_code: 15823-4054, city: Marks-Schmitt, clinic_name: Rociochester, clinic_location: "926 Franecki Ridge Apt. 377\nFaychester, VT 90395-0282", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:44.000000Z', updated_at: '2025-01-08T10:15:44.000000Z', invitation_status: null, roles: [] } }, { id: 285, name: 'Neque ea repellat quia in dignissimos.', description: 'Quaerat quam doloribus alias laboriosam.', author_id: 14983, config: '{"autoGrasp":[0,100],"coContractionTimings":[500,300],"controlMode":[1],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[70,0,70,40,90,40,40,20,0,20],"gripPairsConfig":[3,13,10,2,12,11,7,9],"gripSequentialConfig":[255,255,3,11,255,2,13,255,10,255,5,6],"gripSwitchingMode":[2],"holdOpen":[1500,2000],"pulseTimings":[950,480,670,190],"softGrip":[0],"speedControlStrategy":[0]}', created_at: '2025-01-08T10:15:44.000000Z', updated_at: '2025-01-08T10:15:44.000000Z', author: { id: 14983, mrn: 7N3Y02NI, name: 'Elfrieda Satterfield DVM', email: 1736331344fae.jast@example.org, language: en, phone: 305-926-2137, phone_country: MU, phone_verified_at: null, address1: '5920 Hermann Turnpike', address2: 'Mayrafurt, HI 65570-8795', postal_code: 28122-5520, city: Weimann-Schmeler, clinic_name: 'West Wilmer', clinic_location: "94725 Deja Mountains\nFayville, UT 79521-3893", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:44.000000Z', updated_at: '2025-01-08T10:15:44.000000Z', invitation_status: null, roles: [] } }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 284, name: 'Nostrum aut veniam magnam non.', description: 'Sit eligendi odio eos.', author_id: 14982, config: '{"autoGrasp":[0,0],"coContractionTimings":[100,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[20,40,40,30,20,60,30,0,10,90],"gripPairsConfig":[13,3,10,1,4,7,11,8],"gripSequentialConfig":[7,8,3,1,255,255,13,9,11,10,5,255],"gripSwitchingMode":[3],"holdOpen":[2000,2500],"pulseTimings":[580,670,170,570],"softGrip":[1],"speedControlStrategy":[0]}', created_at: '2025-01-08T10:15:44.000000Z', updated_at: '2025-01-08T10:15:44.000000Z', author: { id: 14982, mrn: PEOOVREM, name: 'Ms. Anabelle Rutherford II', email: 1736331344darby69@example.org, language: en, phone: '(325) 952-5328', phone_country: SB, phone_verified_at: null, address1: '4963 Monahan Walks Suite 775', address2: 'New Felicity, MD 93722', postal_code: 15823-4054, city: Marks-Schmitt, clinic_name: Rociochester, clinic_location: "926 Franecki Ridge Apt. 377\nFaychester, VT 90395-0282", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:44.000000Z', updated_at: '2025-01-08T10:15:44.000000Z', invitation_status: null, roles: [] } }, { id: 285, name: 'Neque ea repellat quia in dignissimos.', description: 'Quaerat quam doloribus alias laboriosam.', author_id: 14983, config: '{"autoGrasp":[0,100],"coContractionTimings":[500,300],"controlMode":[1],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[70,0,70,40,90,40,40,20,0,20],"gripPairsConfig":[3,13,10,2,12,11,7,9],"gripSequentialConfig":[255,255,3,11,255,2,13,255,10,255,5,6],"gripSwitchingMode":[2],"holdOpen":[1500,2000],"pulseTimings":[950,480,670,190],"softGrip":[0],"speedControlStrategy":[0]}', created_at: '2025-01-08T10:15:44.000000Z', updated_at: '2025-01-08T10:15:44.000000Z', author: { id: 14983, mrn: 7N3Y02NI, name: 'Elfrieda Satterfield DVM', email: 1736331344fae.jast@example.org, language: en, phone: 305-926-2137, phone_country: MU, phone_verified_at: null, address1: '5920 Hermann Turnpike', address2: 'Mayrafurt, HI 65570-8795', postal_code: 28122-5520, city: Weimann-Schmeler, clinic_name: 'West Wilmer', clinic_location: "94725 Deja Mountains\nFayville, UT 79521-3893", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:44.000000Z', updated_at: '2025-01-08T10:15:44.000000Z', invitation_status: null, roles: [] } }], items: { type: object } }
            tags:
                - 'Config Templates'
        post:
            summary: 'Create new config template'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to create config template'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to create config template' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 287
                                    name: 'Sint laudantium recusandae fuga ipsam quis.'
                                    description: 'At ut quod distinctio ipsum ratione perspiciatis.'
                                    author_id: 14985
                                    config: '{"autoGrasp":[1,100],"coContractionTimings":[100,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[10,80,10,50,20,10,50,30,80,40],"gripPairsConfig":[4,12,8,9,11,6,1,2],"gripSequentialConfig":[255,9,6,7,5,2,13,255,255,10,255,3],"gripSwitchingMode":[2],"holdOpen":[2000,2500],"pulseTimings":[330,50,820,770],"softGrip":[0],"speedControlStrategy":[0]}'
                                    created_at: '2025-01-08T10:15:45.000000Z'
                                    updated_at: '2025-01-08T10:15:45.000000Z'
                                    author: { id: 14985, mrn: EES6ENW3, name: 'Amiya Medhurst', email: 1736331344estevan06@example.net, language: en, phone: '(209) 984-0800', phone_country: AZ, phone_verified_at: null, address1: '131 Odie Brooks Apt. 982', address2: 'Port Tyreeside, MO 19148', postal_code: 47228-5285, city: 'Marks Inc', clinic_name: Beierville, clinic_location: "19376 Powlowski Squares\nEast D'angelo, AL 94386-0183", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] }
                                properties:
                                    id: { type: integer, example: 287 }
                                    name: { type: string, example: 'Sint laudantium recusandae fuga ipsam quis.' }
                                    description: { type: string, example: 'At ut quod distinctio ipsum ratione perspiciatis.' }
                                    author_id: { type: integer, example: 14985 }
                                    config: { type: string, example: '{"autoGrasp":[1,100],"coContractionTimings":[100,100],"controlMode":[0],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[10,80,10,50,20,10,50,30,80,40],"gripPairsConfig":[4,12,8,9,11,6,1,2],"gripSequentialConfig":[255,9,6,7,5,2,13,255,255,10,255,3],"gripSwitchingMode":[2],"holdOpen":[2000,2500],"pulseTimings":[330,50,820,770],"softGrip":[0],"speedControlStrategy":[0]}' }
                                    created_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    author: { type: object, example: { id: 14985, mrn: EES6ENW3, name: 'Amiya Medhurst', email: 1736331344estevan06@example.net, language: en, phone: '(209) 984-0800', phone_country: AZ, phone_verified_at: null, address1: '131 Odie Brooks Apt. 982', address2: 'Port Tyreeside, MO 19148', postal_code: 47228-5285, city: 'Marks Inc', clinic_name: Beierville, clinic_location: "19376 Powlowski Squares\nEast D'angelo, AL 94386-0183", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] } }
            tags:
                - 'Config Templates'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of the config template.'
                                    example: 'Default config for Aether Zeus'
                                description:
                                    type: string
                                    description: 'Description of the config template.'
                                    example: 'Description of the config template.'
                                owner:
                                    type: string
                                    description: 'Mark config template owned by clinician or company. Default: <code>me</code> (clinician). The value must be one of <code>me</code> or <code>company</code>.'
                                    example: company
                                author:
                                    type: string
                                    description: '<strong>Super Admin only:</strong> User ID to be the author of template.'
                                    example: 1
                                config:
                                    type: string
                                    description: 'Full config. The value must be a valid JSON string.'
                                    example: '{"param_1": [100, 200], "param_2": [100, 200, 300]}'
                            required:
                                - name
                                - config
    '/api/config/templates/{id}':
        get:
            summary: 'Get config template'
            description: ''
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                    example: author
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                        example: author
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view config template'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view config template' }
                404:
                    description: '404, Config template not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config template not found'
                                properties:
                                    message: { type: string, example: 'Config template not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 286
                                    name: 'Voluptate eligendi dolorem ipsam nobis dolor odit.'
                                    description: 'Odit eos et aut occaecati suscipit dignissimos.'
                                    author_id: 14984
                                    config: '{"autoGrasp":[0,0],"coContractionTimings":[200,200],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[30,70,70,10,100,10,50,80,100,30],"gripPairsConfig":[13,5,3,1,9,12,6,8],"gripSequentialConfig":[12,2,5,7,3,13,9,6,11,255,10,255],"gripSwitchingMode":[2],"holdOpen":[2000,2500],"pulseTimings":[440,660,830,410],"softGrip":[0],"speedControlStrategy":[0]}'
                                    created_at: '2025-01-08T10:15:44.000000Z'
                                    updated_at: '2025-01-08T10:15:44.000000Z'
                                    author: { id: 14984, mrn: NL7BV1Z9, name: 'Dayna Halvorson', email: 1736331344willie.gibson@example.com, language: en, phone: 925.808.2328, phone_country: LB, phone_verified_at: null, address1: '26771 Aniyah Junction', address2: 'Alejandraton, SD 67591', postal_code: 99694-2954, city: 'Simonis Inc', clinic_name: 'South Margieburgh', clinic_location: "871 Nicolette Throughway\nWest Xanderborough, MA 13353", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:44.000000Z', updated_at: '2025-01-08T10:15:44.000000Z', invitation_status: null, roles: [] }
                                properties:
                                    id: { type: integer, example: 286 }
                                    name: { type: string, example: 'Voluptate eligendi dolorem ipsam nobis dolor odit.' }
                                    description: { type: string, example: 'Odit eos et aut occaecati suscipit dignissimos.' }
                                    author_id: { type: integer, example: 14984 }
                                    config: { type: string, example: '{"autoGrasp":[0,0],"coContractionTimings":[200,200],"controlMode":[0],"emgGains":[100,100],"emgSpike":[0,300],"emgThresholds":[30,70,70,10,100,10,50,80,100,30],"gripPairsConfig":[13,5,3,1,9,12,6,8],"gripSequentialConfig":[12,2,5,7,3,13,9,6,11,255,10,255],"gripSwitchingMode":[2],"holdOpen":[2000,2500],"pulseTimings":[440,660,830,410],"softGrip":[0],"speedControlStrategy":[0]}' }
                                    created_at: { type: string, example: '2025-01-08T10:15:44.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:44.000000Z' }
                                    author: { type: object, example: { id: 14984, mrn: NL7BV1Z9, name: 'Dayna Halvorson', email: 1736331344willie.gibson@example.com, language: en, phone: 925.808.2328, phone_country: LB, phone_verified_at: null, address1: '26771 Aniyah Junction', address2: 'Alejandraton, SD 67591', postal_code: 99694-2954, city: 'Simonis Inc', clinic_name: 'South Margieburgh', clinic_location: "871 Nicolette Throughway\nWest Xanderborough, MA 13353", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:44.000000Z', updated_at: '2025-01-08T10:15:44.000000Z', invitation_status: null, roles: [] } }
            tags:
                - 'Config Templates'
        put:
            summary: 'Update config template'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update config template'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update config template' }
                404:
                    description: '404, Config template not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config template not found'
                                properties:
                                    message: { type: string, example: 'Config template not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 288
                                    name: 'Et dolorem mollitia at eaque corrupti saepe sequi.'
                                    description: 'Eum cum commodi recusandae.'
                                    author_id: 14986
                                    config: '{"autoGrasp":[1,100],"coContractionTimings":[500,400],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[100,20,60,60,40,20,70,80,0,90],"gripPairsConfig":[13,6,5,9,8,3,7,4],"gripSequentialConfig":[255,3,255,2,4,255,7,255,11,9,255,13],"gripSwitchingMode":[1],"holdOpen":[1500,2500],"pulseTimings":[280,160,980,140],"softGrip":[1],"speedControlStrategy":[0]}'
                                    created_at: '2025-01-08T10:15:45.000000Z'
                                    updated_at: '2025-01-08T10:15:45.000000Z'
                                    author: { id: 14986, mrn: TC2GM4CQ, name: 'Prof. Carolyne Kassulke V', email: 1736331345spurdy@example.org, language: en, phone: +1-615-889-9050, phone_country: MS, phone_verified_at: null, address1: '32934 Avis Gateway Apt. 017', address2: 'South Brooks, GA 47677-6301', postal_code: '77937', city: Mosciski-Kuvalis, clinic_name: 'North Zander', clinic_location: "4208 Darby Islands\nAlifurt, OH 29281", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] }
                                properties:
                                    id: { type: integer, example: 288 }
                                    name: { type: string, example: 'Et dolorem mollitia at eaque corrupti saepe sequi.' }
                                    description: { type: string, example: 'Eum cum commodi recusandae.' }
                                    author_id: { type: integer, example: 14986 }
                                    config: { type: string, example: '{"autoGrasp":[1,100],"coContractionTimings":[500,400],"controlMode":[1],"emgGains":[100,100],"emgSpike":[1,300],"emgThresholds":[100,20,60,60,40,20,70,80,0,90],"gripPairsConfig":[13,6,5,9,8,3,7,4],"gripSequentialConfig":[255,3,255,2,4,255,7,255,11,9,255,13],"gripSwitchingMode":[1],"holdOpen":[1500,2500],"pulseTimings":[280,160,980,140],"softGrip":[1],"speedControlStrategy":[0]}' }
                                    created_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    author: { type: object, example: { id: 14986, mrn: TC2GM4CQ, name: 'Prof. Carolyne Kassulke V', email: 1736331345spurdy@example.org, language: en, phone: +1-615-889-9050, phone_country: MS, phone_verified_at: null, address1: '32934 Avis Gateway Apt. 017', address2: 'South Brooks, GA 47677-6301', postal_code: '77937', city: Mosciski-Kuvalis, clinic_name: 'North Zander', clinic_location: "4208 Darby Islands\nAlifurt, OH 29281", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] } }
            tags:
                - 'Config Templates'
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of the config template.'
                                    example: 'Default config for Aether Zeus'
                                description:
                                    type: string
                                    description: 'Description of the config template.'
                                    example: 'Description of the config template.'
                                owner:
                                    type: string
                                    description: 'Mark config template owned by clinician or company. Default: <code>me</code> (clinician). The value must be one of <code>me</code> or <code>company</code>.'
                                    example: company
                                author:
                                    type: string
                                    description: '<strong>Super Admin only:</strong> User ID to be the author of template.'
                                    example: 1
                                config:
                                    type: string
                                    description: 'Full config. The value must be a valid JSON string.'
                                    example: '{"param_1": [100, 200], "param_2": [100, 200, 300]}'
        delete:
            summary: 'Delete config template'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Config template has existing modes'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config template has existing modes'
                                properties:
                                    message: { type: string, example: 'Config template has existing modes' }
                404:
                    description: '404, Config template not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config template not found'
                                properties:
                                    message: { type: string, example: 'Config template not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config template deleted'
                                properties:
                                    message: { type: string, example: 'Config template deleted' }
            tags:
                - 'Config Templates'
        parameters:
            -
                in: path
                name: id
                description: 'Config template ID.'
                example: 3
                required: true
                schema:
                    type: integer
    '/api/config/templates/{id}/notes':
        get:
            summary: 'Get config templates notes list'
            description: ''
            parameters:
                -
                    in: query
                    name: user
                    description: 'Filter notes by user.'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Filter notes by user.'
                        example: 1
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                    example: author
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                        example: author
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: query
                    name: sortby
                    description: 'Sort by field (available: <code>date</code>). Default: <code>date</code> (<code>desc</code>).'
                    example: date
                    required: false
                    schema:
                        type: string
                        description: 'Sort by field (available: <code>date</code>). Default: <code>date</code> (<code>desc</code>).'
                        example: date
                -
                    in: query
                    name: sortdir
                    description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                    example: asc
                    required: false
                    schema:
                        type: string
                        description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                        example: asc
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to access config templates notes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to access config templates notes' }
                404:
                    description: '404, Config template not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config template not found'
                                properties:
                                    message: { type: string, example: 'Config template not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 129, template_id: 289, user_id: 14987, note: 'Suscipit similique dignissimos commodi vero sed occaecati.', created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', author: { id: 14987, mrn: NGE765FJ, name: 'Desiree Sauer', email: 1736331345dangelo.kassulke@example.org, language: en, phone: '+14753973916', phone_country: LS, phone_verified_at: null, address1: '6031 O''Keefe Village', address2: 'Goodwinbury, NV 20689-2685', postal_code: 17605-0190, city: 'O''Kon-Hartmann', clinic_name: 'South Margareteside', clinic_location: "678 Bernier Trail\nLake Eladiochester, MA 86118-2377", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] } }, { id: 130, template_id: 290, user_id: 14988, note: 'Blanditiis odio ea explicabo quis minus sapiente.', created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', author: { id: 14988, mrn: YJHZJ3E3, name: 'Braeden Harber', email: 1736331345rosa.boyer@example.com, language: en, phone: 1-352-737-1207, phone_country: SR, phone_verified_at: null, address1: '792 Hobart Club', address2: 'Port Preston, AZ 42169-9108', postal_code: '73946', city: Watsica-Corwin, clinic_name: 'West Rafaelaville', clinic_location: "62397 Schiller Brooks Suite 771\nNew Brandt, RI 54482-8133", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] } }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 129, template_id: 289, user_id: 14987, note: 'Suscipit similique dignissimos commodi vero sed occaecati.', created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', author: { id: 14987, mrn: NGE765FJ, name: 'Desiree Sauer', email: 1736331345dangelo.kassulke@example.org, language: en, phone: '+14753973916', phone_country: LS, phone_verified_at: null, address1: '6031 O''Keefe Village', address2: 'Goodwinbury, NV 20689-2685', postal_code: 17605-0190, city: 'O''Kon-Hartmann', clinic_name: 'South Margareteside', clinic_location: "678 Bernier Trail\nLake Eladiochester, MA 86118-2377", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] } }, { id: 130, template_id: 290, user_id: 14988, note: 'Blanditiis odio ea explicabo quis minus sapiente.', created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', author: { id: 14988, mrn: YJHZJ3E3, name: 'Braeden Harber', email: 1736331345rosa.boyer@example.com, language: en, phone: 1-352-737-1207, phone_country: SR, phone_verified_at: null, address1: '792 Hobart Club', address2: 'Port Preston, AZ 42169-9108', postal_code: '73946', city: Watsica-Corwin, clinic_name: 'West Rafaelaville', clinic_location: "62397 Schiller Brooks Suite 771\nNew Brandt, RI 54482-8133", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] } }], items: { type: object } }
            tags:
                - 'Config Templates Notes'
        post:
            summary: 'Create new config template note'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to access config templates notes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to access config templates notes' }
                404:
                    description: '404, Config template not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config template not found'
                                properties:
                                    message: { type: string, example: 'Config template not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 132
                                    template_id: 292
                                    user_id: 14990
                                    note: 'Unde quo assumenda nisi rerum laboriosam eius itaque esse.'
                                    created_at: '2025-01-08T10:15:45.000000Z'
                                    updated_at: '2025-01-08T10:15:45.000000Z'
                                properties:
                                    id: { type: integer, example: 132 }
                                    template_id: { type: integer, example: 292 }
                                    user_id: { type: integer, example: 14990 }
                                    note: { type: string, example: 'Unde quo assumenda nisi rerum laboriosam eius itaque esse.' }
                                    created_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
            tags:
                - 'Config Templates Notes'
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                note:
                                    type: string
                                    description: 'Note text.'
                                    example: 'Neque ipsum consequatur distinctio sit quisquam eius officiis cupiditate.'
        parameters:
            -
                in: path
                name: id
                description: 'Config template ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/config/templates/{id}/notes/{noteId}':
        get:
            summary: 'Get config template note'
            description: 'Returns single config template note in response.'
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                    example: author
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>author</code>).'
                        example: author
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to access config templates notes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to access config templates notes' }
                404:
                    description: '404, Config template note not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config template note not found'
                                properties:
                                    message: { type: string, example: 'Config template note not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 131
                                    template_id: 291
                                    user_id: 14989
                                    note: 'Delectus dicta voluptatum amet similique asperiores incidunt dolorum.'
                                    created_at: '2025-01-08T10:15:45.000000Z'
                                    updated_at: '2025-01-08T10:15:45.000000Z'
                                    author: { id: 14989, mrn: 7P6YLXWP, name: 'Lisandro Stracke', email: 1736331345althea69@example.net, language: en, phone: +1-574-975-5517, phone_country: TR, phone_verified_at: null, address1: '27421 Davion Wells Suite 137', address2: 'Goldnerhaven, OR 68733-5033', postal_code: '38665', city: 'Cole PLC', clinic_name: Steuberchester, clinic_location: "84877 O'Conner Isle\nLavonstad, TX 91606", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] }
                                properties:
                                    id: { type: integer, example: 131 }
                                    template_id: { type: integer, example: 291 }
                                    user_id: { type: integer, example: 14989 }
                                    note: { type: string, example: 'Delectus dicta voluptatum amet similique asperiores incidunt dolorum.' }
                                    created_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:45.000000Z' }
                                    author: { type: object, example: { id: 14989, mrn: 7P6YLXWP, name: 'Lisandro Stracke', email: 1736331345althea69@example.net, language: en, phone: +1-574-975-5517, phone_country: TR, phone_verified_at: null, address1: '27421 Davion Wells Suite 137', address2: 'Goldnerhaven, OR 68733-5033', postal_code: '38665', city: 'Cole PLC', clinic_name: Steuberchester, clinic_location: "84877 O'Conner Isle\nLavonstad, TX 91606", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:45.000000Z', updated_at: '2025-01-08T10:15:45.000000Z', invitation_status: null, roles: [] } }
            tags:
                - 'Config Templates Notes'
        delete:
            summary: 'Delete config template note'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to delete config templates notes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to delete config templates notes' }
                404:
                    description: '404, Config template note not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config template note not found'
                                properties:
                                    message: { type: string, example: 'Config template note not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Config template note deleted'
                                properties:
                                    message: { type: string, example: 'Config template note deleted' }
            tags:
                - 'Config Templates Notes'
        parameters:
            -
                in: path
                name: id
                description: 'Config template ID.'
                example: 1
                required: true
                schema:
                    type: integer
            -
                in: path
                name: noteId
                description: 'Config template note ID.'
                example: 1
                required: true
                schema:
                    type: integer
    /api/custom-grips-templates:
        get:
            summary: 'List custom grips templates'
            description: ''
            parameters:
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage custom grips templates'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage custom grips templates' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 2, user_id: 15085, name: bednar.jonathan, initial_position: '[50, 50, 50, 50, 50]', limit_position: '[900, 900, 900, 900, 900]', active_fingers: '[0, 1, 1, 1, 1]', created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }, { id: 3, user_id: 15086, name: heathcote.terrence, initial_position: '[50, 50, 50, 50, 50]', limit_position: '[900, 900, 900, 900, 900]', active_fingers: '[0, 1, 1, 1, 1]', created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 2, user_id: 15085, name: bednar.jonathan, initial_position: '[50, 50, 50, 50, 50]', limit_position: '[900, 900, 900, 900, 900]', active_fingers: '[0, 1, 1, 1, 1]', created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }, { id: 3, user_id: 15086, name: heathcote.terrence, initial_position: '[50, 50, 50, 50, 50]', limit_position: '[900, 900, 900, 900, 900]', active_fingers: '[0, 1, 1, 1, 1]', created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }], items: { type: object } }
            tags:
                - 'Custom Grips'
        post:
            summary: 'Create custom grip template'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Custom grip template name in use'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Custom grip template name already in use'
                                properties:
                                    message: { type: string, example: 'Custom grip template name already in use' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4
                                    user_id: 15087
                                    name: paxton32
                                    initial_position: '[50, 50, 50, 50, 50]'
                                    limit_position: '[900, 900, 900, 900, 900]'
                                    active_fingers: '[0, 1, 1, 1, 1]'
                                    created_at: '2025-01-08T10:15:54.000000Z'
                                    updated_at: '2025-01-08T10:15:54.000000Z'
                                properties:
                                    id: { type: integer, example: 4 }
                                    user_id: { type: integer, example: 15087 }
                                    name: { type: string, example: paxton32 }
                                    initial_position: { type: string, example: '[50, 50, 50, 50, 50]' }
                                    limit_position: { type: string, example: '[900, 900, 900, 900, 900]' }
                                    active_fingers: { type: string, example: '[0, 1, 1, 1, 1]' }
                                    created_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
            tags:
                - 'Custom Grips'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of custom grip template.'
                                    example: 'Custom Grip Template 1'
                                initial_position:
                                    type: string
                                    description: 'Grip initial position. Value should be a string containing the array of values. Example: <code>"[50, 50, 50, 50, 50]"</code>.'
                                    example: '[50, 50, 50, 50, 50]'
                                limit_position:
                                    type: string
                                    description: 'Grip limit position. Value should be a string containing the array of values. Example: <code>"[900, 900, 900, 900, 900]"</code>.'
                                    example: '[900, 900, 900, 900, 900]'
                                active_fingers:
                                    type: string
                                    description: 'Grip active fingers. Value should be a string containing the array of values. Example: <code>"[0, 1, 1, 1, 1]"</code>.'
                                    example: '[0, 1, 1, 1, 1]'
                            required:
                                - name
                                - initial_position
                                - limit_position
                                - active_fingers
    '/api/custom-grips-templates/{id}':
        delete:
            summary: 'Delete custom grip template'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, Custom grip template not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Custom grip template not found'
                                properties:
                                    message: { type: string, example: 'Custom grip template not found' }
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage custom grips templates'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage custom grips templates' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Custom grip deleted'
                                properties:
                                    message: { type: string, example: 'Custom grip deleted' }
            tags:
                - 'Custom Grips'
        parameters:
            -
                in: path
                name: id
                description: 'Custom Grip Template ID'
                example: 17
                required: true
                schema:
                    type: integer
    '/api/device/{deviceId}/custom-grips':
        get:
            summary: 'List custom grips'
            description: ''
            parameters:
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view custom grips'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view custom grips' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 16, device_id: 6019, name: zvon, opposed: 1, grip_number: 7, created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }, { id: 17, device_id: 6020, name: alexandro.kuphal, opposed: 1, grip_number: 0, created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 16, device_id: 6019, name: zvon, opposed: 1, grip_number: 7, created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }, { id: 17, device_id: 6020, name: alexandro.kuphal, opposed: 1, grip_number: 0, created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }], items: { type: object } }
            tags:
                - 'Custom Grips'
        post:
            summary: 'Create custom grip'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                403:
                    description: '403, Custom grip name in use'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Custom grip name already in use'
                                properties:
                                    message: { type: string, example: 'Custom grip name already in use' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 18
                                    device_id: 6021
                                    name: cummerata.terence
                                    opposed: 1
                                    grip_number: 8
                                    created_at: '2025-01-08T10:15:54.000000Z'
                                    updated_at: '2025-01-08T10:15:54.000000Z'
                                properties:
                                    id: { type: integer, example: 18 }
                                    device_id: { type: integer, example: 6021 }
                                    name: { type: string, example: cummerata.terence }
                                    opposed: { type: integer, example: 1 }
                                    grip_number: { type: integer, example: 8 }
                                    created_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
            tags:
                - 'Custom Grips'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of custom grip.'
                                    example: 'Custom Grip 1'
                                opposed:
                                    type: integer
                                    description: 'Grip opposed status. The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
                                grip_number:
                                    type: integer
                                    description: 'Grip number (not ID).'
                                    example: 1
                            required:
                                - name
                                - opposed
                                - grip_number
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID'
                example: 7
                required: true
                schema:
                    type: integer
    '/api/device/{deviceId}/custom-grips/{gripId}':
        put:
            summary: 'Update custom grip'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, Custom grip not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Custom grip not found'
                                properties:
                                    message: { type: string, example: 'Custom grip not found' }
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage custom grips'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage custom grips' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 19
                                    device_id: 6022
                                    name: arlo17
                                    opposed: 1
                                    grip_number: 14
                                    created_at: '2025-01-08T10:15:54.000000Z'
                                    updated_at: '2025-01-08T10:15:54.000000Z'
                                properties:
                                    id: { type: integer, example: 19 }
                                    device_id: { type: integer, example: 6022 }
                                    name: { type: string, example: arlo17 }
                                    opposed: { type: integer, example: 1 }
                                    grip_number: { type: integer, example: 14 }
                                    created_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
            tags:
                - 'Custom Grips'
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of custom grip.'
                                    example: 'Custom Grip 1'
                                opposed:
                                    type: integer
                                    description: 'Grip opposed status. The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
                                grip_number:
                                    type: integer
                                    description: 'Grip number (not ID).'
                                    example: 1
        delete:
            summary: 'Delete custom grip'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, Custom grip not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Custom grip not found'
                                properties:
                                    message: { type: string, example: 'Custom grip not found' }
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage custom grips'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage custom grips' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Custom grip template deleted'
                                properties:
                                    message: { type: string, example: 'Custom grip template deleted' }
            tags:
                - 'Custom Grips'
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID'
                example: 3
                required: true
                schema:
                    type: integer
            -
                in: path
                name: gripId
                description: 'Custom Grip ID'
                example: 3
                required: true
                schema:
                    type: integer
    /api/devices/models:
        get:
            summary: 'Get device models list'
            description: ''
            parameters:
                -
                    in: query
                    name: active
                    description: 'Filter device models by active status (available: 0 - only inactive, 1 - only active, any - all users). Default: 1.'
                    example: any
                    required: false
                    schema:
                        type: string
                        description: 'Filter device models by active status (available: 0 - only inactive, 1 - only active, any - all users). Default: 1.'
                        example: any
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to list device models'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to list device models' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 190, name: 'Zeus hand v1', type: arm, orientation: left, active: 1, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z' }
                                    - { id: 191, name: 'Zeus hand v1', type: leg, orientation: right, active: 1, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z' }
            tags:
                - 'Device Models'
        post:
            summary: 'Create device model'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to create device model'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to create device model' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 192
                                    name: 'Zeus hand v1'
                                    type: arm
                                    orientation: right
                                    active: 1
                                    created_at: '2025-01-08T10:15:39.000000Z'
                                    updated_at: '2025-01-08T10:15:39.000000Z'
                                properties:
                                    id: { type: integer, example: 192 }
                                    name: { type: string, example: 'Zeus hand v1' }
                                    type: { type: string, example: arm }
                                    orientation: { type: string, example: right }
                                    active: { type: integer, example: 1 }
                                    created_at: { type: string, example: '2025-01-08T10:15:39.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:39.000000Z' }
            tags:
                - 'Device Models'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Model name.'
                                    example: 'Zeus hand v1'
                                type:
                                    type: string
                                    description: 'Model type (e.g. hand).'
                                    example: hand
                                orientation:
                                    type: string
                                    description: 'Model orientation if specified.'
                                    example: right
                                active:
                                    type: boolean
                                    description: 'Device model active status (0 - inactive, 1 - active).'
                                    example: true
                            required:
                                - name
    '/api/devices/models/{id}':
        put:
            summary: 'Update device model'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update device model'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update device model' }
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device model not found'
                                properties:
                                    message: { type: string, example: 'Device model not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 193
                                    name: 'Zeus hand v1'
                                    type: leg
                                    orientation: left
                                    active: 1
                                    created_at: '2025-01-08T10:15:39.000000Z'
                                    updated_at: '2025-01-08T10:15:39.000000Z'
                                properties:
                                    id: { type: integer, example: 193 }
                                    name: { type: string, example: 'Zeus hand v1' }
                                    type: { type: string, example: leg }
                                    orientation: { type: string, example: left }
                                    active: { type: integer, example: 1 }
                                    created_at: { type: string, example: '2025-01-08T10:15:39.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:39.000000Z' }
            tags:
                - 'Device Models'
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Model name.'
                                    example: 'Zeus hand v1'
                                type:
                                    type: string
                                    description: 'Model type (e.g. hand).'
                                    example: hand
                                orientation:
                                    type: string
                                    description: 'Model orientation if specified.'
                                    example: right
                                active:
                                    type: boolean
                                    description: 'Device model active status (0 - inactive, 1 - active).'
                                    example: true
        parameters:
            -
                in: path
                name: id
                description: 'DeviceModel ID'
                example: 17
                required: true
                schema:
                    type: integer
    '/api/device/check/{serial}':
        get:
            summary: 'Check serial number or bluetooth ID'
            description: "Public endpoint responding with status of given device serial number or bluetooth ID.\nIf any of these numbers can be found in database, status will be true.\nOtherwise, status will be false (device does not exist)."
            parameters:
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    status: true
                                properties:
                                    status: { type: boolean, example: true }
            tags:
                - Devices
            security: []
        parameters:
            -
                in: path
                name: serial
                description: 'Device serial number or bluetooth ID'
                example: error
                required: true
                schema:
                    type: string
    /api/devices:
        get:
            summary: 'Get devices list'
            description: "Possible extend options:\n<ul>\n    <li>model - device model details</li>\n    <li>amputee - end-user assigned to device</li>\n    <li>clinicians - list of clinicians assigned to the device</li>\n    <li>firmwareVersion - device firmware version</li>\n    <li>pcbVersion - PCB version</li>\n</ul>"
            parameters:
                -
                    in: query
                    name: search
                    description: 'Filter devices by searching in: serial number, bluetooth ID.'
                    example: S3R1AL-NUM83R
                    required: false
                    schema:
                        type: string
                        description: 'Filter devices by searching in: serial number, bluetooth ID.'
                        example: S3R1AL-NUM83R
                -
                    in: query
                    name: active
                    description: 'Filter devices by active status (available: 0 - only inactive, 1 - only active, -1 - all users). Default: 1.'
                    example: any
                    required: false
                    schema:
                        type: string
                        description: 'Filter devices by active status (available: 0 - only inactive, 1 - only active, -1 - all users). Default: 1.'
                        example: any
                -
                    in: query
                    name: amputee
                    description: "Filter devices by amputees.\nProvide single ID (<code>amputee=1</code>), array of IDs (<code>amputee[]=1&amputee[]=2</code>) or comma-separated list of IDs (<code>amputee=1,2</code>).\nPass value 0 to get devices unassigned to any amputee."
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: "Filter devices by amputees.\nProvide single ID (<code>amputee=1</code>), array of IDs (<code>amputee[]=1&amputee[]=2</code>) or comma-separated list of IDs (<code>amputee=1,2</code>).\nPass value 0 to get devices unassigned to any amputee."
                        example: 1
                -
                    in: query
                    name: model
                    description: "Filter devices by device models.\nProvide single ID (<code>model=1</code>), array of IDs (<code>model[]=1&model[]=2</code>) or comma-separated list of IDs (<code>model=1,2</code>).\nPass value 0 to get devices without model."
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: "Filter devices by device models.\nProvide single ID (<code>model=1</code>), array of IDs (<code>model[]=1&model[]=2</code>) or comma-separated list of IDs (<code>model=1,2</code>).\nPass value 0 to get devices without model."
                        example: 1
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>model</code>, <code> amputee</code>, <code> clinicians</code>, <code> firmwareVersion</code>, <code> pcbVersion</code>, <code> config</code>).'
                    example: 'model, amputee, clinicians, firmwareVersion, pcbVersion, config'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>model</code>, <code> amputee</code>, <code> clinicians</code>, <code> firmwareVersion</code>, <code> pcbVersion</code>, <code> config</code>).'
                        example: 'model, amputee, clinicians, firmwareVersion, pcbVersion, config'
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: query
                    name: sortby
                    description: 'Sort by field (available: <code>serial</code>, <code> amputee_name</code>, <code> date</code>). Default: <code>date</code> (<code>desc</code>).'
                    example: 'serial, amputee_name, date'
                    required: false
                    schema:
                        type: string
                        description: 'Sort by field (available: <code>serial</code>, <code> amputee_name</code>, <code> date</code>). Default: <code>date</code> (<code>desc</code>).'
                        example: 'serial, amputee_name, date'
                -
                    in: query
                    name: sortdir
                    description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                    example: asc
                    required: false
                    schema:
                        type: string
                        description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                        example: asc
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to list devices'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to list devices' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 5892, serial: b9eeec70-83f9-3401-9048-d8870f602a58, bluetooth_id: 66dc6ed7-9a8a-3ecd-b071-162ac893188d, model_id: 194, amputee_id: 14928, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', model: { id: 194, name: 'Zeus hand v1', type: leg, orientation: right, active: 1, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z' }, amputee: { id: 14928, mrn: A9WT3DME, name: 'Rosalinda Ruecker', email: 1736331339klind@example.org, language: en, phone: 201-636-0314, phone_country: PK, phone_verified_at: null, address1: '74998 Devin Branch Apt. 070', address2: 'Tyrellburgh, WY 11381-9301', postal_code: 51113-3499, city: 'Wunsch, Hammes and Monahan', clinic_name: Toyland, clinic_location: "1315 Jany Light Apt. 198\nGarnettfurt, OH 18759", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', invitation_status: null, roles: [] } }, { id: 5893, serial: cf1c0251-a650-302c-a2e6-7125e9c9406c, bluetooth_id: ac6140ae-8fc3-3afe-bac3-2547df424f7f, model_id: 195, amputee_id: 14929, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z', model: { id: 195, name: 'Zeus hand v1', type: leg, orientation: left, active: 1, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z' }, amputee: { id: 14929, mrn: MQQQJU59, name: 'Prof. Ferne Champlin', email: 1736331339dschneider@example.com, language: en, phone: +1.270.473.9254, phone_country: VU, phone_verified_at: null, address1: '42965 Owen Freeway', address2: 'Paucekshire, LA 42548-2847', postal_code: '93518', city: 'Rogahn, Schulist and Schroeder', clinic_name: Dwightburgh, clinic_location: "82835 Kessler Curve Apt. 682\nGerholdport, CA 53043", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z', invitation_status: null, roles: [] } }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 5892, serial: b9eeec70-83f9-3401-9048-d8870f602a58, bluetooth_id: 66dc6ed7-9a8a-3ecd-b071-162ac893188d, model_id: 194, amputee_id: 14928, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', model: { id: 194, name: 'Zeus hand v1', type: leg, orientation: right, active: 1, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z' }, amputee: { id: 14928, mrn: A9WT3DME, name: 'Rosalinda Ruecker', email: 1736331339klind@example.org, language: en, phone: 201-636-0314, phone_country: PK, phone_verified_at: null, address1: '74998 Devin Branch Apt. 070', address2: 'Tyrellburgh, WY 11381-9301', postal_code: 51113-3499, city: 'Wunsch, Hammes and Monahan', clinic_name: Toyland, clinic_location: "1315 Jany Light Apt. 198\nGarnettfurt, OH 18759", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', invitation_status: null, roles: [] } }, { id: 5893, serial: cf1c0251-a650-302c-a2e6-7125e9c9406c, bluetooth_id: ac6140ae-8fc3-3afe-bac3-2547df424f7f, model_id: 195, amputee_id: 14929, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z', model: { id: 195, name: 'Zeus hand v1', type: leg, orientation: left, active: 1, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z' }, amputee: { id: 14929, mrn: MQQQJU59, name: 'Prof. Ferne Champlin', email: 1736331339dschneider@example.com, language: en, phone: +1.270.473.9254, phone_country: VU, phone_verified_at: null, address1: '42965 Owen Freeway', address2: 'Paucekshire, LA 42548-2847', postal_code: '93518', city: 'Rogahn, Schulist and Schroeder', clinic_name: Dwightburgh, clinic_location: "82835 Kessler Curve Apt. 682\nGerholdport, CA 53043", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z', invitation_status: null, roles: [] } }], items: { type: object } }
            tags:
                - Devices
    '/api/device/{id}':
        get:
            summary: 'Get device information'
            description: ''
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>model</code>, <code> amputee</code>, <code> firmwareVersion</code>, <code> pcbVersion</code>, <code> clinicians</code>).'
                    example: 'model, amputee, firmwareVersion, pcbVersion, clinicians'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>model</code>, <code> amputee</code>, <code> firmwareVersion</code>, <code> pcbVersion</code>, <code> clinicians</code>).'
                        example: 'model, amputee, firmwareVersion, pcbVersion, clinicians'
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view device data'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view device data' }
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 5894
                                    serial: e45da17a-2f5a-39ef-9154-ce623f6777e8
                                    bluetooth_id: b2b5a61d-ef53-3a44-a5c2-463e28a6ac63
                                    model_id: 196
                                    amputee_id: 14930
                                    firmware_version_id: 235
                                    pcb_version_id: 138
                                    active: 1
                                    last_activity_at: '0000-00-00 00:00:00'
                                    created_at: '2025-01-08T10:15:40.000000Z'
                                    updated_at: '2025-01-08T10:15:40.000000Z'
                                    model: { id: 196, name: 'Zeus hand v1', type: leg, orientation: right, active: 1, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z' }
                                    amputee: { id: 14930, mrn: F8T7T7RJ, name: 'Dameon McLaughlin', email: 1736331340hschamberger@example.org, language: en, phone: 716.934.9666, phone_country: CG, phone_verified_at: null, address1: '42779 Darius Common', address2: 'Carolineport, WY 85538-2048', postal_code: 44958-3670, city: Luettgen-Satterfield, clinic_name: Quincystad, clinic_location: "7260 Leffler Coves\nWymanborough, VA 78778-1670", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z', invitation_status: null, roles: [] }
                                    pcb_version: { id: 138, name: 1.63.40, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z' }
                                properties:
                                    id: { type: integer, example: 5894 }
                                    serial: { type: string, example: e45da17a-2f5a-39ef-9154-ce623f6777e8 }
                                    bluetooth_id: { type: string, example: b2b5a61d-ef53-3a44-a5c2-463e28a6ac63 }
                                    model_id: { type: integer, example: 196 }
                                    amputee_id: { type: integer, example: 14930 }
                                    firmware_version_id: { type: integer, example: 235 }
                                    pcb_version_id: { type: integer, example: 138 }
                                    active: { type: integer, example: 1 }
                                    last_activity_at: { type: string, example: '0000-00-00 00:00:00' }
                                    created_at: { type: string, example: '2025-01-08T10:15:40.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:40.000000Z' }
                                    model: { type: object, example: { id: 196, name: 'Zeus hand v1', type: leg, orientation: right, active: 1, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z' } }
                                    amputee: { type: object, example: { id: 14930, mrn: F8T7T7RJ, name: 'Dameon McLaughlin', email: 1736331340hschamberger@example.org, language: en, phone: 716.934.9666, phone_country: CG, phone_verified_at: null, address1: '42779 Darius Common', address2: 'Carolineport, WY 85538-2048', postal_code: 44958-3670, city: Luettgen-Satterfield, clinic_name: Quincystad, clinic_location: "7260 Leffler Coves\nWymanborough, VA 78778-1670", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z', invitation_status: null, roles: [] } }
                                    pcb_version: { type: object, example: { id: 138, name: 1.63.40, created_at: '2025-01-08T10:15:40.000000Z', updated_at: '2025-01-08T10:15:40.000000Z' } }
            tags:
                - Devices
        put:
            summary: 'Update device'
            description: "Amputee of device can update only these fields:\n<code>serial</code>, <code>bluetooth_id</code>,\n<code>firmware_version_id</code>, <code>pcb_version_id</code>"
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Firmware has no schema'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot update: firmware has no schema'
                                    code: 'DEVICE:UPDATE:INVALID_FIRMWARE_SCHEMA'
                                properties:
                                    message: { type: string, example: 'Cannot update: firmware has no schema' }
                                    code: { type: string, example: 'DEVICE:UPDATE:INVALID_FIRMWARE_SCHEMA' }
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 5896
                                    serial: 22dac2eb-bd0b-3397-8f13-74a788ee440d
                                    bluetooth_id: a8a67666-42b7-3b68-a3e0-f9fcd595f7bc
                                    model_id: null
                                    amputee_id: null
                                    firmware_version_id: null
                                    pcb_version_id: null
                                    active: 1
                                    last_activity_at: '0000-00-00 00:00:00'
                                    created_at: '2025-01-08T10:15:40.000000Z'
                                    updated_at: '2025-01-08T10:15:40.000000Z'
                                properties:
                                    id: { type: integer, example: 5896 }
                                    serial: { type: string, example: 22dac2eb-bd0b-3397-8f13-74a788ee440d }
                                    bluetooth_id: { type: string, example: a8a67666-42b7-3b68-a3e0-f9fcd595f7bc }
                                    model_id: { type: string, example: null }
                                    amputee_id: { type: string, example: null }
                                    firmware_version_id: { type: string, example: null }
                                    pcb_version_id: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    last_activity_at: { type: string, example: '0000-00-00 00:00:00' }
                                    created_at: { type: string, example: '2025-01-08T10:15:40.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:40.000000Z' }
            tags:
                - Devices
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                serial:
                                    type: string
                                    description: 'Device serial number.'
                                    example: S3R1AL-NUM83R
                                bluetooth_id:
                                    type: string
                                    description: 'Device Bluetooth ID.'
                                    example: BL0123456789
                                model_id:
                                    type: string
                                    description: 'Device Model ID.'
                                    example: 1
                                amputee_id:
                                    type: string
                                    description: 'Device amputee ID. Pass <code>null</code> to remove assignment.'
                                    example: 1
                                clinicians:
                                    type: array
                                    description: 'Array of clinician IDs.'
                                    example: quisquam
                                firmware_version_id:
                                    type: string
                                    description: 'Firmware Version ID.'
                                    example: 1
                                pcb_version_id:
                                    type: string
                                    description: 'PCB Version ID.'
                                    example: 1
                                active:
                                    type: boolean
                                    description: 'Device active status (0 - inactive, 1 - active).'
                                    example: true
                                last_activity_at:
                                    type: string
                                    description: 'Device last activity date. Update this value each time device connects to the mobile app. Always shift local datetime to UTC timezone. The value must be a valid date in the format Y-m-d H:i:s.'
                                    example: '2022-08-15 12:00:00'
        delete:
            summary: 'Delete device'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to delete device'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to delete device' }
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device deleted'
                                properties:
                                    message: { type: string, example: 'Device deleted' }
            tags:
                - Devices
        parameters:
            -
                in: path
                name: id
                description: 'Device ID'
                example: 15
                required: true
                schema:
                    type: integer
    /api/device:
        post:
            summary: 'Create new device'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Firmware has no schema'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot create: firmware has no schema'
                                properties:
                                    message: { type: string, example: 'Cannot create: firmware has no schema' }
                500:
                    description: '500, Server error'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Server error: device not created'
                                properties:
                                    message: { type: string, example: 'Server error: device not created' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 5895
                                    serial: 2be99ae1-d79a-3818-a858-8f9481f0bb1b
                                    bluetooth_id: 4bb14cbe-ca01-38c9-a4e5-db6046348526
                                    model_id: null
                                    amputee_id: null
                                    firmware_version_id: null
                                    pcb_version_id: null
                                    active: 1
                                    last_activity_at: '0000-00-00 00:00:00'
                                    created_at: '2025-01-08T10:15:40.000000Z'
                                    updated_at: '2025-01-08T10:15:40.000000Z'
                                properties:
                                    id: { type: integer, example: 5895 }
                                    serial: { type: string, example: 2be99ae1-d79a-3818-a858-8f9481f0bb1b }
                                    bluetooth_id: { type: string, example: 4bb14cbe-ca01-38c9-a4e5-db6046348526 }
                                    model_id: { type: string, example: null }
                                    amputee_id: { type: string, example: null }
                                    firmware_version_id: { type: string, example: null }
                                    pcb_version_id: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    last_activity_at: { type: string, example: '0000-00-00 00:00:00' }
                                    created_at: { type: string, example: '2025-01-08T10:15:40.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:40.000000Z' }
            tags:
                - Devices
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                serial:
                                    type: string
                                    description: 'Device serial number.'
                                    example: S3R1AL-NUM83R
                                bluetooth_id:
                                    type: string
                                    description: 'Device Bluetooth ID.'
                                    example: BL0123456789
                                model_id:
                                    type: string
                                    description: 'Device Model ID.'
                                    example: 1
                                amputee_id:
                                    type: string
                                    description: 'Device amputee ID.'
                                    example: 1
                                clinicians:
                                    type: array
                                    description: 'Array of clinician IDs.'
                                    example: pariatur
                                firmware_version_id:
                                    type: string
                                    description: 'Firmware Version ID.'
                                    example: 1
                                pcb_version_id:
                                    type: string
                                    description: 'PCB Version ID.'
                                    example: 1
                                active:
                                    type: boolean
                                    description: 'Device active status (0 - inactive, 1 - active).'
                                    example: true
                                last_activity_at:
                                    type: string
                                    description: 'Device last activity date. Update this value each time device connects to the mobile app. Always shift local datetime to UTC timezone. The value must be a valid date in the format Y-m-d H:i:s.'
                                    example: '2022-08-15 12:00:00'
                            required:
                                - serial
                                - bluetooth_id
                                - model_id
    '/api/device/{id}/hash':
        get:
            summary: 'Get device hashes'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to access device hashes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to access device hashes' }
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    hash_global: '123456789012345'
                                    hash_common_settings: '123456789012345'
                                    hash_common_grips: '123456789012345'
                                    hash_mode1: '123456789012345'
                                    hash_mode2: '123456789012345'
                                    hash_mode3: '123456789012345'
                                properties:
                                    hash_global: { type: string, example: '123456789012345' }
                                    hash_common_settings: { type: string, example: '123456789012345' }
                                    hash_common_grips: { type: string, example: '123456789012345' }
                                    hash_mode1: { type: string, example: '123456789012345' }
                                    hash_mode2: { type: string, example: '123456789012345' }
                                    hash_mode3: { type: string, example: '123456789012345' }
            tags:
                - Devices
        post:
            summary: 'Update device hashes'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to access device hashes'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to access device hashes' }
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    hash_global: '123456789012345'
                                    hash_common_settings: '123456789012345'
                                    hash_common_grips: '123456789012345'
                                    hash_mode1: '123456789012345'
                                    hash_mode2: '123456789012345'
                                    hash_mode3: '123456789012345'
                                properties:
                                    hash_global: { type: string, example: '123456789012345' }
                                    hash_common_settings: { type: string, example: '123456789012345' }
                                    hash_common_grips: { type: string, example: '123456789012345' }
                                    hash_mode1: { type: string, example: '123456789012345' }
                                    hash_mode2: { type: string, example: '123456789012345' }
                                    hash_mode3: { type: string, example: '123456789012345' }
            tags:
                - Devices
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                hash_global:
                                    type: string
                                    description: 'Global hash.'
                                    example: '123456789012345'
                                hash_common_settings:
                                    type: string
                                    description: 'Common settings hash.'
                                    example: '123456789012345'
                                hash_common_grips:
                                    type: string
                                    description: 'Common grips hash.'
                                    example: '123456789012345'
                                hash_mode1:
                                    type: string
                                    description: 'Mode 1 hash.'
                                    example: '123456789012345'
                                hash_mode2:
                                    type: string
                                    description: 'Mode 2 hash.'
                                    example: '123456789012345'
                                hash_mode3:
                                    type: string
                                    description: 'Mode 3 hash.'
                                    example: '123456789012345'
        parameters:
            -
                in: path
                name: id
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/device/{id}/detach':
        post:
            summary: 'Detach device'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Device has patient assigned'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device has patient assigned'
                                properties:
                                    message: { type: string, example: 'Device has patient assigned' }
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device detached'
                                properties:
                                    message: { type: string, example: 'Device detached' }
            tags:
                - Devices
        parameters:
            -
                in: path
                name: id
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/device/add/{serial}':
        post:
            summary: 'Add device'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to assign devices with code'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to assign devices with code' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 5897
                                    serial: e06507ae-5604-3e09-90d9-db216c331bf3
                                    bluetooth_id: cb4565d0-c6f6-3bb7-879a-958c12a159c5
                                    model_id: null
                                    amputee_id: null
                                    firmware_version_id: null
                                    pcb_version_id: null
                                    active: 1
                                    last_activity_at: '0000-00-00 00:00:00'
                                    created_at: '2025-01-08T10:15:40.000000Z'
                                    updated_at: '2025-01-08T10:15:40.000000Z'
                                properties:
                                    id: { type: integer, example: 5897 }
                                    serial: { type: string, example: e06507ae-5604-3e09-90d9-db216c331bf3 }
                                    bluetooth_id: { type: string, example: cb4565d0-c6f6-3bb7-879a-958c12a159c5 }
                                    model_id: { type: string, example: null }
                                    amputee_id: { type: string, example: null }
                                    firmware_version_id: { type: string, example: null }
                                    pcb_version_id: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    last_activity_at: { type: string, example: '0000-00-00 00:00:00' }
                                    created_at: { type: string, example: '2025-01-08T10:15:40.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:40.000000Z' }
            tags:
                - Devices
        parameters:
            -
                in: path
                name: serial
                description: 'Device serial number or bluetooth ID.'
                example: S3R1AL-NUM83R
                required: true
                schema:
                    type: string
    /api/documents:
        get:
            summary: 'List documents'
            description: ''
            parameters:
                -
                    in: query
                    name: type
                    description: 'Filter documents by type.'
                    example: 0
                    required: false
                    schema:
                        type: integer
                        description: 'Filter documents by type.'
                        example: 0
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 5, name: Roustabouts, type: mobile, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }, { id: 6, name: Auditor, type: mobile, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 5, name: Roustabouts, type: mobile, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }, { id: 6, name: Auditor, type: mobile, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }], items: { type: object } }
            tags:
                - Documents
        post:
            summary: 'Create document'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage documents'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage documents' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 7
                                    name: 'Mail Machine Operator'
                                    type: web
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 7 }
                                    name: { type: string, example: 'Mail Machine Operator' }
                                    type: { type: string, example: web }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Documents
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Document name.'
                                    example: 'Privacy Policy'
                                type:
                                    type: string
                                    description: 'Document destination. The value must be one of <code>web</code> or <code>mobile</code>.'
                                    example: web
                            required:
                                - name
                                - type
    '/api/documents/{documentId}':
        delete:
            summary: 'Delete document'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Document has existing versions'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot delete: document has existing versions (1)'
                                properties:
                                    message: { type: string, example: 'Cannot delete: document has existing versions (1)' }
                404:
                    description: '404, Document not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Document not found'
                                properties:
                                    message: { type: string, example: 'Document not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Document deleted'
                                properties:
                                    message: { type: string, example: 'Document deleted' }
            tags:
                - Documents
        parameters:
            -
                in: path
                name: documentId
                description: 'Document ID'
                example: 13
                required: true
                schema:
                    type: integer
    '/api/documents/{documentId}/versions':
        get:
            summary: 'List document versions'
            description: ''
            parameters:
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, Document not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Document not found'
                                properties:
                                    message: { type: string, example: 'Document not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 7, document_id: null, index: 7604, file: 'https://moen.com/ab-quod-animi-quae-ea-vel-est-mollitia.html', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
                                    - { id: 8, document_id: null, index: 60960186, file: 'http://treutel.net/velit-rem-cupiditate-quaerat-repellendus.html', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Documents
        post:
            summary: 'Create document version'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage documents'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage documents' }
                404:
                    description: '404, Document not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Document not found'
                                properties:
                                    message: { type: string, example: 'Document not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 9
                                    document_id: null
                                    index: 131606738
                                    file: 'https://www.okon.org/reiciendis-quibusdam-beatae-modi-quisquam-eius'
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 9 }
                                    document_id: { type: string, example: null }
                                    index: { type: integer, example: 131606738 }
                                    file: { type: string, example: 'https://www.okon.org/reiciendis-quibusdam-beatae-modi-quisquam-eius' }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Documents
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                file:
                                    type: string
                                    description: 'URL to document file. The value must be a valid URL.'
                                    example: 'https://www.aetherbiomedical.com/privacy-policy'
                            required:
                                - file
        parameters:
            -
                in: path
                name: documentId
                description: 'Document ID'
                example: 17
                required: true
                schema:
                    type: integer
    '/api/documents/{documentId}/versions/{versionId}':
        delete:
            summary: 'Delete document version'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage documents'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage documents' }
                404:
                    description: '404, Document version not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Document version not found'
                                properties:
                                    message: { type: string, example: 'Document version not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Document version deleted'
                                properties:
                                    message: { type: string, example: 'Document version deleted' }
            tags:
                - Documents
        parameters:
            -
                in: path
                name: documentId
                description: 'Document ID'
                example: 3
                required: true
                schema:
                    type: integer
            -
                in: path
                name: versionId
                description: 'DocumentVersion ID'
                example: 19
                required: true
                schema:
                    type: integer
    /api/documents/status:
        get:
            summary: 'Get documents status'
            description: "Any document on the list has to be accepted. Use <a href=\"#accept-documents\">POST /documents/accept</a> endpoint to mark them as accepted once user agrees to that.\nEmpty list means that user is up-to-date with all required documents and nothing has to be accepted."
            parameters:
                -
                    in: query
                    name: type
                    description: 'Filter documents by type. The value must be one of <code>web</code> or <code>mobile</code>.'
                    example: web
                    required: false
                    schema:
                        type: string
                        description: 'Filter documents by type. The value must be one of <code>web</code> or <code>mobile</code>.'
                        example: web
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view documents status'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view documents status' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    documents: []
                                    texts: { title: 'Changes to the Privacy Policy', description: 'Due to the addition of a new data processing entity, please familiarize yourself with and accept the new privacy policy', checkbox: 'I declare that I have read the content of the Privacy Policy and the Terms and Conditions and accept their provisions. I understand that acceptance is a condition for using the application.' }
                                properties:
                                    documents: { type: array, example: [] }
                                    texts: { type: object, example: { title: 'Changes to the Privacy Policy', description: 'Due to the addition of a new data processing entity, please familiarize yourself with and accept the new privacy policy', checkbox: 'I declare that I have read the content of the Privacy Policy and the Terms and Conditions and accept their provisions. I understand that acceptance is a condition for using the application.' } }
            tags:
                - Documents
    /api/documents/accept:
        post:
            summary: 'Accept documents'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update documents status'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update documents status' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Accepted 1 document(s)'
                                properties:
                                    message: { type: string, example: 'Accepted 1 document(s)' }
            tags:
                - Documents
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                documents:
                                    type: array
                                    description: 'Document Version ID.'
                                    example: [1, 18]
                                    items: { type: integer }
                            required:
                                - documents
    /slack:
        post:
            summary: ''
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses: {  }
            tags:
                - Endpoints
    /api/timezones:
        get:
            summary: 'Get supported timezones list'
            description: ''
            parameters:
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: string
                                example:
                                    - Africa/Abidjan
                                    - Africa/Accra
                                    - Africa/Addis_Ababa
                                    - Africa/Algiers
                                    - Africa/Asmara
                                    - Africa/Bamako
                                    - Africa/Bangui
                                    - Africa/Banjul
                                    - Africa/Bissau
                                    - Africa/Blantyre
                                    - Africa/Brazzaville
                                    - Africa/Bujumbura
                                    - Africa/Cairo
                                    - Africa/Casablanca
                                    - Africa/Ceuta
                                    - Africa/Conakry
                                    - Africa/Dakar
                                    - Africa/Dar_es_Salaam
                                    - Africa/Djibouti
                                    - Africa/Douala
                                    - Africa/El_Aaiun
                                    - Africa/Freetown
                                    - Africa/Gaborone
                                    - Africa/Harare
                                    - Africa/Johannesburg
                                    - Africa/Juba
                                    - Africa/Kampala
                                    - Africa/Khartoum
                                    - Africa/Kigali
                                    - Africa/Kinshasa
                                    - Africa/Lagos
                                    - Africa/Libreville
                                    - Africa/Lome
                                    - Africa/Luanda
                                    - Africa/Lubumbashi
                                    - Africa/Lusaka
                                    - Africa/Malabo
                                    - Africa/Maputo
                                    - Africa/Maseru
                                    - Africa/Mbabane
                                    - Africa/Mogadishu
                                    - Africa/Monrovia
                                    - Africa/Nairobi
                                    - Africa/Ndjamena
                                    - Africa/Niamey
                                    - Africa/Nouakchott
                                    - Africa/Ouagadougou
                                    - Africa/Porto-Novo
                                    - Africa/Sao_Tome
                                    - Africa/Tripoli
                                    - Africa/Tunis
                                    - Africa/Windhoek
                                    - America/Adak
                                    - America/Anchorage
                                    - America/Anguilla
                                    - America/Antigua
                                    - America/Araguaina
                                    - America/Argentina/Buenos_Aires
                                    - America/Argentina/Catamarca
                                    - America/Argentina/Cordoba
                                    - America/Argentina/Jujuy
                                    - America/Argentina/La_Rioja
                                    - America/Argentina/Mendoza
                                    - America/Argentina/Rio_Gallegos
                                    - America/Argentina/Salta
                                    - America/Argentina/San_Juan
                                    - America/Argentina/San_Luis
                                    - America/Argentina/Tucuman
                                    - America/Argentina/Ushuaia
                                    - America/Aruba
                                    - America/Asuncion
                                    - America/Atikokan
                                    - America/Bahia
                                    - America/Bahia_Banderas
                                    - America/Barbados
                                    - America/Belem
                                    - America/Belize
                                    - America/Blanc-Sablon
                                    - America/Boa_Vista
                                    - America/Bogota
                                    - America/Boise
                                    - America/Cambridge_Bay
                                    - America/Campo_Grande
                                    - America/Cancun
                                    - America/Caracas
                                    - America/Cayenne
                                    - America/Cayman
                                    - America/Chicago
                                    - America/Chihuahua
                                    - America/Costa_Rica
                                    - America/Creston
                                    - America/Cuiaba
                                    - America/Curacao
                                    - America/Danmarkshavn
                                    - America/Dawson
                                    - America/Dawson_Creek
                                    - America/Denver
                                    - America/Detroit
                                    - America/Dominica
                                    - America/Edmonton
                                    - America/Eirunepe
                                    - America/El_Salvador
                                    - America/Fort_Nelson
                                    - America/Fortaleza
                                    - America/Glace_Bay
                                    - America/Goose_Bay
                                    - America/Grand_Turk
                                    - America/Grenada
                                    - America/Guadeloupe
                                    - America/Guatemala
                                    - America/Guayaquil
                                    - America/Guyana
                                    - America/Halifax
                                    - America/Havana
                                    - America/Hermosillo
                                    - America/Indiana/Indianapolis
                                    - America/Indiana/Knox
                                    - America/Indiana/Marengo
                                    - America/Indiana/Petersburg
                                    - America/Indiana/Tell_City
                                    - America/Indiana/Vevay
                                    - America/Indiana/Vincennes
                                    - America/Indiana/Winamac
                                    - America/Inuvik
                                    - America/Iqaluit
                                    - America/Jamaica
                                    - America/Juneau
                                    - America/Kentucky/Louisville
                                    - America/Kentucky/Monticello
                                    - America/Kralendijk
                                    - America/La_Paz
                                    - America/Lima
                                    - America/Los_Angeles
                                    - America/Lower_Princes
                                    - America/Maceio
                                    - America/Managua
                                    - America/Manaus
                                    - America/Marigot
                                    - America/Martinique
                                    - America/Matamoros
                                    - America/Mazatlan
                                    - America/Menominee
                                    - America/Merida
                                    - America/Metlakatla
                                    - America/Mexico_City
                                    - America/Miquelon
                                    - America/Moncton
                                    - America/Monterrey
                                    - America/Montevideo
                                    - America/Montserrat
                                    - America/Nassau
                                    - America/New_York
                                    - America/Nipigon
                                    - America/Nome
                                    - America/Noronha
                                    - America/North_Dakota/Beulah
                                    - America/North_Dakota/Center
                                    - America/North_Dakota/New_Salem
                                    - America/Nuuk
                                    - America/Ojinaga
                                    - America/Panama
                                    - America/Pangnirtung
                                    - America/Paramaribo
                                    - America/Phoenix
                                    - America/Port-au-Prince
                                    - America/Port_of_Spain
                                    - America/Porto_Velho
                                    - America/Puerto_Rico
                                    - America/Punta_Arenas
                                    - America/Rainy_River
                                    - America/Rankin_Inlet
                                    - America/Recife
                                    - America/Regina
                                    - America/Resolute
                                    - America/Rio_Branco
                                    - America/Santarem
                                    - America/Santiago
                                    - America/Santo_Domingo
                                    - America/Sao_Paulo
                                    - America/Scoresbysund
                                    - America/Sitka
                                    - America/St_Barthelemy
                                    - America/St_Johns
                                    - America/St_Kitts
                                    - America/St_Lucia
                                    - America/St_Thomas
                                    - America/St_Vincent
                                    - America/Swift_Current
                                    - America/Tegucigalpa
                                    - America/Thule
                                    - America/Thunder_Bay
                                    - America/Tijuana
                                    - America/Toronto
                                    - America/Tortola
                                    - America/Vancouver
                                    - America/Whitehorse
                                    - America/Winnipeg
                                    - America/Yakutat
                                    - America/Yellowknife
                                    - Antarctica/Casey
                                    - Antarctica/Davis
                                    - Antarctica/DumontDUrville
                                    - Antarctica/Macquarie
                                    - Antarctica/Mawson
                                    - Antarctica/McMurdo
                                    - Antarctica/Palmer
                                    - Antarctica/Rothera
                                    - Antarctica/Syowa
                                    - Antarctica/Troll
                                    - Antarctica/Vostok
                                    - Arctic/Longyearbyen
                                    - Asia/Aden
                                    - Asia/Almaty
                                    - Asia/Amman
                                    - Asia/Anadyr
                                    - Asia/Aqtau
                                    - Asia/Aqtobe
                                    - Asia/Ashgabat
                                    - Asia/Atyrau
                                    - Asia/Baghdad
                                    - Asia/Bahrain
                                    - Asia/Baku
                                    - Asia/Bangkok
                                    - Asia/Barnaul
                                    - Asia/Beirut
                                    - Asia/Bishkek
                                    - Asia/Brunei
                                    - Asia/Chita
                                    - Asia/Choibalsan
                                    - Asia/Colombo
                                    - Asia/Damascus
                                    - Asia/Dhaka
                                    - Asia/Dili
                                    - Asia/Dubai
                                    - Asia/Dushanbe
                                    - Asia/Famagusta
                                    - Asia/Gaza
                                    - Asia/Hebron
                                    - Asia/Ho_Chi_Minh
                                    - Asia/Hong_Kong
                                    - Asia/Hovd
                                    - Asia/Irkutsk
                                    - Asia/Jakarta
                                    - Asia/Jayapura
                                    - Asia/Jerusalem
                                    - Asia/Kabul
                                    - Asia/Kamchatka
                                    - Asia/Karachi
                                    - Asia/Kathmandu
                                    - Asia/Khandyga
                                    - Asia/Kolkata
                                    - Asia/Krasnoyarsk
                                    - Asia/Kuala_Lumpur
                                    - Asia/Kuching
                                    - Asia/Kuwait
                                    - Asia/Macau
                                    - Asia/Magadan
                                    - Asia/Makassar
                                    - Asia/Manila
                                    - Asia/Muscat
                                    - Asia/Nicosia
                                    - Asia/Novokuznetsk
                                    - Asia/Novosibirsk
                                    - Asia/Omsk
                                    - Asia/Oral
                                    - Asia/Phnom_Penh
                                    - Asia/Pontianak
                                    - Asia/Pyongyang
                                    - Asia/Qatar
                                    - Asia/Qostanay
                                    - Asia/Qyzylorda
                                    - Asia/Riyadh
                                    - Asia/Sakhalin
                                    - Asia/Samarkand
                                    - Asia/Seoul
                                    - Asia/Shanghai
                                    - Asia/Singapore
                                    - Asia/Srednekolymsk
                                    - Asia/Taipei
                                    - Asia/Tashkent
                                    - Asia/Tbilisi
                                    - Asia/Tehran
                                    - Asia/Thimphu
                                    - Asia/Tokyo
                                    - Asia/Tomsk
                                    - Asia/Ulaanbaatar
                                    - Asia/Urumqi
                                    - Asia/Ust-Nera
                                    - Asia/Vientiane
                                    - Asia/Vladivostok
                                    - Asia/Yakutsk
                                    - Asia/Yangon
                                    - Asia/Yekaterinburg
                                    - Asia/Yerevan
                                    - Atlantic/Azores
                                    - Atlantic/Bermuda
                                    - Atlantic/Canary
                                    - Atlantic/Cape_Verde
                                    - Atlantic/Faroe
                                    - Atlantic/Madeira
                                    - Atlantic/Reykjavik
                                    - Atlantic/South_Georgia
                                    - Atlantic/St_Helena
                                    - Atlantic/Stanley
                                    - Australia/Adelaide
                                    - Australia/Brisbane
                                    - Australia/Broken_Hill
                                    - Australia/Darwin
                                    - Australia/Eucla
                                    - Australia/Hobart
                                    - Australia/Lindeman
                                    - Australia/Lord_Howe
                                    - Australia/Melbourne
                                    - Australia/Perth
                                    - Australia/Sydney
                                    - Europe/Amsterdam
                                    - Europe/Andorra
                                    - Europe/Astrakhan
                                    - Europe/Athens
                                    - Europe/Belgrade
                                    - Europe/Berlin
                                    - Europe/Bratislava
                                    - Europe/Brussels
                                    - Europe/Bucharest
                                    - Europe/Budapest
                                    - Europe/Busingen
                                    - Europe/Chisinau
                                    - Europe/Copenhagen
                                    - Europe/Dublin
                                    - Europe/Gibraltar
                                    - Europe/Guernsey
                                    - Europe/Helsinki
                                    - Europe/Isle_of_Man
                                    - Europe/Istanbul
                                    - Europe/Jersey
                                    - Europe/Kaliningrad
                                    - Europe/Kiev
                                    - Europe/Kirov
                                    - Europe/Lisbon
                                    - Europe/Ljubljana
                                    - Europe/London
                                    - Europe/Luxembourg
                                    - Europe/Madrid
                                    - Europe/Malta
                                    - Europe/Mariehamn
                                    - Europe/Minsk
                                    - Europe/Monaco
                                    - Europe/Moscow
                                    - Europe/Oslo
                                    - Europe/Paris
                                    - Europe/Podgorica
                                    - Europe/Prague
                                    - Europe/Riga
                                    - Europe/Rome
                                    - Europe/Samara
                                    - Europe/San_Marino
                                    - Europe/Sarajevo
                                    - Europe/Saratov
                                    - Europe/Simferopol
                                    - Europe/Skopje
                                    - Europe/Sofia
                                    - Europe/Stockholm
                                    - Europe/Tallinn
                                    - Europe/Tirane
                                    - Europe/Ulyanovsk
                                    - Europe/Uzhgorod
                                    - Europe/Vaduz
                                    - Europe/Vatican
                                    - Europe/Vienna
                                    - Europe/Vilnius
                                    - Europe/Volgograd
                                    - Europe/Warsaw
                                    - Europe/Zagreb
                                    - Europe/Zaporozhye
                                    - Europe/Zurich
                                    - Indian/Antananarivo
                                    - Indian/Chagos
                                    - Indian/Christmas
                                    - Indian/Cocos
                                    - Indian/Comoro
                                    - Indian/Kerguelen
                                    - Indian/Mahe
                                    - Indian/Maldives
                                    - Indian/Mauritius
                                    - Indian/Mayotte
                                    - Indian/Reunion
                                    - Pacific/Apia
                                    - Pacific/Auckland
                                    - Pacific/Bougainville
                                    - Pacific/Chatham
                                    - Pacific/Chuuk
                                    - Pacific/Easter
                                    - Pacific/Efate
                                    - Pacific/Fakaofo
                                    - Pacific/Fiji
                                    - Pacific/Funafuti
                                    - Pacific/Galapagos
                                    - Pacific/Gambier
                                    - Pacific/Guadalcanal
                                    - Pacific/Guam
                                    - Pacific/Honolulu
                                    - Pacific/Kanton
                                    - Pacific/Kiritimati
                                    - Pacific/Kosrae
                                    - Pacific/Kwajalein
                                    - Pacific/Majuro
                                    - Pacific/Marquesas
                                    - Pacific/Midway
                                    - Pacific/Nauru
                                    - Pacific/Niue
                                    - Pacific/Norfolk
                                    - Pacific/Noumea
                                    - Pacific/Pago_Pago
                                    - Pacific/Palau
                                    - Pacific/Pitcairn
                                    - Pacific/Pohnpei
                                    - Pacific/Port_Moresby
                                    - Pacific/Rarotonga
                                    - Pacific/Saipan
                                    - Pacific/Tahiti
                                    - Pacific/Tarawa
                                    - Pacific/Tongatapu
                                    - Pacific/Wake
                                    - Pacific/Wallis
                                    - UTC
            tags:
                - GeoData
            security: []
    /api/grips:
        get:
            summary: 'List grips'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view grips'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view grips' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 37, number: 1242, name: 'enim grip', description: null, image: null, opposed: 0, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
                                    - { id: 38, number: 1382, name: 'et grip', description: null, image: null, opposed: 0, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Goals
    /api/exercises:
        get:
            summary: 'List exercises'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view exercises'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view exercises' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 106, name: 'Ondricka Crossing', description: 'Natus ea cupiditate officia perspiciatis quisquam similique.', icon: 😞, created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }, { id: 107, name: 'Pacocha Lodge', description: 'Possimus culpa qui aliquam sit.', icon: 😩, created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 106, name: 'Ondricka Crossing', description: 'Natus ea cupiditate officia perspiciatis quisquam similique.', icon: 😞, created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }, { id: 107, name: 'Pacocha Lodge', description: 'Possimus culpa qui aliquam sit.', icon: 😩, created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }], items: { type: object } }
            tags:
                - Goals
        post:
            summary: 'Create exercise'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage exercises'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage exercises' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 108
                                    name: 'Barton Parks'
                                    description: 'Ipsa quidem accusantium consequatur.'
                                    icon: 😥
                                    created_at: '2025-01-08T10:15:54.000000Z'
                                    updated_at: '2025-01-08T10:15:54.000000Z'
                                properties:
                                    id: { type: integer, example: 108 }
                                    name: { type: string, example: 'Barton Parks' }
                                    description: { type: string, example: 'Ipsa quidem accusantium consequatur.' }
                                    icon: { type: string, example: 😥 }
                                    created_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
            tags:
                - Goals
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Exercise name.'
                                    example: 'Water plants'
                                description:
                                    type: string
                                    description: 'Exercise description.'
                                    example: 'Use Tripod Close Grip and water your plants'
                                icon:
                                    type: string
                                    description: 'Emoji icon.'
                                    example: 🪴
                            required:
                                - name
                                - description
                                - icon
    '/api/exercises/{exerciseId}':
        put:
            summary: 'Update exercise'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage exercises'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage exercises' }
                404:
                    description: '404, Exercise not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Exercise not found'
                                properties:
                                    message: { type: string, example: 'Exercise not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 109
                                    name: 'Bins Falls'
                                    description: 'Commodi voluptas porro eius qui corporis odit.'
                                    icon: 😨
                                    created_at: '2025-01-08T10:15:54.000000Z'
                                    updated_at: '2025-01-08T10:15:54.000000Z'
                                properties:
                                    id: { type: integer, example: 109 }
                                    name: { type: string, example: 'Bins Falls' }
                                    description: { type: string, example: 'Commodi voluptas porro eius qui corporis odit.' }
                                    icon: { type: string, example: 😨 }
                                    created_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
            tags:
                - Goals
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Exercise name.'
                                    example: 'Water plants'
                                description:
                                    type: string
                                    description: 'Exercise description.'
                                    example: 'Use Tripod Close Grip and water your plants'
                                icon:
                                    type: string
                                    description: 'Emoji icon.'
                                    example: 🪴
        delete:
            summary: 'Delete exercise'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Exercise is used in goals'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot delete: exercise is used in goals (1)'
                                properties:
                                    message: { type: string, example: 'Cannot delete: exercise is used in goals (1)' }
                404:
                    description: '404, Exercise not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Exercise not found'
                                properties:
                                    message: { type: string, example: 'Exercise not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Exercise deleted'
                                properties:
                                    message: { type: string, example: 'Exercise deleted' }
            tags:
                - Goals
        parameters:
            -
                in: path
                name: exerciseId
                description: 'Exercise ID'
                example: 8
                required: true
                schema:
                    type: integer
    '/api/user/{userId}/goals':
        get:
            summary: 'List user goals'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view user goals'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view user goals' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 108, amputee_id: 15088, clinician_id: 15089, start_date: '2015-09-24', end_date: '1998-11-01', active: 1, created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }, { id: 109, amputee_id: 15090, clinician_id: 15091, start_date: '1982-03-02', end_date: '2012-02-12', active: 1, created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 108, amputee_id: 15088, clinician_id: 15089, start_date: '2015-09-24', end_date: '1998-11-01', active: 1, created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }, { id: 109, amputee_id: 15090, clinician_id: 15091, start_date: '1982-03-02', end_date: '2012-02-12', active: 1, created_at: '2025-01-08T10:15:54.000000Z', updated_at: '2025-01-08T10:15:54.000000Z' }], items: { type: object } }
            tags:
                - Goals
        post:
            summary: 'Create user goal'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage user goals'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage user goals' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 110
                                    amputee_id: 15092
                                    clinician_id: 15093
                                    start_date: '2015-01-02'
                                    end_date: '2019-06-20'
                                    active: 0
                                    created_at: '2025-01-08T10:15:54.000000Z'
                                    updated_at: '2025-01-08T10:15:54.000000Z'
                                properties:
                                    id: { type: integer, example: 110 }
                                    amputee_id: { type: integer, example: 15092 }
                                    clinician_id: { type: integer, example: 15093 }
                                    start_date: { type: string, example: '2015-01-02' }
                                    end_date: { type: string, example: '2019-06-20' }
                                    active: { type: integer, example: 0 }
                                    created_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
            tags:
                - Goals
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                start_date:
                                    type: string
                                    description: 'Start date of the goal tracking The value must be a valid date. The value must be a valid date in the format Y-m-d.'
                                    example: '2023-05-12'
                                end_date:
                                    type: string
                                    description: 'End date of goal tracking The value must be a valid date. The value must be a valid date in the format Y-m-d.'
                                    example: '2023-05-15'
                                active:
                                    type: integer
                                    description: 'Status of goal activity The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
                            required:
                                - start_date
                                - end_date
        parameters:
            -
                in: path
                name: userId
                description: 'User ID'
                example: 12
                required: true
                schema:
                    type: integer
    '/api/user/{userId}/goals/{goalId}':
        put:
            summary: 'Update user goal'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Cannot activate ongoing goal'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot activate ongoing goal'
                                properties:
                                    message: { type: string, example: 'Cannot activate ongoing goal' }
                404:
                    description: '404, Goal not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Goal not found'
                                properties:
                                    message: { type: string, example: 'Goal not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 111
                                    amputee_id: 15094
                                    clinician_id: 15095
                                    start_date: '1998-08-29'
                                    end_date: '2017-04-12'
                                    active: 0
                                    created_at: '2025-01-08T10:15:54.000000Z'
                                    updated_at: '2025-01-08T10:15:54.000000Z'
                                properties:
                                    id: { type: integer, example: 111 }
                                    amputee_id: { type: integer, example: 15094 }
                                    clinician_id: { type: integer, example: 15095 }
                                    start_date: { type: string, example: '1998-08-29' }
                                    end_date: { type: string, example: '2017-04-12' }
                                    active: { type: integer, example: 0 }
                                    created_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:54.000000Z' }
            tags:
                - Goals
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                start_date:
                                    type: string
                                    description: 'Start date of the goal tracking The value must be a valid date. The value must be a valid date in the format Y-m-d.'
                                    example: '2023-05-12'
                                end_date:
                                    type: string
                                    description: 'End date of goal tracking The value must be a valid date. The value must be a valid date in the format Y-m-d.'
                                    example: '2023-05-15'
                                active:
                                    type: integer
                                    description: 'Status of goal activity The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
        delete:
            summary: 'Delete user goal'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Cannot update ongoing goal'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot delete active ongoing goal'
                                properties:
                                    message: { type: string, example: 'Cannot delete active ongoing goal' }
                404:
                    description: '404, Goal not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Goal not found'
                                properties:
                                    message: { type: string, example: 'Goal not found' }
                202:
                    description: '202, Goal deleted'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Goal deleted'
                                properties:
                                    message: { type: string, example: 'Goal deleted' }
            tags:
                - Goals
        parameters:
            -
                in: path
                name: userId
                description: 'User ID'
                example: 4
                required: true
                schema:
                    type: integer
            -
                in: path
                name: goalId
                description: 'Goal ID'
                example: 8
                required: true
                schema:
                    type: integer
    '/api/user/{userId}/goals/{goalId}/conditions':
        get:
            summary: 'List user goal conditions'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view user goals'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view user goals' }
                404:
                    description: '404, Goal not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Goal not found'
                                properties:
                                    message: { type: string, example: 'Goal not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 239, goal_id: 112, type: switch, grip_id: 39, grips_frequency: d, grips_count: 463, switches_frequency: m, switches_count: 185, exercise_id: 110, exercise_frequency: w, exercise_count: 4, created_at: '2025-01-08T10:15:55.000000Z', updated_at: '2025-01-08T10:15:55.000000Z' }, { id: 240, goal_id: 113, type: exercise, grip_id: 40, grips_frequency: w, grips_count: 791, switches_frequency: a, switches_count: 714, exercise_id: 111, exercise_frequency: d, exercise_count: 1, created_at: '2025-01-08T10:15:55.000000Z', updated_at: '2025-01-08T10:15:55.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 239, goal_id: 112, type: switch, grip_id: 39, grips_frequency: d, grips_count: 463, switches_frequency: m, switches_count: 185, exercise_id: 110, exercise_frequency: w, exercise_count: 4, created_at: '2025-01-08T10:15:55.000000Z', updated_at: '2025-01-08T10:15:55.000000Z' }, { id: 240, goal_id: 113, type: exercise, grip_id: 40, grips_frequency: w, grips_count: 791, switches_frequency: a, switches_count: 714, exercise_id: 111, exercise_frequency: d, exercise_count: 1, created_at: '2025-01-08T10:15:55.000000Z', updated_at: '2025-01-08T10:15:55.000000Z' }], items: { type: object } }
            tags:
                - Goals
        post:
            summary: 'Create user goal condition'
            description: "<p>Each goal condition could be one of type: <code>grip</code>, <code>switch</code> or <code>exercise</code>.</p>\n<p>If goal condition is type of <code>grip</code>, fill only <code>grip_id</code> (optional), <code>grips_frequency</code> and <code>grips_count</code>.<br />\nIf <code>grip_id</code> is null or missing, patient can perform any grip to fulfill objective.</p>\n<p>If goal condition is type of <code>switch</code>, fill only <code>switches_frequency</code> and <code>switches_count</code>.</p>\n<p>If goal condition is type of <code>exercise</code>, fill only <code>exercise_id</code>, <code>exercise_frequency</code> and <code>exercise_count</code>.</p>\n<br />\n<p>Restrictions:</p>\n<ul>\n<li>you can add one grip-any condition (<code>grip_id=null</code>, any grip is counted)\nand many grip-specific conditions (for example: grip 1 - 100 times and grip 2 - 50 times),</li>\n<li>all grips conditions must have same frequency (<code>grips_frequency</code> field),</li>\n<li>sum of grip-specific conditions (<code>grips_count</code> field) cannot be greater than grip-any condition for same goal</li>\n<li>you can add only one switch condition for same goal,</li>\n<li>you can add multiple exercise conditions, but each exercise can be used only once.</li>\n</ul>"
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Cannot create condition: exercise'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot create condition: condition with this exercise already exist'
                                properties:
                                    message: { type: string, example: 'Cannot create condition: condition with this exercise already exist' }
                404:
                    description: '404, Goal not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Goal not found'
                                properties:
                                    message: { type: string, example: 'Goal not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 241
                                    goal_id: 114
                                    type: grip
                                    grip_id: 41
                                    grips_frequency: w
                                    grips_count: 139
                                    switches_frequency: a
                                    switches_count: 380
                                    exercise_id: 112
                                    exercise_frequency: m
                                    exercise_count: 1
                                    created_at: '2025-01-08T10:15:55.000000Z'
                                    updated_at: '2025-01-08T10:15:55.000000Z'
                                properties:
                                    id: { type: integer, example: 241 }
                                    goal_id: { type: integer, example: 114 }
                                    type: { type: string, example: grip }
                                    grip_id: { type: integer, example: 41 }
                                    grips_frequency: { type: string, example: w }
                                    grips_count: { type: integer, example: 139 }
                                    switches_frequency: { type: string, example: a }
                                    switches_count: { type: integer, example: 380 }
                                    exercise_id: { type: integer, example: 112 }
                                    exercise_frequency: { type: string, example: m }
                                    exercise_count: { type: integer, example: 1 }
                                    created_at: { type: string, example: '2025-01-08T10:15:55.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:55.000000Z' }
            tags:
                - Goals
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                type:
                                    type: string
                                    description: 'Goal condition type. The value must be one of <code>grip</code>, <code>switch</code>, or <code>exercise</code>.'
                                    example: grip
                                grip_id:
                                    type: integer
                                    description: 'Grip number required for condition. Pass <code>null</code> to allow any grip.'
                                    example: 1
                                grips_frequency:
                                    type: string
                                    description: 'Grips frequency unit. <code>d</code> - daily, <code>w</code> - weekly, <code>m</code> - monthly, <code>a</code> - all time (within goal). The value must be one of <code>d</code>, <code>w</code>, <code>m</code>, or <code>a</code>.'
                                    example: d
                                grips_count:
                                    type: integer
                                    description: 'Required number of grips per frequency unit.'
                                    example: 100
                                switches_frequency:
                                    type: string
                                    description: 'Switches frequency unit. <code>d</code> - daily, <code>w</code> - weekly, <code>m</code> - monthly, <code>a</code> - all time (within goal). The value must be one of <code>d</code>, <code>w</code>, <code>m</code>, or <code>a</code>.'
                                    example: d
                                switches_count:
                                    type: integer
                                    description: 'Required number of switches per frequency unit.'
                                    example: 100
                                exercise_id:
                                    type: integer
                                    description: 'Exercise ID.'
                                    example: 1
                                exercise_frequency:
                                    type: string
                                    description: 'Exercise frequency unit. <code>d</code> - daily, <code>w</code> - weekly, <code>m</code> - monthly. The value must be one of <code>d</code>, <code>w</code>, or <code>m</code>.'
                                    example: d
                                exercise_count:
                                    type: integer
                                    description: 'Required number of performed exercises per frequency unit.'
                                    example: 5
                            required:
                                - type
        parameters:
            -
                in: path
                name: userId
                description: 'User ID'
                example: 19
                required: true
                schema:
                    type: integer
            -
                in: path
                name: goalId
                description: 'Goal ID'
                example: 6
                required: true
                schema:
                    type: integer
    '/api/user/{userId}/goals/{goalId}/conditions/{conditionId}':
        delete:
            summary: 'Delete user goal condition'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage user goals'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage user goals' }
                404:
                    description: '404, Goal not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Goal not found'
                                properties:
                                    message: { type: string, example: 'Goal not found' }
                202:
                    description: '202, Goal condition deleted'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Goal condition deleted'
                                properties:
                                    message: { type: string, example: 'Goal condition deleted' }
            tags:
                - Goals
        parameters:
            -
                in: path
                name: userId
                description: 'User ID'
                example: 13
                required: true
                schema:
                    type: integer
            -
                in: path
                name: goalId
                description: 'Goal ID'
                example: 2
                required: true
                schema:
                    type: integer
            -
                in: path
                name: conditionId
                description: 'Goal condition ID'
                example: 5
                required: true
                schema:
                    type: integer
    '/api/goals/{goalId}/progress':
        get:
            summary: 'Get user goal progress'
            description: "Data is grouped into three parts:\n<ul>\n<li><code>grips</code> - data about grips progress,</li>\n<li><code>switches</code> - data about switches progress,</li>\n<li><code>exercises</code> - data about exercises progress and attempts made.</li>\n</ul>\n\nFor grips and switches there is summary, which is divided into 4 parts:\n<ul>\n<li><code>overall</code> - summary of whole goal time-frame,</li>\n<li><code>period</code> - summary of given period, according to frequency\n(for example: if frequency of conditions is \"weekly\", these data is summary of current's week).</li>\n<li><code>today</code> - summary of today's, used mainly to send daily summary notifications,</li>\n<li><code>conditions</code> - goal conditions with progress for each one.</li>\n</ul>\n\nThere are also extra fields inside the summary parts:\n<ul>\n<li><code>type</code> for grips overall summary, which points which conditions were used to calculate the summary.\nIf grip-any condition exists, it has priority over grip-specific conditions, otherwise summary contains sum of all\ngrip-specific conditions,</li>\n<li><code>frequency</code>, <code>frequency_from</code> and <code>frequency_to</code> for period summary for both\ngrips and switches, which describe time-frame of frequency and period,</li>\n<li><code>done</code> for today's summary for both grips and switches, indicates if today's goal is reached\n(it's calculated only for conditions of frequency \"daily\").</li>\n</ul>"
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view goal progress'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view goal progress' }
                404:
                    description: '404, Goal not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Goal not found'
                                properties:
                                    message: { type: string, example: 'Goal not found' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    grips: { meta: { overall: { from: '2023-09-01 00:00:00', to: '2023-08-30 23:59:59' }, period: { from: '2023-09-15 23:59:59', to: '2023-09-21 23:59:59', frequency: w } }, summary: { type: grips-specific, progress: 222, goal: 2535 }, progress: [{ grip: { id: 1, number: 0, name: 'Rest Opposition', description: null, created_at: '2023-08-30T12:20:00.000000Z', updated_at: '2023-08-30T12:20:00.000000Z' }, overall: { progress: 125, goal: 200 }, period: { progress: 22, goal: 50 } }, { grip: { id: 2, number: 1, name: Power, description: null, created_at: '2023-05-18T11:24:11.000000Z', updated_at: '2023-05-18T11:24:11.000000Z' }, overall: { progress: 90, goal: 150 }, period: { progress: 10, goal: 30 } }, { grip: null, overall: { progress: 78, goal: 1250 }, period: { progress: 17, goal: 240 } }], today: { performed: 0, goal: 0, done: true } }
                                    switches: { overall: { performed: 55, goal: 300 }, period: { performed: 25, goal: 30, frequency: d, frequency_from: '2023-09-20 00:00:00', frequency_to: '2023-09-20 23:59:59' }, today: { performed: 25, goal: 30, done: false }, condition: { type: switch, switches_frequency: d, switches_count: 30 } }
                                    exercises: { performed: 1, goal: 3, done: false, conditions: [{ type: exercise, exercise_id: 1, exercise_frequency: d, exercise_count: 3, attempts: [{ date_from: '2023-06-06', date_to: '2023-06-12', count_done: 1, count_not_done: 1 }, { date_from: '2023-06-13', date_to: '2023-06-19', count_done: 0, count_not_done: 0 }, { date_from: '2023-06-20', date_to: '2023-06-26', count_done: 0, count_not_done: 0 }, { date_from: '2023-06-27', date_to: '2023-07-03', count_done: 0, count_not_done: 0 }], exercise: { id: 1, name: 'Water plants', description: 'Use Tripod Grip and water your plants', icon: 🪴, created_at: '2023-05-19T10:25:37.000000Z', updated_at: '2023-05-19T10:25:37.000000Z' } }] }
                                properties:
                                    grips: { type: object, example: { meta: { overall: { from: '2023-09-01 00:00:00', to: '2023-08-30 23:59:59' }, period: { from: '2023-09-15 23:59:59', to: '2023-09-21 23:59:59', frequency: w } }, summary: { type: grips-specific, progress: 222, goal: 2535 }, progress: [{ grip: { id: 1, number: 0, name: 'Rest Opposition', description: null, created_at: '2023-08-30T12:20:00.000000Z', updated_at: '2023-08-30T12:20:00.000000Z' }, overall: { progress: 125, goal: 200 }, period: { progress: 22, goal: 50 } }, { grip: { id: 2, number: 1, name: Power, description: null, created_at: '2023-05-18T11:24:11.000000Z', updated_at: '2023-05-18T11:24:11.000000Z' }, overall: { progress: 90, goal: 150 }, period: { progress: 10, goal: 30 } }, { grip: null, overall: { progress: 78, goal: 1250 }, period: { progress: 17, goal: 240 } }], today: { performed: 0, goal: 0, done: true } } }
                                    switches: { type: object, example: { overall: { performed: 55, goal: 300 }, period: { performed: 25, goal: 30, frequency: d, frequency_from: '2023-09-20 00:00:00', frequency_to: '2023-09-20 23:59:59' }, today: { performed: 25, goal: 30, done: false }, condition: { type: switch, switches_frequency: d, switches_count: 30 } } }
                                    exercises: { type: object, example: { performed: 1, goal: 3, done: false, conditions: [{ type: exercise, exercise_id: 1, exercise_frequency: d, exercise_count: 3, attempts: [{ date_from: '2023-06-06', date_to: '2023-06-12', count_done: 1, count_not_done: 1 }, { date_from: '2023-06-13', date_to: '2023-06-19', count_done: 0, count_not_done: 0 }, { date_from: '2023-06-20', date_to: '2023-06-26', count_done: 0, count_not_done: 0 }, { date_from: '2023-06-27', date_to: '2023-07-03', count_done: 0, count_not_done: 0 }], exercise: { id: 1, name: 'Water plants', description: 'Use Tripod Grip and water your plants', icon: 🪴, created_at: '2023-05-19T10:25:37.000000Z', updated_at: '2023-05-19T10:25:37.000000Z' } }] } }
            tags:
                - Goals
        post:
            summary: 'Update user goal progress'
            description: 'Use this endpoint to update goal progress as patient. Add exercise attempts and mark them as done or not done.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update goal progress'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update goal progress' }
                404:
                    description: '404, Goal not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Goal not found'
                                properties:
                                    message: { type: string, example: 'Goal not found' }
                422:
                    description: '422, User timezone not set'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User timezone not set'
                                properties:
                                    message: { type: string, example: 'User timezone not set' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 792
                                    user_id: 15102
                                    goal_id: 115
                                    type: exercise
                                    grip_id: null
                                    grips: 100
                                    switches: 926
                                    exercise_id: 113
                                    exercise_done: 1
                                    created_at: '2025-01-08T10:15:55.000000Z'
                                    updated_at: '2025-01-08T10:15:55.000000Z'
                                properties:
                                    id: { type: integer, example: 792 }
                                    user_id: { type: integer, example: 15102 }
                                    goal_id: { type: integer, example: 115 }
                                    type: { type: string, example: exercise }
                                    grip_id: { type: string, example: null }
                                    grips: { type: integer, example: 100 }
                                    switches: { type: integer, example: 926 }
                                    exercise_id: { type: integer, example: 113 }
                                    exercise_done: { type: integer, example: 1 }
                                    created_at: { type: string, example: '2025-01-08T10:15:55.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:55.000000Z' }
            tags:
                - Goals
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                exercise_id:
                                    type: integer
                                    description: 'Exercise ID.'
                                    example: 1
                                exercise_done:
                                    type: string
                                    description: 'Status of exercise attempt. The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
                            required:
                                - exercise_id
        parameters:
            -
                in: path
                name: goalId
                description: 'Goal ID'
                example: 15
                required: true
                schema:
                    type: integer
    /api/invite/accept:
        post:
            summary: 'Accept invitation'
            description: ''
            parameters:
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, Invitation expired'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Invitation expired'
                                    code: 'INVITE:ACCEPT:INVITATION_EXPIRED'
                                properties:
                                    message: { type: string, example: 'Invitation expired' }
                                    code: { type: string, example: 'INVITE:ACCEPT:INVITATION_EXPIRED' }
                500:
                    description: '500, Server error'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Server error: invitation not accepted'
                                    code: 'INVITE:ACCEPT:SERVER_ERROR'
                                properties:
                                    message: { type: string, example: 'Server error: invitation not accepted' }
                                    code: { type: string, example: 'INVITE:ACCEPT:SERVER_ERROR' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 14916
                                    mrn: QNYXUA7Q
                                    name: 'Keely Tromp IV'
                                    email: 1736331338williamson.maddison@example.net
                                    language: en
                                    phone: +1-281-299-8317
                                    phone_country: RS
                                    phone_verified_at: null
                                    address1: '54299 Weber Spurs Suite 578'
                                    address2: 'Lake Kyla, WV 96543'
                                    postal_code: 33251-8111
                                    city: Langworth-Kirlin
                                    clinic_name: 'South Malikastad'
                                    clinic_location: "9619 Lenore Crest\nLake Esperanza, MT 22725"
                                    image: null
                                    mfa_enabled: 0
                                    mfa_method: null
                                    mfa_verified_to: null
                                    created_by: null
                                    active: 1
                                    notifications_timezone: null
                                    notifications_at: null
                                    created_at: '2025-01-08T10:15:38.000000Z'
                                    updated_at: '2025-01-08T10:15:38.000000Z'
                                    invitation_status: null
                                    roles: [{ id: 3, name: Amputee }]
                                properties:
                                    id: { type: integer, example: 14916 }
                                    mrn: { type: string, example: QNYXUA7Q }
                                    name: { type: string, example: 'Keely Tromp IV' }
                                    email: { type: string, example: 1736331338williamson.maddison@example.net }
                                    language: { type: string, example: en }
                                    phone: { type: string, example: +1-281-299-8317 }
                                    phone_country: { type: string, example: RS }
                                    phone_verified_at: { type: string, example: null }
                                    address1: { type: string, example: '54299 Weber Spurs Suite 578' }
                                    address2: { type: string, example: 'Lake Kyla, WV 96543' }
                                    postal_code: { type: string, example: 33251-8111 }
                                    city: { type: string, example: Langworth-Kirlin }
                                    clinic_name: { type: string, example: 'South Malikastad' }
                                    clinic_location: { type: string, example: "9619 Lenore Crest\nLake Esperanza, MT 22725" }
                                    image: { type: string, example: null }
                                    mfa_enabled: { type: integer, example: 0 }
                                    mfa_method: { type: string, example: null }
                                    mfa_verified_to: { type: string, example: null }
                                    created_by: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    notifications_timezone: { type: string, example: null }
                                    notifications_at: { type: string, example: null }
                                    created_at: { type: string, example: '2025-01-08T10:15:38.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:38.000000Z' }
                                    invitation_status: { type: string, example: null }
                                    roles: { type: array, example: [{ id: 3, name: Amputee }], items: { type: object } }
            tags:
                - Invitations
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                token:
                                    type: string
                                    description: 'Invitation token sent by e-mail.'
                                    example: ABC123DEF456GHI789JKL0
                                email:
                                    type: string
                                    description: 'User e-mail. The value must be a valid email address.'
                                    example: example@domain.com
                                password:
                                    type: string
                                    description: 'User password.'
                                    example: Test123!
                                language:
                                    type: string
                                    description: ''
                                    example: ratione
                                name:
                                    type: string
                                    description: 'User name.'
                                    example: 'Tom Smith'
                                clinic_name:
                                    type: string
                                    description: 'Clinic name.'
                                    example: 'My clinic Ltd'
                                clinic_location:
                                    type: string
                                    description: 'Clinic location.'
                                    example: 'Example St 1/345 New York, NY'
                                address1:
                                    type: string
                                    description: 'User address line 1.'
                                    example: '380 Adolfo Squares Suite 517'
                                address2:
                                    type: string
                                    description: 'User address line 2.'
                                    example: 'Port Euna, IA 62996-9347'
                                mfa_enabled:
                                    type: boolean
                                    description: 'MFA enabled.'
                                    example: true
                                mfa_method:
                                    type: string
                                    description: 'MFA method. The value must be one of <code>email</code> or <code>sms</code>.'
                                    example: email
                            required:
                                - token
                                - email
                                - password
                                - language
                                - name
            security: []
    /api/invite/users:
        get:
            summary: 'List users for invitations'
            description: ''
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>clinicians</code>, <code> patients</code>, <code> devices</code>, <code> devicesAsClinician</code>, <code> roles</code>, <code> permissions</code>).'
                    example: 'clinicians, patients, devices, devicesAsClinician, roles, permissions'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>clinicians</code>, <code> patients</code>, <code> devices</code>, <code> devicesAsClinician</code>, <code> roles</code>, <code> permissions</code>).'
                        example: 'clinicians, patients, devices, devicesAsClinician, roles, permissions'
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to list users for invitations'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to list users for invitations' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 14923, mrn: WVQU82H4, name: 'Roy Bauch', email: 1736331339imelda71@example.org, language: en, phone: '+1 (360) 757-7379', phone_country: NF, phone_verified_at: null, address1: '665 Kozey Pass Suite 301', address2: 'West Destini, AL 87384-7625', postal_code: 66680-0093, city: Harris-Cartwright, clinic_name: Rutherfordstad, clinic_location: "78980 Manley Plaza\nWildermanstad, AZ 16371-2238", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }] }, { id: 14924, mrn: P83069R5, name: 'Jocelyn Hill', email: 1736331339grant.trinity@example.org, language: en, phone: 508.962.3756, phone_country: FR, phone_verified_at: null, address1: '5216 Beer Inlet Apt. 253', address2: 'Eichmannmouth, MD 39503-5472', postal_code: '72405', city: 'Wisoky Group', clinic_name: Westside, clinic_location: "4280 Herzog Well\nBorerhaven, VA 77207", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }] }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 14923, mrn: WVQU82H4, name: 'Roy Bauch', email: 1736331339imelda71@example.org, language: en, phone: '+1 (360) 757-7379', phone_country: NF, phone_verified_at: null, address1: '665 Kozey Pass Suite 301', address2: 'West Destini, AL 87384-7625', postal_code: 66680-0093, city: Harris-Cartwright, clinic_name: Rutherfordstad, clinic_location: "78980 Manley Plaza\nWildermanstad, AZ 16371-2238", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }] }, { id: 14924, mrn: P83069R5, name: 'Jocelyn Hill', email: 1736331339grant.trinity@example.org, language: en, phone: 508.962.3756, phone_country: FR, phone_verified_at: null, address1: '5216 Beer Inlet Apt. 253', address2: 'Eichmannmouth, MD 39503-5472', postal_code: '72405', city: 'Wisoky Group', clinic_name: Westside, clinic_location: "4280 Herzog Well\nBorerhaven, VA 77207", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }] }], items: { type: object } }
            tags:
                - Invitations
    /api/invite:
        post:
            summary: 'Create invitations'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, No access to given patient'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'No access to given patient'
                                properties:
                                    message: { type: string, example: 'No access to given patient' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 10, current_page: 1, last_page: 1 }
                                    items: [{ id: 14925, mrn: O5J9437K, name: 'Wilhelmine Morar', email: 1736331339jenkins.fermin@example.net, language: en, phone: +1-269-538-4086, phone_country: MW, phone_verified_at: null, address1: '1611 Jaron Alley', address2: 'New Claudinemouth, MD 84691-0947', postal_code: '54633', city: 'Mayert, Bauch and Emard', clinic_name: 'New Devante', clinic_location: "3299 Muhammad Canyon Suite 335\nDestanystad, MO 10312-4451", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], invitations: [] }, { id: 14926, mrn: NA2SSCEQ, name: 'Amira Weimann', email: 1736331339savanah.rodriguez@example.com, language: en, phone: 804-684-2389, phone_country: EH, phone_verified_at: null, address1: '4996 Jaleel Glen Suite 908', address2: 'North Silasmouth, NC 86221-8896', postal_code: '26365', city: 'Swift, Price and Kovacek', clinic_name: Maverickshire, clinic_location: "78165 Ashley Route\nSouth Amyfurt, DE 56552-5043", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], invitations: [] }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 10, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 14925, mrn: O5J9437K, name: 'Wilhelmine Morar', email: 1736331339jenkins.fermin@example.net, language: en, phone: +1-269-538-4086, phone_country: MW, phone_verified_at: null, address1: '1611 Jaron Alley', address2: 'New Claudinemouth, MD 84691-0947', postal_code: '54633', city: 'Mayert, Bauch and Emard', clinic_name: 'New Devante', clinic_location: "3299 Muhammad Canyon Suite 335\nDestanystad, MO 10312-4451", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], invitations: [] }, { id: 14926, mrn: NA2SSCEQ, name: 'Amira Weimann', email: 1736331339savanah.rodriguez@example.com, language: en, phone: 804-684-2389, phone_country: EH, phone_verified_at: null, address1: '4996 Jaleel Glen Suite 908', address2: 'North Silasmouth, NC 86221-8896', postal_code: '26365', city: 'Swift, Price and Kovacek', clinic_name: Maverickshire, clinic_location: "78165 Ashley Route\nSouth Amyfurt, DE 56552-5043", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], invitations: [] }], items: { type: object } }
            tags:
                - Invitations
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                patient_id:
                                    type: string
                                    description: 'Patient user ID.'
                                    example: 1
                                invitations:
                                    type: array
                                    description: 'List of invitations (maximum entries: 10, array of objects).'
                                    example: [[], []]
                                    items: { type: object, properties: { user_id: { type: integer, description: 'Invited user ID. Use only for existing users. Don''t use together with <code>user_email</code>.', example: 1 }, user_email: { type: string, description: 'Invited user e-mail. Use only for non-existing users. Don''t use together with <code>user_id</code>. The value must be a valid email address.', example: newuser@domain.com }, role: { type: string, description: 'Invited user role. Use only for non-existing users. The value must be one of <code>ClinicAdmin</code>, <code>Clinician</code>, or <code>ClinicianSupport</code>.', example: Clinician }, training_confirmed: { type: boolean, description: 'Confirmation that invited user was properly trained to use ADP. The value must be one of <code>1</code> or <code>true</code>.', example: true }, permissions: { type: array, description: 'List of permissions to assign to the user (use that for ClinicianSupport role).', example: [sequi, ex], items: { type: string } }, 'permissions[]': { type: string, description: 'Permission name.', example: animi } }, required: [training_confirmed] }
                            required:
                                - patient_id
                                - invitations
    '/api/invite/{userId}/resend':
        post:
            summary: 'Resend invitation'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Invitation already accepted'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Invitation already accepted'
                                    code: 'INVITE:RESEND:INVITATION_ACCEPTED'
                                properties:
                                    message: { type: string, example: 'Invitation already accepted' }
                                    code: { type: string, example: 'INVITE:RESEND:INVITATION_ACCEPTED' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 14927
                                    mrn: RX05TB8I
                                    name: 'Miss Ernestina Bashirian Sr.'
                                    email: 1736331339qmcglynn@example.com
                                    language: en
                                    phone: 1-469-788-4338
                                    phone_country: ES
                                    phone_verified_at: null
                                    address1: '872 Tyson Cape Suite 407'
                                    address2: 'Port Providenciside, DE 37767-2880'
                                    postal_code: 89916-8819
                                    city: 'Bartoletti PLC'
                                    clinic_name: 'Port Lupe'
                                    clinic_location: "7334 Mann Park Apt. 667\nMaymieland, VA 30171"
                                    image: null
                                    mfa_enabled: 0
                                    mfa_method: null
                                    mfa_verified_to: null
                                    created_by: null
                                    active: 1
                                    notifications_timezone: null
                                    notifications_at: null
                                    created_at: '2025-01-08T10:15:39.000000Z'
                                    updated_at: '2025-01-08T10:15:39.000000Z'
                                    invitation_status: null
                                    roles: [{ id: 3, name: Amputee }]
                                    invitations: []
                                properties:
                                    id: { type: integer, example: 14927 }
                                    mrn: { type: string, example: RX05TB8I }
                                    name: { type: string, example: 'Miss Ernestina Bashirian Sr.' }
                                    email: { type: string, example: 1736331339qmcglynn@example.com }
                                    language: { type: string, example: en }
                                    phone: { type: string, example: 1-469-788-4338 }
                                    phone_country: { type: string, example: ES }
                                    phone_verified_at: { type: string, example: null }
                                    address1: { type: string, example: '872 Tyson Cape Suite 407' }
                                    address2: { type: string, example: 'Port Providenciside, DE 37767-2880' }
                                    postal_code: { type: string, example: 89916-8819 }
                                    city: { type: string, example: 'Bartoletti PLC' }
                                    clinic_name: { type: string, example: 'Port Lupe' }
                                    clinic_location: { type: string, example: "7334 Mann Park Apt. 667\nMaymieland, VA 30171" }
                                    image: { type: string, example: null }
                                    mfa_enabled: { type: integer, example: 0 }
                                    mfa_method: { type: string, example: null }
                                    mfa_verified_to: { type: string, example: null }
                                    created_by: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    notifications_timezone: { type: string, example: null }
                                    notifications_at: { type: string, example: null }
                                    created_at: { type: string, example: '2025-01-08T10:15:39.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:39.000000Z' }
                                    invitation_status: { type: string, example: null }
                                    roles: { type: array, example: [{ id: 3, name: Amputee }], items: { type: object } }
                                    invitations: { type: array, example: [] }
            tags:
                - Invitations
        parameters:
            -
                in: path
                name: userId
                description: 'User ID.'
                example: 6
                required: true
                schema:
                    type: integer
    /api/logs:
        get:
            summary: 'Get events log'
            description: "user - user account that performed action<br />\nelement - element model that has been affected by action"
            parameters:
                -
                    in: query
                    name: search
                    description: "Filter logs by related element data:<br />\n- for users: search by <code>name</code> or <code>email</code><br />\n- for devices: search by <code>serial</code> or <code>bluetooth_id</code><br />\n- for P2P sessions: search by <code>amputee_uuid</code> or <code>clinician_uuid</code>."
                    example: Test
                    required: false
                    schema:
                        type: string
                        description: "Filter logs by related element data:<br />\n- for users: search by <code>name</code> or <code>email</code><br />\n- for devices: search by <code>serial</code> or <code>bluetooth_id</code><br />\n- for P2P sessions: search by <code>amputee_uuid</code> or <code>clinician_uuid</code>."
                        example: Test
                -
                    in: query
                    name: ip
                    description: 'Filter logs by IP address.'
                    example: 200.200.100.5
                    required: false
                    schema:
                        type: string
                        description: 'Filter logs by IP address.'
                        example: 200.200.100.5
                -
                    in: query
                    name: user
                    description: 'Filter logs by user.'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Filter logs by user.'
                        example: 1
                -
                    in: query
                    name: type
                    description: 'Filter logs by event type (available: <code>user</code>, <code>device</code>, <code>p2p_session</code>.'
                    example: user
                    required: false
                    schema:
                        type: string
                        description: 'Filter logs by event type (available: <code>user</code>, <code>device</code>, <code>p2p_session</code>.'
                        example: user
                -
                    in: query
                    name: date_from
                    description: 'Filter logs from date (timestamp).'
                    example: 1642003200
                    required: false
                    schema:
                        type: integer
                        description: 'Filter logs from date (timestamp).'
                        example: 1642003200
                -
                    in: query
                    name: date_to
                    description: 'Filter logs to date (timestamp).'
                    example: 1642003200
                    required: false
                    schema:
                        type: integer
                        description: 'Filter logs to date (timestamp).'
                        example: 1642003200
                -
                    in: query
                    name: include_sessions
                    description: 'Login and logout events are filtered out by default. Set this parameter to 1 to include these events.'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Login and logout events are filtered out by default. Set this parameter to 1 to include these events.'
                        example: 1
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: query
                    name: sortby
                    description: 'Sort by field (available: <code>type</code>, <code> username</code>, <code> ip_address</code>, <code> date</code>). Default: <code>date</code> (<code>desc</code>).'
                    example: 'type, username, ip_address, date'
                    required: false
                    schema:
                        type: string
                        description: 'Sort by field (available: <code>type</code>, <code> username</code>, <code> ip_address</code>, <code> date</code>). Default: <code>date</code> (<code>desc</code>).'
                        example: 'type, username, ip_address, date'
                -
                    in: query
                    name: sortdir
                    description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                    example: asc
                    required: false
                    schema:
                        type: string
                        description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                        example: asc
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to access event logs'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to access event logs' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 1065670, user_id: 15105, event_name: event_factory, element_type: App\Models\User, element_id: 15106, comments: '', ip_address: 8.57.51.228, created_at: '2007-07-15T11:18:43.000000Z', updated_at: '2025-01-08T10:15:55.000000Z', user: { id: 15105, mrn: VGQEZ0QK, name: 'Stan Koss', email: 1736331355imelda05@example.org, language: en, phone: 941.453.4336, phone_country: SG, phone_verified_at: null, address1: '3328 Hermiston Ford', address2: 'Ettiebury, RI 18346', postal_code: '24504', city: 'Spinka Ltd', clinic_name: Stoltenbergland, clinic_location: "796 Reynolds Plain\nNew Phyllis, ND 33564", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:55.000000Z', updated_at: '2025-01-08T10:15:55.000000Z', invitation_status: null, roles: [] }, element: { id: 15106, mrn: 1SOOF95B, name: 'Miss Cortney Mosciski Sr.', email: 1736331355jacey.marvin@example.org, language: en, phone: 1-628-930-6944, phone_country: AI, phone_verified_at: null, address1: '62321 Wehner Green', address2: 'West Preciouston, MT 88854', postal_code: 75238-9636, city: Bosco-Durgan, clinic_name: Coryton, clinic_location: "176 Yvonne Cape Suite 024\nPort Martinefort, RI 00725-5138", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:55.000000Z', updated_at: '2025-01-08T10:15:55.000000Z', invitation_status: null, roles: [] } }, { id: 1065671, user_id: 15107, event_name: event_factory, element_type: App\Models\User, element_id: 15108, comments: '', ip_address: 25.91.90.129, created_at: '2007-02-18T09:23:30.000000Z', updated_at: '2025-01-08T10:15:56.000000Z', user: { id: 15107, mrn: OT0TGQIC, name: 'Abdiel Nikolaus', email: 1736331355cornelius.weissnat@example.org, language: en, phone: '+1 (970) 322-1529', phone_country: RS, phone_verified_at: null, address1: '53506 Wilkinson Isle Suite 479', address2: 'North Antonetteborough, ND 44692-5663', postal_code: 27155-5640, city: Schmitt-Schroeder, clinic_name: 'North Destineebury', clinic_location: "68250 Sarina Curve\nPearlmouth, NJ 55596-2741", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:55.000000Z', updated_at: '2025-01-08T10:15:55.000000Z', invitation_status: null, roles: [] }, element: { id: 15108, mrn: XY4IUYCG, name: 'Prof. Delmer Ratke', email: 1736331355cloyd62@example.org, language: en, phone: '+1 (938) 986-9721', phone_country: VI, phone_verified_at: null, address1: '688 Borer Glens Apt. 504', address2: 'East Jakebury, AR 21425', postal_code: 95053-9163, city: Okuneva-Reinger, clinic_name: Katrinamouth, clinic_location: "369 Blanca Isle Apt. 803\nSouth Jarrell, RI 85421", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z', invitation_status: null, roles: [] } }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 1065670, user_id: 15105, event_name: event_factory, element_type: App\Models\User, element_id: 15106, comments: '', ip_address: 8.57.51.228, created_at: '2007-07-15T11:18:43.000000Z', updated_at: '2025-01-08T10:15:55.000000Z', user: { id: 15105, mrn: VGQEZ0QK, name: 'Stan Koss', email: 1736331355imelda05@example.org, language: en, phone: 941.453.4336, phone_country: SG, phone_verified_at: null, address1: '3328 Hermiston Ford', address2: 'Ettiebury, RI 18346', postal_code: '24504', city: 'Spinka Ltd', clinic_name: Stoltenbergland, clinic_location: "796 Reynolds Plain\nNew Phyllis, ND 33564", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:55.000000Z', updated_at: '2025-01-08T10:15:55.000000Z', invitation_status: null, roles: [] }, element: { id: 15106, mrn: 1SOOF95B, name: 'Miss Cortney Mosciski Sr.', email: 1736331355jacey.marvin@example.org, language: en, phone: 1-628-930-6944, phone_country: AI, phone_verified_at: null, address1: '62321 Wehner Green', address2: 'West Preciouston, MT 88854', postal_code: 75238-9636, city: Bosco-Durgan, clinic_name: Coryton, clinic_location: "176 Yvonne Cape Suite 024\nPort Martinefort, RI 00725-5138", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:55.000000Z', updated_at: '2025-01-08T10:15:55.000000Z', invitation_status: null, roles: [] } }, { id: 1065671, user_id: 15107, event_name: event_factory, element_type: App\Models\User, element_id: 15108, comments: '', ip_address: 25.91.90.129, created_at: '2007-02-18T09:23:30.000000Z', updated_at: '2025-01-08T10:15:56.000000Z', user: { id: 15107, mrn: OT0TGQIC, name: 'Abdiel Nikolaus', email: 1736331355cornelius.weissnat@example.org, language: en, phone: '+1 (970) 322-1529', phone_country: RS, phone_verified_at: null, address1: '53506 Wilkinson Isle Suite 479', address2: 'North Antonetteborough, ND 44692-5663', postal_code: 27155-5640, city: Schmitt-Schroeder, clinic_name: 'North Destineebury', clinic_location: "68250 Sarina Curve\nPearlmouth, NJ 55596-2741", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:55.000000Z', updated_at: '2025-01-08T10:15:55.000000Z', invitation_status: null, roles: [] }, element: { id: 15108, mrn: XY4IUYCG, name: 'Prof. Delmer Ratke', email: 1736331355cloyd62@example.org, language: en, phone: '+1 (938) 986-9721', phone_country: VI, phone_verified_at: null, address1: '688 Borer Glens Apt. 504', address2: 'East Jakebury, AR 21425', postal_code: 95053-9163, city: Okuneva-Reinger, clinic_name: Katrinamouth, clinic_location: "369 Blanca Isle Apt. 803\nSouth Jarrell, RI 85421", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z', invitation_status: null, roles: [] } }], items: { type: object } }
            tags:
                - Logs
    /api/messages:
        get:
            summary: 'Get user messages list'
            description: ''
            parameters:
                -
                    in: query
                    name: sortby
                    description: 'Sort by field (available: <code>date</code>).'
                    example: date
                    required: false
                    schema:
                        type: string
                        description: 'Sort by field (available: <code>date</code>).'
                        example: date
                -
                    in: query
                    name: sortdir
                    description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                    example: asc
                    required: false
                    schema:
                        type: string
                        description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                        example: asc
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 7834, user_id: null, message_id: 6611, is_read: 0, is_archived: 0, is_deleted: 0, message: { id: 6611, sender_id: null, title: 'Et placeat occaecati et officia consequatur repellat doloremque eos.', content: 'Enim quasi ab nihil eaque neque deserunt beatae.', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', sender: null } }, { id: 7835, user_id: null, message_id: 6612, is_read: 0, is_archived: 0, is_deleted: 0, message: { id: 6612, sender_id: null, title: 'Eos voluptatem consectetur sunt placeat quo et.', content: 'Occaecati odio eveniet vero sit consequuntur rerum quod officia.', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', sender: null } }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 7834, user_id: null, message_id: 6611, is_read: 0, is_archived: 0, is_deleted: 0, message: { id: 6611, sender_id: null, title: 'Et placeat occaecati et officia consequatur repellat doloremque eos.', content: 'Enim quasi ab nihil eaque neque deserunt beatae.', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', sender: null } }, { id: 7835, user_id: null, message_id: 6612, is_read: 0, is_archived: 0, is_deleted: 0, message: { id: 6612, sender_id: null, title: 'Eos voluptatem consectetur sunt placeat quo et.', content: 'Occaecati odio eveniet vero sit consequuntur rerum quod officia.', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', sender: null } }], items: { type: object } }
            tags:
                - Messages
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                filter:
                                    type: string
                                    description: 'Filter results by message status (available: archived, all). Defaults to non-archived only.'
                                    example: all
    /api/message:
        post:
            summary: 'Send message to multiple users'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to send messages'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to send messages' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Messages sent'
                                    count: 3
                                properties:
                                    message: { type: string, example: 'Messages sent' }
                                    count: { type: integer, example: 3 }
            tags:
                - Messages
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                title:
                                    type: string
                                    description: 'Message title.'
                                    example: 'Reminder about your vaccination'
                                content:
                                    type: string
                                    description: 'Message content text.'
                                    example: 'Lorem ipsum dolor sit amet'
                                roles:
                                    type: string
                                    description: 'Filter recipients with given role (comma-separated).'
                                    example: 'Clinician,Amputee'
                            required:
                                - title
    '/api/message/{id}/read':
        post:
            summary: 'Mark message as read'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 7836
                                    user_id: 15020
                                    message_id: 6613
                                    is_read: 0
                                    is_archived: 0
                                    is_deleted: 0
                                properties:
                                    id: { type: integer, example: 7836 }
                                    user_id: { type: integer, example: 15020 }
                                    message_id: { type: integer, example: 6613 }
                                    is_read: { type: integer, example: 0 }
                                    is_archived: { type: integer, example: 0 }
                                    is_deleted: { type: integer, example: 0 }
            tags:
                - Messages
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                state:
                                    type: integer
                                    description: 'Explicit read state. Default: 1 (true). The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
        parameters:
            -
                in: path
                name: id
                description: 'User Message ID (id from messages list; do not confuse with message_id).'
                example: 10
                required: true
                schema:
                    type: integer
    '/api/message/{id}/archive':
        post:
            summary: 'Mark message as archived'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 7837
                                    user_id: 15021
                                    message_id: 6614
                                    is_read: 0
                                    is_archived: 0
                                    is_deleted: 0
                                properties:
                                    id: { type: integer, example: 7837 }
                                    user_id: { type: integer, example: 15021 }
                                    message_id: { type: integer, example: 6614 }
                                    is_read: { type: integer, example: 0 }
                                    is_archived: { type: integer, example: 0 }
                                    is_deleted: { type: integer, example: 0 }
            tags:
                - Messages
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                state:
                                    type: integer
                                    description: 'Explicit archived state. Default: 1 (true). The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
        parameters:
            -
                in: path
                name: id
                description: 'User Message ID (id from messages list; do not confuse with message_id).'
                example: 10
                required: true
                schema:
                    type: integer
    /api/messages-and-tickets:
        get:
            summary: 'List of messages and tickets'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 2 }
                                    items: [{ type: UserMessage, date: '2024-11-02T10:00:00.000000Z', item: { id: 1, user_id: 1, message_id: 1, is_read: 0, is_archived: 0, is_deleted: 0, message: { id: 1, sender_id: 1, title: 'Message title', content: 'Message content', created_at: '2024-11-02T10:00:00.000000Z', updated_at: '2024-11-02T10:00:00.000000Z', sender: { id: 1, mrn: MRN, name: 'User name', email: user@domain.com, language: en, phone: '', phone_verified_at: null, address1: '', address2: '', postal_code: '', city: '', clinic_name: 'Test Company', clinic_location: 'Test Company Location', image: null, mfa_enabled: 0, mfa_method: email, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: Europe/Warsaw, notifications_at: '08:00:00', created_at: '2024-09-01T15:00:00.000000Z', updated_at: '2024-10-10T10:30:00.000000Z', invitation_status: accepted, roles: [{ id: 3, name: Clinician, guard_name: web, created_at: '2024-01-01T12:00:00.000000Z', updated_at: '2024-01-01T12:00:00.000000Z', pivot: { model_id: 1, role_id: 3, model_type: App\Models\User } }] } } } }, { type: SupportTicket, date: '2024-11-01T15:15:00.000000Z', item: { id: 1, sender_id: 1, recipient_id: 999, device_id: null, meeting_date: '2024-11-10T15:00:00.000000Z', meeting_type: none, contact_email: null, status: new, created_at: '2024-11-01T15:15:00.000000Z', updated_at: '2024-11-01T15:15:00.000000Z', sender: { id: 1, mrn: MRN, name: 'User name', email: user@domain.com, language: en, phone: '', phone_verified_at: null, address1: '', address2: '', postal_code: '', city: '', clinic_name: 'Test Company', clinic_location: 'Test Company Location', image: null, mfa_enabled: 0, mfa_method: email, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: Europe/Warsaw, notifications_at: '08:00:00', created_at: '2024-09-01T15:00:00.000000Z', updated_at: '2024-10-10T10:30:00.000000Z', invitation_status: accepted, roles: [{ id: 3, name: Clinician, guard_name: web, created_at: '2024-01-01T12:00:00.000000Z', updated_at: '2024-01-01T12:00:00.000000Z', pivot: { model_id: 1, role_id: 3, model_type: App\Models\User } }] }, recipient: { id: 2, mrn: MRN2, name: Patient, email: patient4@domain.com, language: en, phone: '', phone_verified_at: null, address1: '', address2: '', postal_code: '', city: '', clinic_name: null, clinic_location: null, image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: 1, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2024-10-01T15:00:00.000000Z', updated_at: '2024-10-10T10:30:00.000000Z', invitation_status: null, roles: [{ id: 5, name: Amputee, guard_name: web, created_at: '2024-01-01T12:00:00.000000Z', updated_at: '2024-01-01T12:00:00.000000Z', pivot: { model_id: 2, role_id: 5, model_type: App\Models\User } }] }, device: null, messages: [{ id: 1, ticket_id: 1, sender_id: 1, title: 'Communication channel', content: 'Welcome to the digital platform. Please use this channel for communicating with your clinician.', is_read: false, created_at: '2024-11-01T15:15:00.000000Z', updated_at: '2024-11-01T15:15:00.000000Z', attachments: [], sender: { id: 1, mrn: MRN, name: 'User name', email: user@domain.com, language: en, phone: '', phone_verified_at: null, address1: '', address2: '', postal_code: '', city: '', clinic_name: 'Test Company', clinic_location: 'Test Company Location', image: null, mfa_enabled: 0, mfa_method: email, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: Europe/Warsaw, notifications_at: '08:00:00', created_at: '2024-09-01T15:00:00.000000Z', updated_at: '2024-10-10T10:30:00.000000Z', invitation_status: accepted, roles: [{ id: 3, name: Clinician, guard_name: web, created_at: '2024-01-01T12:00:00.000000Z', updated_at: '2024-01-01T12:00:00.000000Z', pivot: { model_id: 1, role_id: 3, model_type: App\Models\User } }] } }] } }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 2 } }
                                    items: { type: array, example: [{ type: UserMessage, date: '2024-11-02T10:00:00.000000Z', item: { id: 1, user_id: 1, message_id: 1, is_read: 0, is_archived: 0, is_deleted: 0, message: { id: 1, sender_id: 1, title: 'Message title', content: 'Message content', created_at: '2024-11-02T10:00:00.000000Z', updated_at: '2024-11-02T10:00:00.000000Z', sender: { id: 1, mrn: MRN, name: 'User name', email: user@domain.com, language: en, phone: '', phone_verified_at: null, address1: '', address2: '', postal_code: '', city: '', clinic_name: 'Test Company', clinic_location: 'Test Company Location', image: null, mfa_enabled: 0, mfa_method: email, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: Europe/Warsaw, notifications_at: '08:00:00', created_at: '2024-09-01T15:00:00.000000Z', updated_at: '2024-10-10T10:30:00.000000Z', invitation_status: accepted, roles: [{ id: 3, name: Clinician, guard_name: web, created_at: '2024-01-01T12:00:00.000000Z', updated_at: '2024-01-01T12:00:00.000000Z', pivot: { model_id: 1, role_id: 3, model_type: App\Models\User } }] } } } }, { type: SupportTicket, date: '2024-11-01T15:15:00.000000Z', item: { id: 1, sender_id: 1, recipient_id: 999, device_id: null, meeting_date: '2024-11-10T15:00:00.000000Z', meeting_type: none, contact_email: null, status: new, created_at: '2024-11-01T15:15:00.000000Z', updated_at: '2024-11-01T15:15:00.000000Z', sender: { id: 1, mrn: MRN, name: 'User name', email: user@domain.com, language: en, phone: '', phone_verified_at: null, address1: '', address2: '', postal_code: '', city: '', clinic_name: 'Test Company', clinic_location: 'Test Company Location', image: null, mfa_enabled: 0, mfa_method: email, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: Europe/Warsaw, notifications_at: '08:00:00', created_at: '2024-09-01T15:00:00.000000Z', updated_at: '2024-10-10T10:30:00.000000Z', invitation_status: accepted, roles: [{ id: 3, name: Clinician, guard_name: web, created_at: '2024-01-01T12:00:00.000000Z', updated_at: '2024-01-01T12:00:00.000000Z', pivot: { model_id: 1, role_id: 3, model_type: App\Models\User } }] }, recipient: { id: 2, mrn: MRN2, name: Patient, email: patient4@domain.com, language: en, phone: '', phone_verified_at: null, address1: '', address2: '', postal_code: '', city: '', clinic_name: null, clinic_location: null, image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: 1, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2024-10-01T15:00:00.000000Z', updated_at: '2024-10-10T10:30:00.000000Z', invitation_status: null, roles: [{ id: 5, name: Amputee, guard_name: web, created_at: '2024-01-01T12:00:00.000000Z', updated_at: '2024-01-01T12:00:00.000000Z', pivot: { model_id: 2, role_id: 5, model_type: App\Models\User } }] }, device: null, messages: [{ id: 1, ticket_id: 1, sender_id: 1, title: 'Communication channel', content: 'Welcome to the digital platform. Please use this channel for communicating with your clinician.', is_read: false, created_at: '2024-11-01T15:15:00.000000Z', updated_at: '2024-11-01T15:15:00.000000Z', attachments: [], sender: { id: 1, mrn: MRN, name: 'User name', email: user@domain.com, language: en, phone: '', phone_verified_at: null, address1: '', address2: '', postal_code: '', city: '', clinic_name: 'Test Company', clinic_location: 'Test Company Location', image: null, mfa_enabled: 0, mfa_method: email, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: Europe/Warsaw, notifications_at: '08:00:00', created_at: '2024-09-01T15:00:00.000000Z', updated_at: '2024-10-10T10:30:00.000000Z', invitation_status: accepted, roles: [{ id: 3, name: Clinician, guard_name: web, created_at: '2024-01-01T12:00:00.000000Z', updated_at: '2024-01-01T12:00:00.000000Z', pivot: { model_id: 1, role_id: 3, model_type: App\Models\User } }] } }] } }], items: { type: object } }
            tags:
                - Messages
    '/api/logs/mobile/user/{userId}':
        get:
            summary: 'Get logs by user'
            description: ''
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>device</code>).'
                    example: device
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>device</code>).'
                        example: device
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view mobile logs'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view mobile logs' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 29, user_id: 15109, device_id: 6023, content: 'Culpa sapiente consequatur rerum sunt dolores inventore quae. Alias enim qui aut iure. Tenetur omnis sunt rerum eius.', created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z' }, { id: 30, user_id: 15110, device_id: 6024, content: 'Vitae est suscipit et soluta voluptas. Ipsa reprehenderit voluptatibus ipsa hic qui rerum. Dolores et ex odit ipsum nulla est architecto.', created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 29, user_id: 15109, device_id: 6023, content: 'Culpa sapiente consequatur rerum sunt dolores inventore quae. Alias enim qui aut iure. Tenetur omnis sunt rerum eius.', created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z' }, { id: 30, user_id: 15110, device_id: 6024, content: 'Vitae est suscipit et soluta voluptas. Ipsa reprehenderit voluptatibus ipsa hic qui rerum. Dolores et ex odit ipsum nulla est architecto.', created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z' }], items: { type: object } }
            tags:
                - 'Mobile logs'
        parameters:
            -
                in: path
                name: userId
                description: 'User ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/logs/mobile/device/{deviceId}':
        get:
            summary: 'Get logs by device'
            description: ''
            parameters:
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view mobile logs'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view mobile logs' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 31, user_id: 15111, device_id: 6025, content: 'Est aliquam nemo provident iste. Labore excepturi minus aut sequi. Consequatur reiciendis dignissimos illum architecto deleniti aut.', created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z' }, { id: 32, user_id: 15112, device_id: 6026, content: 'Enim soluta ducimus dolorum. Officiis sed quisquam est quia. Numquam quibusdam nobis temporibus consequatur earum fugiat. Tempore dignissimos et sapiente assumenda ipsum corporis.', created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 31, user_id: 15111, device_id: 6025, content: 'Est aliquam nemo provident iste. Labore excepturi minus aut sequi. Consequatur reiciendis dignissimos illum architecto deleniti aut.', created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z' }, { id: 32, user_id: 15112, device_id: 6026, content: 'Enim soluta ducimus dolorum. Officiis sed quisquam est quia. Numquam quibusdam nobis temporibus consequatur earum fugiat. Tempore dignissimos et sapiente assumenda ipsum corporis.', created_at: '2025-01-08T10:15:56.000000Z', updated_at: '2025-01-08T10:15:56.000000Z' }], items: { type: object } }
            tags:
                - 'Mobile logs'
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID.'
                example: 1
                required: true
                schema:
                    type: integer
    /api/logs/mobile/store:
        post:
            summary: 'Store log'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to write mobile logs'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to write mobile logs' }
                202:
                    description: '202, Success'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 1
                                    length: 10000
                                properties:
                                    id: { type: integer, example: 1 }
                                    length: { type: integer, example: 10000 }
            tags:
                - 'Mobile logs'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                device_id:
                                    type: string
                                    description: '<a href="#get-devices-list">Device</a> ID.'
                                    example: 1
                                content:
                                    type: string
                                    description: 'Log content.'
                                    example: 'Iste unde totam ut. Quis voluptate iste dolor aut velit. Est non quidem aperiam earum veritatis quis quas quo. Voluptatum iste magnam dolorum. Ea modi praesentium ut reprehenderit omnis nihil.'
                            required:
                                - device_id
                                - content
    '/api/logs/mobile/append/{id}':
        post:
            summary: 'Append to log'
            description: "Appends to existing log entry. Line-break character is added before appended content.\nMaximum size of single entry is 10000 characters. If new content is longer than this limit the beginning of content is cut off."
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to write mobile logs'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to write mobile logs' }
                404:
                    description: '404, Mobile log not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Mobile log not found'
                                properties:
                                    message: { type: string, example: 'Mobile log not found' }
                202:
                    description: '202, Success'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 1
                                    length: 10000
                                properties:
                                    id: { type: integer, example: 1 }
                                    length: { type: integer, example: 10000 }
            tags:
                - 'Mobile logs'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                content:
                                    type: string
                                    description: 'Log content.'
                                    example: 'Nam excepturi commodi vero ad libero ratione expedita. Voluptatum qui commodi neque laboriosam sed. Officiis officia perferendis dicta et modi.'
                            required:
                                - content
        parameters:
            -
                in: path
                name: id
                description: 'MobileLog ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/logs/mobile/{id}':
        delete:
            summary: 'Delete log'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to delete mobile logs'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to delete mobile logs' }
                404:
                    description: '404, Mobile log not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Mobile log not found'
                                properties:
                                    message: { type: string, example: 'Mobile log not found' }
                202:
                    description: '202, Success'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Mobile log entry deleted'
                                properties:
                                    message: { type: string, example: 'Mobile log entry deleted' }
            tags:
                - 'Mobile logs'
        parameters:
            -
                in: path
                name: id
                description: 'MobileLog ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/p2p/{clinicianId}/{amputeeId}':
        get:
            summary: 'Get active session data'
            description: 'Returns P2P sessions with status "waiting_for_decision" or "in_progress".'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, Session not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'P2P session not found'
                                properties:
                                    message: { type: string, example: 'P2P session not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 2571
                                    amputee_id: null
                                    device_id: null
                                    clinician_id: null
                                    amputee_uuid: ca439cfe-71bd-34a2-915a-3a2f3ea96aff
                                    clinician_uuid: 1f6e8c3f-a397-3ffe-b30b-85a66b1b6ab1
                                    token: IZFM6IPFRMKGMM2G3CP7HU4WI5V3W97LGWDSASXQ40H2B83EHJTGDY7DCX0GHTAL
                                    status: waiting_for_decision
                                    created_at: '2025-01-08T10:15:46.000000Z'
                                    updated_at: '2025-01-08T10:15:46.000000Z'
                                properties:
                                    id: { type: integer, example: 2571 }
                                    amputee_id: { type: string, example: null }
                                    device_id: { type: string, example: null }
                                    clinician_id: { type: string, example: null }
                                    amputee_uuid: { type: string, example: ca439cfe-71bd-34a2-915a-3a2f3ea96aff }
                                    clinician_uuid: { type: string, example: 1f6e8c3f-a397-3ffe-b30b-85a66b1b6ab1 }
                                    token: { type: string, example: IZFM6IPFRMKGMM2G3CP7HU4WI5V3W97LGWDSASXQ40H2B83EHJTGDY7DCX0GHTAL }
                                    status: { type: string, example: waiting_for_decision }
                                    created_at: { type: string, example: '2025-01-08T10:15:46.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:46.000000Z' }
            tags:
                - 'P2P Sessions'
        parameters:
            -
                in: path
                name: clinicianId
                description: 'User clinician ID.'
                example: 3
                required: true
                schema:
                    type: integer
            -
                in: path
                name: amputeeId
                description: 'User amputee entry ID.'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/p2p/{id}':
        get:
            summary: 'Get session data'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, Session not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'P2P session not found'
                                properties:
                                    message: { type: string, example: 'P2P session not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 2572
                                    amputee_id: null
                                    device_id: null
                                    clinician_id: null
                                    amputee_uuid: ecc92d47-d8e9-3484-9edd-e692d88892fb
                                    clinician_uuid: 9aa2aceb-b8f9-313e-8c43-bd39788065c7
                                    token: 76LTLJO2G2B63F7F3SJNUB5ZG1KDQO8KVM8WT9IOV6UQD8ZFNGPJV78RXHTX11ZJ
                                    status: waiting_for_decision
                                    created_at: '2025-01-08T10:15:46.000000Z'
                                    updated_at: '2025-01-08T10:15:46.000000Z'
                                properties:
                                    id: { type: integer, example: 2572 }
                                    amputee_id: { type: string, example: null }
                                    device_id: { type: string, example: null }
                                    clinician_id: { type: string, example: null }
                                    amputee_uuid: { type: string, example: ecc92d47-d8e9-3484-9edd-e692d88892fb }
                                    clinician_uuid: { type: string, example: 9aa2aceb-b8f9-313e-8c43-bd39788065c7 }
                                    token: { type: string, example: 76LTLJO2G2B63F7F3SJNUB5ZG1KDQO8KVM8WT9IOV6UQD8ZFNGPJV78RXHTX11ZJ }
                                    status: { type: string, example: waiting_for_decision }
                                    created_at: { type: string, example: '2025-01-08T10:15:46.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:46.000000Z' }
            tags:
                - 'P2P Sessions'
        parameters:
            -
                in: path
                name: id
                description: 'P2P session ID.'
                example: 3
                required: true
                schema:
                    type: integer
    /api/p2p/create:
        post:
            summary: 'Create new P2P session'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to create P2P session'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to create P2P session' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 2573
                                    amputee_id: 14997
                                    device_id: null
                                    clinician_id: 14998
                                    amputee_uuid: 8abc713a-0553-3dc9-8e47-8ba9b3995468
                                    clinician_uuid: 521ee09b-aade-3935-b9c9-ea901c113dc9
                                    token: R1HA1TWDAGR5LDUS1FUUN0BKA3K0W9AYPOKY7BMHGHW110RLK85NSC16IKXBE6GR
                                    status: waiting_for_decision
                                    created_at: '2025-01-08T10:15:46.000000Z'
                                    updated_at: '2025-01-08T10:15:46.000000Z'
                                properties:
                                    id: { type: integer, example: 2573 }
                                    amputee_id: { type: integer, example: 14997 }
                                    device_id: { type: string, example: null }
                                    clinician_id: { type: integer, example: 14998 }
                                    amputee_uuid: { type: string, example: 8abc713a-0553-3dc9-8e47-8ba9b3995468 }
                                    clinician_uuid: { type: string, example: 521ee09b-aade-3935-b9c9-ea901c113dc9 }
                                    token: { type: string, example: R1HA1TWDAGR5LDUS1FUUN0BKA3K0W9AYPOKY7BMHGHW110RLK85NSC16IKXBE6GR }
                                    status: { type: string, example: waiting_for_decision }
                                    created_at: { type: string, example: '2025-01-08T10:15:46.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:46.000000Z' }
            tags:
                - 'P2P Sessions'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                amputee_id:
                                    type: string
                                    description: 'Amputee ID.'
                                    example: 2
                                device_id:
                                    type: string
                                    description: 'Device ID.'
                                    example: 5
                                amputee_uuid:
                                    type: string
                                    description: 'Amputee''s UUID generated by integration platform.'
                                    example: 080d6eec-c190-3449-897b-8e0210b11f64
                                clinician_uuid:
                                    type: string
                                    description: 'Clinician''s UUID generated by integration platform.'
                                    example: b7de6ecf-eb98-3927-949a-d1c825e22728
                            required:
                                - amputee_id
                                - device_id
                                - amputee_uuid
                                - clinician_uuid
    '/api/p2p/{id}/update':
        post:
            summary: 'Update P2P session'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update P2P session'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update P2P session' }
                404:
                    description: '404, P2P session not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'P2P session not found'
                                properties:
                                    message: { type: string, example: 'P2P session not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 2574
                                    amputee_id: null
                                    device_id: null
                                    clinician_id: null
                                    amputee_uuid: d8912b6f-d421-3889-8ba3-959aaff6c353
                                    clinician_uuid: 08338c8c-50eb-3aa0-9ab1-be6623892d55
                                    token: 8AS6YPC1JIPVCFKM8DHBVHP91DERYROUWVEVAONSVMOC7LQ13OWN5Z3DHFEF90PO
                                    status: waiting_for_decision
                                    created_at: '2025-01-08T10:15:46.000000Z'
                                    updated_at: '2025-01-08T10:15:46.000000Z'
                                properties:
                                    id: { type: integer, example: 2574 }
                                    amputee_id: { type: string, example: null }
                                    device_id: { type: string, example: null }
                                    clinician_id: { type: string, example: null }
                                    amputee_uuid: { type: string, example: d8912b6f-d421-3889-8ba3-959aaff6c353 }
                                    clinician_uuid: { type: string, example: 08338c8c-50eb-3aa0-9ab1-be6623892d55 }
                                    token: { type: string, example: 8AS6YPC1JIPVCFKM8DHBVHP91DERYROUWVEVAONSVMOC7LQ13OWN5Z3DHFEF90PO }
                                    status: { type: string, example: waiting_for_decision }
                                    created_at: { type: string, example: '2025-01-08T10:15:46.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:46.000000Z' }
            tags:
                - 'P2P Sessions'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                status:
                                    type: string
                                    description: 'Session status. The value must be one of <code>waiting_for_decision</code>, <code>in_progress</code>, or <code>closed</code>.'
                                    example: closed
                            required:
                                - status
        parameters:
            -
                in: path
                name: id
                description: ''
                example: repudiandae
                required: true
                schema:
                    type: string
    /api/product/features:
        get:
            summary: 'List product features'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view product features and toggles'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view product features and toggles' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 75, name: maroon, slug: dicta-eligendi-magnam-voluptatem-voluptatem-et-dolorem, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
                                    - { id: 76, name: blue, slug: nam-sit-velit-ab-voluptates-aperiam, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
            tags:
                - 'Product features and toggles'
        post:
            summary: 'Create product feature'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage product features and toggles'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage product features and toggles' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 77
                                    name: white
                                    slug: architecto-et-necessitatibus-vel
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 77 }
                                    name: { type: string, example: white }
                                    slug: { type: string, example: architecto-et-necessitatibus-vel }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - 'Product features and toggles'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of product feature.'
                                    example: 'Remote config'
                                slug:
                                    type: string
                                    description: 'Simplified name of product feature without spaces (e.g. remote_config for Remote config name).'
                                    example: remote_config
                            required:
                                - name
                                - slug
    '/api/product/features/{id}':
        put:
            summary: 'Update product feature'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage product features and toggles'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage product features and toggles' }
                404:
                    description: '404, Product feature not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Product feature not found'
                                properties:
                                    message: { type: string, example: 'Product feature not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 78
                                    name: olive
                                    slug: aliquam-et-quaerat-ut-nostrum
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 78 }
                                    name: { type: string, example: olive }
                                    slug: { type: string, example: aliquam-et-quaerat-ut-nostrum }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - 'Product features and toggles'
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of product feature.'
                                    example: 'Remote config'
                                slug:
                                    type: string
                                    description: 'Simplified name of product feature without spaces (e.g. remote_config for Remote config name).'
                                    example: remote_config
        delete:
            summary: 'Delete product feature'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Product feature belongs to compatibility entries'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot delete: product feature belongs to existing compatibility entries (1)'
                                properties:
                                    message: { type: string, example: 'Cannot delete: product feature belongs to existing compatibility entries (1)' }
                404:
                    description: '404, Product feature not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Product feature not found'
                                properties:
                                    message: { type: string, example: 'Product feature not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Product feature deleted'
                                properties:
                                    message: { type: string, example: 'Product feature deleted' }
            tags:
                - 'Product features and toggles'
        parameters:
            -
                in: path
                name: id
                description: 'Product Feature ID'
                example: 12
                required: true
                schema:
                    type: integer
    /api/product/toggles:
        get:
            summary: 'List product toggles'
            description: "This endpoint returns list of global toggles.\nFor some users there could exist user toggle which overrides these settings."
            parameters:
                -
                    in: query
                    name: global
                    description: 'Pass value <code>1</code> to fetch list of global toggles without user overrides.'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Pass value <code>1</code> to fetch list of global toggles without user overrides.'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view product features and toggles'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view product features and toggles' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 82, name: blue, slug: vero-asperiores-consequatur-consequatur-debitis-nisi, enabled: 1, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
                                    - { id: 83, name: gray, slug: explicabo-tempora-ex-voluptas-quia-voluptatum-neque-error, enabled: 0, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
            tags:
                - 'Product features and toggles'
        post:
            summary: 'Create product toggle'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage product features and toggles'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage product features and toggles' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 84
                                    name: silver
                                    slug: earum-id-soluta-voluptas-magnam-qui-alias-dolor-voluptatem
                                    enabled: 0
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 84 }
                                    name: { type: string, example: silver }
                                    slug: { type: string, example: earum-id-soluta-voluptas-magnam-qui-alias-dolor-voluptatem }
                                    enabled: { type: integer, example: 0 }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - 'Product features and toggles'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of product toggle.'
                                    example: 'Remote config'
                                slug:
                                    type: string
                                    description: 'Simplified name of product toggle without spaces (e.g. remote_config for Remote config name).'
                                    example: remote_config
                                enabled:
                                    type: integer
                                    description: 'Is toggle enabled on this environment? The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
                            required:
                                - name
                                - slug
                                - enabled
    '/api/product/toggles/{id}':
        put:
            summary: 'Update product toggle'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage product features and toggles'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage product features and toggles' }
                404:
                    description: '404, Product toggle not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Product toggle not found'
                                properties:
                                    message: { type: string, example: 'Product toggle not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 85
                                    name: blue
                                    slug: ut-aut-facilis-illum-est-et-eaque-rerum
                                    enabled: 0
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 85 }
                                    name: { type: string, example: blue }
                                    slug: { type: string, example: ut-aut-facilis-illum-est-et-eaque-rerum }
                                    enabled: { type: integer, example: 0 }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - 'Product features and toggles'
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of product toggle.'
                                    example: 'Remote config'
                                slug:
                                    type: string
                                    description: 'Simplified name of product toggle without spaces (e.g. remote_config for Remote config name).'
                                    example: remote_config
                                enabled:
                                    type: integer
                                    description: 'Is toggle enabled on this environment? The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
        delete:
            summary: 'Delete product toggle'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage product features and toggles'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage product features and toggles' }
                404:
                    description: '404, Product toggle not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Product toggle not found'
                                properties:
                                    message: { type: string, example: 'Product toggle not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Product toggle deleted'
                                properties:
                                    message: { type: string, example: 'Product toggle deleted' }
            tags:
                - 'Product features and toggles'
        parameters:
            -
                in: path
                name: id
                description: 'Product Toggle ID'
                example: 2
                required: true
                schema:
                    type: integer
    /api/product/faq:
        get:
            summary: 'List product FAQ'
            description: 'This endpoint returns list of product FAQ.'
            parameters:
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view product features and toggles'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view product features and toggles' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 1, question: 'Mollitia ipsa sed commodi recusandae. Nemo doloremque sed saepe sit autem vel et et. Et occaecati molestias ducimus dolor et est. Nesciunt quia iusto earum adipisci in non soluta.', answer: 'Quas ullam soluta tenetur et ut dolor ipsam. Illo enim harum nam earum qui in. Vitae facere enim nesciunt sed dolor.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }, { id: 2, question: 'Amet dolores consequatur vel soluta ut assumenda perspiciatis. Minus rem in qui. Maiores eum qui enim iusto.', answer: 'Et nisi sunt eum expedita. Fugit ex consequatur perferendis velit quos minima voluptates. Et in sit beatae et rerum sit.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 1, question: 'Mollitia ipsa sed commodi recusandae. Nemo doloremque sed saepe sit autem vel et et. Et occaecati molestias ducimus dolor et est. Nesciunt quia iusto earum adipisci in non soluta.', answer: 'Quas ullam soluta tenetur et ut dolor ipsam. Illo enim harum nam earum qui in. Vitae facere enim nesciunt sed dolor.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }, { id: 2, question: 'Amet dolores consequatur vel soluta ut assumenda perspiciatis. Minus rem in qui. Maiores eum qui enim iusto.', answer: 'Et nisi sunt eum expedita. Fugit ex consequatur perferendis velit quos minima voluptates. Et in sit beatae et rerum sit.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }], items: { type: object } }
            tags:
                - 'Product features and toggles'
    '/api/user/{userId}/toggles':
        get:
            summary: 'List user toggles'
            description: 'This endpoint returns list of user toggles with their global toggles.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view product features and toggles'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view product features and toggles' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 40, toggle_id: 87, user_id: 15081, enabled: 1, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', toggle: { id: 87, name: teal, slug: ipsa-sint-fugiat-voluptatum-recusandae-et-pariatur-fugit, enabled: 0, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' } }
                                    - { id: 41, toggle_id: 89, user_id: 15082, enabled: 0, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', toggle: { id: 89, name: olive, slug: omnis-omnis-quisquam-omnis-qui-vel-dolor, enabled: 0, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' } }
            tags:
                - 'Product features and toggles'
        post:
            summary: 'Create user toggle'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage product features and toggles'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage product features and toggles' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 42
                                    toggle_id: 90
                                    user_id: 15083
                                    enabled: 1
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 42 }
                                    toggle_id: { type: integer, example: 90 }
                                    user_id: { type: integer, example: 15083 }
                                    enabled: { type: integer, example: 1 }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - 'Product features and toggles'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                toggle_id:
                                    type: integer
                                    description: 'Product toggle ID.'
                                    example: 1
                                enabled:
                                    type: integer
                                    description: 'Is user toggle enabled on this environment? The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
                            required:
                                - toggle_id
                                - enabled
        parameters:
            -
                in: path
                name: userId
                description: 'User ID.'
                example: 19
                required: true
                schema:
                    type: integer
    '/api/user/{userId}/toggles/{toggleId}':
        put:
            summary: 'Update user toggle'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage product features and toggles'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage product features and toggles' }
                404:
                    description: '404, User toggle not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User toggle not found'
                                properties:
                                    message: { type: string, example: 'User toggle not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 43
                                    toggle_id: 91
                                    user_id: 15084
                                    enabled: 1
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 43 }
                                    toggle_id: { type: integer, example: 91 }
                                    user_id: { type: integer, example: 15084 }
                                    enabled: { type: integer, example: 1 }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - 'Product features and toggles'
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                enabled:
                                    type: integer
                                    description: 'Is user toggle enabled on this environment? The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
        delete:
            summary: 'Delete user toggle'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to manage product features and toggles'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to manage product features and toggles' }
                404:
                    description: '404, User toggle not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User toggle not found'
                                properties:
                                    message: { type: string, example: 'User toggle not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User toggle deleted'
                                properties:
                                    message: { type: string, example: 'User toggle deleted' }
            tags:
                - 'Product features and toggles'
        parameters:
            -
                in: path
                name: userId
                description: 'User ID'
                example: 17
                required: true
                schema:
                    type: integer
            -
                in: path
                name: toggleId
                description: 'User Toggle ID'
                example: 10
                required: true
                schema:
                    type: integer
    /api/releases:
        get:
            summary: 'List releases'
            description: ''
            parameters:
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 58, version_type: App\Models\SoftwareVersion, version_id: 200, description: 'Dolor debitis aliquid et. Eos quas laboriosam facere ut eos. Sint doloribus cumque dolores distinctio.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', version: { id: 200, name: 0.31.37, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' } }, { id: 59, version_type: App\Models\SoftwareVersion, version_id: 201, description: 'Architecto earum qui minima nobis. Ut eum distinctio eligendi sed blanditiis. Ut voluptatem ut inventore quo. Expedita cumque delectus quia magni neque. Cum nihil enim eum et ut maxime.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', version: { id: 201, name: 5.13.45, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' } }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 58, version_type: App\Models\SoftwareVersion, version_id: 200, description: 'Dolor debitis aliquid et. Eos quas laboriosam facere ut eos. Sint doloribus cumque dolores distinctio.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', version: { id: 200, name: 0.31.37, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' } }, { id: 59, version_type: App\Models\SoftwareVersion, version_id: 201, description: 'Architecto earum qui minima nobis. Ut eum distinctio eligendi sed blanditiis. Ut voluptatem ut inventore quo. Expedita cumque delectus quia magni neque. Cum nihil enim eum et ut maxime.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', version: { id: 201, name: 5.13.45, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' } }], items: { type: object } }
            tags:
                - Releases
        post:
            summary: 'Create release'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to create release'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to create release' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 61
                                    version_type: App\Models\SoftwareVersion
                                    version_id: 203
                                    description: 'Autem ut tempora in saepe. Quia suscipit aut amet suscipit voluptates maxime aut quaerat. Maiores atque eos est.'
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 61 }
                                    version_type: { type: string, example: App\Models\SoftwareVersion }
                                    version_id: { type: integer, example: 203 }
                                    description: { type: string, example: 'Autem ut tempora in saepe. Quia suscipit aut amet suscipit voluptates maxime aut quaerat. Maiores atque eos est.' }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Releases
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                version_type:
                                    type: string
                                    description: 'Version type. The value must be one of <code>DeviceModel</code>, <code>SoftwareVersion</code>, <code>FirmwareVersion</code>, or <code>PCBVersion</code>.'
                                    example: SoftwareVersion
                                version_id:
                                    type: integer
                                    description: 'Version ID.'
                                    example: 1
                                description:
                                    type: string
                                    description: 'Release description.'
                                    example: 'This version fixes minor bugs.'
                            required:
                                - version_type
                                - version_id
    '/api/releases/{id}':
        get:
            summary: 'Get release'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                404:
                    description: '404, Release not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Release not found'
                                properties:
                                    message: { type: string, example: 'Release not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 60
                                    version_type: App\Models\SoftwareVersion
                                    version_id: 202
                                    description: 'Id qui aut blanditiis aspernatur. Non blanditiis quas est aperiam unde deleniti. Ut est et ipsum quia quia temporibus quod. Praesentium similique consectetur incidunt alias. Vel molestiae illum odit.'
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                    version: { id: 202, name: 7.21.50, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
                                properties:
                                    id: { type: integer, example: 60 }
                                    version_type: { type: string, example: App\Models\SoftwareVersion }
                                    version_id: { type: integer, example: 202 }
                                    description: { type: string, example: 'Id qui aut blanditiis aspernatur. Non blanditiis quas est aperiam unde deleniti. Ut est et ipsum quia quia temporibus quod. Praesentium similique consectetur incidunt alias. Vel molestiae illum odit.' }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    version: { type: object, example: { id: 202, name: 7.21.50, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' } }
            tags:
                - Releases
        put:
            summary: 'Update release'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update release'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update release' }
                404:
                    description: '404, Release not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Release not found'
                                properties:
                                    message: { type: string, example: 'Release not found' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 62
                                    version_type: App\Models\SoftwareVersion
                                    version_id: 204
                                    description: 'Dignissimos repudiandae rerum dolor aut. Quo ea doloribus quae eligendi voluptatibus nulla.'
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 62 }
                                    version_type: { type: string, example: App\Models\SoftwareVersion }
                                    version_id: { type: integer, example: 204 }
                                    description: { type: string, example: 'Dignissimos repudiandae rerum dolor aut. Quo ea doloribus quae eligendi voluptatibus nulla.' }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Releases
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                version_type:
                                    type: string
                                    description: 'Version type. The value must be one of <code>DeviceModel</code>, <code>SoftwareVersion</code>, <code>FirmwareVersion</code>, or <code>PCBVersion</code>.'
                                    example: SoftwareVersion
                                version_id:
                                    type: integer
                                    description: 'Version ID.'
                                    example: 1
                                description:
                                    type: string
                                    description: 'Release description.'
                                    example: 'This version fixes minor bugs.'
        delete:
            summary: 'Delete release'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to delete release'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to delete release' }
                404:
                    description: '404, Release not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Release not found'
                                properties:
                                    message: { type: string, example: 'Release not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Version deleted'
                                properties:
                                    message: { type: string, example: 'Version deleted' }
            tags:
                - Releases
        parameters:
            -
                in: path
                name: id
                description: ''
                example: eos
                required: true
                schema:
                    type: string
    /api/search:
        get:
            summary: Search
            description: "Searches in:\n<ul>\n    <li>users (by name and email)</li>\n    <li>devices (by serial number)</li>\n</ul>\nReturned collection contains entries of type <code>User</code> or <code>Device</code>.<br />\nIf the device has a patient assigned, this patient is included in the results as an entry of type User.<br />\nIf the device has no patient, the device is included in the results.<br />\nUsers included in the results, but not found directly have \"devices\" relation filled in with the devices that match the search query."
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ type: User, item: { id: 1, mrn: MRN, name: 'User name', email: user@domain.com, language: en, phone: '', phone_verified_at: null, address1: '', address2: '', postal_code: '', city: '', clinic_name: 'Test Company', clinic_location: 'Test Company Location', image: null, mfa_enabled: 0, mfa_method: email, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: Europe/Warsaw, notifications_at: '08:00:00', created_at: '2024-09-01T15:00:00.000000Z', updated_at: '2024-10-10T10:30:00.000000Z', invitation_status: accepted, pivot: { assigned_user_id: 2, user_id: 1 }, devices: [], roles: [{ id: 5, name: Amputee, guard_name: web, created_at: '2024-01-01T12:00:00.000000Z', updated_at: '2024-01-01T12:00:00.000000Z', pivot: { model_id: 1, role_id: 5, model_type: App\Models\User } }] } }, { type: Device, item: { id: 1, serial: SERIAL-NUMBER, bluetooth_id: BLUETOOTH_ID, model_id: 1, amputee_id: 1, firmware_version_id: 1, pcb_version_id: 1, active: 1, last_activity_at: '2024-11-11 12:00:00', created_at: '2024-08-30T15:00:00.000000Z', updated_at: '2024-09-01T16:00:00.000000Z', pivot: { user_id: 2, device_id: 1 } } }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ type: User, item: { id: 1, mrn: MRN, name: 'User name', email: user@domain.com, language: en, phone: '', phone_verified_at: null, address1: '', address2: '', postal_code: '', city: '', clinic_name: 'Test Company', clinic_location: 'Test Company Location', image: null, mfa_enabled: 0, mfa_method: email, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: Europe/Warsaw, notifications_at: '08:00:00', created_at: '2024-09-01T15:00:00.000000Z', updated_at: '2024-10-10T10:30:00.000000Z', invitation_status: accepted, pivot: { assigned_user_id: 2, user_id: 1 }, devices: [], roles: [{ id: 5, name: Amputee, guard_name: web, created_at: '2024-01-01T12:00:00.000000Z', updated_at: '2024-01-01T12:00:00.000000Z', pivot: { model_id: 1, role_id: 5, model_type: App\Models\User } }] } }, { type: Device, item: { id: 1, serial: SERIAL-NUMBER, bluetooth_id: BLUETOOTH_ID, model_id: 1, amputee_id: 1, firmware_version_id: 1, pcb_version_id: 1, active: 1, last_activity_at: '2024-11-11 12:00:00', created_at: '2024-08-30T15:00:00.000000Z', updated_at: '2024-09-01T16:00:00.000000Z', pivot: { user_id: 2, device_id: 1 } } }], items: { type: object } }
            tags:
                - Search
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                query:
                                    type: string
                                    description: 'Search query.'
                                    example: Tom
                            required:
                                - query
    /api/servicing/parts:
        get:
            summary: 'List of parts'
            description: ''
            parameters:
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to list service parts'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to list service parts' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 231, device_model: null, name: Visa, created_at: '2025-01-08T10:15:47.000000Z', updated_at: '2025-01-08T10:15:47.000000Z' }, { id: 232, device_model: null, name: MasterCard, created_at: '2025-01-08T10:15:47.000000Z', updated_at: '2025-01-08T10:15:47.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 231, device_model: null, name: Visa, created_at: '2025-01-08T10:15:47.000000Z', updated_at: '2025-01-08T10:15:47.000000Z' }, { id: 232, device_model: null, name: MasterCard, created_at: '2025-01-08T10:15:47.000000Z', updated_at: '2025-01-08T10:15:47.000000Z' }], items: { type: object } }
            tags:
                - Servicing
    /api/servicing/repair:
        post:
            summary: 'Report service repair'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: multipart/form-data
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to report service repair'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to report service repair' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 103
                                    user_id: 15015
                                    device_id: 5993
                                    created_at: '2025-01-08T10:15:47.000000Z'
                                    updated_at: '2025-01-08T10:15:47.000000Z'
                                    parts: [{ id: 95, repair_id: 103, part_id: 233, reason: 'Suscipit a eos sequi et ut nihil. Repellendus rerum nihil in autem perferendis. Molestiae voluptatem est non aliquid quis sed.', created_at: '2025-01-08T10:15:47.000000Z', updated_at: '2025-01-08T10:15:47.000000Z', part: { id: 233, device_model: null, name: MasterCard, created_at: '2025-01-08T10:15:47.000000Z', updated_at: '2025-01-08T10:15:47.000000Z' } }, { id: 96, repair_id: 103, part_id: 234, reason: 'Exercitationem soluta deleniti at possimus quae laborum eius. Veniam aut doloribus nihil aspernatur. Recusandae illo in et eos est.', created_at: '2025-01-08T10:15:47.000000Z', updated_at: '2025-01-08T10:15:47.000000Z', part: { id: 234, device_model: null, name: 'Visa Retired', created_at: '2025-01-08T10:15:47.000000Z', updated_at: '2025-01-08T10:15:47.000000Z' } }]
                                    attachments: [{ id: 107, repair_id: 103, file: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerxo2jV3', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z' }, { id: 108, repair_id: 103, file: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerbVhMgk', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z' }]
                                properties:
                                    id: { type: integer, example: 103 }
                                    user_id: { type: integer, example: 15015 }
                                    device_id: { type: integer, example: 5993 }
                                    created_at: { type: string, example: '2025-01-08T10:15:47.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:47.000000Z' }
                                    parts: { type: array, example: [{ id: 95, repair_id: 103, part_id: 233, reason: 'Suscipit a eos sequi et ut nihil. Repellendus rerum nihil in autem perferendis. Molestiae voluptatem est non aliquid quis sed.', created_at: '2025-01-08T10:15:47.000000Z', updated_at: '2025-01-08T10:15:47.000000Z', part: { id: 233, device_model: null, name: MasterCard, created_at: '2025-01-08T10:15:47.000000Z', updated_at: '2025-01-08T10:15:47.000000Z' } }, { id: 96, repair_id: 103, part_id: 234, reason: 'Exercitationem soluta deleniti at possimus quae laborum eius. Veniam aut doloribus nihil aspernatur. Recusandae illo in et eos est.', created_at: '2025-01-08T10:15:47.000000Z', updated_at: '2025-01-08T10:15:47.000000Z', part: { id: 234, device_model: null, name: 'Visa Retired', created_at: '2025-01-08T10:15:47.000000Z', updated_at: '2025-01-08T10:15:47.000000Z' } }], items: { type: object } }
                                    attachments: { type: array, example: [{ id: 107, repair_id: 103, file: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerxo2jV3', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z' }, { id: 108, repair_id: 103, file: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerbVhMgk', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z' }], items: { type: object } }
            tags:
                - Servicing
            requestBody:
                required: true
                content:
                    multipart/form-data:
                        schema:
                            type: object
                            properties:
                                user_id:
                                    type: integer
                                    description: 'User ID.'
                                    example: 1
                                device_id:
                                    type: integer
                                    description: 'Device ID.'
                                    example: 1
                                files:
                                    type: array
                                    description: 'Array of attachment files.'
                                    example: [null, null]
                                    items: { type: file }
                                parts:
                                    type: array
                                    description: 'Array of replaced parts.'
                                    example: [[], []]
                                    items: { type: object, properties: { part_id: { type: integer, description: 'Service part ID.', example: 1 }, reason: { type: string, description: 'Reason of part replacement.', example: 'Mechanical issue' } } }
                            required:
                                - user_id
                                - device_id
    /api/settings/app-version:
        get:
            summary: 'Get app version'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    version: 1.6.0
                                properties:
                                    version: { type: string, example: 1.6.0 }
            tags:
                - Settings
        post:
            summary: 'Update app version'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update settings'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update settings' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    version: 1.6.0
                                properties:
                                    version: { type: string, example: 1.6.0 }
            tags:
                - Settings
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                version:
                                    type: string
                                    description: 'App version.'
                                    example: 1.6.0
    /api/settings/silent-push:
        get:
            summary: 'Get silent push timeout'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    timeout: '15'
                                properties:
                                    timeout: { type: string, example: '15' }
            tags:
                - Settings
        post:
            summary: 'Update silent push timeout'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update settings'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update settings' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    timeout: '15'
                                properties:
                                    timeout: { type: string, example: '15' }
            tags:
                - Settings
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                timeout:
                                    type: integer
                                    description: 'Silent push timeout in minutes. Minimum value is <code>1</code> minute (<code>15</code> for production environment), maximum is <code>60</code> minutes.'
                                    example: 15
    /api/settings/languages:
        get:
            summary: 'Get available languages'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    languages: [de, en, es, it, pl, ru, uk]
                                properties:
                                    languages: { type: array, example: [de, en, es, it, pl, ru, uk], items: { type: string } }
            tags:
                - Settings
    /api/mobile/versions:
        get:
            summary: 'Get mobile stores versions'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    ios: '1.0'
                                    android: '1.0'
                                properties:
                                    ios: { type: string, example: '1.0' }
                                    android: { type: string, example: '1.0' }
            tags:
                - Settings
        post:
            summary: 'Update mobile stores versions'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update settings'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update settings' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    ios: '1.0'
                                    android: '1.0'
                                properties:
                                    ios: { type: string, example: '1.0' }
                                    android: { type: string, example: '1.0' }
            tags:
                - Settings
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                ios:
                                    type: string
                                    description: 'Apple AppStore current version.'
                                    example: '1.1'
                                android:
                                    type: string
                                    description: 'Google Play current version.'
                                    example: '1.1'
    /api/tickets:
        get:
            summary: 'Get tickets list'
            description: "Possible extend options:\n<ul>\n    <li>sender - the user who created ticket</li>\n    <li>recipient - the user who was ticket recipient</li>\n    <li>device - the device assigned to ticket</li>\n    <li>messages - message allocated to ticket</li>\n    <li>messages.attachments - list of attachments assigned to message and ticket</li>\n    <li>messages.sender - the user who wrote the message</li>\n</ul>"
            parameters:
                -
                    in: query
                    name: status
                    description: 'Filter tickets by status (available: <code>new</code>,<code>in_progress</code>,<code>closed</code>,<code>reopened</code>).'
                    example: sit
                    required: false
                    schema:
                        type: string
                        description: 'Filter tickets by status (available: <code>new</code>,<code>in_progress</code>,<code>closed</code>,<code>reopened</code>).'
                        example: sit
                -
                    in: query
                    name: sender
                    description: 'Filter tickets by sender.'
                    example: 12
                    required: false
                    schema:
                        type: integer
                        description: 'Filter tickets by sender.'
                        example: 12
                -
                    in: query
                    name: recipient
                    description: 'Filter tickets by recipient.'
                    example: 12
                    required: false
                    schema:
                        type: integer
                        description: 'Filter tickets by recipient.'
                        example: 12
                -
                    in: query
                    name: device
                    description: 'Filter tickets by device.'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Filter tickets by device.'
                        example: 1
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>sender</code>, <code> recipient</code>, <code> device</code>, <code> messages</code>, <code> messages.attachments</code>).'
                    example: 'sender, recipient, device, messages, messages.attachments'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>sender</code>, <code> recipient</code>, <code> device</code>, <code> messages</code>, <code> messages.attachments</code>).'
                        example: 'sender, recipient, device, messages, messages.attachments'
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: query
                    name: sortby
                    description: 'Sort by field (available: <code>sender_name</code>, <code> recipient_name</code>, <code> date</code>, <code> last_message</code>).'
                    example: 'sender_name, recipient_name, date, last_message'
                    required: false
                    schema:
                        type: string
                        description: 'Sort by field (available: <code>sender_name</code>, <code> recipient_name</code>, <code> date</code>, <code> last_message</code>).'
                        example: 'sender_name, recipient_name, date, last_message'
                -
                    in: query
                    name: sortdir
                    description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                    example: asc
                    required: false
                    schema:
                        type: string
                        description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                        example: asc
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to list support tickets'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to list support tickets' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 4440, sender_id: 15024, recipient_id: 15025, device_id: 5999, meeting_date: '2025-01-08T10:15:48.000000Z', meeting_type: online_meeting, contact_email: lakin.alyson@funk.info, status: new, created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', sender: { id: 15024, mrn: CO3BBAEX, name: 'Alia Osinski DDS', email: 1736331348doyle.dolly@example.net, language: en, phone: 281-246-0969, phone_country: BN, phone_verified_at: null, address1: '33156 Larue Loaf', address2: 'New Avismouth, DC 34639', postal_code: 91642-4921, city: Wolf-Corkery, clinic_name: 'South Krystal', clinic_location: "29108 Daphney Corner\nEast Ardenborough, MN 85519-8453", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', invitation_status: null, roles: [] }, recipient: { id: 15025, mrn: L5DJKZHB, name: 'Ivy Little', email: 1736331348cmurphy@example.org, language: en, phone: '+1 (915) 297-6353', phone_country: UA, phone_verified_at: null, address1: '16728 Fred Isle', address2: 'East Madilynborough, TX 57894', postal_code: '25445', city: Rolfson-Senger, clinic_name: 'East Francescoport', clinic_location: "878 Stokes Gateway Apt. 776\nLake Elnora, UT 58411-6256", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', invitation_status: null, roles: [] }, device: { id: 5999, serial: b3278913-bb19-3f4e-8342-4ba018ae1140, bluetooth_id: a4763bc7-6f1a-308e-94ad-d235e8390b86, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z' }, messages: [{ id: 4538, ticket_id: 4440, sender_id: 15026, title: Ms., content: 'Debitis sint et voluptates atque exercitationem blanditiis et corporis.', is_read: false, created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', attachments: [{ id: 6579, ticket_id: 4440, ticket_message_id: 4538, type: application/vnd.sema, title: 'Cordell Effertz', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/005577%3Ftext%3Dquibusdam', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z' }, { id: 6580, ticket_id: 4440, ticket_message_id: 4538, type: application/vnd.wap.wbxml, title: 'Clement Carter Sr.', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/0000bb%3Ftext%3Dpraesentium', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z' }, { id: 6581, ticket_id: 4440, ticket_message_id: 4538, type: video/h263, title: 'Maribel Reynolds V', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00bb00%3Ftext%3Dlaudantium', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z' }], sender: { id: 15026, mrn: H0UDXUWQ, name: 'Alysson Weber', email: 1736331348garnett.barton@example.com, language: en, phone: 689.821.4219, phone_country: UY, phone_verified_at: null, address1: '840 Zackary Shore', address2: 'Jacobistad, LA 08526-8030', postal_code: 57478-4462, city: Farrell-Kub, clinic_name: 'Port Mayra', clinic_location: "79933 Caesar Forest\nLake Johnpaul, TX 46224-8653", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', invitation_status: null, roles: [] } }] }, { id: 4441, sender_id: 15030, recipient_id: 15031, device_id: 6001, meeting_date: '2025-01-08T10:15:48.000000Z', meeting_type: online_meeting, contact_email: zolson@frami.com, status: new, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', sender: { id: 15030, mrn: KBQR5UQC, name: 'Mrs. Sarai Labadie', email: 1736331348jast.clarissa@example.com, language: en, phone: +1-949-261-0653, phone_country: TT, phone_verified_at: null, address1: '66111 Marcos Meadow Apt. 753', address2: 'Felipaside, NV 97458-4164', postal_code: '30458', city: 'Von Group', clinic_name: 'New Dimitrishire', clinic_location: "81732 Volkman Spring\nBoehmside, MD 74452-7586", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', invitation_status: null, roles: [] }, recipient: { id: 15031, mrn: XMEFIZNM, name: 'Dr. Glenna Adams', email: 1736331349kaycee.schamberger@example.org, language: en, phone: +1.631.543.2698, phone_country: IL, phone_verified_at: null, address1: '2477 Bayer Knolls Suite 526', address2: 'Kalebmouth, WV 10632-6505', postal_code: '81770', city: Berge-Mueller, clinic_name: Jastfort, clinic_location: "83818 Samir Parkway Suite 242\nNorth Jesseland, IA 13389-9778", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', invitation_status: null, roles: [] }, device: { id: 6001, serial: ae5d9b7e-675d-35f3-b690-f58a163bda57, bluetooth_id: 265fb788-c5aa-3938-a95a-440cac1ee6ff, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }, messages: [{ id: 4539, ticket_id: 4441, sender_id: 15032, title: Miss, content: 'Adipisci harum et quae est eveniet.', is_read: false, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', attachments: [{ id: 6582, ticket_id: 4441, ticket_message_id: 4539, type: text/vnd.curl.scurl, title: 'Stephanie Kozey', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00bbbb%3Ftext%3Dlaboriosam', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }, { id: 6583, ticket_id: 4441, ticket_message_id: 4539, type: application/x-xpinstall, title: 'Mrs. Dana Kuvalis', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/001188%3Ftext%3Dquia', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }, { id: 6584, ticket_id: 4441, ticket_message_id: 4539, type: audio/x-aac, title: 'Esther Moen', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/004488%3Ftext%3Ddolorem', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }], sender: { id: 15032, mrn: U7XDVZ4L, name: 'Prof. Priscilla Mohr DDS', email: 1736331349birdie11@example.org, language: en, phone: 786-918-1662, phone_country: SH, phone_verified_at: null, address1: '381 Domenic Pike', address2: 'New Diamond, MS 12360', postal_code: 43298-9685, city: 'Dach PLC', clinic_name: Pacochaland, clinic_location: "63162 Cronin Courts\nNew Ettie, NY 26840", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', invitation_status: null, roles: [] } }] }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 4440, sender_id: 15024, recipient_id: 15025, device_id: 5999, meeting_date: '2025-01-08T10:15:48.000000Z', meeting_type: online_meeting, contact_email: lakin.alyson@funk.info, status: new, created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', sender: { id: 15024, mrn: CO3BBAEX, name: 'Alia Osinski DDS', email: 1736331348doyle.dolly@example.net, language: en, phone: 281-246-0969, phone_country: BN, phone_verified_at: null, address1: '33156 Larue Loaf', address2: 'New Avismouth, DC 34639', postal_code: 91642-4921, city: Wolf-Corkery, clinic_name: 'South Krystal', clinic_location: "29108 Daphney Corner\nEast Ardenborough, MN 85519-8453", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', invitation_status: null, roles: [] }, recipient: { id: 15025, mrn: L5DJKZHB, name: 'Ivy Little', email: 1736331348cmurphy@example.org, language: en, phone: '+1 (915) 297-6353', phone_country: UA, phone_verified_at: null, address1: '16728 Fred Isle', address2: 'East Madilynborough, TX 57894', postal_code: '25445', city: Rolfson-Senger, clinic_name: 'East Francescoport', clinic_location: "878 Stokes Gateway Apt. 776\nLake Elnora, UT 58411-6256", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', invitation_status: null, roles: [] }, device: { id: 5999, serial: b3278913-bb19-3f4e-8342-4ba018ae1140, bluetooth_id: a4763bc7-6f1a-308e-94ad-d235e8390b86, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z' }, messages: [{ id: 4538, ticket_id: 4440, sender_id: 15026, title: Ms., content: 'Debitis sint et voluptates atque exercitationem blanditiis et corporis.', is_read: false, created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', attachments: [{ id: 6579, ticket_id: 4440, ticket_message_id: 4538, type: application/vnd.sema, title: 'Cordell Effertz', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/005577%3Ftext%3Dquibusdam', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z' }, { id: 6580, ticket_id: 4440, ticket_message_id: 4538, type: application/vnd.wap.wbxml, title: 'Clement Carter Sr.', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/0000bb%3Ftext%3Dpraesentium', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z' }, { id: 6581, ticket_id: 4440, ticket_message_id: 4538, type: video/h263, title: 'Maribel Reynolds V', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00bb00%3Ftext%3Dlaudantium', created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z' }], sender: { id: 15026, mrn: H0UDXUWQ, name: 'Alysson Weber', email: 1736331348garnett.barton@example.com, language: en, phone: 689.821.4219, phone_country: UY, phone_verified_at: null, address1: '840 Zackary Shore', address2: 'Jacobistad, LA 08526-8030', postal_code: 57478-4462, city: Farrell-Kub, clinic_name: 'Port Mayra', clinic_location: "79933 Caesar Forest\nLake Johnpaul, TX 46224-8653", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:48.000000Z', updated_at: '2025-01-08T10:15:48.000000Z', invitation_status: null, roles: [] } }] }, { id: 4441, sender_id: 15030, recipient_id: 15031, device_id: 6001, meeting_date: '2025-01-08T10:15:48.000000Z', meeting_type: online_meeting, contact_email: zolson@frami.com, status: new, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', sender: { id: 15030, mrn: KBQR5UQC, name: 'Mrs. Sarai Labadie', email: 1736331348jast.clarissa@example.com, language: en, phone: +1-949-261-0653, phone_country: TT, phone_verified_at: null, address1: '66111 Marcos Meadow Apt. 753', address2: 'Felipaside, NV 97458-4164', postal_code: '30458', city: 'Von Group', clinic_name: 'New Dimitrishire', clinic_location: "81732 Volkman Spring\nBoehmside, MD 74452-7586", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', invitation_status: null, roles: [] }, recipient: { id: 15031, mrn: XMEFIZNM, name: 'Dr. Glenna Adams', email: 1736331349kaycee.schamberger@example.org, language: en, phone: +1.631.543.2698, phone_country: IL, phone_verified_at: null, address1: '2477 Bayer Knolls Suite 526', address2: 'Kalebmouth, WV 10632-6505', postal_code: '81770', city: Berge-Mueller, clinic_name: Jastfort, clinic_location: "83818 Samir Parkway Suite 242\nNorth Jesseland, IA 13389-9778", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', invitation_status: null, roles: [] }, device: { id: 6001, serial: ae5d9b7e-675d-35f3-b690-f58a163bda57, bluetooth_id: 265fb788-c5aa-3938-a95a-440cac1ee6ff, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }, messages: [{ id: 4539, ticket_id: 4441, sender_id: 15032, title: Miss, content: 'Adipisci harum et quae est eveniet.', is_read: false, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', attachments: [{ id: 6582, ticket_id: 4441, ticket_message_id: 4539, type: text/vnd.curl.scurl, title: 'Stephanie Kozey', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00bbbb%3Ftext%3Dlaboriosam', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }, { id: 6583, ticket_id: 4441, ticket_message_id: 4539, type: application/x-xpinstall, title: 'Mrs. Dana Kuvalis', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/001188%3Ftext%3Dquia', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }, { id: 6584, ticket_id: 4441, ticket_message_id: 4539, type: audio/x-aac, title: 'Esther Moen', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/004488%3Ftext%3Ddolorem', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }], sender: { id: 15032, mrn: U7XDVZ4L, name: 'Prof. Priscilla Mohr DDS', email: 1736331349birdie11@example.org, language: en, phone: 786-918-1662, phone_country: SH, phone_verified_at: null, address1: '381 Domenic Pike', address2: 'New Diamond, MS 12360', postal_code: 43298-9685, city: 'Dach PLC', clinic_name: Pacochaland, clinic_location: "63162 Cronin Courts\nNew Ettie, NY 26840", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', invitation_status: null, roles: [] } }] }], items: { type: object } }
            tags:
                - 'Support Ticket'
        post:
            summary: 'Create new support ticket'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to create support ticket'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to create support ticket' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4447
                                    sender_id: 15052
                                    recipient_id: 15053
                                    device_id: 6009
                                    meeting_date: '2025-01-08T10:15:50.000000Z'
                                    meeting_type: online_meeting
                                    contact_email: koss.precious@lang.net
                                    status: new
                                    created_at: '2025-01-08T10:15:50.000000Z'
                                    updated_at: '2025-01-08T10:15:50.000000Z'
                                    sender: { id: 15052, mrn: B0R1RVYP, name: 'Mr. Cecil Brekke', email: 1736331350aron.robel@example.org, language: en, phone: '(269) 558-7521', phone_country: GB, phone_verified_at: null, address1: '7251 Metz Radial Apt. 171', address2: 'West Juwanborough, NJ 99949-7304', postal_code: 33388-8631, city: Nicolas-Mayert, clinic_name: Zaneborough, clinic_location: "529 Elody Glen\nGaylordtown, CA 34300", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z', invitation_status: null, roles: [] }
                                    recipient: { id: 15053, mrn: YDHED97W, name: 'Marley Ullrich Sr.', email: 1736331350akautzer@example.net, language: en, phone: '(386) 415-5681', phone_country: SH, phone_verified_at: null, address1: '58674 Manuela Land', address2: 'South Ricardo, MN 02024-6037', postal_code: '31253', city: 'Dooley-O''Hara', clinic_name: Blickstad, clinic_location: "129 River Land Apt. 747\nLake Verdaton, NY 93788", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z', invitation_status: null, roles: [] }
                                    device: { id: 6009, serial: 59e5c21c-2790-3250-9762-908b62ebd1c8, bluetooth_id: d6255726-b1cb-3357-a053-5db175890598, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z' }
                                    messages: [{ id: 4541, ticket_id: 4447, sender_id: 15054, title: Prof., content: 'Autem voluptas esse eos cupiditate.', is_read: false, created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z', attachments: [{ id: 6588, ticket_id: 4447, ticket_message_id: 4541, type: application/x-ustar, title: 'Dr. Ahmad Walker IV', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/000011%3Ftext%3Dquibusdam', created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z' }, { id: 6589, ticket_id: 4447, ticket_message_id: 4541, type: application/vnd.llamagraphics.life-balance.desktop, title: 'Twila Senger', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/007744%3Ftext%3Dvoluptatem', created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z' }, { id: 6590, ticket_id: 4447, ticket_message_id: 4541, type: text/vnd.in3d.3dml, title: 'Mylene Gutkowski V', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00ee00%3Ftext%3Det', created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z' }], sender: { id: 15054, mrn: VSLN9EW7, name: 'Dr. Alejandrin Hoeger V', email: 1736331350hardy.keeling@example.org, language: en, phone: 754.602.4662, phone_country: CY, phone_verified_at: null, address1: '8849 Luther Fords', address2: 'Crooksburgh, AZ 23152-5615', postal_code: '05351', city: 'Rempel and Sons', clinic_name: 'Lake Julesberg', clinic_location: "9234 Wisozk Underpass Apt. 379\nJadefort, MT 36065", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z', invitation_status: null, roles: [] } }]
                                properties:
                                    id: { type: integer, example: 4447 }
                                    sender_id: { type: integer, example: 15052 }
                                    recipient_id: { type: integer, example: 15053 }
                                    device_id: { type: integer, example: 6009 }
                                    meeting_date: { type: string, example: '2025-01-08T10:15:50.000000Z' }
                                    meeting_type: { type: string, example: online_meeting }
                                    contact_email: { type: string, example: koss.precious@lang.net }
                                    status: { type: string, example: new }
                                    created_at: { type: string, example: '2025-01-08T10:15:50.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:50.000000Z' }
                                    sender: { type: object, example: { id: 15052, mrn: B0R1RVYP, name: 'Mr. Cecil Brekke', email: 1736331350aron.robel@example.org, language: en, phone: '(269) 558-7521', phone_country: GB, phone_verified_at: null, address1: '7251 Metz Radial Apt. 171', address2: 'West Juwanborough, NJ 99949-7304', postal_code: 33388-8631, city: Nicolas-Mayert, clinic_name: Zaneborough, clinic_location: "529 Elody Glen\nGaylordtown, CA 34300", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z', invitation_status: null, roles: [] } }
                                    recipient: { type: object, example: { id: 15053, mrn: YDHED97W, name: 'Marley Ullrich Sr.', email: 1736331350akautzer@example.net, language: en, phone: '(386) 415-5681', phone_country: SH, phone_verified_at: null, address1: '58674 Manuela Land', address2: 'South Ricardo, MN 02024-6037', postal_code: '31253', city: 'Dooley-O''Hara', clinic_name: Blickstad, clinic_location: "129 River Land Apt. 747\nLake Verdaton, NY 93788", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z', invitation_status: null, roles: [] } }
                                    device: { type: object, example: { id: 6009, serial: 59e5c21c-2790-3250-9762-908b62ebd1c8, bluetooth_id: d6255726-b1cb-3357-a053-5db175890598, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z' } }
                                    messages: { type: array, example: [{ id: 4541, ticket_id: 4447, sender_id: 15054, title: Prof., content: 'Autem voluptas esse eos cupiditate.', is_read: false, created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z', attachments: [{ id: 6588, ticket_id: 4447, ticket_message_id: 4541, type: application/x-ustar, title: 'Dr. Ahmad Walker IV', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/000011%3Ftext%3Dquibusdam', created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z' }, { id: 6589, ticket_id: 4447, ticket_message_id: 4541, type: application/vnd.llamagraphics.life-balance.desktop, title: 'Twila Senger', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/007744%3Ftext%3Dvoluptatem', created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z' }, { id: 6590, ticket_id: 4447, ticket_message_id: 4541, type: text/vnd.in3d.3dml, title: 'Mylene Gutkowski V', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00ee00%3Ftext%3Det', created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z' }], sender: { id: 15054, mrn: VSLN9EW7, name: 'Dr. Alejandrin Hoeger V', email: 1736331350hardy.keeling@example.org, language: en, phone: 754.602.4662, phone_country: CY, phone_verified_at: null, address1: '8849 Luther Fords', address2: 'Crooksburgh, AZ 23152-5615', postal_code: '05351', city: 'Rempel and Sons', clinic_name: 'Lake Julesberg', clinic_location: "9234 Wisozk Underpass Apt. 379\nJadefort, MT 36065", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z', invitation_status: null, roles: [] } }], items: { type: object } }
            tags:
                - 'Support Ticket'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                recipient:
                                    type: integer
                                    description: 'User the support ticket is assigned to. For Amputee role main clinician will be automatically assigned instead.'
                                    example: 1
                                device:
                                    type: integer
                                    description: 'Device the support ticket is assigned to.'
                                    example: 1
                                meeting_type:
                                    type: string
                                    description: 'Type of support meeting The value must be one of <code>online_meeting</code>, <code>phone_call</code>, <code>personally</code>, or <code>none</code>.'
                                    example: online_meeting
                                meeting_date:
                                    type: string
                                    description: 'Date of support meeting The value must be a valid date.'
                                    example: 2025-01-08T10:15:50+00:00
                                contact_email:
                                    type: string
                                    description: 'Email address for later contact The value must be a valid email address.'
                                    example: twila.grant@glover.net
                                message:
                                    type: object
                                    description: ''
                                    example: []
                                    properties: { content: { type: string, description: 'Content of message.', example: 'Recusandae reprehenderit illum eos sequi rerum.' }, title: { type: string, description: 'Message title.', example: 'Molestiae quia veniam.' }, attachments: { type: array, description: 'The value must be a file.', example: [null, null], items: { type: file } } }
                            required:
                                - recipient
                                - meeting_type
                                - meeting_date
    /api/tickets/status:
        get:
            summary: 'Get tickets status'
            description: 'Counts tickets by their status'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    unread: 1
                                properties:
                                    unread: { type: integer, example: 1 }
            tags:
                - 'Support Ticket'
    '/api/ticket/{id}':
        get:
            summary: 'Get support ticket'
            description: 'Returns single support ticket in response'
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>sender</code>, <code> recipient</code>, <code> device</code>, <code> messages</code>, <code> messages.attachments</code>, <code> messages.sender</code>).'
                    example: 'sender, recipient, device, messages, messages.attachments, messages.sender'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>sender</code>, <code> recipient</code>, <code> device</code>, <code> messages</code>, <code> messages.attachments</code>, <code> messages.sender</code>).'
                        example: 'sender, recipient, device, messages, messages.attachments, messages.sender'
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view support ticket'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view support ticket' }
                404:
                    description: '404, Support ticket not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Support ticket not found'
                                properties:
                                    message: { type: string, example: 'Support ticket not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4442
                                    sender_id: 15036
                                    recipient_id: 15037
                                    device_id: 6003
                                    meeting_date: '2025-01-08T10:15:49.000000Z'
                                    meeting_type: online_meeting
                                    contact_email: mosciski.walker@rodriguez.org
                                    status: new
                                    created_at: '2025-01-08T10:15:49.000000Z'
                                    updated_at: '2025-01-08T10:15:49.000000Z'
                                    sender: { id: 15036, mrn: HBWY4ZIL, name: 'Maria Hackett', email: 1736331349theller@example.org, language: en, phone: '+1 (952) 815-8485', phone_country: FM, phone_verified_at: null, address1: '178 Toney Walks Suite 196', address2: 'North Iliana, ID 87312', postal_code: 29535-2830, city: Fay-Daugherty, clinic_name: Braulioview, clinic_location: "8459 Williamson Meadow Suite 715\nWest Concepcion, MA 14049-7604", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', invitation_status: null, roles: [] }
                                    recipient: { id: 15037, mrn: ZVL7Z4TO, name: 'Ms. Julie Klocko V', email: 1736331349angeline.cruickshank@example.org, language: en, phone: '+1 (904) 704-4090', phone_country: LA, phone_verified_at: null, address1: '18731 Joanne Creek', address2: 'Wilkinsonview, IA 79971-5731', postal_code: 39140-5300, city: Aufderhar-Swaniawski, clinic_name: 'New Tracyville', clinic_location: "48012 Moore Summit Suite 853\nJarrettshire, MI 52232-9846", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', invitation_status: null, roles: [] }
                                    device: { id: 6003, serial: ef13fc11-445c-3826-9f79-07df33a52300, bluetooth_id: 7fa9354a-1039-38bc-b32f-3e27b3814c1f, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }
                                    messages: [{ id: 4540, ticket_id: 4442, sender_id: 15038, title: Miss, content: 'Temporibus est et eligendi doloremque quia iusto.', is_read: false, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', attachments: [{ id: 6585, ticket_id: 4442, ticket_message_id: 4540, type: application/vnd.openofficeorg.extension, title: 'Karine Kovacek', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/001155%3Ftext%3Domnis', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }, { id: 6586, ticket_id: 4442, ticket_message_id: 4540, type: application/vnd.adobe.xdp+xml, title: 'Rex Fay IV', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00aa11%3Ftext%3Dnisi', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }, { id: 6587, ticket_id: 4442, ticket_message_id: 4540, type: text/x-setext, title: 'Mae Daniel', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/0000ee%3Ftext%3Dvoluptate', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }], sender: { id: 15038, mrn: 6M05T65F, name: 'Soledad Schumm', email: 1736331349wpurdy@example.net, language: en, phone: '(848) 476-7118', phone_country: MS, phone_verified_at: null, address1: '755 Viva Lodge Apt. 131', address2: 'South Estrellaside, IN 78695-0476', postal_code: '56103', city: 'Adams Group', clinic_name: 'Lake Albertha', clinic_location: "712 Kerluke Plains\nHeathcotemouth, OK 66364", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', invitation_status: null, roles: [] } }]
                                properties:
                                    id: { type: integer, example: 4442 }
                                    sender_id: { type: integer, example: 15036 }
                                    recipient_id: { type: integer, example: 15037 }
                                    device_id: { type: integer, example: 6003 }
                                    meeting_date: { type: string, example: '2025-01-08T10:15:49.000000Z' }
                                    meeting_type: { type: string, example: online_meeting }
                                    contact_email: { type: string, example: mosciski.walker@rodriguez.org }
                                    status: { type: string, example: new }
                                    created_at: { type: string, example: '2025-01-08T10:15:49.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:49.000000Z' }
                                    sender: { type: object, example: { id: 15036, mrn: HBWY4ZIL, name: 'Maria Hackett', email: 1736331349theller@example.org, language: en, phone: '+1 (952) 815-8485', phone_country: FM, phone_verified_at: null, address1: '178 Toney Walks Suite 196', address2: 'North Iliana, ID 87312', postal_code: 29535-2830, city: Fay-Daugherty, clinic_name: Braulioview, clinic_location: "8459 Williamson Meadow Suite 715\nWest Concepcion, MA 14049-7604", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', invitation_status: null, roles: [] } }
                                    recipient: { type: object, example: { id: 15037, mrn: ZVL7Z4TO, name: 'Ms. Julie Klocko V', email: 1736331349angeline.cruickshank@example.org, language: en, phone: '+1 (904) 704-4090', phone_country: LA, phone_verified_at: null, address1: '18731 Joanne Creek', address2: 'Wilkinsonview, IA 79971-5731', postal_code: 39140-5300, city: Aufderhar-Swaniawski, clinic_name: 'New Tracyville', clinic_location: "48012 Moore Summit Suite 853\nJarrettshire, MI 52232-9846", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', invitation_status: null, roles: [] } }
                                    device: { type: object, example: { id: 6003, serial: ef13fc11-445c-3826-9f79-07df33a52300, bluetooth_id: 7fa9354a-1039-38bc-b32f-3e27b3814c1f, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' } }
                                    messages: { type: array, example: [{ id: 4540, ticket_id: 4442, sender_id: 15038, title: Miss, content: 'Temporibus est et eligendi doloremque quia iusto.', is_read: false, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', attachments: [{ id: 6585, ticket_id: 4442, ticket_message_id: 4540, type: application/vnd.openofficeorg.extension, title: 'Karine Kovacek', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/001155%3Ftext%3Domnis', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }, { id: 6586, ticket_id: 4442, ticket_message_id: 4540, type: application/vnd.adobe.xdp+xml, title: 'Rex Fay IV', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00aa11%3Ftext%3Dnisi', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }, { id: 6587, ticket_id: 4442, ticket_message_id: 4540, type: text/x-setext, title: 'Mae Daniel', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/0000ee%3Ftext%3Dvoluptate', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }], sender: { id: 15038, mrn: 6M05T65F, name: 'Soledad Schumm', email: 1736331349wpurdy@example.net, language: en, phone: '(848) 476-7118', phone_country: MS, phone_verified_at: null, address1: '755 Viva Lodge Apt. 131', address2: 'South Estrellaside, IN 78695-0476', postal_code: '56103', city: 'Adams Group', clinic_name: 'Lake Albertha', clinic_location: "712 Kerluke Plains\nHeathcotemouth, OK 66364", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z', invitation_status: null, roles: [] } }], items: { type: object } }
            tags:
                - 'Support Ticket'
        parameters:
            -
                in: path
                name: id
                description: 'Ticket ID.'
                example: 3
                required: true
                schema:
                    type: integer
    '/api/ticket/{id}/history':
        get:
            summary: 'Get support ticket history'
            description: ''
            parameters:
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: query
                    name: sortby
                    description: 'Sort by field (available: <code>date</code>). Default: <code>date</code> (<code>desc</code>).'
                    example: date
                    required: false
                    schema:
                        type: string
                        description: 'Sort by field (available: <code>date</code>). Default: <code>date</code> (<code>desc</code>).'
                        example: date
                -
                    in: query
                    name: sortdir
                    description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                    example: asc
                    required: false
                    schema:
                        type: string
                        description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                        example: asc
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view support ticket'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view support ticket' }
                404:
                    description: '404, Support ticket not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Support ticket not found'
                                properties:
                                    message: { type: string, example: 'Support ticket not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 3725, ticket_id: 4443, author_id: 15042, action: qui, reason: 'Perspiciatis nesciunt ipsam fugiat corrupti sed.', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }, { id: 3726, ticket_id: 4444, author_id: 15045, action: beatae, reason: 'Voluptate reprehenderit optio est ullam et.', created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z' }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 3725, ticket_id: 4443, author_id: 15042, action: qui, reason: 'Perspiciatis nesciunt ipsam fugiat corrupti sed.', created_at: '2025-01-08T10:15:49.000000Z', updated_at: '2025-01-08T10:15:49.000000Z' }, { id: 3726, ticket_id: 4444, author_id: 15045, action: beatae, reason: 'Voluptate reprehenderit optio est ullam et.', created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z' }], items: { type: object } }
            tags:
                - 'Support Ticket'
        parameters:
            -
                in: path
                name: id
                description: 'Ticket ID.'
                example: 3
                required: true
                schema:
                    type: integer
    /api/tickets/available-filters:
        get:
            summary: 'Get support ticket available filters'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    data: [{ id: 4445, sender_id: 15046, recipient_id: 15047, device_id: 6006, meeting_date: '2025-01-08T10:15:50.000000Z', meeting_type: online_meeting, contact_email: zoey.bruen@hotmail.com, status: new, created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z' }, { id: 4446, sender_id: 15048, recipient_id: 15049, device_id: 6007, meeting_date: '2025-01-08T10:15:50.000000Z', meeting_type: online_meeting, contact_email: katheryn83@hotmail.com, status: new, created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z' }]
                                properties:
                                    data: { type: array, example: [{ id: 4445, sender_id: 15046, recipient_id: 15047, device_id: 6006, meeting_date: '2025-01-08T10:15:50.000000Z', meeting_type: online_meeting, contact_email: zoey.bruen@hotmail.com, status: new, created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z' }, { id: 4446, sender_id: 15048, recipient_id: 15049, device_id: 6007, meeting_date: '2025-01-08T10:15:50.000000Z', meeting_type: online_meeting, contact_email: katheryn83@hotmail.com, status: new, created_at: '2025-01-08T10:15:50.000000Z', updated_at: '2025-01-08T10:15:50.000000Z' }], items: { type: object } }
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view support ticket'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view support ticket' }
            tags:
                - 'Support Ticket'
    '/api/ticket/{id}/close':
        post:
            summary: 'Close support ticket'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to close support ticket'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to close support ticket' }
                404:
                    description: '404, Support ticket not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Support ticket not found'
                                properties:
                                    message: { type: string, example: 'Support ticket not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4448
                                    sender_id: 15058
                                    recipient_id: 15059
                                    device_id: 6011
                                    meeting_date: '2025-01-08T10:15:51.000000Z'
                                    meeting_type: online_meeting
                                    contact_email: dillon88@damore.com
                                    status: new
                                    created_at: '2025-01-08T10:15:51.000000Z'
                                    updated_at: '2025-01-08T10:15:51.000000Z'
                                properties:
                                    id: { type: integer, example: 4448 }
                                    sender_id: { type: integer, example: 15058 }
                                    recipient_id: { type: integer, example: 15059 }
                                    device_id: { type: integer, example: 6011 }
                                    meeting_date: { type: string, example: '2025-01-08T10:15:51.000000Z' }
                                    meeting_type: { type: string, example: online_meeting }
                                    contact_email: { type: string, example: dillon88@damore.com }
                                    status: { type: string, example: new }
                                    created_at: { type: string, example: '2025-01-08T10:15:51.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:51.000000Z' }
            tags:
                - 'Support Ticket'
        parameters:
            -
                in: path
                name: id
                description: 'Support ticket ID.'
                example: 3
                required: true
                schema:
                    type: integer
    '/api/ticket/{id}/reopen':
        post:
            summary: 'Reopen support ticket'
            description: "Patient (Amputee) role can reopen only non-config tickets. For config tickets patients will get \"Insufficient permission\" response.\nFor patients role <code>reason</code> field is required."
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to reopen support ticket'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to reopen support ticket' }
                404:
                    description: '404, Support ticket not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Support ticket not found'
                                properties:
                                    message: { type: string, example: 'Support ticket not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 3727
                                    ticket_id: 4449
                                    author_id: 15062
                                    action: atque
                                    reason: 'Fugiat hic est deleniti.'
                                    created_at: '2025-01-08T10:15:51.000000Z'
                                    updated_at: '2025-01-08T10:15:51.000000Z'
                                properties:
                                    id: { type: integer, example: 3727 }
                                    ticket_id: { type: integer, example: 4449 }
                                    author_id: { type: integer, example: 15062 }
                                    action: { type: string, example: atque }
                                    reason: { type: string, example: 'Fugiat hic est deleniti.' }
                                    created_at: { type: string, example: '2025-01-08T10:15:51.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:51.000000Z' }
            tags:
                - 'Support Ticket'
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                reason:
                                    type: string
                                    description: 'Reason for reopen action.'
                                    example: 'Something is still not working'
        parameters:
            -
                in: path
                name: id
                description: 'Support ticket ID.'
                example: 3
                required: true
                schema:
                    type: integer
    '/api/ticket/{id}/messages':
        post:
            summary: 'Create new support ticket message'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: multipart/form-data
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to create support ticket'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to create support ticket' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4450
                                    sender_id: 15065
                                    recipient_id: 15066
                                    device_id: 6014
                                    meeting_date: '2025-01-08T10:15:51.000000Z'
                                    meeting_type: online_meeting
                                    contact_email: yschmitt@hermiston.org
                                    status: new
                                    created_at: '2025-01-08T10:15:51.000000Z'
                                    updated_at: '2025-01-08T10:15:51.000000Z'
                                    sender: { id: 15065, mrn: XSRJZGZT, name: 'Laury Zieme III', email: 1736331351keebler.modesta@example.com, language: en, phone: '+12486619657', phone_country: ER, phone_verified_at: null, address1: '4943 Raquel Plaza Apt. 312', address2: 'Pfannerstillville, CO 42268', postal_code: 33812-2776, city: 'Funk LLC', clinic_name: 'New Michellemouth', clinic_location: "4839 Runolfsson Streets\nSouth Kaelynton, WA 45014-1919", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z', invitation_status: null, roles: [] }
                                    recipient: { id: 15066, mrn: 3ED8B0EX, name: 'Candace King', email: 1736331351zrolfson@example.org, language: en, phone: 1-850-607-3713, phone_country: CU, phone_verified_at: null, address1: '465 Aditya Estates Suite 057', address2: 'South Ewell, MT 89560-1150', postal_code: '95326', city: 'Boyle PLC', clinic_name: 'Port Nedraton', clinic_location: "984 Nienow Crest\nWisokyborough, PA 67532", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z', invitation_status: null, roles: [] }
                                    device: { id: 6014, serial: b742050f-a141-32da-a8ee-b828cba7eb20, bluetooth_id: 6af1a96e-ca82-34e1-ac09-2a852a860f1f, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z' }
                                    messages: [{ id: 4542, ticket_id: 4450, sender_id: 15067, title: Ms., content: 'Qui adipisci saepe nihil est maxime labore.', is_read: false, created_at: '2025-01-08T10:15:52.000000Z', updated_at: '2025-01-08T10:15:52.000000Z', attachments: [{ id: 6591, ticket_id: 4450, ticket_message_id: 4542, type: application/javascript, title: 'Matilde Bins', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/008888%3Ftext%3Deveniet', created_at: '2025-01-08T10:15:52.000000Z', updated_at: '2025-01-08T10:15:52.000000Z' }, { id: 6592, ticket_id: 4450, ticket_message_id: 4542, type: application/x-sh, title: 'Xavier McGlynn', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00dd00%3Ftext%3Dsoluta', created_at: '2025-01-08T10:15:52.000000Z', updated_at: '2025-01-08T10:15:52.000000Z' }, { id: 6593, ticket_id: 4450, ticket_message_id: 4542, type: application/vnd.kde.kpresenter, title: 'Mathias Huels IV', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00bb44%3Ftext%3Deos', created_at: '2025-01-08T10:15:52.000000Z', updated_at: '2025-01-08T10:15:52.000000Z' }], sender: { id: 15067, mrn: UPCPEJUF, name: 'Dr. Maxine Will', email: 1736331351mueller.alexie@example.net, language: en, phone: +1.870.441.4265, phone_country: AM, phone_verified_at: null, address1: '3545 Runte Station', address2: 'Elliotmouth, OH 08235', postal_code: '97740', city: 'Gerhold PLC', clinic_name: Stehrport, clinic_location: "186 Lowe Junction\nMagdalenaland, KS 82379-8636", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:52.000000Z', updated_at: '2025-01-08T10:15:52.000000Z', invitation_status: null, roles: [] } }]
                                properties:
                                    id: { type: integer, example: 4450 }
                                    sender_id: { type: integer, example: 15065 }
                                    recipient_id: { type: integer, example: 15066 }
                                    device_id: { type: integer, example: 6014 }
                                    meeting_date: { type: string, example: '2025-01-08T10:15:51.000000Z' }
                                    meeting_type: { type: string, example: online_meeting }
                                    contact_email: { type: string, example: yschmitt@hermiston.org }
                                    status: { type: string, example: new }
                                    created_at: { type: string, example: '2025-01-08T10:15:51.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:51.000000Z' }
                                    sender: { type: object, example: { id: 15065, mrn: XSRJZGZT, name: 'Laury Zieme III', email: 1736331351keebler.modesta@example.com, language: en, phone: '+12486619657', phone_country: ER, phone_verified_at: null, address1: '4943 Raquel Plaza Apt. 312', address2: 'Pfannerstillville, CO 42268', postal_code: 33812-2776, city: 'Funk LLC', clinic_name: 'New Michellemouth', clinic_location: "4839 Runolfsson Streets\nSouth Kaelynton, WA 45014-1919", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z', invitation_status: null, roles: [] } }
                                    recipient: { type: object, example: { id: 15066, mrn: 3ED8B0EX, name: 'Candace King', email: 1736331351zrolfson@example.org, language: en, phone: 1-850-607-3713, phone_country: CU, phone_verified_at: null, address1: '465 Aditya Estates Suite 057', address2: 'South Ewell, MT 89560-1150', postal_code: '95326', city: 'Boyle PLC', clinic_name: 'Port Nedraton', clinic_location: "984 Nienow Crest\nWisokyborough, PA 67532", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z', invitation_status: null, roles: [] } }
                                    device: { type: object, example: { id: 6014, serial: b742050f-a141-32da-a8ee-b828cba7eb20, bluetooth_id: 6af1a96e-ca82-34e1-ac09-2a852a860f1f, model_id: null, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:51.000000Z', updated_at: '2025-01-08T10:15:51.000000Z' } }
                                    messages: { type: array, example: [{ id: 4542, ticket_id: 4450, sender_id: 15067, title: Ms., content: 'Qui adipisci saepe nihil est maxime labore.', is_read: false, created_at: '2025-01-08T10:15:52.000000Z', updated_at: '2025-01-08T10:15:52.000000Z', attachments: [{ id: 6591, ticket_id: 4450, ticket_message_id: 4542, type: application/javascript, title: 'Matilde Bins', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/008888%3Ftext%3Deveniet', created_at: '2025-01-08T10:15:52.000000Z', updated_at: '2025-01-08T10:15:52.000000Z' }, { id: 6592, ticket_id: 4450, ticket_message_id: 4542, type: application/x-sh, title: 'Xavier McGlynn', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00dd00%3Ftext%3Dsoluta', created_at: '2025-01-08T10:15:52.000000Z', updated_at: '2025-01-08T10:15:52.000000Z' }, { id: 6593, ticket_id: 4450, ticket_message_id: 4542, type: application/vnd.kde.kpresenter, title: 'Mathias Huels IV', attachment: 'https://aether-preprod-bucket.s3.amazonaws.com/https%3A//via.placeholder.com/640x480.png/00bb44%3Ftext%3Deos', created_at: '2025-01-08T10:15:52.000000Z', updated_at: '2025-01-08T10:15:52.000000Z' }], sender: { id: 15067, mrn: UPCPEJUF, name: 'Dr. Maxine Will', email: 1736331351mueller.alexie@example.net, language: en, phone: +1.870.441.4265, phone_country: AM, phone_verified_at: null, address1: '3545 Runte Station', address2: 'Elliotmouth, OH 08235', postal_code: '97740', city: 'Gerhold PLC', clinic_name: Stehrport, clinic_location: "186 Lowe Junction\nMagdalenaland, KS 82379-8636", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:52.000000Z', updated_at: '2025-01-08T10:15:52.000000Z', invitation_status: null, roles: [] } }], items: { type: object } }
            tags:
                - 'Support Ticket'
            requestBody:
                required: false
                content:
                    multipart/form-data:
                        schema:
                            type: object
                            properties:
                                title:
                                    type: string
                                    description: 'Message title.'
                                    example: 'Reprehenderit iste eveniet nisi.'
                                content:
                                    type: string
                                    description: 'Content of message.'
                                    example: 'Dolorem veritatis distinctio enim eos eaque laudantium ab.'
                                attachments:
                                    type: array
                                    description: 'The value must be a file.'
                                    example: [null, null]
                                    items: { type: file }
        parameters:
            -
                in: path
                name: id
                description: ''
                example: minus
                required: true
                schema:
                    type: string
    '/api/ticket/{id}/read':
        post:
            summary: 'Mark all messages as read'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to read message'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to read message' }
                404:
                    description: '404, Support ticket not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Support ticket not found'
                                properties:
                                    message: { type: string, example: 'Support ticket not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4451
                                    sender_id: 15071
                                    recipient_id: 15072
                                    device_id: 6016
                                    meeting_date: '2025-01-08T10:15:52.000000Z'
                                    meeting_type: online_meeting
                                    contact_email: lkessler@hotmail.com
                                    status: new
                                    created_at: '2025-01-08T10:15:52.000000Z'
                                    updated_at: '2025-01-08T10:15:52.000000Z'
                                    messages: [{ id: 4543, ticket_id: 4451, sender_id: 15073, title: Prof., content: 'At tenetur corporis consectetur ducimus quo aliquid.', is_read: false, created_at: '2025-01-08T10:15:52.000000Z', updated_at: '2025-01-08T10:15:52.000000Z' }]
                                properties:
                                    id: { type: integer, example: 4451 }
                                    sender_id: { type: integer, example: 15071 }
                                    recipient_id: { type: integer, example: 15072 }
                                    device_id: { type: integer, example: 6016 }
                                    meeting_date: { type: string, example: '2025-01-08T10:15:52.000000Z' }
                                    meeting_type: { type: string, example: online_meeting }
                                    contact_email: { type: string, example: lkessler@hotmail.com }
                                    status: { type: string, example: new }
                                    created_at: { type: string, example: '2025-01-08T10:15:52.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:52.000000Z' }
                                    messages: { type: array, example: [{ id: 4543, ticket_id: 4451, sender_id: 15073, title: Prof., content: 'At tenetur corporis consectetur ducimus quo aliquid.', is_read: false, created_at: '2025-01-08T10:15:52.000000Z', updated_at: '2025-01-08T10:15:52.000000Z' }], items: { type: object } }
            tags:
                - 'Support Ticket'
        parameters:
            -
                in: path
                name: id
                description: 'Support Ticket ID (id from ticket list; do not confuse with messages.id).'
                example: 10
                required: true
                schema:
                    type: integer
    '/api/ticket/{id}/read/{messageId}':
        post:
            summary: 'Mark single message as read'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to read message'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to read message' }
                404:
                    description: '404, Message not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Message not found'
                                properties:
                                    message: { type: string, example: 'Message not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 4452
                                    sender_id: 15077
                                    recipient_id: 15078
                                    device_id: 6018
                                    meeting_date: '2025-01-08T10:15:52.000000Z'
                                    meeting_type: online_meeting
                                    contact_email: wkihn@littel.info
                                    status: new
                                    created_at: '2025-01-08T10:15:52.000000Z'
                                    updated_at: '2025-01-08T10:15:52.000000Z'
                                    messages: [{ id: 4544, ticket_id: 4452, sender_id: 15079, title: Prof., content: 'Dolore quis quam rerum voluptas culpa.', is_read: false, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }]
                                properties:
                                    id: { type: integer, example: 4452 }
                                    sender_id: { type: integer, example: 15077 }
                                    recipient_id: { type: integer, example: 15078 }
                                    device_id: { type: integer, example: 6018 }
                                    meeting_date: { type: string, example: '2025-01-08T10:15:52.000000Z' }
                                    meeting_type: { type: string, example: online_meeting }
                                    contact_email: { type: string, example: wkihn@littel.info }
                                    status: { type: string, example: new }
                                    created_at: { type: string, example: '2025-01-08T10:15:52.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:52.000000Z' }
                                    messages: { type: array, example: [{ id: 4544, ticket_id: 4452, sender_id: 15079, title: Prof., content: 'Dolore quis quam rerum voluptas culpa.', is_read: false, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }], items: { type: object } }
            tags:
                - 'Support Ticket'
        parameters:
            -
                in: path
                name: id
                description: 'Support Ticket ID (id from ticket list; do not confuse with messages.id).'
                example: 10
                required: true
                schema:
                    type: integer
            -
                in: path
                name: messageId
                description: 'Message ID'
                example: 1
                required: true
                schema:
                    type: integer
    /api/users:
        get:
            summary: 'Get users list'
            description: "Possible extend options:\n<ul>\n    <li>clinicians - users assigned to this user as clinicians (for Amputee role)</li>\n    <li>patients - users assigned to this user as patients (for ClinicAdmin/Clinician/ClinicianSupport role)</li>\n    <li>devices - products assigned to user (for Amputee role)</li>\n    <li>devicesAsClinician - products assigned to user as clinician (for ClinicAdmin/Clinician/ClinicianSupport role)</li>\n    <li>roles - user roles</li>\n    <li>permissions - user permissions (for ClinicianSupport role)</li>\n</ul>"
            parameters:
                -
                    in: query
                    name: search
                    description: 'Filter users by name. For SuperAdmin role it filters by UUID.'
                    example: Tom
                    required: false
                    schema:
                        type: string
                        description: 'Filter users by name. For SuperAdmin role it filters by UUID.'
                        example: Tom
                -
                    in: query
                    name: active
                    description: 'Filter users by active status (available: 0 - only inactive, 1 - only active, -1 - all users). Default: 1.'
                    example: any
                    required: false
                    schema:
                        type: string
                        description: 'Filter users by active status (available: 0 - only inactive, 1 - only active, -1 - all users). Default: 1.'
                        example: any
                -
                    in: query
                    name: clinician
                    description: "Filter users by clinician.\nProvide single ID (<code>clinician=1</code>), array of IDs (<code>clinician[]=1&clinician[]=2</code>) or comma-separated list of IDs (<code>clinician=1,2</code>)."
                    example:
                        - 15
                        - 7
                    required: false
                    schema:
                        type: array
                        description: "Filter users by clinician.\nProvide single ID (<code>clinician=1</code>), array of IDs (<code>clinician[]=1&clinician[]=2</code>) or comma-separated list of IDs (<code>clinician=1,2</code>)."
                        example:
                            - 15
                            - 7
                        items:
                            type: integer
                -
                    in: query
                    name: roles
                    description: 'Filter users by roles (comma-separated).'
                    example: 'Clinician,Amputee'
                    required: false
                    schema:
                        type: string
                        description: 'Filter users by roles (comma-separated).'
                        example: 'Clinician,Amputee'
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>clinicians</code>, <code> patients</code>, <code> devices</code>, <code> devicesAsClinician</code>, <code> roles</code>, <code> permissions</code>).'
                    example: 'clinicians, patients, devices, devicesAsClinician, roles, permissions'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>clinicians</code>, <code> patients</code>, <code> devices</code>, <code> devicesAsClinician</code>, <code> roles</code>, <code> permissions</code>).'
                        example: 'clinicians, patients, devices, devicesAsClinician, roles, permissions'
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: query
                    name: sortby
                    description: 'Sort by field (available: <code>user_mrn</code>, <code> user_name</code>, <code> role_name</code>, <code> date</code>). Default: <code>date</code> (<code>desc</code>).'
                    example: 'user_mrn, user_name, role_name, date'
                    required: false
                    schema:
                        type: string
                        description: 'Sort by field (available: <code>user_mrn</code>, <code> user_name</code>, <code> role_name</code>, <code> date</code>). Default: <code>date</code> (<code>desc</code>).'
                        example: 'user_mrn, user_name, role_name, date'
                -
                    in: query
                    name: sortdir
                    description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                    example: asc
                    required: false
                    schema:
                        type: string
                        description: 'Sort direction (available: <code>asc</code>, <code>desc</code>).'
                        example: asc
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view user list'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view user list' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 14917, mrn: B6C76OJ9, name: 'Sherman Murphy', email: 1736331338rickey82@example.org, language: en, phone: 947.601.2773, phone_country: HR, phone_verified_at: null, address1: '527 Gleason Brook', address2: 'Port Garret, AZ 31624', postal_code: '30594', city: Trantow-Schaefer, clinic_name: Hudsonberg, clinic_location: "95125 Koch Orchard Apt. 194\nNorth Coltenville, CO 21008", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:38.000000Z', updated_at: '2025-01-08T10:15:38.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], clinicians: [], devices: [{ id: 5879, serial: 84810468-6893-3a68-8105-8771a170813e, bluetooth_id: c8472ed4-e5ff-3374-9923-3cd4b85a7793, model_id: null, amputee_id: 14917, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:38.000000Z', updated_at: '2025-01-08T10:15:38.000000Z' }] }, { id: 14918, mrn: 7OBSWL9W, name: 'Mr. Ryan Ullrich I', email: 1736331338okertzmann@example.net, language: en, phone: '(530) 358-7618', phone_country: SR, phone_verified_at: null, address1: '469 Little Plaza', address2: 'East Marcelina, DE 26085-3469', postal_code: 54812-0686, city: Abernathy-Mann, clinic_name: Gaytown, clinic_location: "4693 Mariane Circles Suite 774\nGarrisonhaven, LA 05415", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:38.000000Z', updated_at: '2025-01-08T10:15:38.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], clinicians: [], devices: [{ id: 5880, serial: 8f5ea2fc-7137-3399-8224-bef96e02265a, bluetooth_id: c22bf1ac-b8b8-3aff-b48d-e2a62765ccb6, model_id: null, amputee_id: 14918, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:38.000000Z', updated_at: '2025-01-08T10:15:38.000000Z' }] }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 14917, mrn: B6C76OJ9, name: 'Sherman Murphy', email: 1736331338rickey82@example.org, language: en, phone: 947.601.2773, phone_country: HR, phone_verified_at: null, address1: '527 Gleason Brook', address2: 'Port Garret, AZ 31624', postal_code: '30594', city: Trantow-Schaefer, clinic_name: Hudsonberg, clinic_location: "95125 Koch Orchard Apt. 194\nNorth Coltenville, CO 21008", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:38.000000Z', updated_at: '2025-01-08T10:15:38.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], clinicians: [], devices: [{ id: 5879, serial: 84810468-6893-3a68-8105-8771a170813e, bluetooth_id: c8472ed4-e5ff-3374-9923-3cd4b85a7793, model_id: null, amputee_id: 14917, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:38.000000Z', updated_at: '2025-01-08T10:15:38.000000Z' }] }, { id: 14918, mrn: 7OBSWL9W, name: 'Mr. Ryan Ullrich I', email: 1736331338okertzmann@example.net, language: en, phone: '(530) 358-7618', phone_country: SR, phone_verified_at: null, address1: '469 Little Plaza', address2: 'East Marcelina, DE 26085-3469', postal_code: 54812-0686, city: Abernathy-Mann, clinic_name: Gaytown, clinic_location: "4693 Mariane Circles Suite 774\nGarrisonhaven, LA 05415", image: null, mfa_enabled: 0, mfa_method: null, mfa_verified_to: null, created_by: null, active: 1, notifications_timezone: null, notifications_at: null, created_at: '2025-01-08T10:15:38.000000Z', updated_at: '2025-01-08T10:15:38.000000Z', invitation_status: null, roles: [{ id: 3, name: Amputee }], clinicians: [], devices: [{ id: 5880, serial: 8f5ea2fc-7137-3399-8224-bef96e02265a, bluetooth_id: c22bf1ac-b8b8-3aff-b48d-e2a62765ccb6, model_id: null, amputee_id: 14918, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:38.000000Z', updated_at: '2025-01-08T10:15:38.000000Z' }] }], items: { type: object } }
            tags:
                - Users
    /api/me:
        get:
            summary: 'Get current user data'
            description: ''
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>clinicians</code>, <code> patients</code>, <code> devices</code>, <code> devicesAsClinician</code>, <code> roles</code>, <code> permissions</code>).'
                    example: 'clinicians, patients, devices, devicesAsClinician, roles, permissions'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>clinicians</code>, <code> patients</code>, <code> devices</code>, <code> devicesAsClinician</code>, <code> roles</code>, <code> permissions</code>).'
                        example: 'clinicians, patients, devices, devicesAsClinician, roles, permissions'
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 14919
                                    mrn: 1VWTLMTY
                                    name: 'Margarette Senger'
                                    email: 1736331338ogorczany@example.net
                                    language: en
                                    phone: '+1 (770) 677-9678'
                                    phone_country: LR
                                    phone_verified_at: null
                                    address1: '62649 Pascale Hollow'
                                    address2: 'Lucyfort, TN 42017'
                                    postal_code: 18198-3133
                                    city: 'Lebsack Inc'
                                    clinic_name: 'South Devante'
                                    clinic_location: "32678 Mortimer Route Apt. 612\nIssacstad, OH 83737"
                                    image: null
                                    mfa_enabled: 0
                                    mfa_method: null
                                    mfa_verified_to: null
                                    created_by: null
                                    active: 1
                                    notifications_timezone: null
                                    notifications_at: null
                                    created_at: '2025-01-08T10:15:38.000000Z'
                                    updated_at: '2025-01-08T10:15:38.000000Z'
                                    invitation_status: null
                                    roles: [{ id: 3, name: Amputee }]
                                properties:
                                    id: { type: integer, example: 14919 }
                                    mrn: { type: string, example: 1VWTLMTY }
                                    name: { type: string, example: 'Margarette Senger' }
                                    email: { type: string, example: 1736331338ogorczany@example.net }
                                    language: { type: string, example: en }
                                    phone: { type: string, example: '+1 (770) 677-9678' }
                                    phone_country: { type: string, example: LR }
                                    phone_verified_at: { type: string, example: null }
                                    address1: { type: string, example: '62649 Pascale Hollow' }
                                    address2: { type: string, example: 'Lucyfort, TN 42017' }
                                    postal_code: { type: string, example: 18198-3133 }
                                    city: { type: string, example: 'Lebsack Inc' }
                                    clinic_name: { type: string, example: 'South Devante' }
                                    clinic_location: { type: string, example: "32678 Mortimer Route Apt. 612\nIssacstad, OH 83737" }
                                    image: { type: string, example: null }
                                    mfa_enabled: { type: integer, example: 0 }
                                    mfa_method: { type: string, example: null }
                                    mfa_verified_to: { type: string, example: null }
                                    created_by: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    notifications_timezone: { type: string, example: null }
                                    notifications_at: { type: string, example: null }
                                    created_at: { type: string, example: '2025-01-08T10:15:38.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:38.000000Z' }
                                    invitation_status: { type: string, example: null }
                                    roles: { type: array, example: [{ id: 3, name: Amputee }], items: { type: object } }
            tags:
                - Users
    '/api/user/{id}':
        get:
            summary: 'Get other user data'
            description: ''
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>clinicians</code>, <code> patients</code>, <code> devices</code>, <code> devicesAsClinician</code>, <code> roles</code>, <code> permissions</code>).'
                    example: 'clinicians, patients, devices, devicesAsClinician, roles, permissions'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>clinicians</code>, <code> patients</code>, <code> devices</code>, <code> devicesAsClinician</code>, <code> roles</code>, <code> permissions</code>).'
                        example: 'clinicians, patients, devices, devicesAsClinician, roles, permissions'
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view user data'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view user data' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 14920
                                    mrn: 2OEBEWL1
                                    name: 'Stevie Walsh'
                                    email: 1736331338triston.hagenes@example.org
                                    language: en
                                    phone: 253-298-6133
                                    phone_country: CG
                                    phone_verified_at: null
                                    address1: '9347 Price Greens Apt. 428'
                                    address2: 'West Jena, SD 47337-5350'
                                    postal_code: 84748-7635
                                    city: 'Hand, Hane and Kilback'
                                    clinic_name: 'West Willismouth'
                                    clinic_location: "98889 Yvette Lights Apt. 858\nMitchelmouth, OR 86297-8115"
                                    image: null
                                    mfa_enabled: 0
                                    mfa_method: null
                                    mfa_verified_to: null
                                    created_by: null
                                    active: 1
                                    notifications_timezone: null
                                    notifications_at: null
                                    created_at: '2025-01-08T10:15:39.000000Z'
                                    updated_at: '2025-01-08T10:15:39.000000Z'
                                    invitation_status: null
                                    roles: [{ id: 3, name: Amputee }]
                                properties:
                                    id: { type: integer, example: 14920 }
                                    mrn: { type: string, example: 2OEBEWL1 }
                                    name: { type: string, example: 'Stevie Walsh' }
                                    email: { type: string, example: 1736331338triston.hagenes@example.org }
                                    language: { type: string, example: en }
                                    phone: { type: string, example: 253-298-6133 }
                                    phone_country: { type: string, example: CG }
                                    phone_verified_at: { type: string, example: null }
                                    address1: { type: string, example: '9347 Price Greens Apt. 428' }
                                    address2: { type: string, example: 'West Jena, SD 47337-5350' }
                                    postal_code: { type: string, example: 84748-7635 }
                                    city: { type: string, example: 'Hand, Hane and Kilback' }
                                    clinic_name: { type: string, example: 'West Willismouth' }
                                    clinic_location: { type: string, example: "98889 Yvette Lights Apt. 858\nMitchelmouth, OR 86297-8115" }
                                    image: { type: string, example: null }
                                    mfa_enabled: { type: integer, example: 0 }
                                    mfa_method: { type: string, example: null }
                                    mfa_verified_to: { type: string, example: null }
                                    created_by: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    notifications_timezone: { type: string, example: null }
                                    notifications_at: { type: string, example: null }
                                    created_at: { type: string, example: '2025-01-08T10:15:39.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:39.000000Z' }
                                    invitation_status: { type: string, example: null }
                                    roles: { type: array, example: [{ id: 3, name: Amputee }], items: { type: object } }
            tags:
                - Users
        put:
            summary: 'Update user account'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: multipart/form-data
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission to assign role'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to assign this role as ClinicAdmin'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to assign this role as ClinicAdmin' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 14922
                                    mrn: 94TKFPDT
                                    name: 'Olin Rippin'
                                    email: 1736331339laron80@example.net
                                    language: en
                                    phone: 213-699-3553
                                    phone_country: TF
                                    phone_verified_at: null
                                    address1: '9665 Avery Islands Apt. 991'
                                    address2: 'Winifredbury, WV 45311-1610'
                                    postal_code: '00039'
                                    city: Kohler-Lockman
                                    clinic_name: 'South Evan'
                                    clinic_location: "35965 Zaria Mission Suite 261\nNew Genoveva, AR 62241-4049"
                                    image: null
                                    mfa_enabled: 0
                                    mfa_method: null
                                    mfa_verified_to: null
                                    created_by: null
                                    active: 1
                                    notifications_timezone: null
                                    notifications_at: null
                                    created_at: '2025-01-08T10:15:39.000000Z'
                                    updated_at: '2025-01-08T10:15:39.000000Z'
                                    invitation_status: null
                                    roles: [{ id: 3, name: Amputee }]
                                properties:
                                    id: { type: integer, example: 14922 }
                                    mrn: { type: string, example: 94TKFPDT }
                                    name: { type: string, example: 'Olin Rippin' }
                                    email: { type: string, example: 1736331339laron80@example.net }
                                    language: { type: string, example: en }
                                    phone: { type: string, example: 213-699-3553 }
                                    phone_country: { type: string, example: TF }
                                    phone_verified_at: { type: string, example: null }
                                    address1: { type: string, example: '9665 Avery Islands Apt. 991' }
                                    address2: { type: string, example: 'Winifredbury, WV 45311-1610' }
                                    postal_code: { type: string, example: '00039' }
                                    city: { type: string, example: Kohler-Lockman }
                                    clinic_name: { type: string, example: 'South Evan' }
                                    clinic_location: { type: string, example: "35965 Zaria Mission Suite 261\nNew Genoveva, AR 62241-4049" }
                                    image: { type: string, example: null }
                                    mfa_enabled: { type: integer, example: 0 }
                                    mfa_method: { type: string, example: null }
                                    mfa_verified_to: { type: string, example: null }
                                    created_by: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    notifications_timezone: { type: string, example: null }
                                    notifications_at: { type: string, example: null }
                                    created_at: { type: string, example: '2025-01-08T10:15:39.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:39.000000Z' }
                                    invitation_status: { type: string, example: null }
                                    roles: { type: array, example: [{ id: 3, name: Amputee }], items: { type: object } }
            tags:
                - Users
            requestBody:
                required: false
                content:
                    multipart/form-data:
                        schema:
                            type: object
                            properties:
                                mrn:
                                    type: string
                                    description: 'Medical Record Number.'
                                    example: MRN12345678
                                name:
                                    type: string
                                    description: 'User full name.'
                                    example: 'Tom Smith'
                                email:
                                    type: string
                                    description: 'User email. The value must be a valid email address.'
                                    example: test@example.com
                                language:
                                    type: string
                                    description: 'User language.'
                                    example: en
                                address1:
                                    type: string
                                    description: 'Address line 1.'
                                    example: '8873 Evert Row Suite 985'
                                address2:
                                    type: string
                                    description: 'Address line 2.'
                                    example: 'Stoltenbergside, RI 66564'
                                postal_code:
                                    type: string
                                    description: 'Postal code.'
                                    example: '99135'
                                city:
                                    type: string
                                    description: City.
                                    example: Vandervortport
                                clinic_name:
                                    type: string
                                    description: 'Clinic name.'
                                    example: Aether
                                clinic_location:
                                    type: string
                                    description: 'Clinic location.'
                                    example: '8873 Evert Row Suite 985'
                                image:
                                    type: string
                                    format: binary
                                    description: 'Attached user image. The value must be an image.'
                                image_delete:
                                    type: boolean
                                    description: 'Send this parameter instead of <code>image</code> to remove previously added image.'
                                    example: true
                                mfa_enabled:
                                    type: boolean
                                    description: '<strong>Super Admin only:</strong> MFA enabled.'
                                    example: true
                                mfa_method:
                                    type: string
                                    description: '<strong>Super Admin only:</strong> MFA method. The value must be one of <code>email</code> or <code>sms</code>.'
                                    example: email
                                active:
                                    type: boolean
                                    description: 'User active status (0 - inactive, 1 - active).'
                                    example: true
                                clinicians:
                                    type: array
                                    description: 'Array of clinician IDs.'
                                    example: nostrum
                                notifications_timezone:
                                    type: string
                                    description: 'User notifications timezone.'
                                    example: Europe/Warsaw
                                notifications_at:
                                    type: string
                                    description: 'Time when notifications and reminders should be sent. Format: HH:MM. Set null to notify at default time. The value must be a valid date in the format H:i.'
                                    example: '8:00'
                                role:
                                    type: string
                                    description: 'Role name. The value must be one of <code>Amputee</code>, <code>ClinicianSupport</code>, <code>Clinician</code>, <code>ClinicAdmin</code>, or <code>SuperAdmin</code>.'
                                    example: Amputee
                                permissions:
                                    type: array
                                    description: "List of permissions given to this user.\n\tFor now, it is used for <code>ClinicianSupport</code> role to give access to specific actions on specific objects/users\n\t(for example <code>user.1.update</code> means that user has access to update user with ID 1).\n\tYou can assign both predefined permissions (already checked by some endpoints) and custom permissions (check them on your own).\n\tYou can also use wildcards like user.1.* to give access to all actions for given scope."
                                    example: user.1.update
                                    items: { type: string }
        delete:
            summary: 'Delete user account'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, User has open P2P sessions'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot delete: user has open P2P sessions (as patient: 0, as clinician: 1)'
                                properties:
                                    message: { type: string, example: 'Cannot delete: user has open P2P sessions (as patient: 0, as clinician: 1)' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                500:
                    description: '500, Server error'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Server error: user not deleted'
                                    code: 'USER:DELETE:SERVER_ERROR'
                                properties:
                                    message: { type: string, example: 'Server error: user not deleted' }
                                    code: { type: string, example: 'USER:DELETE:SERVER_ERROR' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User deleted'
                                properties:
                                    message: { type: string, example: 'User deleted' }
            tags:
                - Users
        parameters:
            -
                in: path
                name: id
                description: 'User ID.'
                example: 3
                required: true
                schema:
                    type: integer
    /api/user:
        post:
            summary: 'Create new user account'
            description: "Predefined permissions:\n<ul>\n<li><code>user.view</code> - access to view users' data (GET /user/{id} endpoint)</li>\n<li><code>user.update</code> - access to update users' data (PUT /user/{id} and POST /user/{id}/phone endpoints)</li>\n<li><code>user.passwordChange</code> - access to change users' passwords (POST /user/{id}/password endpoint)</li>\n<li><code>user.devices</code> - access to list of users' devices (GET /user/{id}/devices endpoint)</li>\n<li><code>user.tickets.view</code> - access to listing and viewing tickets</li>\n<li><code>user.tickets.update</code> - access to updating tickets (marking messages as read)</li>\n<li><code>user.tickets.send</code> - access to sending messages in tickets</li>\n<li><code>user.tickets.close</code> - access to closing tickets</li>\n<li><code>user.goals</code> - access to view or manage users' goals</li>\n</ul>"
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: multipart/form-data
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, E-mail in use (in another region)'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'E-mail address already in use (in another region)'
                                properties:
                                    message: { type: string, example: 'E-mail address already in use (in another region)' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 14921
                                    mrn: 2YI0J3C8
                                    name: 'Candice Haag'
                                    email: 1736331339vdietrich@example.net
                                    language: en
                                    phone: 360-873-0308
                                    phone_country: SA
                                    phone_verified_at: null
                                    address1: '8798 Tianna Mill Apt. 867'
                                    address2: 'New Torrance, DE 26793'
                                    postal_code: '20355'
                                    city: 'McLaughlin, Jaskolski and Hand'
                                    clinic_name: Gleasonbury
                                    clinic_location: "8486 Cleo Via\nRyanland, AZ 73735-2058"
                                    image: null
                                    mfa_enabled: 0
                                    mfa_method: null
                                    mfa_verified_to: null
                                    created_by: null
                                    active: 1
                                    notifications_timezone: null
                                    notifications_at: null
                                    created_at: '2025-01-08T10:15:39.000000Z'
                                    updated_at: '2025-01-08T10:15:39.000000Z'
                                    invitation_status: null
                                    roles: [{ id: 3, name: Amputee }]
                                    permissions: []
                                properties:
                                    id: { type: integer, example: 14921 }
                                    mrn: { type: string, example: 2YI0J3C8 }
                                    name: { type: string, example: 'Candice Haag' }
                                    email: { type: string, example: 1736331339vdietrich@example.net }
                                    language: { type: string, example: en }
                                    phone: { type: string, example: 360-873-0308 }
                                    phone_country: { type: string, example: SA }
                                    phone_verified_at: { type: string, example: null }
                                    address1: { type: string, example: '8798 Tianna Mill Apt. 867' }
                                    address2: { type: string, example: 'New Torrance, DE 26793' }
                                    postal_code: { type: string, example: '20355' }
                                    city: { type: string, example: 'McLaughlin, Jaskolski and Hand' }
                                    clinic_name: { type: string, example: Gleasonbury }
                                    clinic_location: { type: string, example: "8486 Cleo Via\nRyanland, AZ 73735-2058" }
                                    image: { type: string, example: null }
                                    mfa_enabled: { type: integer, example: 0 }
                                    mfa_method: { type: string, example: null }
                                    mfa_verified_to: { type: string, example: null }
                                    created_by: { type: string, example: null }
                                    active: { type: integer, example: 1 }
                                    notifications_timezone: { type: string, example: null }
                                    notifications_at: { type: string, example: null }
                                    created_at: { type: string, example: '2025-01-08T10:15:39.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:39.000000Z' }
                                    invitation_status: { type: string, example: null }
                                    roles: { type: array, example: [{ id: 3, name: Amputee }], items: { type: object } }
                                    permissions: { type: array, example: [] }
            tags:
                - Users
            requestBody:
                required: true
                content:
                    multipart/form-data:
                        schema:
                            type: object
                            properties:
                                mrn:
                                    type: string
                                    description: 'Medical Record Number.'
                                    example: MRN12345678
                                name:
                                    type: string
                                    description: 'User full name.'
                                    example: 'Tom Smith'
                                email:
                                    type: string
                                    description: 'User email. The value must be a valid email address.'
                                    example: test@example.com
                                language:
                                    type: string
                                    description: 'User language.'
                                    example: en
                                address1:
                                    type: string
                                    description: 'Address line 1.'
                                    example: '39487 Buckridge Shore'
                                address2:
                                    type: string
                                    description: 'Address line 2.'
                                    example: 'Melyssatown, ID 09509'
                                postal_code:
                                    type: string
                                    description: 'Postal code.'
                                    example: '17538'
                                city:
                                    type: string
                                    description: City.
                                    example: Karolannshire
                                clinic_name:
                                    type: string
                                    description: 'Clinic name.'
                                    example: Aether
                                clinic_location:
                                    type: string
                                    description: 'Clinic location.'
                                    example: '39487 Buckridge Shore'
                                image:
                                    type: string
                                    format: binary
                                    description: 'Attached user image. The value must be an image.'
                                mfa_enabled:
                                    type: boolean
                                    description: '<strong>Super Admin only:</strong> MFA enabled.'
                                    example: true
                                mfa_method:
                                    type: string
                                    description: '<strong>Super Admin only:</strong> MFA method. The value must be one of <code>email</code> or <code>sms</code>.'
                                    example: email
                                clinicians:
                                    type: array
                                    description: 'Array of clinician IDs.'
                                    example: ullam
                                notifications_timezone:
                                    type: string
                                    description: 'User notifications timezone.'
                                    example: Europe/Warsaw
                                notifications_at:
                                    type: string
                                    description: 'Time when notifications and reminders should be sent. Format: HH:MM. Set null to notify at default time. The value must be a valid date in the format H:i.'
                                    example: '8:00'
                                role:
                                    type: string
                                    description: 'Role name. The value must be one of <code>Amputee</code>, <code>ClinicianSupport</code>, <code>Clinician</code>, <code>ClinicAdmin</code>, or <code>SuperAdmin</code>.'
                                    example: Amputee
                                permissions:
                                    type: array
                                    description: "List of permissions given to this user.\n\tFor now, it is used for <code>ClinicianSupport</code> role to give access to specific actions on specific objects/users\n\t(for example <code>user.1.update</code> means that user has access to update user with ID 1).\n\tYou can assign both predefined permissions (already checked by some endpoints) and custom permissions (check them on your own).\n\tYou can also use wildcards like user.1.* to give access to all actions for given scope."
                                    example: user.1.update
                                    items: { type: string }
                            required:
                                - email
                                - role
    '/api/user/{id}/phone':
        post:
            summary: 'Update user phone number'
            description: "Phone number has to be verified after update.\nCall <code>/api/mfa/phone/verify</code> with user-filled code after performing this operation.\nIf value is \"0\" phone number will be removed without any verification."
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                500:
                    description: '500, Code send failed'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Verification code sending failed'
                                properties:
                                    message: { type: string, example: 'Verification code sending failed' }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Verification code sent. Call /api/mfa/phone/verify to verify phone number.'
                                properties:
                                    message: { type: string, example: 'Verification code sent. Call /api/mfa/phone/verify to verify phone number.' }
            tags:
                - Users
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                phone:
                                    type: string
                                    description: 'User phone number. Pass "0" to remove current one.'
                                    example: '+1 (208) 892-0242'
                                phone_country:
                                    type: string
                                    description: 'Phone number''s country (2 characters).'
                                    example: US
        parameters:
            -
                in: path
                name: id
                description: 'User ID.'
                example: 3
                required: true
                schema:
                    type: integer
    '/api/user/{id}/password':
        post:
            summary: 'Change other user password'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to change user password'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to change user password' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User password changed'
                                properties:
                                    message: { type: string, example: 'User password changed' }
            tags:
                - Users
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                password:
                                    type: string
                                    description: ''
                                    example: minima
                            required:
                                - password
        parameters:
            -
                in: path
                name: id
                description: 'User ID.'
                example: 3
                required: true
                schema:
                    type: integer
    '/api/user/{id}/devices':
        get:
            summary: 'Get user devices list'
            description: ''
            parameters:
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>model</code>, <code> firmwareVersion</code>, <code> pcbVersion</code>).'
                    example: 'model, firmwareVersion, pcbVersion'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>model</code>, <code> firmwareVersion</code>, <code> pcbVersion</code>).'
                        example: 'model, firmwareVersion, pcbVersion'
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to view user devices'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to view user devices' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 5885, serial: 0fe830e7-d9a0-333e-a194-d8294e98f1ce, bluetooth_id: d9af0062-e823-34ca-a6bc-4c69d47fa09a, model_id: 188, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', model: { id: 188, name: 'Zeus hand v1', type: leg, orientation: left, active: 1, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z' } }, { id: 5886, serial: 55e9d517-fc96-3836-a05c-375bddfa4d20, bluetooth_id: 79208f80-955a-3af1-868d-21e169b78951, model_id: 189, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', model: { id: 189, name: 'Zeus hand v1', type: arm, orientation: left, active: 1, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z' } }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 5885, serial: 0fe830e7-d9a0-333e-a194-d8294e98f1ce, bluetooth_id: d9af0062-e823-34ca-a6bc-4c69d47fa09a, model_id: 188, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', model: { id: 188, name: 'Zeus hand v1', type: leg, orientation: left, active: 1, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z' } }, { id: 5886, serial: 55e9d517-fc96-3836-a05c-375bddfa4d20, bluetooth_id: 79208f80-955a-3af1-868d-21e169b78951, model_id: 189, amputee_id: null, firmware_version_id: null, pcb_version_id: null, active: 1, last_activity_at: '0000-00-00 00:00:00', created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z', model: { id: 189, name: 'Zeus hand v1', type: arm, orientation: left, active: 1, created_at: '2025-01-08T10:15:39.000000Z', updated_at: '2025-01-08T10:15:39.000000Z' } }], items: { type: object } }
            tags:
                - Users
        parameters:
            -
                in: path
                name: id
                description: 'User ID'
                example: 12
                required: true
                schema:
                    type: integer
    /api/user/attach:
        post:
            summary: 'Attach patient to clinician'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to attach patients'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to attach patients' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Patient attached'
                                properties:
                                    message: { type: string, example: 'Patient attached' }
            tags:
                - Users
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                email:
                                    type: string
                                    description: 'User e-mail address. The value must be a valid email address.'
                                    example: name@domain.com
                            required:
                                - email
    '/api/user/{id}/detach':
        post:
            summary: 'Detach patient from clinician'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Cannot detach last clinician'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot detach patient''s last clinician'
                                properties:
                                    message: { type: string, example: 'Cannot detach patient''s last clinician' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Patient detached'
                                properties:
                                    message: { type: string, example: 'Patient detached' }
            tags:
                - Users
        parameters:
            -
                in: path
                name: id
                description: 'User ID.'
                example: 3
                required: true
                schema:
                    type: integer
    /api/consents:
        get:
            summary: 'Get user mobile consents'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to use mobile consents'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to use mobile consents' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 22, user_id: 1, name: blanditiis, value: quidem, created_at: '1976-05-19T02:29:37.000000Z', updated_at: '1987-08-09T18:36:08.000000Z' }
                                    - { id: 23, user_id: 1, name: deserunt, value: omnis, created_at: '1991-08-29T21:47:06.000000Z', updated_at: '1979-02-19T19:52:07.000000Z' }
            tags:
                - Users
        post:
            summary: 'Set user mobile consent'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to use mobile consents'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to use mobile consents' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 24, user_id: 1, name: sit, value: quibusdam, created_at: '1971-01-31T17:20:32.000000Z', updated_at: '2020-05-08T20:44:51.000000Z' }
                                    - { id: 25, user_id: 1, name: est, value: quidem, created_at: '1994-09-04T05:11:44.000000Z', updated_at: '2000-10-29T10:33:26.000000Z' }
            tags:
                - Users
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Consent name.'
                                    example: 'Push notifications'
                                value:
                                    type: string
                                    description: 'Consent value.'
                                    example: 1
                            required:
                                - name
                                - value
    '/api/notifications/{id}':
        delete:
            summary: 'Clear user notifications'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update user data'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update user data' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    messages: '1 notifications deleted'
                                properties:
                                    messages: { type: string, example: '1 notifications deleted' }
            tags:
                - Users
        parameters:
            -
                in: path
                name: id
                description: 'User ID.'
                example: 3
                required: true
                schema:
                    type: integer
    /api/versions/software:
        get:
            summary: 'Get software versions'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 192, name: 3.37.61, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
                                    - { id: 193, name: 7.20.68, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Versions
        post:
            summary: 'Create software version'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to create versions'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to create versions' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 194
                                    name: 3.12.30
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 194 }
                                    name: { type: string, example: 3.12.30 }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Versions
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of version.'
                                    example: '1.0'
                            required:
                                - name
    '/api/versions/software/{id}':
        delete:
            summary: 'Delete software version'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Version in use'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot delete: version is used in compatibility entries (1)'
                                properties:
                                    message: { type: string, example: 'Cannot delete: version is used in compatibility entries (1)' }
                404:
                    description: '404, Version not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Version not found'
                                properties:
                                    message: { type: string, example: 'Version not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Version deleted'
                                properties:
                                    message: { type: string, example: 'Version deleted' }
            tags:
                - Versions
        parameters:
            -
                in: path
                name: id
                description: 'Software Version ID'
                example: 2
                required: true
                schema:
                    type: integer
    /api/versions/firmware:
        get:
            summary: 'Get firmware versions'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 236, name: 9.33.92, file_firmware: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerJmv3jE', file_firmware_new_pcb: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakervN2ilT', file_firmware_v2: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakeruYmYvz', file_firmware_v3: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerSmfgsA', file_firmware_v4: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/faker7F0Dwr', file_bootloader: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerlVuCLK', file_bootloader_v2: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakero16ruu', file_bootloader_v3: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerAvYpP3', file_bootloader_v4: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerYhFZPp', changelog: 'Quia repellat rerum dolores sint perferendis laborum laborum. Natus omnis quae aspernatur explicabo ut similique commodi. Cumque fuga repellendus sit error consequuntur.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
                                    - { id: 237, name: 4.53.85, file_firmware: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerFN1DpK', file_firmware_new_pcb: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/faker4tf1Dt', file_firmware_v2: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerbws0XT', file_firmware_v3: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakersRJh69', file_firmware_v4: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerS79YQA', file_bootloader: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerEIxZmt', file_bootloader_v2: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerHMx5m9', file_bootloader_v3: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakeranQQ46', file_bootloader_v4: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerDwEDvt', changelog: 'Et et maiores et similique molestias omnis ratione. Nisi et ad ea repudiandae ut repudiandae. Quibusdam porro omnis deleniti praesentium cumque. Quis minus possimus quibusdam.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Versions
        post:
            summary: 'Create firmware version'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: multipart/form-data
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to create versions'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to create versions' }
                201:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 238
                                    name: 8.33.93
                                    file_firmware: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerifD5WJ'
                                    file_firmware_new_pcb: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerSoSKEw'
                                    file_firmware_v2: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/faker5iyrlS'
                                    file_firmware_v3: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakertPn4TX'
                                    file_firmware_v4: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerf37ey8'
                                    file_bootloader: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerwSaHVc'
                                    file_bootloader_v2: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakernaPT9G'
                                    file_bootloader_v3: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerqS6O2k'
                                    file_bootloader_v4: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakervIrW5w'
                                    changelog: 'Similique aliquid hic a sint ad. Sequi qui eligendi nobis et quae repudiandae sequi. At tenetur aperiam necessitatibus quaerat id repudiandae.'
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 238 }
                                    name: { type: string, example: 8.33.93 }
                                    file_firmware: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerifD5WJ' }
                                    file_firmware_new_pcb: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerSoSKEw' }
                                    file_firmware_v2: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/faker5iyrlS' }
                                    file_firmware_v3: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakertPn4TX' }
                                    file_firmware_v4: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerf37ey8' }
                                    file_bootloader: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerwSaHVc' }
                                    file_bootloader_v2: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakernaPT9G' }
                                    file_bootloader_v3: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerqS6O2k' }
                                    file_bootloader_v4: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakervIrW5w' }
                                    changelog: { type: string, example: 'Similique aliquid hic a sint ad. Sequi qui eligendi nobis et quae repudiandae sequi. At tenetur aperiam necessitatibus quaerat id repudiandae.' }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Versions
            requestBody:
                required: true
                content:
                    multipart/form-data:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of version.'
                                    example: '1.0'
                                file_firmware:
                                    type: string
                                    format: binary
                                    description: 'Attached firmware file. The value must be a file.'
                                file_firmware_v2:
                                    type: string
                                    format: binary
                                    description: 'Attached firmware file. The value must be a file.'
                                file_firmware_v3:
                                    type: string
                                    format: binary
                                    description: 'Attached firmware file. The value must be a file.'
                                file_firmware_v4:
                                    type: string
                                    format: binary
                                    description: 'Attached firmware file. The value must be a file.'
                                file_firmware_new_pcb:
                                    type: string
                                    format: binary
                                    description: 'Attached firmware for new PCB file. The value must be a file.'
                                file_bootloader:
                                    type: string
                                    format: binary
                                    description: 'Attached bootloader file. The value must be a file.'
                                file_bootloader_v2:
                                    type: string
                                    format: binary
                                    description: 'Attached bootloader file. The value must be a file.'
                                file_bootloader_v3:
                                    type: string
                                    format: binary
                                    description: 'Attached bootloader file. The value must be a file.'
                                file_bootloader_v4:
                                    type: string
                                    format: binary
                                    description: 'Attached bootloader file. The value must be a file.'
                                changelog:
                                    type: string
                                    description: 'Changelog for the version.'
                                    example: 'Fixed bug with the connection'
                            required:
                                - name
    '/api/versions/firmware/{id}':
        put:
            summary: 'Update firmware version'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: multipart/form-data
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Version not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Version not found'
                                properties:
                                    message: { type: string, example: 'Version not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 239
                                    name: 9.16.54
                                    file_firmware: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakervDsPLi'
                                    file_firmware_new_pcb: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerYkmwlJ'
                                    file_firmware_v2: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/faker4Sq7vW'
                                    file_firmware_v3: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerJGlNiG'
                                    file_firmware_v4: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerBSNiCb'
                                    file_bootloader: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerap1DCC'
                                    file_bootloader_v2: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerBuo7Xb'
                                    file_bootloader_v3: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerdnurw9'
                                    file_bootloader_v4: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerFB4zws'
                                    changelog: 'Dolores doloribus rerum maiores ut. Aliquam id consequatur quis delectus rerum. Impedit velit tempore nemo.'
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 239 }
                                    name: { type: string, example: 9.16.54 }
                                    file_firmware: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakervDsPLi' }
                                    file_firmware_new_pcb: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerYkmwlJ' }
                                    file_firmware_v2: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/faker4Sq7vW' }
                                    file_firmware_v3: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerJGlNiG' }
                                    file_firmware_v4: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerBSNiCb' }
                                    file_bootloader: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerap1DCC' }
                                    file_bootloader_v2: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerBuo7Xb' }
                                    file_bootloader_v3: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerdnurw9' }
                                    file_bootloader_v4: { type: string, example: 'https://aether-preprod-bucket.s3.amazonaws.com//tmp/fakerFB4zws' }
                                    changelog: { type: string, example: 'Dolores doloribus rerum maiores ut. Aliquam id consequatur quis delectus rerum. Impedit velit tempore nemo.' }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Versions
            requestBody:
                required: false
                content:
                    multipart/form-data:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of version.'
                                    example: '1.0'
                                file_firmware:
                                    type: string
                                    format: binary
                                    description: 'Attached firmware file. The value must be a file.'
                                file_firmware_v2:
                                    type: string
                                    format: binary
                                    description: 'Attached firmware file. The value must be a file.'
                                file_firmware_v3:
                                    type: string
                                    format: binary
                                    description: 'Attached firmware file. The value must be a file.'
                                file_firmware_v4:
                                    type: string
                                    format: binary
                                    description: 'Attached firmware file. The value must be a file.'
                                file_firmware_new_pcb:
                                    type: string
                                    format: binary
                                    description: 'Attached firmware for new PCB file. The value must be a file.'
                                file_bootloader:
                                    type: string
                                    format: binary
                                    description: 'Attached bootloader file. The value must be a file.'
                                file_bootloader_v2:
                                    type: string
                                    format: binary
                                    description: 'Attached bootloader file. The value must be a file.'
                                file_bootloader_v3:
                                    type: string
                                    format: binary
                                    description: 'Attached bootloader file. The value must be a file.'
                                file_bootloader_v4:
                                    type: string
                                    format: binary
                                    description: 'Attached bootloader file. The value must be a file.'
                                changelog:
                                    type: string
                                    description: 'Changelog for the version.'
                                    example: 'Fixed bug with the connection'
                                file_firmware_delete:
                                    type: string
                                    description: 'Send this parameter with value <code>1</code> to remove existing file for <code>file_firmware</code>.'
                                    example: 1
                                file_firmware_v2_delete:
                                    type: string
                                    description: 'Send this parameter with value <code>1</code> to remove existing file for <code>file_firmware_v2</code>.'
                                    example: 1
                                file_firmware_v3_delete:
                                    type: string
                                    description: 'Send this parameter with value <code>1</code> to remove existing file for <code>file_firmware_v3</code>.'
                                    example: 1
                                file_firmware_v4_delete:
                                    type: string
                                    description: 'Send this parameter with value <code>1</code> to remove existing file for <code>file_firmware_v4</code>.'
                                    example: 1
                                file_firmware_new_pcb_delete:
                                    type: string
                                    description: 'Send this parameter with value <code>1</code> to remove existing file for <code>file_firmware_new_pcb</code>.'
                                    example: 1
                                file_bootloader_delete:
                                    type: string
                                    description: 'Send this parameter with value <code>1</code> to remove existing file for <code>file_bootloader</code>.'
                                    example: 1
                                file_bootloader_v2_delete:
                                    type: string
                                    description: 'Send this parameter with value <code>1</code> to remove existing file for <code>file_bootloader_v2</code>.'
                                    example: 1
                                file_bootloader_v3_delete:
                                    type: string
                                    description: 'Send this parameter with value <code>1</code> to remove existing file for <code>file_bootloader_v3</code>.'
                                    example: 1
                                file_bootloader_v4_delete:
                                    type: string
                                    description: 'Send this parameter with value <code>1</code> to remove existing file for <code>file_bootloader_v4</code>.'
                                    example: 1
        delete:
            summary: 'Delete firmware version'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Version in use (device)'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot delete: version is assigned to devices (1)'
                                properties:
                                    message: { type: string, example: 'Cannot delete: version is assigned to devices (1)' }
                404:
                    description: '404, Version not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Version not found'
                                properties:
                                    message: { type: string, example: 'Version not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Version deleted'
                                properties:
                                    message: { type: string, example: 'Version deleted' }
            tags:
                - Versions
        parameters:
            -
                in: path
                name: id
                description: ''
                example: qui
                required: true
                schema:
                    type: string
    /api/versions/pcb:
        get:
            summary: 'Get PCB versions'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 139, name: 9.19.97, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
                                    - { id: 140, name: 5.84.55, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Versions
        post:
            summary: 'Create PCB version'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 141
                                    name: 7.34.39
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 141 }
                                    name: { type: string, example: 7.34.39 }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Versions
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                name:
                                    type: string
                                    description: 'Name of version.'
                                    example: '1.0'
                            required:
                                - name
    '/api/versions/pcb/{id}':
        delete:
            summary: 'Delete PCB version'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Version in use (device)'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Cannot delete: version is assigned to devices (1)'
                                properties:
                                    message: { type: string, example: 'Cannot delete: version is assigned to devices (1)' }
                404:
                    description: '404, Version not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Version not found'
                                properties:
                                    message: { type: string, example: 'Version not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Version deleted'
                                properties:
                                    message: { type: string, example: 'Version deleted' }
            tags:
                - Versions
        parameters:
            -
                in: path
                name: id
                description: 'PCB Version ID'
                example: 2
                required: true
                schema:
                    type: integer
    /api/versions/compatibility:
        get:
            summary: 'List compatibilities'
            description: "Most typical scenarios to use compatibility matrix:\n<ul>\n<li>full matrix (no filters) - for admin panel displaying,</li>\n<li>filtered by all of versions (software, firmware, PCB and device model) - for checking specific scenario compatibility and supported features.</li>\n</ul>"
            parameters:
                -
                    in: query
                    name: model
                    description: 'Filter compatibility matrix by device model ID.'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Filter compatibility matrix by device model ID.'
                        example: 1
                -
                    in: query
                    name: software
                    description: 'Filter compatibility matrix by software version name (not ID!).'
                    example: '1.2'
                    required: false
                    schema:
                        type: string
                        description: 'Filter compatibility matrix by software version name (not ID!).'
                        example: '1.2'
                -
                    in: query
                    name: firmware
                    description: 'Filter compatibility matrix by firmware version name (not ID!).'
                    example: '1.5'
                    required: false
                    schema:
                        type: string
                        description: 'Filter compatibility matrix by firmware version name (not ID!).'
                        example: '1.5'
                -
                    in: query
                    name: pcb
                    description: 'Filter compatibility matrix by PCB version name (not ID!).'
                    example: '1.0'
                    required: false
                    schema:
                        type: string
                        description: 'Filter compatibility matrix by PCB version name (not ID!).'
                        example: '1.0'
                -
                    in: query
                    name: summary
                    description: 'Add to response the device model, software, firmware and PCB entries used to filter the list.'
                    example: true
                    required: false
                    schema:
                        type: boolean
                        description: 'Add to response the device model, software, firmware and PCB entries used to filter the list.'
                        example: true
                -
                    in: query
                    name: extend
                    description: 'Comma-separated list of relation extensions (available: <code>features</code>, <code> features.feature</code>, <code> deviceModel</code>, <code> softwareVersion</code>, <code> firmwareVersion</code>, <code> pcbVersion</code>).'
                    example: 'features, features.feature, deviceModel, softwareVersion, firmwareVersion, pcbVersion'
                    required: false
                    schema:
                        type: string
                        description: 'Comma-separated list of relation extensions (available: <code>features</code>, <code> features.feature</code>, <code> deviceModel</code>, <code> softwareVersion</code>, <code> firmwareVersion</code>, <code> pcbVersion</code>).'
                        example: 'features, features.feature, deviceModel, softwareVersion, firmwareVersion, pcbVersion'
                -
                    in: query
                    name: perpage
                    description: 'Elements per page (Default: 20).'
                    example: 20
                    required: false
                    schema:
                        type: integer
                        description: 'Elements per page (Default: 20).'
                        example: 20
                -
                    in: query
                    name: page
                    description: 'Page number (Default: 1).'
                    example: 1
                    required: false
                    schema:
                        type: integer
                        description: 'Page number (Default: 1).'
                        example: 1
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to list versions compatibilities'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to list versions compatibilities' }
                404:
                    description: '404, PCB version not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'PCB version not found'
                                properties:
                                    message: { type: string, example: 'PCB version not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    paginator: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 }
                                    items: [{ id: 628, device_model_id: 197, software_version_id: 195, firmware_version_id: 248, pcb_version_id: 142, is_fully_compatible: 0, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', features: [{ id: 2980, compatibility_id: 628, feature_id: 80, is_compatible: 0, reason: 'Magnam soluta qui molestiae est. Corporis qui et iste veritatis ipsum. Blanditiis dolorem assumenda dolor fugiat qui delectus. Et sint et sint exercitationem possimus numquam.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', feature: { id: 80, name: white, slug: molestiae-earum-pariatur-voluptas-asperiores-illum, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' } }] }, { id: 630, device_model_id: 199, software_version_id: 197, firmware_version_id: 250, pcb_version_id: 144, is_fully_compatible: 1, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', features: [{ id: 2981, compatibility_id: 630, feature_id: 82, is_compatible: 1, reason: 'Eum quis inventore at voluptatem voluptatem. Aspernatur sed fugit porro quaerat. Tempore dolorem non eveniet id sit ut nulla facilis.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', feature: { id: 82, name: navy, slug: rem-quo-et-voluptatem-et-consequatur-odit-eum, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' } }] }]
                                properties:
                                    paginator: { type: object, example: { total: 2, count: 2, perpage: 20, current_page: 1, last_page: 1 } }
                                    items: { type: array, example: [{ id: 628, device_model_id: 197, software_version_id: 195, firmware_version_id: 248, pcb_version_id: 142, is_fully_compatible: 0, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', features: [{ id: 2980, compatibility_id: 628, feature_id: 80, is_compatible: 0, reason: 'Magnam soluta qui molestiae est. Corporis qui et iste veritatis ipsum. Blanditiis dolorem assumenda dolor fugiat qui delectus. Et sint et sint exercitationem possimus numquam.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', feature: { id: 80, name: white, slug: molestiae-earum-pariatur-voluptas-asperiores-illum, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' } }] }, { id: 630, device_model_id: 199, software_version_id: 197, firmware_version_id: 250, pcb_version_id: 144, is_fully_compatible: 1, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', features: [{ id: 2981, compatibility_id: 630, feature_id: 82, is_compatible: 1, reason: 'Eum quis inventore at voluptatem voluptatem. Aspernatur sed fugit porro quaerat. Tempore dolorem non eveniet id sit ut nulla facilis.', created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z', feature: { id: 82, name: navy, slug: rem-quo-et-voluptatem-et-consequatur-odit-eum, created_at: '2025-01-08T10:15:53.000000Z', updated_at: '2025-01-08T10:15:53.000000Z' } }] }], items: { type: object } }
            tags:
                - Versions
        post:
            summary: 'Add compatibility'
            description: 'Adds or updates compatibility matrix with assigned features. You can specify many versions for each list.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to add versions compatibility'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to add versions compatibility' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    added: 1
                                    updated: 0
                                    not_changed: 0
                                properties:
                                    added: { type: integer, example: 1 }
                                    updated: { type: integer, example: 0 }
                                    not_changed: { type: integer, example: 0 }
            tags:
                - Versions
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                device_models:
                                    type: array
                                    description: 'Array of Device Model IDs.'
                                    example: [1, 15]
                                    items: { type: integer }
                                software_versions:
                                    type: array
                                    description: 'Array of Software Version IDs.'
                                    example: [1, 12]
                                    items: { type: integer }
                                firmware_versions:
                                    type: array
                                    description: 'Array of Firmware Version IDs.'
                                    example: [1, 7]
                                    items: { type: integer }
                                pcb_versions:
                                    type: array
                                    description: 'Array of PCB Version IDs.'
                                    example: [1, 10]
                                    items: { type: integer }
                                is_fully_compatible:
                                    type: integer
                                    description: 'Is this set of versions fully compatible? The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
                                features:
                                    type: array
                                    description: ''
                                    example: [[]]
                                    items: { type: object, properties: { feature_id: { type: string, description: 'Product feature ID.', example: 1 }, compatible: { type: integer, description: 'Is this feature compatible? The value must be one of <code>0</code> or <code>1</code>.', example: 1 }, reason: { type: string, description: 'Reason of incompatibility.', example: 'Firmware does not support...' } } }
    '/api/versions/compatibility/{id}':
        put:
            summary: 'Update compatibility'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to update versions compatibility'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to update versions compatibility' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 632
                                    device_model_id: 201
                                    software_version_id: 199
                                    firmware_version_id: 252
                                    pcb_version_id: 146
                                    is_fully_compatible: 1
                                    created_at: '2025-01-08T10:15:53.000000Z'
                                    updated_at: '2025-01-08T10:15:53.000000Z'
                                properties:
                                    id: { type: integer, example: 632 }
                                    device_model_id: { type: integer, example: 201 }
                                    software_version_id: { type: integer, example: 199 }
                                    firmware_version_id: { type: integer, example: 252 }
                                    pcb_version_id: { type: integer, example: 146 }
                                    is_fully_compatible: { type: integer, example: 1 }
                                    created_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:53.000000Z' }
            tags:
                - Versions
            requestBody:
                required: false
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                device_model_id:
                                    type: integer
                                    description: '<a href="#get-device-models-list">Device Model</a> ID.'
                                    example: 1
                                software_version_id:
                                    type: integer
                                    description: '<a href="#get-software-versions">Software Version</a> ID.'
                                    example: 5
                                firmware_version_id:
                                    type: integer
                                    description: '<a href="#get-firmware-versions">Firmware Version</a> ID.'
                                    example: 14
                                pcb_version_id:
                                    type: integer
                                    description: '<a href="#get-pcb-versions">PCB Version</a> ID.'
                                    example: 1
                                is_fully_compatible:
                                    type: integer
                                    description: 'Is this set of versions fully compatible? The value must be one of <code>0</code> or <code>1</code>.'
                                    example: 1
                                features:
                                    type: array
                                    description: ''
                                    example: [[]]
                                    items: { type: object, properties: { id: { type: string, description: "Versions compatibility feature ID. Use with <code>delete</code> parameter to delete specific entry.\n\tDo not confuse with <code>feature_id</code>, this field refers to ID of relation between versions compatibility and product feature.", example: 1 }, feature_id: { type: string, description: '<a href="#list-product-features">Product feature</a> ID.', example: 1 }, compatible: { type: integer, description: 'Is this feature compatible? The value must be one of <code>0</code> or <code>1</code>.', example: 1 }, reason: { type: string, description: 'Reason of incompatibility.', example: 'Firmware does not support...' }, delete: { type: integer, description: 'Pass 1 to detach feature from this set of versions, skip otherwise. The value must be one of <code>1</code>.', example: 1 } } }
        delete:
            summary: 'Delete compatibility'
            description: ''
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to delete versions compatibility'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to delete versions compatibility' }
                404:
                    description: '404, Versions compatibility not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Versions compatibility not found'
                                properties:
                                    message: { type: string, example: 'Versions compatibility not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Versions compatibility deleted'
                                properties:
                                    message: { type: string, example: 'Versions compatibility deleted' }
            tags:
                - Versions
        parameters:
            -
                in: path
                name: id
                description: 'Versions Compatibility ID'
                example: 17
                required: true
                schema:
                    type: integer
    '/api/sessions/video/{guestId}':
        get:
            summary: 'List video sessions'
            description: "Returns list of open video sessions.\nFor most cases there should be exactly one entry (open/active session)\nor exactly zero entries (empty array, no open sessions)."
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to access video session'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to access video session' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    type: object
                                example:
                                    - { id: 758, moderator_id: 15001, guest_id: 15002, jwt_moderator: 5be1bec126f45d500efb357429e093d4bed0375e2c1177a2df12de4fee811023, jwt_guest: 1bbad7b249edcb08912a0bfe0777a4b02073ccaaba1ccb331f10b1f4e4789c9a, room_name: room_1714cc7ff178fbbd1d5672a7cee1f1d8, expires: 1736332246, status: open, created_at: '2025-01-08T10:15:46.000000Z', updated_at: '2025-01-08T10:15:46.000000Z' }
                                    - { id: 759, moderator_id: 15005, guest_id: 15006, jwt_moderator: 28ce024bf7c9ea106faf8a999e18133e5831c662f22029e089b99ce389cf0739, jwt_guest: 5f53b0a2be22e28dc4b056f663910c046a33f9b2d779eaf997ea771fe1881a13, room_name: room_1714cc7ff178fbbd1d5672a7cee1f1d8, expires: 1736332246, status: open, created_at: '2025-01-08T10:15:46.000000Z', updated_at: '2025-01-08T10:15:46.000000Z' }
            tags:
                - 'Video sessions'
        post:
            summary: 'Initialize video session'
            description: "Creates JWT (JSON Web Token) and room name for Jitsi session.\nLogged-in user is a moderator of the session.\nJWT lifetime is 15 minutes."
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to initialize video session'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to initialize video session' }
                404:
                    description: '404, User not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'User not found'
                                properties:
                                    message: { type: string, example: 'User not found' }
                500:
                    description: '500, Key file not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Key file not found.'
                                properties:
                                    message: { type: string, example: 'Key file not found.' }
                200:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 760
                                    moderator_id: 15009
                                    guest_id: 15010
                                    jwt_moderator: a2842c2b6a471f2ef963ecb6d01620231bc8a54f56e0b62e8ebab82a2a941b9b
                                    jwt_guest: 18b0a5cf1a7565679ecd1f845ca85ac1870c5b4e927fbd717784b71243dc287d
                                    room_name: room_5b9964043b051c19153b500ac0d61313
                                    expires: 1736332247
                                    status: open
                                    created_at: '2025-01-08T10:15:47.000000Z'
                                    updated_at: '2025-01-08T10:15:47.000000Z'
                                properties:
                                    id: { type: integer, example: 760 }
                                    moderator_id: { type: integer, example: 15009 }
                                    guest_id: { type: integer, example: 15010 }
                                    jwt_moderator: { type: string, example: a2842c2b6a471f2ef963ecb6d01620231bc8a54f56e0b62e8ebab82a2a941b9b }
                                    jwt_guest: { type: string, example: 18b0a5cf1a7565679ecd1f845ca85ac1870c5b4e927fbd717784b71243dc287d }
                                    room_name: { type: string, example: room_5b9964043b051c19153b500ac0d61313 }
                                    expires: { type: integer, example: 1736332247 }
                                    status: { type: string, example: open }
                                    created_at: { type: string, example: '2025-01-08T10:15:47.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:47.000000Z' }
            tags:
                - 'Video sessions'
        parameters:
            -
                in: path
                name: guestId
                description: 'User ID (guest of the meeting).'
                example: 1
                required: true
                schema:
                    type: integer
    '/api/sessions/video/{sessionId}/refresh':
        post:
            summary: 'Refresh video session'
            description: 'Refreshes video session JWT tokens to extend session lifetime.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to refresh video session'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to refresh video session' }
                404:
                    description: '404, Session not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Video session not found'
                                properties:
                                    message: { type: string, example: 'Video session not found' }
                202:
                    description: ''
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    id: 761
                                    moderator_id: 15013
                                    guest_id: 15014
                                    jwt_moderator: 3f6843b96048c796a3865c99f0ed90b0cdda5d970d2b0bf609714dba3c9975c1
                                    jwt_guest: 0d4f3e0e8faf0dc6d28655c8d8b6fdc2e5e30f256e96ca1f2f6669270fd1c618
                                    room_name: room_5b9964043b051c19153b500ac0d61313
                                    expires: 1736332247
                                    status: open
                                    created_at: '2025-01-08T10:15:47.000000Z'
                                    updated_at: '2025-01-08T10:15:47.000000Z'
                                properties:
                                    id: { type: integer, example: 761 }
                                    moderator_id: { type: integer, example: 15013 }
                                    guest_id: { type: integer, example: 15014 }
                                    jwt_moderator: { type: string, example: 3f6843b96048c796a3865c99f0ed90b0cdda5d970d2b0bf609714dba3c9975c1 }
                                    jwt_guest: { type: string, example: 0d4f3e0e8faf0dc6d28655c8d8b6fdc2e5e30f256e96ca1f2f6669270fd1c618 }
                                    room_name: { type: string, example: room_5b9964043b051c19153b500ac0d61313 }
                                    expires: { type: integer, example: 1736332247 }
                                    status: { type: string, example: open }
                                    created_at: { type: string, example: '2025-01-08T10:15:47.000000Z' }
                                    updated_at: { type: string, example: '2025-01-08T10:15:47.000000Z' }
            tags:
                - 'Video sessions'
        parameters:
            -
                in: path
                name: sessionId
                description: 'Optional parameter. Video Session ID.'
                required: true
                schema:
                    type: string
                examples:
                    omitted:
                        summary: 'When the value is omitted'
                        value: ''
                    present:
                        summary: 'When the value is present'
                        value: '1'
    '/api/sessions/video/{sessionId}':
        delete:
            summary: 'Close video session'
            description: 'Marks video session (database entry) as closed. Does not close session on Jitsi side.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to close video session'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to close video session' }
                404:
                    description: '404, Session not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Video session not found'
                                properties:
                                    message: { type: string, example: 'Video session not found' }
                202:
                    description: '202'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Video session closed'
                                properties:
                                    message: { type: string, example: 'Video session closed' }
            tags:
                - 'Video sessions'
        parameters:
            -
                in: path
                name: sessionId
                description: 'Optional parameter. Video Session ID.'
                required: true
                schema:
                    type: string
                examples:
                    omitted:
                        summary: 'When the value is omitted'
                        value: ''
                    present:
                        summary: 'When the value is present'
                        value: '1'
    '/api/sessions/video/invite-support/{deviceId}':
        post:
            summary: 'Invite technical support'
            description: 'Sends notification to Slack channel. Link to meeting is valid for 10 minutes.'
            parameters:
                -
                    in: header
                    name: Authorization
                    description: ''
                    example: 'Bearer {ACCESS_TOKEN}'
                    schema:
                        type: string
                -
                    in: header
                    name: Content-Type
                    description: ''
                    example: application/json
                    schema:
                        type: string
                -
                    in: header
                    name: Accept
                    description: ''
                    example: application/json
                    schema:
                        type: string
            responses:
                403:
                    description: '403, Insufficient permission'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Insufficient permission to invite tech support'
                                properties:
                                    message: { type: string, example: 'Insufficient permission to invite tech support' }
                404:
                    description: '404, Device not found'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    message: 'Device not found'
                                properties:
                                    message: { type: string, example: 'Device not found' }
                500:
                    description: '500, Request failed'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    response: invalid_payload
                                properties:
                                    response: { type: string, example: invalid_payload }
                200:
                    description: '200'
                    content:
                        application/json:
                            schema:
                                type: object
                                example:
                                    response: success
                                properties:
                                    response: { type: string, example: success }
            tags:
                - 'Video sessions'
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                room:
                                    type: string
                                    description: 'Name of Jitsi room to connect.'
                                    example: room_1081c785cf1464e4d6ebc3976561d490
                                description:
                                    type: string
                                    description: 'Description of problem provided by clinician.'
                                    example: 'Grip switching is not working, please join.'
                            required:
                                - room
        parameters:
            -
                in: path
                name: deviceId
                description: 'Device ID (current device of the session).'
                example: 1
                required: true
                schema:
                    type: integer
components:
    securitySchemes:
        default:
            type: http
            scheme: bearer
            description: ''
security:
    -
        default: []
