The 33-year-old batsman, who was captain for six years, said that it is "time for someone else to take the ODI side forward".
De Villiers ruled himself out of the Proteas' Test side for the recent tour of England, which the hosts won 3-1, because he "needed a bit of time away from the game".
In a statement, he wrote: "A lot has been said and written over the past 12 months, and I feel it is time to make my position absolutely clear.
"Over the past year or so, I have tried to manage many commitments. I have felt mentally and physically tired; my wife and I are bringing up two fantastic kids and playing in all three formats ever since 2004 has taken its toll.
"Together with Cricket South Africa, we have tried to develop a viable schedule which allows me to prolong my career for as long as possible.
"This strategy has prompted some people to say I am picking and choosing when to play for the Proteas, and even to suggest I am somehow putting myself before the team. That is simply not true. That has never been true. Playing for South Africa is, and will always be, the greatest privilege of my life.
"It has been an honour to lead the team for the past six years, but it is now time for someone else to take the ODI side forward. Whoever is chosen as the new ODI captain will have my complete support."
De Villiers, who has more than 8,000 Test runs at an average of 50.46, has not played a match in a Test since January 2016.