There's got to be more to this than what you've posted. I can't imagine that a child protective service in Canada would be any more likely that one in the US, and would just go into a school and remove a child unless something serious was witnessed or repeated. How did they know he saw you being hit? He either told someone, or someone else saw this. And I have to think there was more than one incident or it was extremely aggravated. And if they are pushing for adoption, there's got to be more involved.
If there are a whole lot of hoops, then there's a reason for it - something you haven't told us. So there's either a whole lot of evidence or multiple reports that they have on file, or something.
So what you do is you jump through those hoops, and you ASK them if there are more you can jump through. You don't say, "So do I get my child back now? How about tomorrow? When when when? He misses me." You say, "I understand that the state has a compelling interest in the safety of every child. I will do whatever it takes." Then you do it, as well or better than they asked for. If you have to get help in doing this, ask for it. Find a counselor or someone from a family center to assist you in navigating the regulations.
If you are involved with anyone who is considered a threat to your child, break away. If you are engaging in any behaviors whatsoever that could even be interpreted or misconstrued as less than ideal, stop. That means hanging out with the wrong people, using any controlled substances or alcohol, partying, not being productive, anything. If you need parenting classes or job training or counseling, get it. If you can't afford it, get a job so you can, or see a pastor or any other free or sliding scale person you can. Establish a network of excellent character references who will, over time, be able to form a strong wall of people of integrity who are in your corner. This doesn't happen overnight - if you try to convince too many people of your worth, it will look like you are being superficial and just doing it for "show". Volunteer for some agency and help those who are in worse shape than you are - show that you are a giving person.
If you want your child as badly as you say, and I believe you when you say you do, then nothing will be too much for you.