Borussia Dortmund rescued a point in Sinsheim thanks to a late Christian Pulisic equalizer. Hoffenheim were the better team for long periods and took the lead through Joelinton, before Abdou Diallo saw red for BVB.
Hoffenheim 1-1 Borussia Dortmund
(Joelinton 44' - Pulisic 84')
With Paco Alcacer (injured) and Mario Götze (out of favor) left at home, captain Marco Reus and ex-Frankfurter Marius Wolf led the line for a Borussia Dortmund team who struggled to create chances.
Hoffenheim came into the game as the first half progressed and ultimately took a deserved lead through Joelinton just before the break.
Julian Nagelsmann's team started the second half as they ended the first - well on top. Steven Zuber and Nico Schulz linked up well down the left while new Dutch signing Joshua Brenet worked hard up and down the right. Up front, Joelinton and Andrej Kramaric offered a constant threat which Dortmund couldn't match.
Ermin Bicakcic thought he'd doubled Hoffenheim's lead in the second half but the Bosnian's header was correctly ruled out by VAR for offside in the build-up. Abdou Diallo was then sent off for Dortmund after grappling with Kramaric in a somewhat controversial decision.
Despite being a man down, Dortmund came back into the game - thanks partly to the introduction of Maximilian Philipp who went up front and allowed Reus to drift deeper and wider and get involved with the play. And that's where the equalizer came from, as the Dortmund captain ran in behind and crossed for Pulisic to finish, rescuing a rather fortunate point for Lucien Favre's team.
Elsewhere on matchday four:
Stuttgart 0-0 Fortuna Düsseldorf (Friday)
Hertha Berlin 4-2 Gladbach
Wolfsburg 1-3 Freiburg
Nuremberg 2-0 Hannover
Augsburg 2-3 Werder Bremen
Schalke vs. Bayern Munich (18:30 CET)
As it happened:
+++ FULL TIME: Hoffenheim 1-1 Borussia Dortmund +++
90+2' WHAT A CHANCE FOR HOFFENHEIM! Schulz's shot-cum-cross falls to Belfodil at the back post but somehow, from two yards out, the substitute puts it over.
90+1' Witsel fires just over from distance.
90' There will be THREE minutes of added time
87' Substitution for Hoffenheim: Joelinton is placed by Belfodil
87' Now Dortmund have arrived! Reus crosses again from the left hand side of the box but it just avoids Max Philipp in the middle.
84' GOAL! Hoffenheim 1-1 Borussia Dortmund (Pulisic)
Reus latches onto Schmelzer's ball down the right and dribbles into the box before crossing low across goal, where Pulisic is waiting to tap the ball home. They're down to ten men, but Dortmund are level.
83' Pulisic dribbles dangerously into the box but eventually loses possession.
81' After Pulisic is impeded on the edge of the box, Reus strikes the free-kick into the wall. Delaney's follow-up goes wide. That was wasteful from Dortmund.
78' From the resulting free-kick, Kramaric curls a shot just wide.
76' RED CARD FOR BORUSSIA DORTMUND (Diallo)
The Swiss defender is shown a straight red for last-man challenge on Kramaric. Replays shows both players grappling with each other and the decision seems harsh to me. But the VAR reviewed the decision and upheld it - incredibly, in this writer's opinion.
70' Substitution for Hoffenheim: Steven Zuber is replaced by Havard Nordtveit
70' Substitution for Borussia Dortmund: Shinji Kagawa is replaced by Maximilian Philipp
67' Finally a sight of goal for Borussia Dortmund as Reus' free-kick finds its way to Witsel at the back post but the Belgian can't get a shot on target.
61' Substitution for Borussia Dortmund: Marius Wolf is replaced by Jadon Sancho
61' Substitution for Borussia Dortmund: Mo Dahoud is replaced by Thomas Delaney
Dahoud was on a yellow card and was fortunate to get away with a pull on Schulz moments earlier. Plus, Delaney's introduction should help stem the flow of Hoffenheim attacks.
60' Bicakcic heads over the bar from close range.
55' Kramaric has the ball in the net again for Hoffenheim after Joelinton's shot comes back off the post, but he was clearly offside - this time it's clear to everyone! It's also clear that Borussia Dortmund are living extremely dangerously here.
52' NO GOAL! THE VIDEO ASSISTANT HAS DISALLOWED THE GOAL FOR OFFSIDE
The Hoffenheim corner was taken short tobut when the ball was returned to the corner taker, he was marginally offside. Correct decision, but it took far too long and I doubt anyone inside the stadium is aware of what has happened.
50' GOAL! Hoffenheim 2-0 Borussia Dortmund (Bicakcic)
After Bürki saves from Schulz and then from Bittencourt, he can't stop Bicakcic's header from a corner ... but the Bosnian's joy is cut short ...
47' Hoffenheim have begun the second half as the ended the first - on top!
+++ The second half is underway! +++
+++ HALF-TIME: Hoffenheim 1-0 Borussia Dortmund +++
Borussia Dortmund trail at the break in Hoffenheim thanks to a Joelinton strike just before the break. Despite BVB starting well, the hosts finished the half stronger and fully deserve their lead. While the visitors have failed to create a single dangerous opportunity, Hoffenheim have impressed with slick passing down both flanks, Zuber and Schulz combining well on the left and debutant Joshua Brenet working hard up and down the right.
Joelinton, back in Hoffenheim after a loan spell at Rapid Vienna, has looked a constant threat up front and took his goal well - although questions will be asked of Abdou Diallo who headed the ball straight down into the Brazilian's path.
44' GOAL! Hoffenheim 1-0 Borussia Dortmund (Joelinton)
After another penetrating run from Zuber, down the middle this time, Diallo fails to clear and the ball falls to Joelinton on the edge of the box. The Brazilian slides the ball past Bürki, who is helpless this time. It has been coming!
42' Zuber and Schulz combine down the left hand side for Hoffenheim. The latter crosses and Joelinton heads wide at the near post. The hosts are finishing the half much stronger, with clinical moves down both flanks.
37' Another dangerous move from the hosts! Joelinton gets to the by-line and cuts the ball back across the face of goal where it evades everyone. That only needed a touch and Hoffenheim would have been ahead. Dortmund living dangerously.
35' Posch clears Piszczek's cross, which was poor anyway. Dortmund are still yet to create a real chance as we approach half-time, and the pace in their earlier attacks has disappeared.
29' Another half chance for Hoffenheim as Zuber drags an effort wide from the edge of the box.
27' Brenet crosses from the right wing for Hoffenheim but the ball reaches the back post without another blue shiert meeting it. Moments later, the 24-year-old is released again down the right. He cuts inside past Schmelzer but his shot, and Kramaric's follow-up, are both blocked.
The Dutchman, signed from PSV Eindhoven, has been heavily involved up and down the right flank for Hoffenheim so far.
25' Dortmund regain the initiative but their approach is very narrow and there's still no way through.
21' Mo Dahoud receives a yellow card for a bad tackle on Steven Zuber, and Hoffenheim have a free-kick midway inside the Dortmund half - but it comes to nothing and Hoffenheim play the ball all the way back to Baumann.
18' Huge chance for Hoffenheim! Schulz gets in behind Piszczek down the Hoffenheim left and crosses to Bittencourt who has the freedom of the Dortmund penalty area but Roman Bürki makes himself big and saves. Another vital intervention from the Swiss stopper.
17' Kagawa attempts to link up with Wolf with a clever little flick but the attack breaks down on the edge of the box as Dortmund continue to probe.
12' Borussia Dortmund have taken control inside the opening ten minutes here. Hoffenheim are sitting deep and fighting off probing BVB attacks.
7' Now Borussia Dortmund appeal for a penalty after Pulisic goes down under a challenge from Schulz - and they have a point. The German clearly treads on the American's foot inside the box but Pulisic's sprawling fall is theatric and has probably worked against him.
5' Bittencourt's cross is easily claimed by Bürki - who impressed again in Bruges in the week and is cementing his status as BVB's number one.
1' An early Hoffenheim claim for a penalty after Joelinton goes down under a challenge from Piszczek but the referee waves the appeals away.
Borussia Dortmund, all in yellow, get us underway.
In the stands
Hoffenheim owner Dietmar Hopp announced during the week that he is pressing charges against over 30 Dortmund supporters who directed diffamatory or insulting chants and banners against him when these two teams last met on the final day of last season.
Hopp (78) has regularly been the target of insults from some sets of fans after financing Hoffenheim's rise from the village leagues to the Bundesliga. Both coach Julian Nagelsmann and sporting director Alexander Rosen have expressed their hope pre-match that such chants are not repeated today, but some elements of Dortmund's support have vowed not to change their opinions.
Fans across the country are also protesting against the DFB's Euro 2024 bid.
Hoffenheim team news:
Julian Nagelsmann and his team made their Champions League debuts in the week and had a significantly longer journey than BVB, travelling to Ukraine where they drew 2-2 with Shakhtar Donetsk. Perhaps fearing tired legs, Nagelsmann therefore gives 24-year-old Joshua Brenet his debut on the right hand side in place of Pavel Kaderabek.
Elsewhere, Ermin Bicakcic replaces Havard Nordtveit at the back while Steven Zuber starts ahead of Adam Szalai up front.
Borussia Dortmund team news:
Coach Lucien Favre makes three changes from the team which won 1-0 in Bruges in the week. Mo Dahoud and Shinji Kagawa start in midfield alongside Axel Witsel and in place of Julian Weigl and Mario Götze. The latter is not even in the squad and appears not to have a future under Favre.
Christian Pulisic came off the bench to score the winner in Flanders and he starts today in Sinsheim in place of Jadon Sancho who drops to the bench.
With Paco Alcacer injured, Marco Reus leads the line up front. The back four remains unchanged.
--- Guten Tag! Welcome to DW's live coverage of the Bundesliga matchday 4 clash between TSG 1899 Hoffenheim and Borussia Dortmund ---
Germany's four Champions League representatives all meet on Matchday 4. Later, champions Bayern Munich travel to Schalke, but first Hoffenheim welcome Borussia Dortmund.