TimeExpires is the field that determines if a transfer option is enabled or disabled. To enable a transfer option, TimeExpires must be set to a future date, which is the date that the transfer option will expire (be disabled). To disable a transfer option, simply set TimeExpires to a date in the past. Also, if TimeExpires is set to null that means it is enabled indefinitely (however, note that currently CUPI offers no ability to set this field to null).
TimeExpires is always treated as GMT. Any required time zone conversion is the responsibility of the client.

Action is the field that determines if the transfer option will transfer calls to an extension or directly to the greetings. The Action field is a custom type. A value of 0 denotes that the call will be sent directly to the greetings. A value of 1 denotes that the call will be transferred to an extension.

Several settings are specific to how the transfer option should transfer the call (assuming that the Action is set to 1):

TransferType

Extension

TransferRings

TransferType determines whether the transfer will be released (a value of 0) or supervised (a value of 1).

Extension indicates the extension that the call will transfer to.

TransferRings is the number of times Connection will ring the extension before it considers the call a ring-no-answer (RNA), and pulls the call back to play the greeting. This value is only used when the TransferType is set to 1 (a supervised transfer).

UsePrimaryExtension is a boolean that is a bit of an oddity. When the value is set to true, the Extension is set to the primary extension of the user. However, note the following caveat when using this field: if UsePrimaryExtension is set to true and the Extension field is set to a value in the same PUT, an error will be thrown. Because setting UsePrimaryExtension to true causes the Extension field to be set to a specific value, you cannot also explicitly set the Extension field in the same PUT; one or the other can occur, but not both. An error will also be thrown if UsePrimaryExtension is set to false and no value is given for the Extension field in the same PUT. In other words, if you set UsePrimaryExtension to false, you must provide a new Extension in the same PUT.

PersonalCallTransfer is a boolean that determines whether personal call transfer rules will be used instead of the basic transfer rules. If PersonalCallTransfer is set to true, then instead of using any of the settings of this transfer rule, the call will be sent to the personal call transfer rules of the user to be acted on. If PersonalCallTransfer is set to false, then the basic transfer rule is used. If you are using personal call transfer rules, set this to true; otherwise, leave it set to false. It's that simple.

Creating

Note that you cannot use CUPI to create transfer options.

Updating

To enable the Alternate transfer option until March 9, 2020, you would use the following PUT request: