Here is a list of differences between the client API Visualize.js (aka Viz.js) and the Repository HTTP API (aka iframe's), which are documented here: https://community.jaspersoft.com/documentation/tibco-jasperreports-server-ultimate-guide/v710/jasperreports-server-apis
This might help you decide which approach is best for you. The Web Services / REST API is not included here as it is normally for different use cases.
|Purpose||Embed specific Reports, Ad Hoc Views and Dashboards||Embed specific sections of the TIBCO JasperReports® Server UI|
|Ad Hoc support||Can embed Ad Hoc views (since version 7.1) and Ad Hoc Reports. Cannot embed Ad Hoc designer for now (this is likely to change in future releases)||Can embed anything that's currently included in the JasperReports® Server UI|
|Dashboard support||Currently does not support embedding the Dashboard designer directly (this is likely to change in future releases). It can embed an already designed Dashboard though||Can embed anything that's currently included in the JasperReports® Server UI|
|UI: list of repo objects||Can be obtained via a Search function (see API reference below)||Can be easily obtained by embedding a repo folder or a search|
|UI: look & feel||Completely flexible, as it integrates seamlessly within your web application||Depends on the implementation of themes in JasperReports® Server. Has some limitations|
|UI: interaction between different elements embedded||Possible, e.g. an embedded Report can control another Report||You can only interact with a Report or a Dashboard through its URL, so you will be limited to passing parameter values and themes|
For the full API reference of Viz.js, see: https://community.jaspersoft.com/documentation/tibco-jasperreports-server-visualizejs-guide/v71/api-reference-visualizejs
And a list of Visualize.js samples on GitHub.