Faits:
A.
A.a. X._ est une association de droit privé suisse inscrite au registre du commerce, sise à ... (VD) et dont le but social est l'enseignement et l'exploitation d'un institut universitaire de style américain. Au mois de mai 2009, elle a conclu un contrat d'enseignement avec Y._, citoyenne kazakhe. L'école s'engageait à fournir à l'élève une formation de deux ans ainsi qu'un logement pour le montant total de 43'365 euros. L'élève a payé d'avance 43'305 euros et a suivi les cours à partir du 14 septembre 2009.
Le 19 avril 2010, l'école a adressé un décompte à l'élève. Après déduction des frais de l'année académique 2009/10, il affichait un solde de 24'204 euros en faveur de l'élève, avec la mention "refund to" (à rembourser) suivie du numéro de compte bancaire de l'élève.
Le 21 juin 2010, l'école a établi un nouveau décompte pour les années académiques 2009/10 et 2010/11, laissant apparaître un solde de 3'097 euros en faveur de l'élève. Le même jour, les parties ont signé une demande de prolongation de l'autorisation de séjour pour études; le 10 août 2010, le permis de l'élève a été renouvelé pour une année.
Lors de la rentrée des classes le 6 septembre 2010, l'élève ne s'est pas présentée. Cet automne-là, elle a suivi des cours de français dans un autre établissement.
A.b. Par commandement de payer notifié le 29 novembre 2010, l'élève a engagé des poursuites contre l'école pour le montant de 33'159 fr. 48 plus intérêts à 5% l'an dès le 19 avril 2010, poursuites fondées sur le montant de 24'204 euros admis dans le décompte du 19 avril 2010. L'école a fait opposition totale. Le 20 janvier 2011, le Juge de paix a prononcé la mainlevée provisoire de l'opposition. L'élève a alors fait notifier une commination de faillite puis a requis le prononcé de la faillite; cette procédure est suspendue.
B.
B.a. Le 8 juillet 2011, l'école a ouvert action en annulation de poursuite devant le Tribunal civil de l'arrondissement de l'Est vaudois, concluant à ce qu'il soit constaté qu'elle n'était pas débitrice de l'élève pour le montant de 33'159 fr. 48 et à ce que la poursuite contre elle soit annulée. L'élève a conclu au rejet de l'action. Le Tribunal civil a rejeté l'action par jugement du 16 mai 2012. En résumé, il a retenu que le contrat d'enseignement avait été valablement résilié le 19 avril 2010, de sorte que l'école devait restituer à l'élève la part du versement anticipé qui n'avait pas encore été utilisée, à savoir 24'204 euros selon le décompte établi par l'école ce jour-là.
B.b. L'école s'est pourvue en appel, soutenant que l'élève, après avoir résilié le contrat le 19 avril 2010, s'était ravisée et avait conclu un nouveau contrat en vue de poursuivre ses études, ce qui découlerait en particulier du second décompte du 21 juin 2010 et de la demande de renouvellement du permis de séjour signée par les deux parties. Sans inviter l'élève à se déterminer, la Cour d'appel civile du Tribunal cantonal vaudois, par arrêt du 9 janvier 2013, a rejeté l'appel et confirmé le jugement de première instance.
C.
L'école (ci-après: la recourante) saisit le Tribunal fédéral d'un recours en matière civile, concluant à ce que son action en annulation de poursuite soit admise, à ce qu'il soit constaté qu'elle n'est pas débitrice de l'élève (ci-après: l'intimée) pour le montant de 33'159 fr. 48 et à ce que la poursuite ouverte à son encontre (n o..., Office des poursuites du district de La Riviera - Pays d'Enhaut) soit annulée.
L'intimée conclut principalement à l'irrecevabilité du recours, subsidiairement à son rejet. Les deux parties ont par la suite encore déposé des observations. Par ordonnance du 23 mai 2013, la présidente de la cour de céans a accordé l'effet suspensif.

Considérant en droit:
1.
La recourante se plaint d'une violation de l'interdiction constitutionnelle de l'arbitraire dans l'établissement des faits. Elle reproche au juge d'appel d'avoir refusé de voir dans la demande de renouvellement de permis la preuve que l'intimée avait décidé de faire la deuxième année prévue à l'origine.
L'arbitraire ne résulte pas du seul fait qu'une autre solution que celle retenue par l'autorité cantonale pourrait entrer en considération ou même qu'elle serait préférable; le Tribunal fédéral ne s'écarte de la décision attaquée que lorsque celle-ci est manifestement insoutenable, qu'elle se trouve en contradiction claire avec la situation de fait, qu'elle viole gravement une norme ou un principe juridique indiscuté, ou encore lorsqu'elle heurte de manière choquante le sentiment de la justice et de l'équité (<ref-ruling> consid. 5.1). En matière d'appréciation des preuves et d'établissement des faits, il n'y a arbitraire que si le juge n'a manifestement pas compris le sens et la portée d'un moyen de preuve, si, sur la base des éléments recueillis, il a fait des déductions insoutenables, ou encore s'il a omis, sans raison sérieuse, de tenir compte d'un moyen important propre à modifier la décision attaquée (<ref-ruling> consid. 2.1).
Le juge d'appel a retenu que le contrat d'enseignement avait été résilié au 19 avril 2010 et que la recourante s'était engagée à rembourser 24'204 euros; ces faits sont expressément admis par la recourante. Celle-ci ne critique pas davantage l'appréciation du juge selon laquelle il n'est pas établi que le second décompte du 21 juin 2010 ait été remis à l'intimée, de sorte que l'on ne peut rien tirer de cette pièce. Ces points sont ainsi acquis.
Comme la recourante le relève justement, la demande de renouvellement du permis, telle que présentée à l'autorité compétente, supposait certes que l'intimée continuât la formation commencée auprès de la même école et ne valait pas pour une autre formation auprès d'un autre établissement. Il n'en découle pas encore nécessairement que l'intimée, étudiante venue d'un pays lointain, l'ait compris ainsi. Le juge d'appel n'a pas ignoré cette demande, mais il a estimé qu'elle ne saurait à elle seule faire preuve d'un accord sur la conclusion d'un nouveau contrat d'enseignement avec la recourante dès lors que les circonstances dans lesquelles elle avait été signée étaient totalement ignorées. Cette conclusion ne prête pas à critique sous l'angle de l'arbitraire, ce d'autant moins que rien n'a été constaté et que la recourante ne dit mot au sujet des motifs qui auraient amené l'intimée à changer d'avis et à conclure un nouveau contrat avec la recourante. En retenant que la demande de renouvellement de permis ne prouvait pas, à elle seule, que l'intimée avait changé d'avis, entendait faire la deuxième année d'étude auprès de la recourante et s'était engagée dans ce sens, le juge d'appel n'a pas violé l'interdiction constitutionnelle de l'arbitraire. La question de savoir si la recourante avait ou non à disposition d'autres moyens de preuve est à cet égard sans pertinence; elle supporte le fardeau de la preuve pour l'extinction de la créance par elle reconnue le 19 avril 2010 et doit le cas échéant supporter les conséquences du défaut de preuves.
A noter que la recourante, à bon escient, ne se prévaut pas du principe de la confiance. A défaut de connaître les circonstances dans lesquelles la demande a été signée, on ne saurait dire que la recourante pouvait dans ce cas de bonne foi admettre que l'intimée voulait s'engager.
2.
La recourante se plaint d'une violation de l'art. 85a LP, le juge d'appel ayant à tort estimé qu'elle n'avait pas rapporté la preuve de l'extinction de la créance. Fondé sur un autre état de fait que celui retenu par le juge d'appel, à savoir que le contrat résilié avait été reconduit, le grief est irrecevable (art. 42 al. 2 LTF; <ref-ruling> consid. 2.1).
3.
La recourante, qui succombe, supporte les frais et dépens de la présente procédure (art. 66 et 68 LTF).

Par ces motifs, le Tribunal fédéral prononce:
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
Les frais judiciaires, arrêtés à 2'000 fr., sont mis à la charge de la recourante.
3.
La recourante versera à l'intimée 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 15 juillet 2013
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente: Klett
La Greffière: Monti