The request URL for running archive configuration commands has the following form:
/run-archive-configuration-commands
          The request must use the POST method.
        
          The request body must be a JSON object that has a single member.
          This member has the key commands and an array as
          its value.
          Each of the array elements must be a JSON object that represents an
          archive configuration command.
        
The format of the object depends on the respective command and is described in the section called “Archive Configuration Commands”. Commands may be processed in parallel, so a single request should never specify more than one command that affects the same channel as the result is not predictable.
The response is a JSON object with the with the following members:
| Field name | Internal data type | JSON data type | Description | 
|---|---|---|---|
| errorMessage | string | string | error message indicating a global problem.
                  Such a problem does not affect a specific channel, but the
                  whole execution (e.g. problems while accessing the database).
                  If such an error is present, no changes have been made to the
                  server configuration. nullif there is no global error. | 
| results | array of object | array of object | result object for each command that was specified in the
                  request.
                  The results have the same order as the commands had in the
                  request.
                  May be nulliferrorMessageis set. | 
Each result object is a JSON object with the following structure:
| Field name | Internal data type | JSON data type | Description | 
|---|---|---|---|
| command | object | object | command to which this result belongs. This command object is equal to the one that has been specified in the request, but some members may differ slightly due to normalization. | 
| errorMessage | string | string | error message describing the reason for which the operation
                  failed. nullif the operation was successful or if
                  no explanation for the error is available. | 
| success | boolean | boolean | trueif the command was executed
                  successfully,falseif the command failed. | 
          If the user could not be authenticated or is not authorized to use
          the import function, HTTP error code 403 (forbidden) is returned and
          the response body is invalid.
          If there is an error for at least one command, HTTP error code 500
          (internal server error) is returned and the success
          member of the corresponding command or commands is set to
          false.
          If there is a general problem while processing the request (e.g. the
          database is currently unavailable), HTTP error code 503 (service
          unavailable) is returned and the errorMessage is
          set in the response.
        
There are seven different archive configuration commands:
          Each command is described by a JSON object, but except for the common
          commandType member, each of the different commands
          has a slightly different structure.
        
The add channel command adds a new channel to the archive configuration. The channel is only added if it does not exist yet. If there already is a channel with the same name, the operation fails. The object for the add channel command has the following structure:
| Field name | Internal data type | JSON data type | Description | 
|---|---|---|---|
| channelName | string | string | name of the channel that shall be added. | 
| commandType | enum | string | always the literal string add_channel. | 
| controlSystemType | string | string | internal identifier for the control-system support that shall be used for the channel. This is the same identifier that is also used in configuration files. | 
| decimationLevels | set of int | array of string | decimation levels for the channel (identified by their
                  decimation periods specified in seconds).
                  The raw decimation level (with a decimation period of zero) is
                  always added, even if it is not specified in the array.
                  If the whole array is null, this is
                  interpreted like an array containing zero as its only element. | 
| decimationLevelToRetentionPeriod | map of int to int | object with string member values | retention period for each decimation level (specified in
                  seconds).
                  Each member uses the decimation period of the respective
                  decimation level as its key and the retention period as its
                  value.
                  A value of zero means that samples shall be retained
                  indefinitely.
                  Entries for a decimation level that is not also specified in decimationLevelsare discarded (except for
                  the raw decimation level which is always included implicitly).
                  Negative retention periods are converted to zero.
                  If a decimation level is specified indecimationLevels, but not indecimationLevelToRetentionPeriod, a
                  retention period of zero is assumed.
                  If the whole object isnull, a retention
                  period of zero is used for all decimation levels. | 
| enabled | boolean | boolean | trueif archiving shall be enabled for the
                  channel,falseif archiving shall be
                  disabled. | 
| options | map of string to string | object with string member values | control-system-specific configuration options.
                  The member key is the option name and the member value is the
                  option value.
                  Specifying nullhas the same effect as
                  specifying an empty object. | 
