We have this include: https://github.com/LMSCloud/Koha-LMSCloud/blob/master/koha-tmpl/opac-tmpl/bootstrap/en/includes/additional-offer-facets.inc Where each external vendor has corresponding JS, a Controller and a module that performs the actual request, e.g. JS: https://github.com/LMSCloud/Koha-LMSCloud/blob/master/koha-tmpl/opac-tmpl/bootstrap/js/munzinger.js Controller: https://github.com/LMSCloud/Koha-LMSCloud/blob/master/opac/opac-munzinger.pl Module: https://github.com/LMSCloud/Koha-LMSCloud/blob/master/C4/External/Munzinger.pm And that's how we do it, apparently.