Match ends, TSG 1899 Hoffenheim 1, Manchester City 2.
David Silva's dramatic 87th-minute strike got Manchester City off the mark in this season's Champions League with a 2-1 victory away to Hoffenheim.
Silva capitalised on a defensive error by Hoffenheim's Stefan Posch before finishing into the far corner.
City had fallen behind after only 44 seconds when Ishak Belfodil finished through the legs of goalkeeper Ederson.
They equalised six minutes later when Sergio Aguero poked home from Leroy Sane's cut-back but had been frustrated from then on, and looked like only taking a point from their trip to Germany before Silva pounced late on.
Earlier Hoffenheim goalkeeper Oliver Baumann denied Raheem Sterling with his legs at the end of a rapid counter-attack in the first half, and dived high to his left to stop Aguero finding the top corner.
Aguero also put a volley over when unmarked six yards from goal and had a weak header saved in the second half.
City had a strong claim for a second-half penalty turned down when Baumann seemed to bring down Sane in the box but referee Damir Skomina chose not to give a foul - or book the forward for diving.
The win gives City their first points in the Champions League this season after they suffered a surprise defeat by Lyon in their opening game.
More to follow.
Match ends, TSG 1899 Hoffenheim 1, Manchester City 2.
Second Half ends, TSG 1899 Hoffenheim 1, Manchester City 2.
Sergio Agüero (Manchester City) is shown the yellow card.
Foul by Sergio Agüero (Manchester City).
Andrej Kramaric (TSG 1899 Hoffenheim) wins a free kick in the defensive half.
Attempt missed. Leroy Sané (Manchester City) left footed shot from the left side of the box is just a bit too high. Assisted by Riyad Mahrez following a fast break.
Attempt missed. Sergio Agüero (Manchester City) left footed shot from long range on the left is high and wide to the left. Assisted by Bernardo Silva following a fast break.
Foul by Sergio Agüero (Manchester City).
Stefan Posch (TSG 1899 Hoffenheim) wins a free kick in the attacking half.
Attempt blocked. Justin Hoogma (TSG 1899 Hoffenheim) left footed shot from outside the box is blocked. Assisted by Leonardo Bittencourt.
Attempt missed. Leonardo Bittencourt (TSG 1899 Hoffenheim) right footed shot from outside the box is high and wide to the right. Assisted by Andrej Kramaric.
Foul by Sergio Agüero (Manchester City).
Kevin Akpoguma (TSG 1899 Hoffenheim) wins a free kick in the defensive half.
Substitution, TSG 1899 Hoffenheim. Robin Hack replaces Kerem Demirbay.
Goal! TSG 1899 Hoffenheim 1, Manchester City 2. David Silva (Manchester City) left footed shot from the left side of the box to the bottom right corner.
Corner, Manchester City. Conceded by Stefan Posch.
David Silva (Manchester City) wins a free kick in the attacking half.
Foul by Justin Hoogma (TSG 1899 Hoffenheim).
Substitution, TSG 1899 Hoffenheim. Leonardo Bittencourt replaces Florian Grillitsch.
Foul by Sergio Agüero (Manchester City).
Kevin Akpoguma (TSG 1899 Hoffenheim) wins a free kick in the defensive half.
John Stones (Manchester City) wins a free kick in the defensive half.
Foul by Joelinton (TSG 1899 Hoffenheim).
Sergio Agüero (Manchester City) wins a free kick on the left wing.
Foul by Joelinton (TSG 1899 Hoffenheim).
Foul by John Stones (Manchester City).
Joelinton (TSG 1899 Hoffenheim) wins a free kick in the defensive half.
Substitution, Manchester City. Riyad Mahrez replaces Raheem Sterling.
Foul by David Silva (Manchester City).
Joelinton (TSG 1899 Hoffenheim) wins a free kick in the defensive half.
Attempt saved. Sergio Agüero (Manchester City) header from the right side of the six yard box is saved in the top centre of the goal. Assisted by Bernardo Silva.
Substitution, Manchester City. Bernardo Silva replaces Ilkay Gündogan because of an injury.
Delay over. They are ready to continue.
Delay in match Pavel Kaderábek (TSG 1899 Hoffenheim) because of an injury.
Kyle Walker (Manchester City) is shown the yellow card for a bad foul.
Foul by Kyle Walker (Manchester City).
Pavel Kaderábek (TSG 1899 Hoffenheim) wins a free kick in the defensive half.
Substitution, Manchester City. John Stones replaces Nicolás Otamendi.
Corner, TSG 1899 Hoffenheim. Conceded by Aymeric Laporte.
Foul by Vincent Kompany (Manchester City).