| serverId | UUID | string | UUID of the server to which the channel shall be added. | 
The add or update channel command is very similar to the add channel command. However, instead of failing when the specified channel already exists, it updates the channel configuration to match the specified configuration.
The control-system type of a channel cannot be changed, so the command fails if the channel exists, but its control-system type does not match the specified control-system type. The command also fails when the specified server ID does not match the server ID of the already existing channel. Channels can be moved from one server to another one, but the move channel command has to be used for this task.
          The object for the add or update channel command has the same
          structure as the add channel command, only the value of the
          commandType member is different:
        
| Field name | Internal data type | JSON data type | Description | 
|---|---|---|---|
| channelName | string | string | name of the channel that shall be added or updated. | 
| commandType | enum | string | always the literal string add_or_update_channel. | 
| controlSystemType | string | string | internal identifier for the control-system support that shall be used for the channel. This is the same identifier that is also used in configuration files. | 
| decimationLevels | set of int | array of string | decimation levels for the channel (identified by their
                  decimation periods specified in seconds).
                  The raw decimation level (with a decimation period of zero) is
                  always added, even if it is not specified in the array.
                  If the whole array is null, this is
                  interpreted like an array containing zero as its only element. | 
| decimationLevelToRetentionPeriod | map of int to int | object with string member values | retention period for each decimation level (specified in
                  seconds).
                  Each member uses the decimation period of the respective
                  decimation level as its key and the retention period as its
                  value.
                  A value of zero means that samples shall be retained
                  indefinitely.
                  Entries for a decimation level that is not also specified in decimationLevelsare discarded (except for
                  the raw decimation level which is always included implicitly).
                  Negative retention periods are converted to zero.
                  If a decimation level is specified indecimationLevels, but not indecimationLevelToRetentionPeriod, a
                  retention period of zero is assumed.
                  If the whole object isnull, a retention
                  period of zero is used for all decimation levels. | 
| enabled | boolean | boolean | trueif archiving shall be enabled for the
                  channel,falseif archiving shall be
                  disabled. | 
| options | map of string to string | object with string member values | control-system-specific configuration options.
                  The member key is the option name and the member value is the
                  option value.
                  Specifying nullhas the same effect as
                  specifying an empty object. | 
| serverId | UUID | string | UUID of the server to which the channel shall be added if it does not exist yet or to which it must belong if it already exists. | 
          The move channel command moves a channel from one server to a
          another one.
          If the specified channel does not exist, the command fails.
          It also fails if the specified expectedOldServerId
          does not match the server ID of the channel’s current server.
          The object for the move channel command has the following structure:
        
| Field name | Internal data type | JSON data type | Description | 
|---|---|---|---|
| channelName | string | string | name of the channel that shall be moved. | 
| commandType | enum | string | always the literal string move_channel. | 
| expectedOldServerId | UUID | string | expected UUID of the server which currently owns the channel.
                  If null, the channel is moved regardless of
                  the server it currently belongs to. | 
| newServerId | UUID | string | UUID of the server to which the channel shall be moved. | 
The refresh channel command causes a server to temporarily stop archiving for that channel, reload its configuration, and resume archiving with the freshly loaded configuration. This command succeeds, even if the channel does not exist or actually exists on a different server. However, the actual refresh action only happens on the specified server. The object for the refresh channel command has the following structure:
| Field name | Internal data type | JSON data type | Description | 
|---|---|---|---|
| channelName | string | string | name of the channel that shall be refreshed. | 
| commandType | enum | string | always the literal string refresh_channel. | 
| serverId | UUID | string | UUID of the server on which the refresh action should run. This does not have to be, but typically should be the UUID of the server that owns the channel. | 
          The remove channel command deletes a channel (and all its data).
          If the specified channel does not exist, the command fails.
          It also fails if the specified expectedServerId
          does not match the server ID of the channel’s current server.
          The object for the remove channel command has the following structure:
        
