public static function update(
        string $name = null,
        string $publicNickName = null,
        string $avatarUuid = null,
        Address $addressMain = null,
        Address $addressPostal = null,
        string $language = null,
        string $region = null,
        string $country = null,
        array $ubo = null,
        string $chamberOfCommerceNumber = null,
        string $legalForm = null,
        string $status = null,
        string $subStatus = null,
        int $sessionTimeout = null,
        Amount $dailyLimitWithoutConfirmationLogin = null,
        array $notificationFilters = null,
        array $customHeaders = []
    ): BunqResponseInt {
        $apiClient = new ApiClient(static::getApiContext());
        $responseRaw = $apiClient->put(
            vsprintf(
                self::ENDPOINT_URL_UPDATE,
                [static::determineUserId()]
            ),
            [
                self::FIELD_NAME => $name,
                self::FIELD_PUBLIC_NICK_NAME => $publicNickName,
                self::FIELD_AVATAR_UUID => $avatarUuid,
                self::FIELD_ADDRESS_MAIN => $addressMain,
                self::FIELD_ADDRESS_POSTAL => $addressPostal,
                self::FIELD_LANGUAGE => $language,
                self::FIELD_REGION => $region,
                self::FIELD_COUNTRY => $country,
                self::FIELD_UBO => $ubo,
                self::FIELD_CHAMBER_OF_COMMERCE_NUMBER => $chamberOfCommerceNumber,
                self::FIELD_LEGAL_FORM => $legalForm,
                self::FIELD_STATUS => $status,
                self::FIELD_SUB_STATUS => $subStatus,
                self::FIELD_SESSION_TIMEOUT => $sessionTimeout,
                self::FIELD_DAILY_LIMIT_WITHOUT_CONFIRMATION_LOGIN => $dailyLimitWithoutConfirmationLogin,
                self::FIELD_NOTIFICATION_FILTERS => $notificationFilters,
            ],
            $customHeaders
        );

        return BunqResponseInt::castFromBunqResponse(
            static::processForId($responseRaw)
        );
    }