Backstory: I have five .io domains, three that I registered with Gandi, and two with Namecheap. When the expiration period for the Gandi ones was coming up, I got an email saying "the domains expire on xx/xx/xxxx, renew by then if you want them to stay active. If you don't renew, you can renew then any time up to 90 days after the expiration date".
As it happens, I let the three with Gandi expire, and then logged into their dashboard, renewed them about 60 days after the expiration date, end of story.
Compare: I accidentally let the two I had registered with Namecheap expire. "OK" I figured, "not a big deal, they probably have some kind of grace period as well." No. I got an email saying "these domains expired and you cannot renew them through your Namecheap account. You can contact support and they might be able to help you renew them." So, I contact support and they write back and say "we'll try, but it's going to cost $XXX.XX (somewhere around $250, if memory serves) to renew".
OK, to be fair, I did let the domains expire, so I guess I deserve what I get. But the experience renewing an expired domain with Gandi was so much better than what it was with Namecheap, that I've basically written Namecheap off as a registrar to use in the future.