| Field name | Internal data type | JSON data type | Description | 
|---|---|---|---|
| channelName | string | string | name of the channel that shall be deleted. | 
| commandType | enum | string | always the literal string remove_channel. | 
| expectedServerId | UUID | string | expected UUID of the server which currently owns the channel.
                  If null, the channel is deleted regardless
                  of the server it currently belongs to. | 
          The rename channel command changes the name of a channel.
          If the specified channel does not exist or the specified
          newChannelName is already in use, the command
          fails.
          It also fails if the specified expectedServerId
          does not match the server ID of the channel’s current server.
          The object for the rename channel command has the following structure:
        
| Field name | Internal data type | JSON data type | Description | 
|---|---|---|---|
| commandType | enum | string | always the literal string rename_channel. | 
| expectedServerId | UUID | string | expected UUID of the server which currently owns the channel.
                  If null, the channel is renamed regardless
                  of the server it currently belongs to. | 
| newChannelName | string | string | new name for the channel. | 
| oldChannelName | string | string | old name of the channel. | 
          The update channel command updates the configuration of an existing
          channel. If the specified channel does not exist, the operation fails.
          It also fails if the expectedControlSystemType does
          not match the actual control-system type of the channel or the
          expectedServerId does not match the ID of the
          server that owns the channel.
        
          The set of decimation levels that shall be added and removed can be
          described in an explicit or in a differential fashion.
          For an explicit description, use the
          decimationLevels member.
          For a differential description, use the
          addDecimationLevels and
          removeDecimationLevels members.
          Only one of the two ways to describe the change can be used at the
          same time.
          Setting both decimationLevels and either or both of
          addDecimationLevels and
          removeDecimationLevels results in an error.
        
          If decimation levels are listed in decimationLevels
          or addDecimationLevels, but do not have a
          corresponding entry in
          decimationLevelToRetentionPeriod, a retention
          period of zero is assumed for these decimation levels, even if they
          already exist with a different retention period.
        
          Like the decimation levels, the control-system-specific configuration
          options can also be described in an explicit or in a differential
          fashion.
          For an explicit description, use the options
          member.
          For a differential description, use the addOptions
          and removeOptions members.
          Only one of the two ways to describe the change can be used at the
          same time.
          Setting both options and either or both of
          addOptions and removeOptions
          results in an error.
        
The object for the update channel command has the following structure:
| Field name | Internal data type | JSON data type | Description | 
|---|---|---|---|
| addDecimationLevels | set of int | array of string | decimation levels (identified by their decimation periods
                  specified in seconds) that shall be added for the channel.
                  If the whole array is nullanddecimationLevelsis alsonull, no decimation levels are added. | 
| addOptions | map of string to string | object with string member values | control-system-specific configuration options that shall be
                  added to the channel configuration.
                  The member key is the option name and the member value is the
                  option value.
                  If one of the specified options already exists, its value is
                  updated with the specified value.
                  If this member is nullandoptionsis alsonull,
                  no control-system-specific options are added for the channel. | 
| channelName | string | string | name of the channel that shall be updated. | 
| commandType | enum | string | always the literal string update_channel. | 
| decimationLevels | set of int | array of string | decimation levels for the channel (identified by their
                  decimation periods specified in seconds).
                  The raw decimation level (with a decimation period of zero) is
                  always added, even if it is not specified in the array.
                  If the whole array is nullandaddDecimationLevelsandremoveDecimationLevelsare alsonull, no decimation levels are added or
                  removed.
                  If the array is notnullall existing
                  decimation levels (except for the special raw decimation
                  level) that are not also specified in the array are removed. | 
| decimationLevelToRetentionPeriod | map of int to int | object with string member values | retention period for each decimation level (specified in
                  seconds).
                  Each member uses the decimation period of the respective
                  decimation level as its key and the retention period as its
                  value.
                  A value of zero means that samples shall be retained
                  indefinitely.
                  Entries for a decimation level that are not also specified in decimationLevelsoraddDecimationLevelsand that do not already
                  exist, are discarded (except for the raw decimation level
                  which is always included implicitly).
                  Negative retention periods are converted to zero.
                  If a decimation level is specified indecimationLevelsoraddDecimationLevels, but not indecimationLevelToRetentionPeriod, a
                  retention period of zero is assumed.
                  If the whole object isnull, a retention
                  period of zero is used for all decimation levels that are
                  newly added and the retention periods of all other decimation
                  levels are not changed. | 
