Ajax heeft voor de twintigste keer de TOTO KNVB Beker gewonnen. De ploeg van Erik ten Hag keek lang tegen een 1-1 stand aan, maar in de slotfase lukte het alsnog om de overwinning binnen te slepen. De doelpuntenmakers namens Ajax waren Ryan Gravenberch en David Neres.
Beide ploegen kregen van hun trainers duidelijk de opdracht mee om in de openingsfase geen doelpunt tegen te krijgen, want de wedstrijd begon zeer rommelig. Zowel Vitesse als Ajax leed veel balverlies op het middenveld, waardoor gedurende het eerste kwartier weinig serieuze aanvallen te zien waren. Aan Vitesse-kant kreeg Armando Broja een serieuze schietkans, maar hij zag Maarten Stekelenburg eenvoudig redden. Davy Klaassen creëerde aan de andere kant een goede mogelijkheid voor Gravenberch, maar de jonge middenvelder schoot recht op Remko Pasveer af. Dezelfde Gravenberch zorgde na ruim twintig minuten spelen alsnog voor de openingstreffer in de bekerfinale. Het talent kreeg de bal plotseling voor zijn linkerbeen en haalde verwoestend uit: 1-0.
Het resulteerde in beter spel van de Amsterdammers, die op zoek gingen naar een uitbreiding van de voorsprong. De volgende treffer viel kort daarna echter aan de andere kant van het veld. Na een snelle counter van Vitesse, en een misser van Lissandro Martínez, rende Broja langs zijn tegenstander. Broja zag op zijn beurt Loïs Openda hard het zestienmetergebied in rennen. De aanvaller gaf de bal vervolgens precies op het juiste moment, waardoor Openda uitsluitend nog tegen de bal hoefde aan te lopen om deze achter Stekelenburg te werken. Het leverde Ajax een mentale tik op, maar de club bleef alsnog kansen creëren. Dat gebeurde onder meer via Dusan Tadic, die na een voorzet van Antony alleen voor de keeper stond. De bal was echter te hard om deze het doel in te werken. Een minuut later mocht Antony zélf aanleggen, maar de Braziliaan raakte zijn tegenstander.
Vroeg in de tweede helft kreeg Ajax twee grote kansen voor een nieuwe voorsprong. Klaassen kreeg de bal na slecht uitverdedigen van Vitesse zomaar voor zijn voeten. Hij besloot te kappen naar zijn linkerbeen en vervolgens uit te halen, maar Pasveer stond in de weg. Een paar minuten later had Antony de tweede Amsterdamse treffer op zijn schoen. Hij kapte naar zijn linkerbeen en mikte in de lange hoek. Zijn poging ging maar net langs de paal, waardoor de gelijke stand op het scorebord bleef staan. Ajax bleef op zoek naar een nieuwe voorsprong, waarvoor Gravenberch eindelijk leek te zorgen. Na een mooie aanval van Ajax kwam de bal bij hem terecht. Hij kon vrij uithalen, maar kreeg niet voldoende kracht achter de bal om raak te schieten.
Na de mogelijkheden voor Ajax kreeg Vitesse meer controle over het duel. De huidige koploper van de Eredivisie moest steeds verder naar achteren lopen, maar tot grote kansen voor de Arnhemmers leidde het niet. Ten Hag besloot een kwartier voor tijd in te grijpen door Rensch naar de kant te halen en Schuurs binnen de lijnen te zetten, maar het leverde weinig extra controle op. Die kreeg Ajax wél vijf minuten voor tijd, toen Jacob Rasmussen een snoeiharde overtreding op Antony maakte en een directe rode kaart ontving. Vervolgens was het in de blessuretijd invaller David Neres die Ajax een bekeroverwinning bezorgde.
Opstelling Ajax: Stekelenburg; Rensch (75′. Schuurs), Timber, Martínez, Tagliafico; Álvarez, Gravenberch, Klaassen (87′. Ekkelenkamp); Antony (87′. Neres), Haller, Tadic