{
  "openrpc": "1.0.0-rc1",
  "info": {
    "version": "1.0.3",
    "title": "GoodSync Runner",
    "license": {
      "name": "MIT"
    }
  },
  "servers": [
    {
      "url": "http://localhost:33556/api"
    }
  ],
  "methods": [
    {
      "name": "GetUserInfo",
      "summary": "Retrieve information about logged-in User. Requires userinfo authorization scope",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "user"
        }
      ],
      "params": [],
      "result": {
        "name": "JobServerUserInformation",
        "schema": {
          "$ref": "#/components/schemas/JobServerUserInformation"
        }
      }
    },
    {
      "name": "GetGsServerPreAuth",
      "summary": "Get pre-authenticated URI to GoodSync Server running on the same machine",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "user"
        }
      ],
      "params": [],
      "result": {
        "name": "JobServerGetGsServerPreAuthResult",
        "schema": {
          "type": "object",
          "properties": {
            "preauth_uri": {
              "type": "string"
            }
          }
        }
      }
    },
    {
      "name": "GetAboutInfo",
      "summary": "Get product information",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "user"
        }
      ],
      "params": [],
      "result": {
        "name": "JobServerAboutInfoResult",
        "schema": {
          "$ref": "#/components/schemas/JobServerAboutInfoResult"
        }
      }
    },
    {
      "name": "CreateSupportTicket",
      "description": "Start creation of Support Ticket (assemble logs, compress, submit to GSSS). This process may take a long time, so caller is supposed to poll via GetSupportTicketState until it sees state 3 (succeeded) or 4 (error)",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "user"
        }
      ],
      "params": [],
      "result": {
        "name": "JobServerCreateSupportTicketResult",
        "schema": {
          "$ref": "#/components/schemas/JobServerCreateSupportTicketResult"
        }
      }
    },
    {
      "name": "GetSupportTicketState",
      "description": "Query state of Support Ticket creation process",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "user"
        }
      ],
      "params": [],
      "result": {
        "name": "JobServerSupportTicketSession",
        "schema": {
          "$ref": "#/components/schemas/JobServerSupportTicketSession"
        }
      }
    },
    {
      "name": "ListJobNames",
      "summary": "List names of all jobs",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "jobs"
        }
      ],
      "params": [],
      "result": {
        "name": "GsRunnerListJobNamesResult",
        "schema": {
          "$ref": "#/components/schemas/GsRunnerListJobNamesResult"
        }
      }
    },
    {
      "name": "ListJobs",
      "summary": "List Jobs matching certain criteria",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "jobs"
        }
      ],
      "params": [
        {
          "name": "job_names",
          "description": "If set, only jobs having these names will be returned",
          "schema": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        {
          "name": "start_from",
          "description": "Job name to start listing from (optional). Can be used for pagination or to look up specific Job (in combination with max_items=1)",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "max_items",
          "description": "Maximum number of Jobs to return in this response (optional). Default value is 20, upper limit is 100",
          "required": false,
          "schema": {
            "type": "integer"
          }
        },
        {
          "name": "select",
          "description": "Document filter: one or more RFC 9535 (JSONPath) expressions in square bracket notation",
          "schema": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      ],
      "result": {
        "name": "JobServerListJobsResult",
        "schema": {
          "$ref": "#/components/schemas/JobServerListJobsResult"
        }
      }
    },
    {
      "name": "GetJobByName",
      "summary": "Get details of a job with given name",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "jobs"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "select",
          "description": "Document filter: one or more RFC 9535 (JSONPath) expressions in square bracket notation",
          "schema": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      ],
      "result": {
        "name": "GsRunnerJobDataResult",
        "schema": {
          "$ref": "#/components/schemas/CSyncJob"
        }
      }
    },
    {
      "name": "CreateJob",
      "summary": "Create new Job",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "jobs"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "eJobDirection",
          "description": "Job direction (0: two-way, 1: left to right, 2: right to left)",
          "required": true,
          "schema": {
            "type": "integer",
            "minimum": 0,
            "maximum": 4
          }
        }
      ],
      "result": {
        "name": "GsRunnerNewJobDataResult",
        "schema": {
          "$ref": "#/components/schemas/CSyncJob"
        }
      }
    },
    {
      "name": "RenameJob",
      "summary": "Rename existing Job",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "jobs"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "new_job_name",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "JobServerRenameJobResult",
        "schema": {
          "type": "object",
          "properties": {
            "new_job_name": {
              "type": "string"
            }
          }
        }
      }
    },
    {
      "name": "DeleteJob",
      "summary": "Delete existing Job",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "jobs"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "GsRunnerDeleteJobResult",
        "schema": {
        }
      }
    },
    {
      "name": "SetJobOptions",
      "summary": "Set job options (cannot rename jobs)",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "jobs"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "options",
          "description": "New job options",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/CJobOptions"
          }
        }
      ],
      "result": {
        "name": "GsRunnerSetJobOptionsResult",
        "schema": {
          "$ref": "#/components/schemas/GsRunnerSetJobOptionsResult"
        }
      }
    },
    {
      "name": "ListJobStatuses",
      "summary": "List statuses of all jobs",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "jobs"
        },
        {
          "name": "status"
        }
      ],
      "params": [],
      "result": {
        "name": "GsListJobStatusesResult",
        "schema": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/JobServerJobStatus"
          }
        }
      }
    },
    {
      "name": "StartJob",
      "summary": "Ask runner to start a job in given mode",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "commands"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "start_type",
          "description": "Job start type enum (1=Analyze, 2=Analyze and Sync, 3=Sync)",
          "schema": {
            "type": "integer"
          }
        },
        {
          "name": "override_locks",
          "description": "Override locks (default:false)",
          "schema": {
            "type": "boolean"
          }
        },
        {
          "name": "override_bad_state_file",
          "description": "Override bad state file (default:false)",
          "schema": {
            "type": "boolean"
          }
        }
      ],
      "result": {
        "name": "GsRunnerStartJobResult",
        "schema": {
          "$ref": "#/components/schemas/GsRunnerStartJobResult"
        }
      }
    },
    {
      "name": "StopJob",
      "summary": "Stop running Job",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "commands"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "force",
          "description": "Whether to request immediate stop (default:false)",
          "required": false,
          "schema": {
            "type": "boolean"
          }
        }
      ],
      "result": {
        "name": "GsRunnerStopJobResult",
        "schema": {
          "$ref": "#/components/schemas/GsRunnerStopJobResult"
        }
      }
    },
    {
      "name": "ResetJob",
      "summary": "Clear previous analysis results and bring Job back to non-analyzed state",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "commands"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "JobServerResetJobResult",
        "schema": {
          "$ref": "#/components/schemas/JobServerResetJobResult"
        }
      }
    },
    {
      "name": "StartSpecOp",
      "summary": "Ask runner to start a special operation on given job",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "commands"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "spop_type",
          "description": "Job special operation enum (1 - SpOp_DeleteStateFiles, 2 - SpOp_DeleteRecycledAndHistory, 3 - SpOp_DeleteGsData_Left, 4 - SpOp_DeleteGsData_Right, 5 - SpOp_DeleteGsData_Both, 6 - SpOp_DeleteFolder_Left, 7 - SpOp_DeleteFolder_Right, 8 - SpOp_CleanupRecycled, 9 - SpOp_DeleteItems_Left, 10 - SpOp_DeleteItems_Right, 11 - SpOp_DeleteItems_Both, 12 - SpOp_CompareItems, 13 - SpOp_DeleteRecycledFileMarker, 14 - SpOp_ChangeItemActionHereAndBelow, 16 - SpOp_ResolveConflicts_NewerWins, 17 - SpOp_ResolveConflicts_LeftToRight, 18 - SpOp_ResolveConflicts_RightToLeft)",
          "required": true,
          "schema": {
            "type": "integer"
          }
        },
        {
          "name": "paths_actions",
          "description": "An array of path-action pairs. Action field is only used for SpOp_ChangeItemActionHereAndBelow.",
          "required": true,
          "schema": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GsRunnerSpecOpPathActionPair"
            }
          }
        },
        {
          "name": "req_view_mode",
          "description": "Job Tree View Mode for SpOp_ChangeItemActionHereAndBelow(14)",
          "schema": {
            "$ref": "#/components/schemas/ViewMode"
          }
        }
      ],
      "result": {
        "name": "GsRunnerStartJobResult",
        "schema": {
          "$ref": "#/components/schemas/GsRunnerStartJobResult"
        }
      }
    },
    {
      "name": "FetchJobLog",
      "summary": "Fetch job log lines",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "logs"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "next_log_id",
          "description": "Log line ID to start listing from",
          "required": false,
          "schema": {
            "type": "integer",
            "minimum": 0
          }
        }
      ],
      "result": {
        "name": "GsRunnerFetchJobLogResult",
        "schema": {
          "$ref": "#/components/schemas/GsRunnerFetchJobLogResult"
        }
      }
    },
    {
      "name": "SwitchJobViewMode",
      "summary": "Request server-side View Mode change",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "tree"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "view_mode",
          "description": "Requested View Mode",
          "required": true,
          "schema": {
            "type": "integer"
          }
        }
      ],
      "result": {
        "name": "JobServerSwitchJobViewModeResult",
        "schema": {
        }
      }
    },
    {
      "name": "ReadJobTree",
      "summary": "Read tree of files and folders to be synced",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "tree"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "path",
          "description": "Absolute path in tree for the item whose children we want to read (such as '\/folder1\/folder2')",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "start_from",
          "description": "Item name to continue reading from (such as 'folder1', can be used for paged responses)",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "max_items",
          "description": "Maximum number of items to return in this response (default:100)",
          "required": false,
          "schema": {
            "type": "integer"
          }
        },
        {
          "name": "view_mode",
          "description": "View mode (tree projection) to read",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/ViewMode"
          }
        }
      ],
      "result": {
        "name": "JobServerJobTreeResult",
        "schema": {
          "$ref": "#/components/schemas/JobServerJobTreeResult"
        }
      }
    },
    {
      "name": "ReadJobTreeChanges",
      "summary": "Read changes to tree of files and folders",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "tree"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "next_change_id",
          "description": "Change ID to start listing from",
          "required": false,
          "schema": {
            "type": "integer",
            "minimum": 0
          }
        },
        {
          "name": "max_items",
          "description": "Maximum number of items to return in this response (default:100)",
          "required": false,
          "schema": {
            "type": "integer"
          }
        }
      ],
      "result": {
        "name": "GsRunnerReadJobTreeChangesResult",
        "schema": {
          "$ref": "#/components/schemas/GsRunnerReadJobTreeChangesResult"
        }
      }
    },
    {
      "name": "GetSuspendGlobalAutoRun",
      "summary": "Get global autorun suspend flag value",
      "paramStructure": "by-name",
      "params": [
      ],
      "result": {
        "name": "JobServerSuspendGlobalAutoRunResult",
        "schema": {
          "$ref": "#/components/schemas/JobServerSuspendGlobalAutoRunStruct"
        }
      }
    },
    {
      "name": "SetSuspendGlobalAutoRun",
      "summary": "Set or clear global autorun suspend flag (if set, jobs will not start automatically)",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "commands"
        }
      ],
      "params": [
        {
          "name": "suspend_autorun",
          "description": "Global autorun suspend flag value",
          "required": true,
          "schema": {
            "type": "boolean"
          }
        }
      ],
      "result": {
        "name": "JobServerSuspendGlobalAutoRunResult",
        "schema": {
          "$ref": "#/components/schemas/JobServerSuspendGlobalAutoRunStruct"
        }
      }
    },
    {
      "name": "ListGroups",
      "summary": "List job groups",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "groups"
        }
      ],
      "params": [],
      "result": {
        "name": "GsRunnerListGroupsResult",
        "schema": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/CJobGroup"
          }
        }
      }
    },
    {
      "name": "CreateGroup",
      "summary": "Create new job group",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "groups"
        }
      ],
      "params": [
        {
          "name": "group_name",
          "description": "New group name",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "JobServerGroupDataResult",
        "schema": {
          "$ref": "#/components/schemas/CJobGroup"
        }
      }
    },
    {
      "name": "DeleteGroup",
      "summary": "Delete job group",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "groups"
        }
      ],
      "params": [
        {
          "name": "group_name",
          "description": "Group name",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "GsRunnerDeleteGroupResult",
        "schema": {
        }
      }
    },
    {
      "name": "AddJobToGroup",
      "summary": "Add Job to given Group",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "groups"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Existing Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "group_name",
          "description": "Existing Group name",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "JobServerGroupDataResult",
        "schema": {
          "$ref": "#/components/schemas/CJobGroup"
        }
      }
    },
    {
      "name": "RemoveJobFromGroup",
      "summary": "Remove Job from given Group",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "groups"
        }
      ],
      "params": [
        {
          "name": "job_name",
          "description": "Existing Job name",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "group_name",
          "description": "Existing Group name",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "JobServerGroupDataResult",
        "schema": {
          "$ref": "#/components/schemas/CJobGroup"
        }
      }
    },
    {
      "name": "ListAccounts",
      "summary": "Read list of accounts",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "start_from",
          "description": "Account Key to start reading from (optional). Can be used for pagination or to look up specific account (in combination with max_items=1)",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "fs_url",
          "description": "File system prefix (optional). If specified, only accounts for file system with given prefix will be returned",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "max_items",
          "description": "Maximum number of accounts to return in this response (optional). Default value is 20, upper limit is 100",
          "required": false,
          "schema": {
            "type": "integer"
          }
        }
      ],
      "result": {
        "name": "ListAccountsResult",
        "schema": {
          "$ref": "#/components/schemas/ListAccountsResult"
        }
      }
    },
    {
      "name": "AddNewAccount",
      "summary": "Add new account. Notice that it cannot set DisplayName for new account (use RenameAccount method)",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "account_data",
          "description": "New account data",
          "schema": {
            "$ref": "#/components/schemas/AccountStub"
          }
        }
      ],
      "result": {
        "name": "AddNewAccountResult",
        "description": "Resulting new Account Data",
        "schema": {
          "type": "object",
          "properties": {
            "account_data": {
              "$ref": "#/components/schemas/AccountStub"
            }
          }
        }
      }
    },
    {
      "name": "UpdateAccount",
      "summary": "Update existing account. AcctConn has to be submitted whole (no patch semantics). Notice that it cannot set DisplayName for new account (use RenameAccount method)",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "account_data",
          "description": "New account data (with AccountKey)",
          "schema": {
            "$ref": "#/components/schemas/AccountStub"
          }
        }
      ],
      "result": {
        "name": "GsRunnerUpdateAccountResult",
        "description": "Updated Account Data",
        "schema": {
          "type": "object",
          "properties": {
            "account_data": {
              "$ref": "#/components/schemas/AccountStub"
            }
          }
        }
      }
    },
    {
      "name": "RenameAccount",
      "summary": "Change DisplayName of existing account",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "Key",
          "schema": {
            "type": "string",
            "description": "Account Key",
            "minLength": 4
          }
        },
        {
          "name": "DisplayName",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "RenameAccountResult",
        "schema": {
          "$ref": "#/components/schemas/RenameAccountResult"
        }
      }
    },
    {
      "name": "DeleteAccount",
      "summary": "Delete Account. On sucess, this method returns no data",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "Key",
          "schema": {
            "type": "string",
            "minLength": 4
          }
        }
      ],
      "result": {
        "name": "DeleteAccountResult",
        "schema": {
          "type": "object"
        }
      }
    },
    {
      "name": "SetUnnamedBookmark",
      "summary": "Create or update unnamed bookmark",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "bookmark_data",
          "schema": {
            "$ref": "#/components/schemas/UnnamedBookmarkStub"
          }
        }
      ],
      "result": {
        "name": "SetUnnamedBookmarkResult",
        "schema": {
          "type": "object",
          "properties": {
            "bookmark_data": {
              "$ref": "#/components/schemas/UnnamedBookmarkStub"
            }
          }
        }
      }
    },
    {
      "name": "DeleteUnnamedBookmark",
      "summary": "Delete Unnamed Bookmark",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "bookmark_data",
          "description": "UnnamedBookmarkStub object with only sAcctKey and sServerDir set",
          "schema": {
            "$ref": "#/components/schemas/UnnamedBookmarkStub"
          }
        }
      ],
      "result": {
        "name": "DeleteUnnamedBookmarkResult",
        "schema": {
          "type": "object"
        }
      }
    },
    {
      "name": "ListFileSystems",
      "summary": "Read list of available file systems",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "url",
          "description": "Optional. If specified, only file system whose prefix matches this URL will be returned",
          "required": false,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "file_systems",
        "schema": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/FileSystemDescription"
          }
        }
      }
    },
    {
      "name": "ListServers",
      "summary": "List available servers",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "conn",
          "description": "ListServer parameters (as GsConnectInfo object). sUrlA is mandatory, some File Systems may need sUserIdA and sPasswordEncMasterA",
          "schema": {
            "$ref": "#/components/schemas/GsConnectInfo"
          }
        },
        {
          "name": "list_all",
          "description": "List all servers, even if some of them are off-line (optional, defaults to false)",
          "required": false,
          "schema": {
            "type": "boolean"
          }
        }
      ],
      "result": {
        "name": "ListServersResult",
        "schema": {
          "$ref": "#/components/schemas/ListServersResult"
        }
      }
    },
    {
      "name": "ConnectFS",
      "summary": "Connect File System Instance",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "folder_coords",
          "description": "Folder coordinates for connection",
          "schema": {
            "$ref": "#/components/schemas/GsFolderCoords"
          }
        },
        {
          "name": "request_free_space",
          "description": "Whether to request free space on file system root after successful connection (default:false)",
          "required": false,
          "schema": {
            "type": "boolean"
          }
        }
      ],
      "result": {
        "name": "ConnectFSResult",
        "schema": {
          "$ref": "#/components/schemas/ConnectFSResult"
        }
      }
    },
    {
      "name": "DisconnectFS",
      "summary": "Disconnect File System Instance",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "filesys_handle",
          "description": "File System Handle obtained from successful ConnectFS call",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "DisconnectFSResult",
        "schema": {
          "$ref": "#/components/schemas/DisconnectFSResult"
        }
      }
    },
    {
      "name": "ListDir",
      "summary": "List Directory on a connected File System Instance",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "filesys_handle",
          "description": "File System Handle obtained from successful ConnectFS call",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "path",
          "description": "Path to Directory to be listed, delimited with forward slash (like /folder1/folder2)",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "page_token",
          "description": "Page token (next_page_token from previous successful ListDir call). If empty, listing will start from first page",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "max_items",
          "description": "Maximum number of items to return in a single page of listing (default: 100, maximum: 1000)",
          "schema": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000
          }
        }
      ],
      "result": {
        "name": "ListDirResult",
        "schema": {
          "$ref": "#/components/schemas/ListDirResult"
        }
      }
    },
    {
      "name": "GetInfo",
      "summary": "Get Information about specific file/folder/link at given path",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "filesys_handle",
          "description": "File System Handle obtained from successful ConnectFS call",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "path",
          "description": "Path to file/folder, delimited with forward slash (like /folder1/folder2/file1)",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "get_owner",
          "required": false,
          "description": "Whether to get File Owner. Optional (default: false)",
          "schema": {
            "type": "boolean"
          }
        },
        {
          "name": "get_acl",
          "required": false,
          "description": "Whether to get Access Control List. Optional (default: false)",
          "schema": {
            "type": "boolean"
          }
        }
      ],
      "result": {
        "name": "GetInfoResult",
        "schema": {
          "$ref": "#/components/schemas/GenericFileInfoResult"
        }
      }
    },
    {
      "name": "GetFreeDiskSpace",
      "summary": "Get Total/Available/Free Disk Space at given path",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "filesys_handle",
          "description": "File System Handle obtained from successful ConnectFS call",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "path",
          "description": "Path to folder, delimited with forward slash (like /folder1/folder2)",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "GetFreeDiskSpaceResult",
        "schema": {
          "$ref": "#/components/schemas/GetFreeDiskSpaceResult"
        }
      }
    },
    {
      "name": "MakeFolder",
      "summary": "Create New Folder at given path",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "browse"
        }
      ],
      "params": [
        {
          "name": "filesys_handle",
          "description": "File System Handle obtained from successful ConnectFS call",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "path",
          "description": "New folder path, delimited with forward slash (like /folder1/folder2)",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "MakeFolderResult",
        "schema": {
          "$ref": "#/components/schemas/GenericFileInfoResult"
        }
      }
    },
    {
      "name": "OpenDownload",
      "summary": "Open file for downloading. At any time, only one file can be opened for upload/download on the same file system instance.",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "filesys_handle",
          "description": "File System Handle obtained from successful ConnectFS call",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "path",
          "description": "Path to file, delimited with forward slash (like /folder1/folder2/file1)",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "OpenDownloadResult",
        "schema": {
          "$ref": "#/components/schemas/GenericFileInfoResult"
        }
      }
    },
    {
      "name": "DownloadBuf",
      "summary": "Download part of file body of given size, starting from current download position",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "filesys_handle",
          "description": "File System Handle obtained from successful ConnectFS call",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "size",
          "description": "Number of bytes to download and return (maximum 16MiB = 16777216)",
          "required": true,
          "schema": {
            "type": "integer",
            "maximum": 16777216
          }
        }
      ],
      "result": {
        "name": "DownloadBufResult",
        "schema": {
          "$ref": "#/components/schemas/DownloadBufResult"
        }
      }
    },
    {
      "name": "CloseDownload",
      "summary": "Close download initiated by OpenDownload",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "filesys_handle",
          "description": "File System Handle obtained from successful ConnectFS call",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "commit",
          "description": "Commit flag. Set to false if not sure. Should be true true only if entire file has been successfully downloaded",
          "required": true,
          "schema": {
            "type": "boolean"
          }
        }
      ],
      "result": {
        "name": "CloseDownloadResult",
        "schema": {
          "$ref": "#/components/schemas/CloseDownloadResult"
        }
      }
    },
    {
      "name": "OpenUpload",
      "summary": "Initiate file upload",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "filesys_handle",
          "description": "File System Handle obtained from successful ConnectFS call",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "path",
          "description": "Path to file, delimited with forward slash (like /folder1/folder2/file1)",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "file_info",
          "description": "Information about the file that is about to be uploaded (size field must be filled)",
          "schema": {
            "$ref": "#/components/schemas/CFileInfo"
          }
        }
      ],
      "result": {
        "name": "OpenUploadResult",
        "schema": {
          "$ref": "#/components/schemas/OpenUploadResult"
        }
      }
    },
    {
      "name": "UploadBuf",
      "summary": "Upload buffer to file previously open using OpenUpload",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "filesys_handle",
          "description": "File System Handle obtained from successful ConnectFS call",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "buf_size",
          "description": "Number of bytes in buf",
          "required": true,
          "schema": {
            "type": "integer"
          }
        },
        {
          "name": "buf",
          "description": "Bytes to be uploaded, base64-encoded",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "UploadBufResult",
        "schema": {
          "type": "object"
        }
      }
    },
    {
      "name": "CloseUpload",
      "summary": "Close download initiated by OpenUpload",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "filesys_handle",
          "description": "File System Handle obtained from successful ConnectFS call",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "commit",
          "description": "Commit flag. Set to true to flush uploaded bytes to file and finalize upload",
          "required": true,
          "schema": {
            "type": "boolean"
          }
        }
      ],
      "result": {
        "name": "CloseUploadResult",
        "schema": {
          "type": "object"
        }
      }
    },
    {
      "name": "DeleteFile",
      "summary": "Delete file (cannot delete folders)",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "filesys_handle",
          "description": "File System Handle obtained from successful ConnectFS call",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "path",
          "description": "Path to file, delimited with forward slash (like /folder1/folder2/file1)",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "DeleteFileResult",
        "schema": {
          "type": "object"
        }
      }
    },
    {
      "name": "CopyFiles",
      "summary": "Copy multiple files/folders (long File Operation). Status should be monitored by calling GetFileOpStatus",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "src_folder_coords",
          "description": "Source side folder coordinates",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/GsFolderCoords"
          }
        },
        {
          "name": "src_path_list",
          "description": "List of paths to copy, relative to src_folder_coords",
          "required": true,
          "schema": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        {
          "name": "dst_folder_coords",
          "description": "Destination side folder coordinates",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/GsFolderCoords"
          }
        },
        {
          "name": "dst_folder_path",
          "description": "Destination path, relative to dst_folder_coords",
          "required": false,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "CopyFilesResult",
        "schema": {
          "$ref": "#/components/schemas/FileOpStatus"
        }
      }
    },
    {
      "name": "MoveFiles",
      "summary": "Move multiple files/folders (long File Operation). Status should be monitored by calling GetFileOpStatus",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "src_folder_coords",
          "description": "Source side folder coordinates",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/GsFolderCoords"
          }
        },
        {
          "name": "src_path_list",
          "description": "List of paths to move, relative to src_folder_coords",
          "required": true,
          "schema": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        {
          "name": "dst_folder_coords",
          "description": "Destination side folder coordinates",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/GsFolderCoords"
          }
        },
        {
          "name": "dst_folder_path",
          "description": "Destination path, relative to dst_folder_coords",
          "required": false,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "MoveFilesResult",
        "schema": {
          "$ref": "#/components/schemas/FileOpStatus"
        }
      }
    },
    {
      "name": "RenameFile",
      "summary": "Rename/move single file or folder. Status should be monitored by calling GetFileOpStatus",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "folder_coords",
          "description": "Folder coordinates for common path for this rename operation",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/GsFolderCoords"
          }
        },
        {
          "name": "path",
          "description": "Old (existing) item path, relative to folder_coords",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "dst_path",
          "description": "New item path, relative to folder_coords",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "RenameFileResult",
        "schema": {
          "$ref": "#/components/schemas/FileOpStatus"
        }
      }
    },
    {
      "name": "DeleteFiles",
      "summary": "Delete multiple files/folders (long File Operation). Status should be monitored by calling GetFileOpStatus",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "folder_coords",
          "description": "Folder coordinates for common path for this delete operation",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/GsFolderCoords"
          }
        },
        {
          "name": "path_list",
          "description": "List of paths, relative to folder_coords",
          "required": true,
          "schema": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      ],
      "result": {
        "name": "DeleteFilesResult",
        "schema": {
          "$ref": "#/components/schemas/FileOpStatus"
        }
      }
    },
    {
      "name": "DownloadToLink",
      "summary": "Download file and return server-relative link. Status should be monitored by calling GetFileOpStatus",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "folder_coords",
          "description": "Folder coordinates",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/GsFolderCoords"
          }
        },
        {
          "name": "path",
          "description": "Path to file (relative to folder_coords)",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "DownloadToLink",
        "schema": {
          "$ref": "#/components/schemas/FileOpStatus"
        }
      }
    },
    {
      "name": "GetFileOpStatus",
      "summary": "Query File Operation status",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "fop_handle",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "GetFileOpStateResult",
        "schema": {
          "$ref": "#/components/schemas/FileOpStatus"
        }
      }
    },
    {
      "name": "ListFileOps",
      "summary": "List current long File Operations",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [],
      "result": {
        "name": "ListFileOpsResult",
        "schema": {
          "$ref": "#/components/schemas/ListFileOpsResult"
        }
      }
    },
    {
      "name": "PostFileOpAnswer",
      "summary": "Provide user answer to an overwrite/continue question",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "fop_handle",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "action",
          "schema": {
            "type": "string",
            "description": "Action that user has chosen: 'skip' means that item must be skipped; 'take_newer' means overwrite destination if it's newer, leave intact otherwise; 'overwrite' means overwrite destination item; 'rename' means give an item a new name"
          }
        },
        {
          "name": "new_name",
          "schema": {
            "type": "string",
            "description": "New item name for 'rename' action"
          }
        },
        {
          "name": "do_not_ask_again",
          "schema": {
            "type": "boolean",
            "description": "Whether to remember current action and ask no more questions (applies to any action except 'rename')"
          }
        }
      ],
      "result": {
        "name": "PostFileOpAnswerResult",
        "schema": {
          "$ref": "#/components/schemas/FileOpStatus"
        }
      }
    },
    {
      "name": "CancelFileOp",
      "summary": "Cancel File Operation",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "file operations"
        }
      ],
      "params": [
        {
          "name": "fop_handle",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "CancelFileOpResult",
        "schema": {
          "$ref": "#/components/schemas/FileOpStatus"
        }
      }
    },
    {
      "name": "GetLocalProgramOptions",
      "summary": "Get current server-side program options (local part)",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "settings"
        }
      ],
      "params": [],
      "result": {
        "name": "JobServerLocalProgramOptionsResult",
        "schema": {
          "$ref": "#/components/schemas/CProgramOptionsLocalOnly"
        }
      }
    },
    {
      "name": "SetLocalProgramOptions",
      "summary": "Set server-side program options (local part)",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "settings"
        }
      ],
      "params": [
        {
          "name": "options",
          "schema": {
            "$ref": "#/components/schemas/CProgramOptionsLocalOnly"
          }
        }
      ],
      "result": {
        "name": "JobServerLocalProgramOptionsResult",
        "schema": {
          "$ref": "#/components/schemas/CProgramOptionsLocalOnly"
        }
      }
    },
    {
      "name": "GetGlobalProgramOptions",
      "summary": "Get current server-side program options (global part)",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "settings"
        }
      ],
      "params": [],
      "result": {
        "name": "JobServerGetGlobalProgramOptionsResult",
        "schema": {
          "$ref": "#/components/schemas/CProgramOptionsGlobal"
        }
      }
    },
    {
      "name": "SetGlobalProgramOptions",
      "summary": "Set server-side program options (global part)",
      "paramStructure": "by-name",
      "tags": [
        {
          "name": "settings"
        }
      ],
      "params": [
        {
          "name": "options",
          "schema": {
            "$ref": "#/components/schemas/CProgramOptionsGlobal"
          }
        }
      ],
      "result": {
        "name": "JobServerGlobalProgramOptionsResult",
        "schema": {
          "$ref": "#/components/schemas/CProgramOptionsLocalOnly"
        }
      }
    },
    {
      "name": "RequestAccountSync",
      "summary": "Ask Server to perform Account Sync (Synchronize Jobs,Groups and Accounts with Mediator)",
      "tags": [
        {
          "name": "jobs"
        },
        {
          "name": "groups"
        },
        {
          "name": "accounts"
        }
      ],
      "paramStructure": "by-name",
      "params": [
      ],
      "result": {
        "name": "JobServerRequestAccountSyncResult",
        "schema": {
          "$ref": "#/components/schemas/JobServerRequestAccountSyncResult"
        }
      }
    },
    {
      "name": "GetAutoAccountSync",
      "summary": "Get automatic account sync flag value",
      "tags": [
        {
          "name": "jobs"
        },
        {
          "name": "groups"
        },
        {
          "name": "accounts"
        }
      ],
      "paramStructure": "by-name",
      "params": [],
      "result": {
        "name": "JobServerAutoAccountSyncParamsResult",
        "schema": {
          "$ref": "#/components/schemas/JobServerAutoAccountSyncParamsResult"
        }
      }
    },
    {
      "name": "SetAutoAccountSync",
      "summary": "Set automatic account sync flag value",
      "tags": [
        {
          "name": "jobs"
        },
        {
          "name": "groups"
        },
        {
          "name": "accounts"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "auto_account_sync",
          "description": "New automatic account sync value",
          "required": true,
          "schema": {
            "type": "boolean"
          }
        }
      ],
      "result": {
        "name": "JobServerAutoAccountSyncParamsResult",
        "schema": {
          "$ref": "#/components/schemas/JobServerAutoAccountSyncParamsResult"
        }
      }
    },
    {
      "name": "StartTwoFactorAuth",
      "summary": "Initiate two-factor authentication. Sends authentication code over given (or default) alternative channel. Returns authentication prompt that should be displayed to user",
      "tags": [
        {
          "name": "accounts"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "conn",
          "description": "Connection info that identifies file system and account on which 2FA is being requested",
          "schema": {
            "$ref": "#/components/schemas/GsConnectInfo"
          }
        },
        {
          "name": "channel",
          "description": "Name of alternative channel for authentication code delivery (sms, e-mail...)",
          "required": false,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "JobServerStartTwoFactorAuthResult",
        "schema": {
          "$ref": "#/components/schemas/JobServerStartTwoFactorAuthResult"
        }
      }
    },
    {
      "name": "CompleteTwoFactorAuth",
      "summary": "Complete two-factor authorization with authorization code obtained from user",
      "tags": [
        {
          "name": "accounts"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "conn",
          "description": "Connection info that identifies file system and account on which 2FA is being requested",
          "schema": {
            "$ref": "#/components/schemas/GsConnectInfo"
          }
        },
        {
          "name": "channel",
          "description": "Name of alternative channel for authentication code delivery (sms, e-mail...)",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "code",
          "description": "Authorization code obtained from user",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "CompleteTwoFactorAuthResult",
        "schema": {
        }
      }
    },
    {
      "name": "StartOAuth",
      "summary": "Initiate OAuth2 interactive authorization session",
      "tags": [
        {
          "name": "accounts"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "conn",
          "description": "GsConnectInfo structure with sUrlA set to target file system prefix (e.g. msgraph://). Additionally, sOAuthRedirectUriA can be set to desired redirect_uri and bGraphGroupReadPermissions, bGraphDirectoryReadPerms, m_bGraphMultiTenantReadPerms flags can be set in order to request additional scopes.",
          "schema": {
            "$ref": "#/components/schemas/GsConnectInfo"
          }
        }
      ],
      "result": {
        "name": "JobServerStartOAuthResult",
        "schema": {
          "$ref": "#/components/schemas/JobServerStartOAuthResult"
        }
      }
    },
    {
      "name": "GetOAuthState",
      "summary": "Get state of previously initiated OAuth2 interactive authorization session",
      "tags": [
        {
          "name": "accounts"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "session_handle",
          "description": "Opaque session handle previously obtained from successful StartOAuth API call",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "JobServerOAuthSession",
        "schema": {
          "$ref": "#/components/schemas/JobServerOAuthSession"
        }
      }
    },
    {
      "name": "RevokeOAuthToken",
      "summary": "Revoke given refresh token for target described by target_url. Uses standard RFC 7009 mechanism",
      "tags": [
        {
          "name": "accounts"
        },
        {
          "name": "settings"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "target_url",
          "description": "An URL describing target service. Supported targets are gmail://, gdrive://, gteamdrive://, goodrive://, gcs://, dropbox:// and box://",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "token",
          "description": "Refresh token we are asking to revoke",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "RevokeOAuthTokenResult",
        "schema": {
          "type": "object"
        }
      }
    },
    {
      "name": "SendEMail",
      "summary": "Send an e-mail using given SMTP settings, recepient, subject and body",
      "paramStructure": "by-name",
      "params": [
        {
          "name": "settings",
          "description": "SMTP settings to use",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/CSibSmtpServer"
          }
        },
        {
          "name": "to",
          "description": "Recepient e-mail address",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "to_name",
          "description": "Recepient name",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "subject",
          "description": "E-mail subject",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "body",
          "description": "E-mail body",
          "required": false,
          "schema": {
            "type": "string"
          }
        }
      ]
    }
  ],
  "components": {
    "schemas": {
      "JobServerUserInformation": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Globally unique ID of signed-in User"
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "E-mail of signed-in User"
          },
          "display_name": {
            "type": "string",
            "description": "Human-readable name of signed-in User"
          }
        }
      },
      "JobServerCreateSupportTicketResult": {
        "type": "object",
        "properties": {
          "ticket_requested_at": {
            "type": "integer",
            "description": "Time at which Support Ticket creation was requested (Unix time)"
          }
        }
      },
      "JobServerSupportTicketSession": {
        "type": "object",
        "properties": {
          "state": {
            "type": "integer",
            "description": "Session state (0 - not started, 1 - requested, 2 - in progress, 3 - succeeded, 4 - error)"
          },
          "progress_message": {
            "type": "string",
            "description": "Message describing current progess for state 2 (in progress)"
          },
          "result_url": {
            "type": "string",
            "description": "URL of created Support Ticket for state 3 (succeeded)"
          },
          "error": {
            "type": "string",
            "description": "Error text for state 4 (error)"
          }
        }
      },
      "JobServerAboutInfoResult": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "description": "Product name"
          },
          "copyright": {
            "type": "string",
            "description": "Copyright string"
          },
          "version": {
            "type": "object",
            "description": "Product version",
            "properties": {
              "major": {
                "type": "integer"
              },
              "minor": {
                "type": "integer"
              },
              "revision": {
                "type": "integer"
              },
              "build": {
                "type": "integer"
              }
            }
          },
          "website": {
            "type": "string",
            "description": "Product Web Site address"
          },
          "license": {
            "type": "string",
            "description": "License information"
          },
          "os": {
            "type": "string",
            "description": "Operating System information"
          },
          "details": {
            "type": "string",
            "description": "Detailed information string"
          },
          "effective_mirror_folder": {
            "type": "string",
            "description": "Effective mirror folder path"
          }
        }
      },
      "GsRunnerListJobNamesResult": {
        "type": "object",
        "properties": {
          "job_names": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "JobServerListJobsResult": {
        "type": "object",
        "properties": {
          "jobs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CSyncJob"
            }
          },
          "next_name": {
            "type": "string",
            "description": "If result list was truncated (due to max_items) then this is Job name to be used for start_from on next request"
          }
        }
      },
      "GsRunnerAPIJobDiskSpaceInfo": {
        "type": "object",
        "properties": {
          "available": {
            "type": "string",
            "description": "Disk space currently available (bytes)"
          },
          "required_for_sync": {
            "type": "string",
            "description": "Disk space required for Job Sync (bytes)"
          },
          "total": {
            "type": "string",
            "description": "Total disk space (bytes)"
          }
        }
      },
      "JobServerAnalyzeSideProgress": {
        "type": "object",
        "properties": {
          "percent": {
            "type": "integer",
            "description": "Analyze progress on that side (percents)"
          },
          "message": {
            "type": "string",
            "description": "Analyze message on that side"
          },
          "conn_info": {
            "type": "string",
            "description": "Side connection info"
          },
          "free_space": {
            "type": "string",
            "description": "Side free space info"
          },
          "folders_state": {
            "type": "integer",
            "description": "Total number of folders loaded from state file on that side. Can be used as an estimated total number of folders to predict progress"
          },
          "folders_scanned": {
            "type": "integer",
            "description": "Total number of folders scanned on that side so far"
          },
          "files_scanned": {
            "type": "integer",
            "description": "Total number of files scanned on that side so far"
          }
        }
      },
      "ViewMode": {
        "type": "integer",
        "minimum": 0,
        "description": "Job Tree View Mode (0 - All Live Nodes, 1 - Nodes that have Proposed Changes to Sync, 2 - Nodes that have Conflicts, 3 - Nodes that have Errors, 4 - Included Nodes (per filters), 5 - Excluded Nodes (per filters), 6 - Nodes to be Created in Sync, 7 - Nodes to be Overwritten in Sync, 8 - Nodes to be Deleted in Sync, 9 - Files to be Copied Left to Right, 10 - Files to be Copied Right to Left, 11 - Files to be Deleted on Right, 12 - Files to be Deleted on Left, 13 - Nodes to be Renamed or Moved on Right, 14 - Nodes to be Renamed or Moved on Left, 15 - Nodes whose Time will be Copied from Left to Right, 16 - Nodes whose Time will be Copied from Right to Left, 17 - Nodes whose Case will be changed on Right, 18 - Nodes whose Case will be changed on Left, 19 - Nodes whose States will be Merged in Sync, 20 - Nodes that have Same Size, but different Time, 21 - Nodes that have Countable Changes, 22 - Nodes that have Changes to Sync, 23 - All Nodes to Sync, 24 - All Nodes)"
      },
      "JobServerJobStatus": {
        "type": "object",
        "properties": {
          "sJobName": {
            "type": "string",
            "minLength": 1
          },
          "job_run_state": {
            "type": "string",
            "description": "Job state: not_analyzed | not_connected | waiting_for_locks | scheduled_to_run | analyze_running | analyze_done | sync_running | sync_done | spop_running | spop_done"
          },
          "job_result": {
            "type": "integer",
            "minimum": 0,
            "maximum": 4
          },
          "percent_complete": {
            "type": "integer"
          },
          "sErr": {
            "type": "string"
          },
          "sAttentionMsgA": {
            "type": "string"
          },
          "stopped_by_locks": {
            "type": "boolean",
            "description": "true if last job run was stopped by lock file (default:false)"
          },
          "stopped_by_bad_state": {
            "type": "boolean",
            "description": "true if last job run was stopped by corrupted state file (default:false)"
          },
          "tree_tag": {
            "type": "string",
            "description": "64-bit counter that is incremented every time new job tree is generated"
          },
          "view_mode": {
            "type": "integer",
            "minimum": 0,
            "description": "Current view mode for which stat is computed on server"
          },
          "last_mod_time": {
            "type": "integer",
            "minimum": 0,
            "description": "Last time job was modified (Unix time)"
          },
          "last_run_time": {
            "type": "integer",
            "minimum": 0,
            "description": "Last time job analyze/sync was started (Unix time)"
          },
          "last_log_id": {
            "type": "integer",
            "minimum": 0,
            "description": "ID of last log line for that job"
          },
          "next_tree_change_id": {
            "type": "integer",
            "minimum": 0,
            "description": "Next value of tree change ID counter for that job"
          },
          "nItemsSyncedOK": {
            "type": "integer",
            "minimum": 0
          },
          "nChangesSyncedOK": {
            "type": "integer",
            "minimum": 0
          },
          "nItemsChanged": {
            "type": "integer",
            "minimum": 0
          },
          "nItemsError": {
            "type": "integer",
            "minimum": 0
          },
          "nItemsConflict": {
            "type": "integer",
            "minimum": 0
          },

          "sCurrMsg_L": {
            "type": "string",
            "description": "Current left side message"
          },
          "disk_space_L": {
            "$ref": "#/components/schemas/GsRunnerAPIJobDiskSpaceInfo"
          },
          "analyze_progress_L": {
            "$ref": "#/components/schemas/JobServerAnalyzeSideProgress"
          },

          "sCurrMsg_R": {
            "type": "string",
            "description": "Current right side message"
          },
          "disk_space_R": {
            "$ref": "#/components/schemas/GsRunnerAPIJobDiskSpaceInfo"
          },
          "analyze_progress_R": {
            "$ref": "#/components/schemas/JobServerAnalyzeSideProgress"
          }

        }
      },
      "GsConnectInfo": {
        "type": "object",
        "properties": {
          "sUrlA": {
            "type": "string"
          },
          "sUserIdA": {
            "type": "string"
          },
          "sPasswordEncMasterA": {
            "type": "string"
          },
          "sPrivateKeyPath": {
            "type": "string"
          },
          "bActiveMode": {
            "type": "boolean"
          },
          "bUseMDTM": {
            "type": "boolean"
          },
          "bUseMLSD": {
            "type": "boolean"
          },
          "bEncodeUTF8": {
            "type": "boolean"
          },
          "sStorageClassA": {
            "type": "string"
          },
          "sAccessPolicyA": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9-_]*$",
            "example": []
          },
          "bIgnoreBadCerts": {
            "type": "boolean"
          },
          "bImplicitMode": {
            "type": "boolean"
          },
          "bHostBasedAddr": {
            "type": "boolean"
          },
          "bUseV2signature": {
            "type": "boolean"
          },
          "bUseProxy": {
            "type": "boolean"
          },
          "bWinInet": {
            "type": "boolean"
          },
          "bReducedRedundancy": {
            "type": "boolean"
          },
          "bInfrequentAccess": {
            "type": "boolean"
          },
          "bServerSideEncryption": {
            "type": "boolean"
          },
          "bUseListLA": {
            "type": "boolean"
          },
          "bMoveLevelOnly": {
            "type": "boolean"
          },
          "bUsGovCloud": {
            "type": "boolean"
          },
          "sRefreshTokenA": {
            "type": "string"
          },
          "sRefreshTokenEncMasterA": {
            "type": "string"
          },
          "sPrivateKeyEncMasterA": {
            "type": "string"
          },
          "sUserEmailA": {
            "type": "string",
            "format": "email"
          },
          "bDataConnSessionReuse": {
            "type": "boolean"
          },
          "bGraphGroupReadPermissions": {
            "type": "boolean"
          },
          "bGraphDirectoryReadPerms": {
            "type": "boolean",
            "description": "MS Graph: request additional Group.Read.All permission which is admin-restricted scope"
          },
          "bGraphMultiTenantReadPerms": {
            "type": "boolean",
            "description": "MS Graph: request additional Directory.Read.All permission which is admin-restricted scope"
          },
          "sGeoLocationA": {
            "type": "string"
          },
          "sClientCertA": {
            "type": "string",
            "description": "SFTP: Client certificate"
          },
          "bDisableStrictKex": {
            "type": "boolean",
            "description": "SFTP: Disable SSH Strict KEX extension (for old/buggy servers)"
          },
          "bDisableConveyor": {
            "type": "boolean",
            "description": "SFTP: Disable Conveyor Transfers (for old/buggy servers)"
          },
          "sDisplayNameA": {
            "type": "string"
          },
          "sServerEncrKeyA": {
            "type": "string"
          },
          "bGstpPlainDirect": {
            "type": "boolean"
          },
          "bRequireCheckSum": {
            "type": "boolean"
          },
          "bCacheFileModTime": {
            "type": "boolean"
          },
          "sOAuthClientIdA": {
            "type": "string"
          },
          "sOAuthClientSecretA": {
            "type": "string"
          },
          "sOAuthRedirectUriA": {
            "type": "string"
          },
          "bUseEPSV": {
            "type": "boolean"
          },
          "nUploadChunksThreads": {
            "type": "integer",
            "minimum": 0
          },
          "bCnICloud": {
            "type": "boolean"
          },
          "bExportNativeDocs": {
            "type": "boolean",
            "description": "Google Drive/Google Team Drive: present native documents in export format"
          },
          "sCommentA": {
            "type": "string"
          },
          "bHasCheckedIn": {
            "type": "boolean",
            "description": "Server is on-line (ListServers response only)"
          },
          "bDirectOnlyServer": {
            "type": "boolean",
            "description": "Server can only be reached directly, without Forwarders (ListServers response only)"
          },
          "tLastSeen": {
            "type": "integer",
            "description": "Last time server has been seen alive (Unix Time, ListServers response only)"
          }
        }
      },
      "GsFolderOptionsFS": {
        "type": "object",
        "properties": {
          "bNoGsData": {
            "type": "boolean"
          },
          "nCompressType": {
            "type": "integer",
            "description": "Compression Type (ZipFileSys): 0 - disabled (no ZipFileSys), 1 - plain (uncompressed), 2 - deflate",
            "minimum": 0,
            "maximum": 2
          },
          "nCipherType": {
            "type": "integer",
            "description": "Encryption Type (ZipFileSys): 0 - plain (unencrypted), 1 - ZipCrypto, 2 - AES-256",
            "minimum": 0,
            "maximum": 2
          },
          "bEncryptBodies": {
            "type": "boolean",
            "description": "File body encryption flag (EncryptedFileSys, ZipFileSys only cares about nCipherType). Currently, if bEncryptPaths==true, then bEncryptBodies must be true as well"
          },
          "bEncryptPaths": {
            "type": "boolean",
            "description": "File name/path encryption flag (both ZipFileSys and EncryptedFileSys)"
          },
          "sEncryptionPasswdGarbledA": {
            "type": "string",
            "decription": "Password in garbled form (not used, always empty)"
          },
          "sEncryptionPasswdEncMasterA": {
            "type": "string"
          },
          "bPreferCompressed": {
            "type": "boolean"
          },
          "bPreferEncrypted": {
            "type": "boolean"
          },
          "bFatLike": {
            "type": "boolean"
          },
          "bUnMountOnDisconnect": {
            "type": "boolean"
          },
          "nFilePerms": {
            "type": "integer",
            "format": "int32"
          },
          "nFolderPerms": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "GsFolderCoords": {
        "type": "object",
        "properties": {
          "conn": {
            "$ref": "#/components/schemas/GsConnectInfo"
          },
          "opts": {
            "$ref": "#/components/schemas/GsFolderOptionsFS"
          },
          "sAcctKeyA": {
            "type": "string"
          },
          "sServerDirA": {
            "type": "string"
          },
          "sBmkNameA": {
            "type": "string"
          },
          "tTimeStamp": {
            "type": "integer",
            "minimum": 0,
            "description": "Time this folder coords was modified (Unix time)"
          }
        }
      },
      "GsFolderOptionsJob": {
        "type": "object",
        "properties": {
          "bCompareCheckSums": {
            "type": "boolean",
            "description": "Store and Compare checksums on this side to increase precision of comparison"
          },
          "bCompareAttrs": {
            "type": "boolean",
            "description": "Compare Attributes (Windows) / Permissions (Mac) in Analyze"
          },
          "bCompareOwner": {
            "type": "boolean",
            "description": "Compare Owner in Analyze"
          },
          "bCompareACL": {
            "type": "boolean",
            "description": "Compare ACLs in Analyze"
          },
          "bCompareExtendedAttrs": {
            "type": "boolean",
            "description": "Compare Extended Attributes (Mac only) in Analyze"
          },
          "bNoLockFiles": {
            "type": "boolean",
            "description": "Do Not use lock files"
          },
          "bTrustStateFile": {
            "type": "boolean",
            "description": "Trust State file and do not list all folder in sync folder during Analyze"
          },
          "bUseTmpDestFile": {
            "type": "boolean",
            "description": "Copy file to temporary file first, then to destination"
          }
        }
      },
      "CFileFilter": {
        "type": "object",
        "properties": {
          "bExcludeHidden": {
            "type": "boolean",
            "description": "Whether to exclude hidden files"
          },
          "bExcludeSystem": {
            "type": "boolean",
            "description": "Whether to exclude system files"
          },
          "bExcludeTemp": {
            "type": "boolean",
            "description": "Whether to exclude temporary files"
          },
          "bExcludeEmptyFolders": {
            "type": "boolean",
            "description": "Whether to exclude empty folders"
          },
          "Included": {
            "type": "array",
            "description": "Include filter list",
            "items": {
              "type": "string"
            }
          },
          "Excluded": {
            "type": "array",
            "description": "Exclude filter list",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CJobOptions": {
        "type": "object",
        "properties": {
          "sName": {
            "type": "string",
            "minLength": 1
          },
          "side_coords": {
            "type": "array",
            "minItems": 2,
            "maxItems": 2,
            "items": {
              "$ref": "#/components/schemas/GsFolderCoords"
            }
          },
          "side_opts": {
            "type": "array",
            "minItems": 2,
            "maxItems": 2,
            "items": {
              "$ref": "#/components/schemas/GsFolderOptionsJob"
            }
          },
          "eJobDirection": {
            "type": "integer",
            "description": "Job direction (0: two-way, 1: left to right, 2: right to left)",
            "minimum": 0,
            "maximum": 4
          },
          "iEveryHour": {
            "type": "integer"
          },
          "iEveryMinute": {
            "type": "integer"
          },
          "bRecycleTo_RecycleBin": {
            "type": "boolean"
          },
          "bEstimateReqSpace": {
            "type": "boolean"
          },
          "eAutoResolveConflicts": {
            "type": "integer",
            "minimum": 0,
            "maximum": 4
          },
          "eShowBalloon": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2
          },
          "iLimitChanges": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "atOnFolderConnect": {
            "type": "integer",
            "enum": [
              0,
              2
            ]
          },
          "atOnStart": {
            "type": "integer",
            "enum": [
              0,
              2
            ]
          },
          "atOnTimer": {
            "type": "integer",
            "enum": [
              0,
              2
            ]
          },
          "atOnLogout": {
            "type": "integer",
            "enum": [
              0,
              2
            ]
          },
          "atOnFileChange": {
            "type": "integer",
            "enum": [
              0,
              2
            ]
          },
          "atOnSchedule": {
            "type": "integer",
            "enum": [
              0,
              2
            ]
          },
          "nOnFileChangeDelay": {
            "type": "integer"
          },
          "bAutoUnattended": {
            "type": "boolean"
          },
          "bPropagateDels": {
            "type": "boolean"
          },
          "bCopyLockedFiles": {
            "type": "boolean"
          },
          "sPostSyncEmailOrProgram": {
            "type": "string"
          },
          "nXferSpeedLimit": {
            "type": "integer",
            "minimum": 0
          },
          "sPreAnalyzeProgram": {
            "type": "string"
          },
          "sPostAnalyzeEmailOrProgram": {
            "type": "string"
          },
          "bAutoClear": {
            "type": "boolean"
          },
          "bRecycleTo_History": {
            "type": "boolean"
          },
          "nAutoStartDelay": {
            "type": "integer"
          },
          "nSaveDays_RecycleBin": {
            "type": "integer"
          },
          "nSaveDays_History": {
            "type": "integer"
          },
          "bCleanup_RecycleBin": {
            "type": "boolean"
          },
          "bCleanup_History": {
            "type": "boolean"
          },
          "bCompareAllUsingCheckSums": {
            "type": "boolean"
          },
          "bWaitForLocks": {
            "type": "boolean"
          },
          "bFastStop": {
            "type": "boolean"
          },
          "bRenamesLosingFile": {
            "type": "boolean"
          },
          "bConflictOnDiffItemsNoCommonHistory": {
            "type": "boolean"
          },
          "bFastNoState1way": {
            "type": "boolean"
          },
          "DoNotSyncChangedFiles": {
            "type": "boolean"
          },
          "WaitSyncAfterAnalyzeSec": {
            "type": "integer",
            "minimum": 0
          },
          "bIgnoreChangesOnDestSide": {
            "type": "boolean"
          },
          "bDetectMovesAndRenames": {
            "type": "boolean"
          },
          "bRunParallelThreads": {
            "type": "boolean"
          },
          "nWorkerThreads": {
            "type": "integer",
            "minimum": 0
          },
          "nWaitForLocksMinutes": {
            "type": "integer"
          },
          "bMoveMode_DeleteSourceAfterCopy": {
            "type": "boolean"
          },
          "bMoveMode_DeleteEmptyFolders": {
            "type": "boolean"
          },
          "bUberUnlockedRead": {
            "type": "boolean"
          },
          "bCopyCreateTime": {
            "type": "boolean"
          },
          "bCopyAttrs": {
            "type": "boolean"
          },
          "bCopyExtendedAttrs": {
            "type": "boolean"
          },
          "bCopyOwner": {
            "type": "boolean"
          },
          "bCopyACL": {
            "type": "boolean"
          },
          "eLinksOpt": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2
          },
          "nReconnectSeconds": {
            "type": "integer"
          },
          "m_Filter": {
            "$ref": "#/components/schemas/CFileFilter"
          }
        }
      },
      "CSyncJob": {
        "type": "object",
        "properties": {
          "opt": {
            "$ref": "#/components/schemas/CJobOptions"
          },
          "tTimeStamp": {
            "type": "integer",
            "minimum": 0,
            "description": "Time this job data has been modified (Unix time)"
          },
          "bShutdownAfterRun": {
            "type": "boolean"
          },
          "bLimitRunTime": {
            "type": "boolean"
          },
          "nMaxTimeToRun": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "GsRunnerSetJobOptionsResult": {
        "type": "object",
        "properties": {
          "new_options": {
            "$ref": "#/components/schemas/CJobOptions"
          },
          "changes": {
            "type": "string",
            "description": "Short description of resulting changes to Job Options"
          }
        }
      },
      "GsRunnerSpecOpPathActionPair": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "Absolute path in tree for the item on which special operation has to be performed (such as '\/folder1\/file1')"
          },
          "action": {
            "type": "integer",
            "description": "Required only for SpOp_ChangeItemActionHereAndBelow (14) operation. Acceptable values: _EA_CENTER (16) _EA_LEFT (32) _EA_RIGHT (64), EA_COPY_FILE_LTOR (65), EA_COPY_FILE_RTOL (33), EA_COPY_TIME_ATTR_LTOR (67), EA_COPY_TIME_ATTR_RTOL (35)"
          }
        }
      },
      "GsRunnerStartJobResult": {
        "type": "object",
        "properties": {
          "start_requested_at": {
            "type": "integer",
            "description": "Time at which job run was requested (Unix time)"
          }
        }
      },
      "GsRunnerStopJobResult": {
        "type": "object",
        "properties": {
          "stop_requested_at": {
            "type": "integer",
            "description": "Time at which job stop was requested (Unix time)"
          }
        }
      },
      "JobServerResetJobResult": {
        "type": "object",
        "properties": {
          "job_reset_at": {
            "type": "integer",
            "description": "Time at which job state was reset"
          }
        }
      },
      "JobServerSuspendGlobalAutoRunStruct": {
        "type": "object",
        "properties": {
          "suspend_autorun": {
            "type": "boolean",
            "description": "Effective value of autorun suspend flag"
          },
          "prev_suspend_autorun": {
            "type": "boolean",
            "description": "Previous value of autorun suspend flag"
          }
        }
      },
      "GsJobLogLine": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 0,
            "description": "Log line ID (unique). Log lines for a single job are guaranteed to be increasing, but not consecutive"
          },
          "time": {
            "type": "integer",
            "minimum": 0,
            "description": "Time at which this line was logged (Unix time)"
          },
          "level": {
            "type": "integer",
            "minimum": 0,
            "maximum": 5,
            "description": "Level of log detail (0 - critical, 1 - error, 2 - info, 3 - detail, 4 - transaction, 5 - debug)"
          },
          "line": {
            "type": "string",
            "description": "Log line itself"
          }
        }
      },
      "GsRunnerFetchJobLogResult": {
        "type": "object",
        "properties": {
          "log": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GsJobLogLine"
            }
          },
          "next_log_id": {
            "type": "integer",
            "minimum": 0,
            "description": "Next log line ID (to be used in next_log_id param for next FetchJobLog request)"
          }
        }
      },
      "CFileState": {
        "type": "object",
        "properties": {
          "filled": {
            "type": "boolean",
            "description": "Whether this item is filled"
          },
          "is_folder": {
            "type": "boolean",
            "description": "Whether this item is a folder"
          },
          "is_link": {
            "type": "boolean",
            "description": "Whether this item is a link"
          },
          "is_file": {
            "type": "boolean",
            "description": "Whether this item is a file"
          },
          "fs_name": {
            "type": "string",
            "description": "Original item name as seen in file system (empty if it is the same as normalized name_key)"
          },
          "size": {
            "type": "integer",
            "minimum": 0,
            "description": "Item size in bytes (64-bit signed)"
          },
          "attrs": {
            "type": "integer",
            "minimum": 0,
            "maximum": 4294967296,
            "description": "Item attributes in platform-independent format (32-bit unsigned)"
          },
          "mod_time": {
            "type": "integer",
            "minimum": 0,
            "description": "Modification time (Unix time, 64-bit signed)"
          },
          "owner": {
            "type": "string",
            "description": "Owner user ID"
          },
          "acl": {
            "type": "string",
            "description": "Access control list, serialized into string"
          },
          "ext_attrs_hash": {
            "type": "string",
            "description": "MD5 hash of extended attributes"
          },
          "cksum_type": {
            "type": "integer",
            "minimum": 0,
            "maximum": 5,
            "description": "Checksum type: 0 - none, 1 - MD5, 2 - SHA-1, 3 - SHA-256, 4 - QuickXorHash, 5 - GUID"
          },
          "cksum": {
            "type": "string",
            "description": "Checksum serialized as string"
          }
        }
      },
      "JobServerTreeNodeStat": {
        "type": "object",
        "properties": {
          "lsize": {
            "type": "string",
            "description": "Total size (in bytes) of this folder node on left side in current view mode"
          },
          "rsize": {
            "type": "string",
            "description": "Total size (in bytes) of this folder node on right side in current view mode"
          },
          "lcount": {
            "type": "string",
            "description": "Number of right-to-left actions to perform on this folder node"
          },
          "rcount": {
            "type": "string",
            "description": "Number of left-to-right actions to perform on this folder node"
          }
        }
      },
      "CSyncPairAndAction": {
        "type": "object",
        "properties": {
          "name_key": {
            "type": "string",
            "description": "Internal unique name of tree item"
          },
          "state": {
            "type": "integer",
            "minimum": 0,
            "maximum": 5,
            "description": "Item state: 0 - undefined, 1 - analyzed OK, 2 - analyze error, 3 - syncing, 4 - synced OK, 5 - synced error"
          },
          "error": {
            "type": "string",
            "description": "If state is an error-state (2 or 5), this contains error string for the item"
          },
          "sys_action": {
            "type": "integer",
            "description": "Sync action chosen automatically: 17 - do not copy, 18 - merge generations, 19 - conflict, 20 - error, 33 - copy file (or propagate deletion) right to left, 65 - copy file left to right, 32 - change case right to left, 66 - change case left to right, 35 - copy time\/attributes right to left, 67 - copy time\/attributes left to right"
          },
          "user_action": {
            "type": "integer",
            "description": "Sync action defined by user: 0 - take sys_action, 17 - do not copy, 18 - merge generations, 19 - conflict, 20 - error, 33 - copy file (or propagate deletion) right to left, 65 - copy file left to right, 32 - change case right to left, 66 - change case left to right, 35 - copy time\/attributes right to left, 67 - copy time\/attributes left to right"
          },
          "lold": {
            "$ref": "#/components/schemas/CFileState",
            "description": "Unmodified (old) item state on left side as read from state file"
          },
          "lcur": {
            "$ref": "#/components/schemas/CFileState",
            "description": "Effective (new) item state on left side as a result of analyze/sync"
          },
          "rold": {
            "$ref": "#/components/schemas/CFileState",
            "description": "Unmodified (old) item state on right side as read from state file"
          },
          "rcur": {
            "$ref": "#/components/schemas/CFileState",
            "description": "Effective (new) item state on right side as a result of analyze/sync"
          }
        }
      },
      "GsRunnerJobTreeItem": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of tree file/folder item"
          },
          "data": {
            "$ref": "#/components/schemas/CSyncPairAndAction"
          },
          "stat": {
            "$ref": "#/components/schemas/JobServerTreeNodeStat"
          }
        }
      },
      "JobServerJobTreeResult": {
        "type": "object",
        "properties": {
          "tree": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GsRunnerJobTreeItem"
            }
          },
          "totals": {
            "type": "array",
            "description": "Array of total items for each ViewMode",
            "items": {
              "type": "integer"
            }
          },
          "root_stat": {
            "description": "Tree root statistics, provided on first page of root listing",
            "$ref": "#/components/schemas/JobServerTreeNodeStat"
          },
          "next_name": {
            "type": "string",
            "description": "If result list was truncated (due to max_items) then this is item name (like 'folder1') to be used for start_from on next request"
          },
          "server_view_mode": {
            "type": "integer",
            "description": "Current server-side View Mode. If this field is present, requested View Mode cannot be read, and client should either switch to given server_view_mode or call SwitchJobViewMode to switch to client-supplied mode"
          }
        }
      },
      "JobServerParentStatUpdate": {
        "type": "object",
        "properties": {
          "p": {
            "type": "string",
            "description": "Path to node whose statistics need to be updated"
          },
          "l": {
            "type": "integer",
            "description": "Effective right-to-left actions on this node"
          },
          "r": {
            "type": "integer",
            "description": "Effective left-to-right actions on this node"
          }
        }
      },
      "JobServerProjectionUpdate": {
        "type": "object",
        "properties": {
          "v": {
            "type": "integer",
            "description": "View mode this projection update applies to"
          },
          "t": {
            "type": "integer",
            "description": "New total count for given projection"
          }
        }
      },
      "GsRunnerJobTreeChange": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 0,
            "description": "ID of this change, unique in scope of a single job"
          },
          "path": {
            "type": "string",
            "description": "Absolute path in tree for the item whose state has changed (such as '\/folder1\/file1')"
          },
          "final": {
            "type": "boolean",
            "description": "If true, then this change is closing (last) change to this item in this sync/spop session"
          },
          "data": {
            "$ref": "#/components/schemas/CSyncPairAndAction"
          },
          "pstat": {
            "type": "array",
            "description": "Parent statistics update caused by this change",
            "items": {
              "$ref": "#/components/schemas/JobServerParentStatUpdate"
            }
          },
          "tstat": {
            "type": "array",
            "description": "Projection total updates caused by this change (view mode/total pairs)",
            "items": {
              "$ref": "#/components/schemas/JobServerProjectionUpdate"
            }
          }
        }
      },
      "GsRunnerReadJobTreeChangesResult": {
        "type": "object",
        "properties": {
          "changes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GsRunnerJobTreeChange"
            }
          },
          "next_change_id": {
            "type": "integer",
            "minimum": 0,
            "description": "Next log change ID (to be used in next_change_id param for next ReadJobTreeChanges request)"
          },
          "session_start_id": {
            "type": "integer",
            "minimum": 0,
            "description": "ID of the first change in latest analyze/sync/spop session"
          },
          "active_paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GsActivePath"
            }
          }
        }
      },
      "GsActivePath": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "Absolute path in tree for the item whose state has changed (such as '\/folder1\/file1')"
          },
          "curr": {
            "type": "string",
            "description": "Number of bytes completed (decimal string)"
          },
          "total": {
            "type": "string",
            "description": "Total number of bytes (decimal string)"
          }
        }
      },
      "CJobGroup": {
        "type": "object",
        "properties": {
          "m_sGroupName": {
            "type": "string",
            "description": "Group Name"
          },
          "m_eGroupType": {
            "type": "integer",
            "description": "Group Type (1: All Jobs, 2: Sync (two-way) Jobs, 3: Backup (one-way) Jobs, 4: User-defined Group"
          },
          "m_jobsInGroup": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Set of job names (jobs that belong to this group)"
          }
        }
      },
      "GsRunnerFileSystemProperties": {
        "type": "object",
        "properties": {
          "hide_in_fs_list": {
            "type": "string",
            "description": "Whether file system should be hidden from list"
          },
          "local": {
            "type": "string",
            "description": "Whether file system is local (i.e. storage is physically attached to a device)"
          },
          "local_network": {
            "type": "string",
            "description": "Whether file system target is on local network (i.e. LAN storage like SMB)"
          },
          "cannot_have_gsdata": {
            "type": "string",
            "description": "Whether file system is unable to store _gsdata_ folders (due to specific restrictions)"
          },
          "has_plaintext_protocol": {
            "type": "string",
            "description": "Whether file system has plain text and secure connection variants (like HTTP/HTTPS, FTP/FTPS)"
          },
          "has_ignore_bad_certs": {
            "type": "string",
            "description": "Whether file system has an option to ignore TLS server certificate checks"
          },
          "has_client_certs": {
            "type": "string",
            "description": "Whether file system has an option to specify TLS client certificate"
          },
          "case_sensitive": {
            "type": "string",
            "description": "Whether file system is case-sensitive"
          },
          "can_use_original_paths": {
            "type": "string",
            "description": "Whether file system supports non-standard characters in file/folder names (except for /)"
          },
          "max_filename_length": {
            "type": "string",
            "description": "Maximum number of characters allowed in file/folder names"
          },
          "atomic_upload": {
            "type": "string",
            "description": "Whether upload operations are atomic (i.e. incomplete uploads have no side effects)"
          },
          "auth_userid_passwd": {
            "type": "string",
            "description": "Whether file system supports User ID/Password authentication"
          },
          "auth_private_key": {
            "type": "string",
            "description": "Whether file system supports private key authentication"
          },
          "auth_oauth2": {
            "type": "string",
            "description": "Whether file system supports OAuth2 authentication mechanism"
          },
          "has_initial_path": {
            "type": "string",
            "description": "Whether accounts for this file system may have an initial (home) path"
          },
          "returns_home_path": {
            "type": "string",
            "description": "Whether ConnectFS on this file system returns some initial (home) path"
          },
          "can_list_servers": {
            "type": "string",
            "description": "Whether file system supports ListServers call"
          },
          "has_userid_in_hostname": {
            "type": "string",
            "description": "Whether User ID is part of server host name (as in Azure endpoints)"
          },
          "no_server_addr": {
            "type": "string",
            "description": "Whether server address (hostname) for this file system is computed (not settable by user)"
          },
          "can_listdir_recurive": {
            "type": "string",
            "description": "Whether file system supports recursive ListDir call"
          },
          "can_get_free_space": {
            "type": "string",
            "description": "Whether file system supports GetFreeDiskSpace call"
          },
          "can_block_io": {
            "type": "string",
            "description": "Whether file system supports API calls: OpenFile, CloseFile, GetFilePosn, SetFilePosn, SetFileLength, WriteBufPosn, WriteBuf"
          },
          "can_gstp_io": {
            "type": "string",
            "description": "Whether file system supports GSTP-style I/O"
          },
          "can_links": {
            "type": "string",
            "description": "Whether file system supports API calls: GetLinkInfo, GetLinkTargetInfo, CreateLink, DeleteLink"
          },
          "can_copy_file": {
            "type": "string",
            "description": "Whether file system supports CopyFileFs API call"
          },
          "copy_preserves_timestamps": {
            "type": "string",
            "description": "Whether CopyFileFs API call preserves creation/modification timestamps"
          },
          "can_move_folder": {
            "type": "string",
            "description": "Whether file system supports MoveFolder API call"
          },
          "can_set_file_mod_time": {
            "type": "string",
            "description": "Whether file system supports SetFileModTime API call"
          },
          "can_get_set_folder_mod_time": {
            "type": "string",
            "description": "Whether file system supports GetFolderModTime and SetFolderModTime API calls"
          },
          "can_monitor": {
            "type": "string",
            "description": "Whether file system supports file monitoring (StartMonitoring, StopMonitoring, GetChangedItems API calls)"
          },
          "can_get_set_attributes": {
            "type": "string",
            "description": "Whether file system supports GetAttibutes, SetAttributes API calls"
          },
          "can_revoke_credentials": {
            "type": "string",
            "description": "Whether file system supports RevokeCredentials API call"
          }
        }
      },
      "FileSystemDescription": {
        "type": "object",
        "properties": {
          "plain_url": {
            "type": "string",
            "description": "URL of file system itself like sftp://, http://"
          },
          "secure_url": {
            "type": "string",
            "description": "Secure URL of file system itself like https://, ftps://"
          },
          "icon_url": {
            "type": "string",
            "description": "Server-relative URL for icon"
          },
          "display_name": {
            "type": "string",
            "description": "Short user-friendly name of this file system"
          },
          "long_description": {
            "type": "string",
            "description": "Detailed description for this file system"
          },
          "properties": {
            "$ref": "#/components/schemas/GsRunnerFileSystemProperties",
            "description": "File system properties"
          }
        }
      },
      "GsConnAcctBookmark": {
        "type": "object",
        "properties": {
          "BmkKey": {
            "type": "string",
            "description": "Bookmark Key (partial URL), unique in scope of parent account"
          },
          "Timestamp": {
            "type": "integer",
            "minimum": 0,
            "description": "Timestamp when the latest change to this Unnamed Bookmark was done (Unix time)"
          },
          "Opts": {
            "$ref": "#/components/schemas/GsFolderOptionsFS"
          }
        }
      },
      "CDeletedNamedThing": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Entity name/key (can be job name, group name, server account key, unnamed bookmark key)"
          },
          "time": {
            "type": "integer",
            "minimum": 0,
            "description": "Time when this entity was deleted (Unix time)"
          }
        }
      },
      "GsServerAccount": {
        "type": "object",
        "properties": {
          "Key": {
            "type": "string",
            "minLength": 4,
            "description": "Account Key. Unique identifier for account. Cannot be empty. Account Keys are case-insensitive"
          },
          "DisplayName": {
            "type": "string",
            "description": "User-defined account name"
          },
          "HomePath": {
            "type": "string",
            "description": "Home folder/path (such as WebDAV root or S3 Bucket). Defines initial folder for navigation inside this account"
          },
          "AccountInfo": {
            "type": "string",
            "description": "Additional account information (such as business, personal etc) set when account is created"
          },
          "Timestamp": {
            "type": "integer",
            "minimum": 0,
            "description": "Timestamp when the latest change to this Account was done (Unix time)"
          },
          "AcctConn": {
            "$ref": "#/components/schemas/GsConnectInfo"
          },
          "UnnamedBookmarks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GsConnAcctBookmark"
            }
          },
          "DeletedUnnamedBookmarks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CDeletedNamedThing"
            }
          }
        }
      },
      "GsRunnerAccountHintProperties": {
        "type": "object",
        "properties": {
          "list_servers": {
            "type": "boolean",
            "description": "This Account has no pre-defined server in it so ListServers should be used"
          },
          "read_only": {
            "type": "boolean",
            "description": "This Account is read-only: it cannot be renamed, deleted or modified"
          }
        }
      },
      "AccountHintsPair": {
        "type": "object",
        "properties": {
          "AccountKey": {
            "type": "string",
            "description": "Account Key of an Account that these hint properties are for"
          },
          "hint_properties": {
            "$ref": "#/components/schemas/GsRunnerAccountHintProperties"
          }
        }
      },
      "ListAccountsResult": {
        "type": "object",
        "properties": {
          "accounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GsServerAccount"
            }
          },
          "hints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AccountHintsPair"
            }
          },
          "next_account_key": {
            "type": "string",
            "description": "If result list was truncated (due to max_items) then this is account key to be used for start_from on next request"
          }
        }
      },
      "AccountStub": {
        "type": "object",
        "description": "Account data, with bookmarks excluded",
        "properties": {
          "Key": {
            "type": "string",
            "description": "Account Key",
            "minLength": 4
          },
          "AcctConn": {
            "$ref": "#/components/schemas/GsConnectInfo"
          },
          "HomePath": {
            "type": "string"
          },
          "DisplayName": {
            "type": "string"
          },
          "hints": {
            "$ref": "#/components/schemas/GsRunnerAccountHintProperties"
          }
        }
      },
      "UnnamedBookmarkStub": {
        "type": "object",
        "description": "Unnamed bookmark data",
        "properties": {
          "sAcctKeyA": {
            "type": "string",
            "description": "Account Key",
            "minLength": 4
          },
          "sServerDirA": {
            "type": "string",
            "description": "Relative path, that also serves as Unnamed Bookmark key in Account"
          },
          "Opts": {
            "$ref": "#/components/schemas/GsFolderOptionsFS"
          }
        }
      },
      "RenameAccountResult": {
        "type": "object",
        "description": "Updated account name",
        "properties": {
          "DisplayName": {
            "type": "string"
          }
        }
      },
      "ListServersResult": {
        "type": "object",
        "properties": {
          "servers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GsConnectInfo"
            },
            "description": "List of servers (as GsConnectInfo)"
          },
          "out_conn": {
            "description": "Updated GsConnectInfo (may contain some additional data like sUserEmailA and sDisplayNameA)",
            "$ref": "#/components/schemas/GsConnectInfo"
          }
        }
      },
      "ConnectFSResult": {
        "type": "object",
        "properties": {
          "filesys_handle": {
            "type": "string",
            "description": "File System Instance handle (opaque string) to use for subsequent calls to connected file system"
          },
          "home_path": {
            "type": "string",
            "description": "Path to home folder (present if this File System has returns_home_path property)"
          },
          "filesys_description": {
            "$ref": "#/components/schemas/FileSystemDescription"
          },
          "root_free_space_info": {
            "$ref": "#/components/schemas/GetFreeDiskSpaceResult"
          }
        }
      },
      "DisconnectFSResult": {
        "type": "object",
        "properties": {
          "disconnected_at": {
            "type": "integer",
            "description": "Timestamp file system was disconnected (Unix Time)"
          }
        }
      },
      "GetFreeDiskSpaceResult": {
        "type": "object",
        "properties": {
          "available": {
            "type": "string",
            "description": "Available Disk Space (in bytes). Can be less than Free Disk Space (for example, if per-user quotas are implemented). -1 means undefined"
          },
          "total": {
            "type": "string",
            "description": "Total Disk Space (in bytes). -1 means undefined"
          },
          "free": {
            "type": "string",
            "description": "Free Disk Space (in bytes). -1 means undefined"
          }
        }
      },
      "DownloadBufResult": {
        "type": "object",
        "properties": {
          "buf_size": {
            "type": "integer",
            "description": "Number of bytes actually downloaded. If server returns buf_size zero that means end of file"
          },
          "buf": {
            "type": "string",
            "description": "Downloaded bytes (base64-encoded)"
          }
        }
      },
      "CloseDownloadResult": {
        "type": "object",
        "properties": {
          "closed_at": {
            "type": "integer",
            "description": "Timestamp when download was closed"
          }
        }
      },
      "OpenUploadResult": {
        "type": "object",
        "properties": {
          "preferred_buf_size": {
            "type": "integer",
            "description": "Preferred buffer size for UploadBuf method"
          }
        }
      },
      "FileOpDescription": {
        "type": "object",
        "properties": {
          "method_name": {
            "type": "string",
            "description": "Method used to initiate this operation"
          },
          "src_acct_key": {
            "type": "string",
            "description": "Source side Account Key"
          },
          "src_url": {
            "type": "string",
            "description": "Source side URL (common folder), except for RenameFile operation. In RenameFile this field contains full source URL"
          },
          "dst_acct_key": {
            "type": "string",
            "description": "Destination side Account Key (present if given operation has two sides)"
          },
          "dst_url": {
            "type": "string",
            "description": "Destination side URL (present if given operation has two sides or it's a RenameFile). In RenameFile this field contains full destination URL"
          }
        }
      },
      "FileOpUserQuestion": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "description": "Kind of question being asked: 'overwrite' means we are going to overwrite file/folder at destination; 'continue' means whether to continue after non-terminal error"
          },
          "src_path": {
            "type": "string",
            "description": "Path to current (source) item in question"
          },
          "src_info": {
            "$ref": "#/components/schemas/CFileInfo"
          },
          "dst_path": {
            "type": "string",
            "description": "Path to current destination item in question"
          },
          "dst_info": {
            "$ref": "#/components/schemas/CFileInfo"
          },
          "error": {
            "type": "string",
            "description": "Non-terminal encountered (present in 'continue' question only)"
          }
        }
      },
      "FileOpStatus": {
        "type": "object",
        "properties": {
          "fop_handle": {
            "type": "string",
            "description": "File Operation handle that can be used to query operation status"
          },
          "description": {
            "$ref": "#/components/schemas/FileOpDescription"
          },
          "question": {
            "$ref": "#/components/schemas/FileOpUserQuestion"
          },
          "state": {
            "type": "integer",
            "description": "File Operation state (0 - not started, 1 - in progress, 2 - succeeded, 3 - stopped by user, 4 - terminal error)"
          },
          "percent_complete": {
            "type": "string",
            "description": "Estimated overall progress in percents (decimal integer)"
          },
          "bytes_total": {
            "type": "string",
            "description": "Total bytes to be processed (decimal integer)"
          },
          "bytes_done": {
            "type": "string",
            "description": "Bytes already processed (decimal integer)"
          },
          "bytes_per_sec": {
            "type": "string",
            "description": "Estimated processing speed in bytes per second (decimal integer)"
          },
          "items_total": {
            "type": "string",
            "description": "Total number of items to be processed (decimal integer)"
          },
          "items_done": {
            "type": "string",
            "description": "Number of items already processed (decimal integer)"
          },
          "items_per_sec": {
            "type": "string",
            "description": "Estimated processing speed in items per second (decimal float)"
          },
          "seconds_remaining": {
            "type": "string",
            "description": "Estimated number of seconds remaining (decimal integer)"
          },
          "log_message": {
            "type": "string",
            "description": "Last informational message logged by operation"
          },
          "result_link": {
            "type": "string",
            "description": "Direct link to file operation result (relative to server root URL)"
          },
          "message": {
            "type": "string",
            "description": "User-friendly string describing current progress of File Operation"
          },
          "errors": {
            "type": "array",
            "description": "List of error messages. If state is terminal error (3) then terminal error message is the last one in the list"
          }
        }
      },
      "ListFileOpsResult": {
        "type": "object",
        "properties": {
          "file_ops": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FileOpStatus"
            }
          }
        }
      },
      "CFileInfo": {
        "type": "object",
        "properties": {
          "sNameA": {
            "type": "string",
            "description": "Item (file/folder/link) name"
          },
          "dwBitAttrs": {
            "type": "integer",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Attribute bits"
          },
          "dwAbilities": {
            "type": "integer",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Ability bits"
          },
          "tCre_s": {
            "type": "integer",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Creation time (unsigned Unix time)"
          },
          "tMod_s": {
            "type": "integer",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Modification time (unsigned Unix time)"
          },
          "size": {
            "type": "string",
            "description": "Item size in bytes (decimal string, due to limited range of JSON numbers). If defined, string should contain non-negative integer."
          },
          "sDisplayName": {
            "type": "string",
            "description": "User-friendly item name (if empty, use sNameA)"
          },
          "sComment": {
            "type": "string",
            "description": "Item comment"
          },
          "bIsFile": {
            "type": "boolean",
            "description": "File flag. If true, then item is a file or link to a file (see bIsLink flag)"
          },
          "bIsFolder": {
            "type": "boolean",
            "description": "Folder flag. If true, then item is a folder or link to a folder (see bIsLink flag)"
          },
          "bIsLink": {
            "type": "boolean",
            "description": "Link flag. If true, item is a link (to file, folder or some other object)"
          },
          "rc": {
            "type": "boolean",
            "description": "Result flag. If true, then this file info record is accurate/complete. If false, only sErr field can be trusted"
          },
          "file_id": {
            "type": "string",
            "description": "Unique file ID (decimal string). If defined, string should contain non-zero integer."
          },
          "nCkSumType": {
            "type": "integer",
            "description": "Checksum type (0=none (default), 1=MD5, 2=SHA1, 3=SHA256, 4=QuickXorHash, 5=GUID, 6=CRC32C)"
          },
          "sCheckSumA": {
            "type": "string",
            "description": "Checksum value in string form"
          },
          "sErr": {
            "type": "string",
            "description": "If rc is false, this contains an error string"
          }
        }
      },
      "ListDirResult": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CFileInfo"
            }
          },
          "next_page_token": {
            "type": "string",
            "description": "page_token to request next page of listing. If this field is empty, this is last page of listing"
          }
        }
      },
      "GenericFileInfoResult": {
        "type": "object",
        "properties": {
          "info": {
            "$ref": "#/components/schemas/CFileInfo"
          },
          "preferred_buf_size": {
            "type": "integer",
            "description": "Preferred download buffer size"
          }
        }
      },
      "JobServerRequestAccountSyncResult": {
        "type": "object",
        "properties": {
          "account_sync_requested_at": {
            "type": "integer",
            "description": "Time at which Account Sync was requested (Unix time)"
          }
        }
      },
      "JobServerAutoAccountSyncParamsResult": {
        "type": "object",
        "properties": {
          "auto_account_sync": {
            "type": "boolean",
            "description": "Effective automatic account sync flag value"
          }
        }
      },
      "JobServerStartTwoFactorAuthResult": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Authentication prompt that should be shown to the user"
          },
          "extra_info": {
            "type": "string",
            "description": "Extra information about authentication session"
          }
        }
      },
      "JobServerStartOAuthResult": {
        "type": "object",
        "properties": {
          "consent_url": {
            "type": "string",
            "description": "Vendor-specific Consent page URL to show in browser"
          },
          "session_handle": {
            "type": "string",
            "description": "Opaque session handle used in subsequent GetOAuthState API calls"
          }
        }
      },
      "JobServerOAuthSession": {
        "type": "object",
        "properties": {
          "state": {
            "type": "integer",
            "description": "Session state (0 - waiting for user consent, 1 - token exchange in process, 2 - successful authorization, 3 - authorization error)"
          },
          "result_conn": {
            "$ref": "#/components/schemas/GsConnectInfo"
          },
          "error": {
            "type": "string",
            "description": "error text for state 3 (authorization error)"
          }
        }
      },
      "CSibSmtpServer": {
        "type": "object",
        "properties": {
          "m_sHostA": {
            "type": "string",
            "description": "SMTP Server Host"
          },
          "m_nPort": {
            "type": "integer",
            "description": "SMTP Server Port",
            "minimum": 0,
            "maximum": 65535
          },
          "m_bSSL": {
            "type": "boolean",
            "description": "Whether to use SSL/TLS connection"
          },
          "m_sUserIdA": {
            "type": "string",
            "description": "User ID"
          },
          "m_sPasswordEncMasterA": {
            "type": "string",
            "description": "Password (Master-encrypted)"
          },
          "m_sSenderStrA": {
            "type": "string",
            "description": "Sender email address and name (userid@server | [Sender Name] <userid@server>)"
          },
          "m_bStartTls": {
            "type": "boolean",
            "description": "Whether to use STARTTLS command"
          },
          "m_sMailFromA": {
            "type": "string",
            "description": "From (Envelope) addess. Optional. If empty, m_sSenderStrA will be used"
          },
          "m_bUseOAuth2": {
            "type": "boolean",
            "description": "Whether to use OAuth2 SMTP mode"
          },
          "m_OAuthProvider": {
            "type": "integer",
            "description": "OAuth2 SMTP Provider (0 - None, 1 - Gmail, 2 - Outlook, 3 - Custom)"
          },
          "m_sRefreshTokenEncMasterA": {
            "type": "string",
            "description": "GMail/Outlook OAuth2 refresh_token (Master-encrypted)"
          },
          "m_sOAuthUserIdA": {
            "type": "string",
            "description": "OAuth2 SMTP User ID"
          },
          "m_sOAuthEmail": {
            "type": "string",
            "description": "OAuth2 SMTP sender e-mail (may be not the same as OAuth2 SMTP User ID"
          }
        }
      },
      "CProgramOptionsGlobal": {
        "type": "object",
        "properties": {
          "m_GlobFilter": {
            "$ref": "#/components/schemas/CFileFilter"
          },
          "m_bGroupSimilarLogLines": {
            "type": "boolean",
            "description": "Whether GUI should compress (group) log lines"
          },
          "m_bUseSmtpToEmail": {
            "type": "boolean",
            "description": "true: Use SMTP server settings (m_SmtpServer) to send e-mails, false: Use system APIs to send e-mails"
          },
          "m_SmtpServer": {
            "$ref": "#/components/schemas/CSibSmtpServer"
          },
          "m_nRetainLogsDays": {
            "type": "integer",
            "description": "Keep old logs for this number of days (affects log cleanup)"
          },
          "m_bWarn_TimeOutOfRange": {
            "type": "boolean",
            "description": "Show warnings if file/folder times are out of normal Unix Time range"
          },
          "m_nParallelAutoJobs": {
            "type": "integer",
            "description": "Maximum number of parallel jobs to run"
          },
          "m_nAutoJobQuantSec": {
            "type": "integer",
            "minimum": 1,
            "description": "Job scheduling quant (in seconds)"
          },
          "m_nSaveMonths_OldGens": {
            "type": "integer",
            "minimum": 1,
            "description": "Keep old generations in state files for this number of months"
          },
          "m_tTimeStamp": {
            "type": "integer",
            "description": "Last Time Program Options were modified (Unix Time)"
          }
        }
      },
      "CProgramOptionsLocalOnly": {
        "type": "object",
        "properties": {
          "llLogLevel": {
            "type": "integer",
            "minimum": 0,
            "maximum": 5,
            "description": "Level of log detail (0 - critical, 1 - error, 2 - info, 3 - detail, 4 - transaction, 5 - debug)"
          },
          "sLogFolder": {
            "type": "string",
            "description": "Log folder (on Job Server side). Empty value means default (profile) log folder"
          },
          "sMirrorFolderPath": {
            "type": "string",
            "description": "Mirror folder (on Job Server side). Empty value means default (profile) mirror folder"
          },
          "sCompareProgram": {
            "type": "string",
            "description": "Compare program command line. Empty value means standard diff will be used. Use %1 and %2 for left and right files respectively"
          }
        }
      }
    }
  }
}
