{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/eagle-eye-networks/main/json-schema/eagle-eye-networks-api-user-update-schema.json",
  "title": "ApiUserUpdate",
  "x-generated": "2026-10-14",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/eagle-eye-networks-user-accounts-openapi.yml#/components/schemas/ApiUserUpdate",
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string",
      "minLength": 1,
      "maxLength": 126
    },
    "lastName": {
      "type": "string",
      "minLength": 1,
      "maxLength": 126
    },
    "email": {
      "$ref": "#/$defs/Email"
    },
    "locationId": {
      "$ref": "#/$defs/LocationId"
    },
    "status": {
      "type": "string",
      "description": "User can be enabled if set to \"active\" and disabled if set to \"blocked\"",
      "enum": [
        "active",
        "blocked"
      ]
    },
    "loginSchedule": {
      "$ref": "#/$defs/WeeklyIntervalSchedule"
    },
    "permissions": {
      "$ref": "#/$defs/Permissions"
    },
    "employeeId": {
      "$ref": "#/$defs/EmployeeId"
    }
  },
  "$defs": {
    "AdminPermission": {
      "properties": {
        "administrator": {
          "type": "boolean",
          "x-jsoninclude-nonnull-annotation": true,
          "description": "All permissions are enabled - create, delete, edit, and view access to all accounts and user settings, bridges, cameras, layouts, audit log and archive.\n"
        }
      }
    },
    "Email": {
      "type": "string",
      "description": "This email is used for login.",
      "format": "email"
    },
    "EmployeeId": {
      "type": [
        "string",
        "null"
      ],
      "description": "Custom text field",
      "maxLength": 50
    },
    "Interval": {
      "type": "object",
      "description": "Interval of a schedule. If the start time is greater than the end time, the interval is considered to cover the remaining time of the day from the start time until 24:00, and then from 00:00 to the end time. \nFor example, start: 16:30 and end: 06:00 on monday means the interval covers from 16:30 to 24:00 and continues from 00:00 to 06:00 on the same day (monday).\n",
      "properties": {
        "start": {
          "type": "string",
          "pattern": "^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$",
          "description": "Starting point of the interval. It should be in the range of 00:00 to 23:59 since this is the range for a day"
        },
        "end": {
          "type": "string",
          "pattern": "^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$",
          "description": "End point of the interval. It should be in the range of 00:00 to 23:59 since this is the range for the day"
        }
      },
      "required": [
        "start",
        "end"
      ]
    },
    "LocationId": {
      "description": "ID Of the location.",
      "minLength": 1,
      "type": [
        "string",
        "null"
      ]
    },
    "Permissions": {
      "allOf": [
        {
          "$ref": "#/$defs/AdminPermission"
        },
        {
          "type": "object",
          "properties": {
            "editAccounts": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Edit Control, Days, Security, Camera, Alerts, Notifications, Privacy, Sharing, Responders, Default retentions, and camera resolution settings.\n"
            },
            "layoutAdministrator": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Create, delete and edit any accessible layouts. All user layouts are visible to admin users.\n"
            },
            "createLayouts": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Ability to create layouts and edit the layouts created. This does not grant permission to edit layouts created by other users.\n"
            },
            "editNoBillingDeviceSettings": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Edit Camera Settings except for Cloud Retention and Full Video Resolution. Cannot add or delete cameras. Edit existing Analytics. Cannot add or delete Analytics.\n"
            },
            "turnCamerasOnOff": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Turn Cameras on/off. Cameras off cannot be recorded."
            },
            "editMotionAreas": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Edit Motion Settings. Set object size and sensitivity, add/delete regions, add/delete alerts for regions. Edit existing Analytics. Set object size and sensitivity, add/delete alerts.\n"
            },
            "editAllCameraSettings": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Editing all Camera Settings. Cannot add or delete cameras."
            },
            "editUsers": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Create, delete and edit non-admin users in an end user account."
            },
            "upgradeEdition": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Upgrade current edition subscription to a higher level edition."
            },
            "addEditBridgesCameras": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Create, delete, edit, and view Bridges and Cameras. This is the only permission for a non-admin to be able to add and view bridges in an end user account.\n"
            },
            "editSharing": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Edit Sharing and Responders settings."
            },
            "controlPTZ": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Control Pan, Tilt, Zoom, & recall stations while viewing a preview or live video of PTZ cameras.\n"
            },
            "editPTZStations": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Edit PTZ Settings. Set PTZ mode and create, delete, edit stations.\n"
            },
            "addEditSpeakers": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Add speakers, edit speaker settings, delete speakers."
            },
            "editSpeakers": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Edit speaker settings. Cannot add or delete speakers."
            },
            "viewLiveVideo": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View full resolution video live."
            },
            "viewHistoricVideo": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View history browser and historic video."
            },
            "downloadVideo": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Download preview and full resolution video."
            },
            "viewPreviewVideo": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View preview images from cameras."
            },
            "talkDown": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Allows the users to initiate Talk Down to the camera field(s) of view."
            },
            "editMap": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Add and edit floors, lines, shapes, and cameras on the map."
            },
            "viewAuditLog": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View Audit Log and download reports from it."
            },
            "viewArchive": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View all files and folders within the Archive."
            },
            "editArchive": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Save videos to Archive - delete, edit, and view files and folders within the Archive."
            },
            "viewPlugins": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View all Plugins."
            },
            "editPlugins": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Add and remove plugins."
            },
            "exportUsers": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Export a list of account users in .csv format."
            },
            "viewVSP": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "User access to view vehicle data, search vehicle across camera & location, set rules, and alert."
            },
            "editResellerUsers": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Create, delete and edit reseller user who is not an Admin."
            },
            "editAdminUsers": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Create, delete and edit admin and non-admin users in an end user account. Give access to bridges, cameras, and layouts. Create new end user accounts and give access to them.\n"
            },
            "viewContract": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View recordings, search, and create new recordings."
            },
            "addRemovePayment": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Add and remove payment methods."
            },
            "viewInvoice": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View and download invoices."
            },
            "placeOrders": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Add products to the shopping cart and place orders."
            },
            "viewShipments": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View the status of shipments."
            },
            "viewPricingInformation": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View pricing information."
            },
            "viewResellerProgramInformation": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View Marketing's reseller program information."
            },
            "viewVSPRule": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View VSP rules."
            },
            "editVSPRule": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Edit VSP rules."
            },
            "viewVehicleList": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View vehicle lists."
            },
            "editVehicleList": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Edit vehicle lists."
            },
            "viewAutomations": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View automation alerts, rules, and actions."
            },
            "editAutomations": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Edit automation alerts, rules, and actions."
            },
            "editAlertManagerRulesAndActions": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "Edit Automations rules and actions."
            },
            "viewAlertManagerRulesAndActions": {
              "type": "boolean",
              "x-jsoninclude-nonnull-annotation": true,
              "description": "View Alert Manager rules and actions."
            }
          }
        }
      ]
    },
    "WeeklyIntervalSchedule": {
      "type": "object",
      "description": "It signifies a week long alert schedule. This schedule is effective according to actor's (user/camera/account) timezone. It allows setting different times for different days.\n",
      "properties": {
        "sunday": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Interval"
          }
        },
        "monday": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Interval"
          }
        },
        "tuesday": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Interval"
          }
        },
        "wednesday": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Interval"
          }
        },
        "thursday": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Interval"
          }
        },
        "friday": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Interval"
          }
        },
        "saturday": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Interval"
          }
        }
      }
    }
  }
}