In non json: :only mode, that is how Rodauth works. The link takes the user to a web page, and they can click a button to do the verification. You don't want to verify directly from the link, as that performs a GET request and verification is a non-idempotent action.
If you want Rodauth to handle displaying the HTML to the user for you, then don't use json: :only. You can use json: true to still allow the JSON parts to work, but also support the HTML interface. If you really only want to allow the HTML interface for verification, you can filter requests (either in the Roda routing tree before calling r.rodauth or using the before_rodauth configuration method).
If you want to use Rodauth in json: :only mode, you can, but you need to send the user to some webpage and have that webpage perform the verification.
This situation is not limited to account verification, it will affect similar things that use email such as password resets and account unlocks.
Thanks,
Jeremy