Dortmund were the better side and passed up a host of chances before Pierre-Emerick Aubameyang finally headed in the opener.
The hosts were similarly dominant in the second half, with Marco Reus scoring twice to leave Tottenham needing a miracle to overturn the 3-0 deficit.
BVB break the deadlock
An early Christian Eriksen drive, inside the first minute of the match, was as good as it got for the visitors in the early stages. They struggled to match their Bundesliga opposition and nearly paid the price; Gonzalo Castro struck a half-volley just off target, before Aubameyang's pass was put past the post by an unfortunate Erik Durm.
The Gabonese forward would be the main protagonist in a dominant first-half for the hosts, as his volley went narrowly over the bar from Marcel Schmelzer's cross. Aubameyang thought he had struck gold when he tapped in the rebound following Hugo Lloris' magnificent save from Henrikh Mkhitaryan, only to be called for offside.
Aubameyang finally got his goal from another pin-point Schmelzer cross, as he glanced the ball into the far corner past a helpless Lloris. Castro did well to recycle possession after Kieran Trippier produced a poor defensive header, setting up BVB's left-back to find their hot-shot forward for his 33rd goal of the season.
Marco Reus went close just before the break with a free-kick, while the winger and Durm both had late chances blocked. Mauricio Pochettino would, without doubt, have been pleased to get through the first-half without falling further behind.
More of the same in the second half
The Argentine coach didn't make any changes going into the second period, and the game continued to go Dortmund's was as a result. Another Mkhitaryan run found Aubemyang, but his off target chip over Lloris could only be turned onto the post by Castro from a tight angle.
Thomas Tuchel and his men weren't required to wait too long until they struck a second, as Reus struck just after the hour mark. Mkhitaryan took a corner short into the feet of Castro, who picked out an unmarked Neven Subotic in the area. He flicked on to Reus at the back post, and the winger ghosted in to volley home from close range.
In a half were chances didn't come as regularly as the first, Reus' finishing was just the ticket for BVB. Aubameyang started the move this time around, picking out Castro on the edge of the area. He managed to float the ball into the number 11's path, as he volleyed home to seal the win for the hosts.
Dortmund cruised throughout the rest of the game to secure a three-goal advantage heading into the second leg next Thursday, with Tottenham's involvement in Europe hanging by a thread.