| enabled | boolean | boolean | trueif archiving shall be enabled for the
                  channel,falseif archiving shall be
                  disabled.
                  Ifnull, the enabled flag is not changed. | 
| expectedControlSystemType | string | string | internal identifier for the control-system support that is
                  expected to be used for the channel.
                  If null, the channel is updated regardless
                  of its control-system type. | 
| expectedServerId | UUID | string | UUID of the server to which the channel must belong.
                  If null, the channel is updated regardless
                  of the server to which it belongs. | 
| options | map of string to string | object with string member values | control-system-specific configuration options.
                  The member key is the option name and the member value is the
                  option value.
                  If this member is not null, all options
                  are replaced by the specified options, removing options that
                  existed before, but were not specified.
                  If this member isnulland bothaddOptionsandremoveOptionsare alsonull, the control-system specific options
                  for the channel are not changed. | 
| removeDecimationLevels | set of int | array of string | decimation levels (identified by their decimation periods
                  specified in seconds) that shall be removed from the channel.
                  If the whole array is nullanddecimationLevelsis alsonull, no decimation levels are removed.
                  The special decimation level for raw samples is never removed,
                  even if zero is an element of this array. | 
| removeOptions | set of string | array of string | control-system-specific configuration options (identified by
                  their names) that shall be removed from the channel
                  configuration.
                  If one of the specified options does not exist, it simply is
                  not removed.
                  If this member is nullandoptionsis alsonull,
                  no control-system-specific options are removed from the
                  channel configuration. | 
Request:
POST /admin/api/1.0/run-archive-configuration-commands
{
  "commands": [
    {
      "channelName": "someExistingChannel",
      "commandType": "add_channel",
      "controlSystemType": "channel_access",
      "decimationLevels": ["0", "30", "300"],
      "decimationLevelToRetentionPeriod": {
        "0": "864000"
      },
      "enabled": true,
      "serverId": "7cf8f393-cd00-46ae-9343-53e9cb5793fd"
    },
    {
      "channelName": "someNewChannel",
      "commandType": "add_channel",
      "controlSystemType": "channel_access",
      "decimationLevelToRetentionPeriod": {
        "0": "31536000"
      },
      "enabled": true,
      "options": {
        "someControlSystemOption": "someValue"
      },
      "serverId": "7cf8f393-cd00-46ae-9343-53e9cb5793fd"
    },
    {
      "addDecimationLevels": ["30"],
      "channelName": "someOtherChannel",
      "commandType": "update_channel",
      "decimationLevelToRetentionPeriod": {
        "0": "864000",
        "30": "31536000"
      }
    }
  ]
}
Response:
{
  "results": [
    {
      "command": {
        "channelName": "someExistingChannel",
        "commandType": "add_channel",
        "controlSystemType": "channel_access",
        "decimationLevels": ["0", "30", "300"],
        "decimationLevelToRetentionPeriod": {
          "0": "864000",
          "30": "0",
          "300": "0"
        },
        "enabled": true,
        "serverId": "7cf8f393-cd00-46ae-9343-53e9cb5793fd"
      },
      "errorMessage": "Channel \"someExistingChannel\" cannot be added because a
↪channel with the same name already exists.",
      "success": false
    },
    {
      "command": {
        "channelName": "someNewChannel",
        "commandType": "add_channel",
        "controlSystemType": "channel_access",
        "decimationLevels": ["0"],
        "decimationLevelToRetentionPeriod": {
          "0": "31536000"
        },
        "enabled": true,
        "options": {
          "someControlSystemOption": "someValue"
        },
        "serverId": "7cf8f393-cd00-46ae-9343-53e9cb5793fd"
      },
      "success": true
    },
    {
      "command": {
        "addDecimationLevels": ["30"],
        "channelName": "someOtherChannel",
        "commandType": "update_channel",
        "decimationLevelToRetentionPeriod": {
          "0": "864000",
          "30": "31536000"
        }
      },
      "success": true
    }
  ]
}