The Prime Minister has been accused of "trying to take the British people for fools" for claiming the UK has managed to wrangle a 50% reduction on the £1.7bn EU surcharge.
Chancellor George Osborne said Britain would now pay the European Union just £850m of the original demand.
Mr Cameron described it as a victory for Britain and praised the Chancellor for securing the deal.
But shadow chancellor Ed Balls claimed the deal had not saved the UK "a single penny" and accused the pair of "trying to take the British people for fools".
"By counting the rebate Britain was due anyway, they are desperately trying to claim that the backdated bill for £1.7bn has somehow been halved," he said.
"But nobody will fall for this smoke and mirrors."
The demand was made by Brussels after a recalculation of Britain's gross national income in relation to other EU states.
Mr Osborne said the deal, struck after meeting finance ministers in Brussels, was "far beyond what anyone expected us to achieve".
He said it meant the bill would be paid in two interest-free instalments after next year's election.
"Instead of footing the bill we have halved the bill, we have delayed the bill, we will pay no interest on the bill and if there are any mistakes in the bill we will get our money back," he said.
But political opponents, including UKIP, claimed the reduction had been achieved only by bringing forward a rebate to which the UK would have been entitled anyway.
UKIP leader Nigel Farage wrote on Twitter: "Osborne trying to spin his way out of disaster. UK still paying full £1.7 billion, his credibility is about to nose dive."
Sky's Europe Correspondent Robert Nisbet said it appeared the EU would still get the full £1.7bn as a result of what he said some would call "clever accounting".
"Next year there will be two instalments that will equal £850m that will be paid to Brussels by the UK and it will get its rebate in full. So far, so good," explained Nisbet.
"But what will happen in 2016 is that an extra rebate based on increased VAT receipts will be used to settle the rest of the bill.
"That allows the EU to claim it’s getting its money, the UK to claim it’s negotiated a great deal for Britain and for opposition parties to cry foul."
A Number 10 source insisted there was "no guarantee the rebate would have applied to this" before the deal was struck, and added: "Our view is that this is a very good deal."
However, Conservative MEP Daniel Hannan suggested the devil was in the detail, saying: "The EU sticks us with a bill. Ministers double it, apply the rebate, return to the original figure and claim victory. We're meant to cheer?
"Britain is worse off in absolute terms, but a straw man has been knocked down. A prelude to how the pro-EU side will fight the referendum."
Mr Osborne said EU rules would now be changed forever "so this never happens again", claiming he had got his counterparts to agree to change the system for calculating adjustments to member states' contributions.
The PM had earlier warned there would be a "major problem" if Brussels insisted on Britain paying the bill in full.
Mr Cameron went on the offensive after a meeting with other European leaders in Finland, saying Britain would not pay "anything like" the full amount ahead of a looming 1 December deadline.