Faits :
A.
Par contrat du 18 août 2010, H.X._ et F.X._ (ci-après: les bailleurs) ont remis à bail à Y._ et Z._ (ci-après: les locataires) une villa de neuf pièces et demie, située à.... Conclu initialement du 15 août 2010 au 31 juillet 2011, le bail se renouvelait ensuite tacitement d'année en année, sauf avis de résiliation notifié au moins quatre mois à l'avance. Le loyer mensuel net s'élevait à 9'000 fr.
A._ AG (ci-après: A._), dont le siège est à Opfikon (ZH), a pour but le transport, le déménagement et la mise en dépôt de matériel. Elle dispose à Genève d'une succursale, dont le directeur est B._, au bénéfice de la signature individuelle.
Le 25 mars 2012, les locataires ont signé une procuration en faveur de A._, autorisant cette société à "s'occuper de toutes les activités et services liés à [leur] relocation".
Par lettre recommandée du 26 mars 2012 sur papier à en-tête de la société, A._ a résilié le bail pour le 31 juillet 2012 au nom des locataires, en précisant que ceux-ci allaient quitter la Suisse. La procuration du 25 mars 2012 était jointe au courrier, lequel portait la signature de C._ en qualité d'"Account Manager" et indiquait l'adresse électronique de la signataire ("xxx.com").
Des courriels ont été échangés entre H.X._ et C._. Ainsi, le 4 avril 2012, le premier a fait savoir à la seconde qu'il n'avait reçu aucun avis de retrait d'un pli recommandé envoyé le 28 mars 2012 et que la guichetière de la poste n'avait rien trouvé. Le même jour, C._ a envoyé à H.X._ le suivi "Track & Trace" de l'envoi n°...; il ressort de ce document qu'une lettre recommandée a été déposée le 28 mars 2012 à 10 h 22 à l'office postal de Genève La Praille, qu'elle est arrivée à l'office postal d'Yverdon-les-Bains le 29 mars 2012 à 7 h 54 et que le destinataire a été avisé le même jour à 10 h 20, avant que le courrier ne soit réacheminé à l'office postal d'Yverdon-les-Bains à 15 h 22. H.X._ a répondu immédiatement qu'il retournerait à la poste le lendemain, ce qu'il a dû effectivement faire puisqu'il a reconnu par la suite avoir reçu la résiliation le 5 avril 2012.
Toujours par voie électronique, H.X._ a indiqué à C._, le 1 er mai 2012, qu'un congé pouvait certes être le fait d'un représentant, mais qu'en l'occurrence, elle ne disposait pas du droit de signer au nom de A._ et que la procuration du 25 mars 2012 ne donnait pas le pouvoir de résilier un bail.
Par lettre du 11 juin 2012, le bailleur a informé A._ que la réception de la résiliation en date du 5 avril 2012 reportait l'échéance du bail d'un an, soit au 31 juillet 2013. Il ajoutait qu'il ne pouvait pas considérer qu'une résiliation, même anticipée, avait été donnée valablement aussi longtemps qu'il n'était pas en possession de la preuve des pouvoirs de C._ et d'une procuration des intimés autorisant A._ à résilier le bail.
Dans une nouvelle procuration en faveur de A._ datée du 27 juin 2012, les locataires précisaient que la résiliation du 26 mars 2012 était intervenue conformément à leurs instructions. Pour sa part, B._ a attesté, dans une lettre du 17 juillet 2012 adressée au recourant, qu'il avait expressément autorisé C._ à rédiger et à signer la lettre de résiliation du 26 mars 2012.
Par courriel du 26 juillet 2012, Me Laurent Strawson a adressé à H.X._ les lignes suivantes:
"Monsieur,
Vous trouverez en pièce jointe la procuration attestant des pouvoirs de Madame C._, conférés par A._ AG.
Je joins également les procurations attestant des pouvoirs de A._ AG, respectivement de mes pouvoirs, conférés par Monsieur Y._ et Madame Z._.
(...) "
Seules les deux dernières procurations citées figurent sous la rubrique "pièces jointes" du courriel.
L'état des lieux de sortie a eu lieu le 27 juillet 2012.
La villa a été relouée à partir du 1 er octobre 2012.
B.
Le 3 mai 2013, les locataires ont introduit une procédure de conciliation, portant notamment sur la libération de la garantie locative. La conciliation a échoué.
Par demande du 24 juillet 2013 rectifiée le 27 septembre 2013, les bailleurs ont conclu au paiement par les locataires d'un montant de 34'668 fr.50 avec intérêts, ainsi qu'à la libération en leur faveur, à titre de paiement partiel, de la garantie bancaire de 27'000 fr.; le capital réclamé comportait, entre autres, 18'000 fr. à titre de loyers pour août et septembre 2012, ainsi que 9'180 fr. en remboursement des frais d'agence engagés pour relouer la villa.
Par jugement du 24 juin 2014, le Tribunal des baux du canton de Vaud a condamné les locataires à payer aux bailleurs la somme de 31'256 fr.90 avec intérêts et a libéré la garantie de loyer en faveur des bailleurs. Il a jugé notamment que les locataires sont débiteurs du loyer jusqu'à ce que la villa ait été relouée, soit le 1 er octobre 2012, ainsi que des frais en relation.
Les locataires ont interjeté appel de ce jugement. Par arrêt du 1 er juin 2015, la Cour d'appel civile du Tribunal cantonal vaudois a partiellement admis l'appel et statué à nouveau en ce sens que les locataires doivent payer aux bailleurs le montant de 4'076 fr.90 avec intérêts, la garantie de loyer étant libérée à concurrence du capital et des intérêts en faveur des bailleurs et pour le solde en faveur des locataires. Contrairement aux juges de première instance, la cour cantonale a admis que le bail avait été valablement résilié pour le 31 juillet 2012.
C.
H.X._ et F.X._ forment un recours en matière civile. Ils concluent à la réforme de l'arrêt cantonal en ce sens que l'appel est rejeté et que le jugement de première instance est confirmé en tous points.
Y._ et Z._ proposent de déclarer le recours irrecevable, subsidiairement de le rejeter. Les recourants se sont déterminés sur la réponse, puis les intimés ont déposé d'ultimes observations.
Pour sa part, la cour cantonale se réfère aux considérants de son arrêt.
Les recourants ont présenté une requête d'effet suspensif, rejetée par ordonnance de la Présidente de la cour de céans.

