/// <summary>
        /// Used to update the type instance. Updates can be either add, replace, remove , or test. 
        /// The type instance can only be updated if the type instance already exists.
        /// To use reserved characters like “/” and “~” defined by RFC 6092, please refer to section 4 of the API docs. 
        /// It demonstrates escaping “/” as “~1″ and “~” as “~0″.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="metadata"></param>
        /// <param name="typeInstance"></param>
        /// <returns></returns>
        public async Task<BoxMetadata> UpdateMetadata(string id, BoxMetadataRequest[] metadataRequests, string typeInstance = DefaultTypeInstance)
        {
            id.ThrowIfNullOrWhiteSpace("id");
            metadataRequests.ThrowIfNull("metadataRequest");

            BoxRequest request = new BoxRequest(new Uri(Constants.BoxApiUriString + string.Format(CultureInfo.InvariantCulture, MetadataEndpointPath, id, typeInstance)))
                .Method(RequestMethod.Put);

            request.Payload = _converter.Serialize(metadataRequests);
            request.ContentType = JsonPatchContentType;

            IBoxResponse<BoxMetadata> response = await ToResponseAsync<BoxMetadata>(request).ConfigureAwait(false);

            return response.ResponseObject;
        }