I'm trying to find icons for all ERC20 tokens, does any API provide that information ?.
Possibly a bit off-topic...
What are you considering a token? Etherscan says there are 19765 ERC-20-compliant tokens at present. I imagine you're not bothered about most of them.
To weed out tokens you're unlikely to care about, you could qualify tokens based on their inclusion on exchanges. As a way to aggregate data across exchanges, you could use data from somewhere like CoinMarketCap. Their API doesn't do what you're after. (And neither does Etherscan's. It also appears that Etherscan's list view only lists the top 50 tokens, with no logical way to list further.)
There's a script in a previous answer, here, that puts the current number of Ethereum-based tokens known about by CoinMarketCap at 349. It doesn't distinguish between ERC-20 and non-ERC-20 tokens, though.
Looking at the page source for their token list, they seem to use an image sprite containing all of the symbols (to help load pages more quickly).
Any script you use to pull them out of the image would need the offsets contained in the associated CSS.
Failing that, someone else may just know of a decent API :-)
I found it. Now i can add and query contract image from here https://github.com/trustwallet/assets