Considérant en droit :
1.
Le recours est dirigé contre un arrêt final (<ref-law>) rendu en matière civile (<ref-law>) par un tribunal supérieur d'un canton, qui a statué sur recours (<ref-law>). La cause atteint la valeur litigieuse de 15'000 fr. ouvrant le recours en matière civile dans les affaires relevant du droit du bail à loyer (<ref-law>). Au surplus, le recours est exercé par les bailleurs qui ont succombé partiellement dans leurs conclusions condamnatoires et qui ont donc qualité pour recourir (<ref-law>). Déposé dans le délai (art. 46 al. 1 let. b et art. 100 al. 1 LTF) et la forme (<ref-law>) prévus par la loi, le recours est en principe recevable.
2.
A ce stade, le litige porte sur les loyers d'août et septembre 2012 et les frais d'agence pour relouer la villa. La question est de savoir si, comme la cour cantonale l'a admis, le bail a été valablement résilié au 31 juillet 2012.
Sur ce point, les bailleurs ne contestent plus que le congé a été notifié en temps utile pour l'échéance du 31 juillet 2012. En revanche, ils soutiennent que le directeur de A._ n'aurait pas justifié dans un délai raisonnable des pouvoirs de la signataire de la lettre de congé, de sorte que la résiliation serait "tardive". Au demeurant, la cour cantonale aurait retenu arbitrairement que la lettre justificative en question, datée du 17 juillet 2012, avait été communiquée à l'époque aux bailleurs. Les recourants ajoutent que le but social de A._ est limité au transport et au déménagement et que la procuration signée le 25 mars 2012 par les intimés ne comprend pas le pouvoir de résilier un bail.
3.
3.1. La résiliation est un droit formateur qui s'exerce par un acte juridique unilatéral, lequel peut émaner d'un représentant d'une partie au contrat (ROGER ZÄCH, Berner Kommentar, 2e éd. 2014, n° 103 ad remarques préliminaires aux art. 32-40 CO; CHRISTINE CHAPPUIS, in Commentaire romand, Code des obligations I, 2e éd. 2012, n° 6 ad <ref-law>). De manière générale, la manifestation de volonté de celui qui agit au nom d'autrui lie le représenté lorsque le représentant dispose des pouvoirs nécessaires à cet effet (<ref-law>) ou lorsque le représenté ratifie l'acte accompli en son nom (<ref-law>) ou encore lorsque le tiers peut se fier de bonne foi aux pouvoirs qui lui sont communiqués (art. 33 al. 3, art. 34 al. 3 et art. 37 CO) (<ref-ruling> consid. 3.1 p. 517).
La résiliation met fin unilatéralement à un rapport de droit et produit effet dès qu'elle entre dans la sphère de puissance du destinataire. Une jurisprudence déjà ancienne en a déduit que les conditions de validité d'une telle déclaration devaient être réunies à ce moment-là (<ref-ruling> consid. 3 p. 193). Plus récemment, le Tribunal fédéral a relevé le caractère irrévocable de la résiliation, qui ne peut en principe pas être soumise à des conditions (<ref-ruling> consid. 2a p. 135). Dans ce contexte, le congé notifié par un représentant non autorisé peut s'avérer problématique puisqu'il ne prendra effet (rétroactivement) que s'il est ratifié par le représenté et qu'une situation juridique incertaine ( Schwebezustand) est ainsi créée jusqu'à une éventuelle ratification (cf. arrêt 4A_107/2010 du 3 mai 2010 consid. 2.3). Selon la jurisprudence, le tiers ne peut en tout cas pas se prévaloir de l'absence de pouvoirs du représentant lorsqu'il ne prend connaissance de cette circonstance qu'après la ratification par le représenté; en effet, dans ce cas-là, le tiers ne s'est pas trouvé dans une situation juridique incertaine au sujet des effets de l'acte en cause (cf. <ref-ruling> consid. 2b et c p. 136; arrêt précité du 3 mai 2010 consid. 2.5 et 2.6).
Le problème ne se pose pas lorsqu'aucune procuration n'est produite lors de la notification du congé au nom du représenté, mais que, à la suite de l'interpellation du destinataire, le représentant justifie de ses pouvoirs ou ceux-ci sont confirmés par le représenté. En effet, la résiliation émane alors d'un représentant autorisé (BERNARD CORBOZ, Les congés affectés d'un vice, in 9e Séminaire sur le droit du bail, Neuchâtel 1996, p. 14). Pour assurer la sécurité des transactions, d'aucuns proposent d'accorder au tiers le droit de refuser l'acte juridique unilatéral soumis à réception émanant d'un représentant qui ne justifie pas de ses pouvoirs. Le refus de l'acte pour défaut de procuration doit intervenir en principe immédiatement, avec pour effet l'invalidité de l'acte (ZÄCH, op. cit., nos 104 ss ad remarques préliminaires aux art. 32-40 CO; VON TUHR/PETER, Allgemeiner Teil des Schweizerischen Obligationenrechts, tome I, 3e éd. 1979, p. 146). Dans le même ordre d'idées, l'<ref-law> dispose que, lorsqu'une personne contracte sans pouvoirs au nom d'un tiers, l'autre partie a le droit d'exiger de ce dernier qu'il déclare, dans un délai convenable, s'il ratifie ou non le contrat et elle cessera d'être liée faute de ratification dans ce délai.
3.2. En l'espèce, la représentante, A._, a résilié le bail au nom des intimés par pli du 26 mars 2012. Elle disposait alors des pouvoirs nécessaires à cet effet, puisqu'elle était au bénéfice de la procuration du 25 mars 2012, dont les locataires ont confirmé par la suite qu'elle comportait le pouvoir de résilier le bail. Par ailleurs, C._, qui a signé la lettre de congé en tant qu'"Account Manager" de A._, disposait à l'époque des pouvoirs pour le faire, comme le directeur de la succursale de Genève l'a confirmé dans l'attestation du 17 juillet 2012. A ce sujet, si les recourants contestent à présent avoir reçu le courrier en question, il n'en demeure pas moins que la pièce figure dans le dossier cantonal et que, sur cette base, les juges vaudois pouvaient sans arbitraire retenir l'existence des pouvoirs de C._ au moment de la notification du congé. Il s'ensuit que la résiliation signifiée le 29 mars 2012 émane d'une représentante autorisée. En l'occurrence, il ne se pose donc pas la question de savoir quels sont les effets d'une résiliation notifiée au nom d'autrui par un représentant non autorisé, puis ratifiée après coup par le représenté.
3.3. Le point litigieux porte en revanche sur la communication aux bailleurs des pouvoirs de A._ et de C._. Dans ce cadre-là, une éventuelle invalidité du congé ne peut entrer en ligne de compte que si les recourants ont refusé la résiliation en raison d'une justification des pouvoirs inexistante ou insuffisante.
3.3.1. La lettre de congé du 26 mars 2012, sur papier à en-tête de A._, était accompagnée d'une procuration signée la veille par les intimés en faveur de A._, sur le même papier à lettres. La justification des pouvoirs de la représentante était-elle alors insuffisante? Il est permis d'en douter. Le terme "relocation" utilisé dans la procuration fournie se retrouve notoirement dans le nom des entreprises qui s'occupent d'organiser, sous tous ses aspects, la mobilité de personnes, en particulier expatriées; que la résiliation d'un bail à loyer portant sur le logement familial fasse partie des tâches liées à la relocation ne paraît ainsi pas du tout incongru. Par ailleurs, les bailleurs n'avaient a priori aucune raison de douter du pouvoir de C._, présentée comme "Account Manager" et avec laquelle l'un des bailleurs communiquait par voie électronique sur une adresse comportant le nom de la société.
Cela étant, cette question n'a pas à être approfondie plus avant car, de toute manière, les recourants ont vu leurs éventuels doutes sur la résiliation levés avant qu'un refus de l'acte ne devienne effectif, pour les raisons suivantes.
3.3.2. Après avoir émis par courriel des doutes sur les pouvoirs de C._ et l'étendue des pouvoirs de A._, l'un des bailleurs a fait savoir à cette société, dans sa lettre du 11 juin 2012, qu'il ne considérait pas la résiliation comme valable aussi longtemps qu'il n'était pas en possession de la preuve des pouvoirs de C._ et d'une procuration des locataires autorisant A._ à résilier le bail.
En pièce jointe au courriel du 26 juillet 2012 de Me Strawson, les recourants ont reçu - ce qu'ils ne contestent pas - un document daté du 27 juin 2012 dans lequel les intimés confirment que la résiliation du 26 mars 2012 est intervenue conformément à leurs instructions. A partir de ce moment-là, les bailleurs ne pouvaient plus éprouver de doutes sur le fait que la lettre de résiliation avait bien été envoyée sur ordre des locataires, qui n'étaient donc pas susceptibles de remettre en cause le congé donné. Faute de situation juridique incertaine, un refus de la résiliation par les bailleurs n'entrait plus en considération.
Il est à noter que les recourants n'ont pas fixé à la représentante un délai pour justifier de ses pouvoirs, par application analogique de l'<ref-law>; comme une éventuelle justification n'avait pas à intervenir dans un délai précis, les bailleurs ne peuvent rien tirer du fait que celle-ci soit intervenue peu de temps avant l'échéance du délai de résiliation.
3.3.3. Les recourants reprochent à la cour cantonale d'avoir établi l'état de fait arbitrairement en retenant qu'ils avaient reçu la justification des pouvoirs de C._ par le directeur de la succursale de A._. Comme les bailleurs n'étaient de toute manière plus en droit de refuser la résiliation après avoir pris connaissance du document du 27 juin 2012 signé par les locataires, la réception par les bailleurs de l'attestation des pouvoirs de C._ est un élément sans pertinence pour le sort de la cause, de sorte qu'il n'est pas nécessaire d'examiner le grief d'arbitraire soulevé par les recourants.
3.4. Sur le vu de ce qui précède, la cour cantonale n'a pas violé le droit fédéral en admettant la validité au 31 juillet 2012 de la résiliation notifiée le 29 mars 2012. Le recours sera dès lors rejeté.
4.
Les recourants, qui succombent, prendront à leur charge les frais judiciaires (<ref-law>) et verseront des dépens aux intimés (art. 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce:
1.
Le recours est rejeté.
2.
Les frais judiciaires, arrêtés à 2'000 fr., sont mis solidairement à la charge des recourants.
3.
Les recourants, débiteurs solidaires, verseront aux intimés, créanciers solidaires, une indemnité de 2'500 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux mandataires des parties et à la Cour d'appel civile du Tribunal cantonal du canton de Vaud.
Lausanne, le 20 mai 2016
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann