We do our best to verify if phone numbers are valid and also try to save you money by refusing to call numbers we know are impossible. However, we've discovered that it's better for us to trust that our users know more about the phone numbers they are trying to call than we do.
By default, Twilio does not "listen" to your calls. This means that Twilio's system is only able to know if audio is being transferred, or not, and is generally not going to take actions based on the contents of that audio. In short, Twilio considers a call to be completed if audio data is returned, even if that audio data is an out-of-service message.
Twilio does have an experimental feature called Answering Machine Detection which does "listen" to the first few seconds of a call and can roughly determine if an outbound call made with Twilio's API has reached a human, or if it has reached an answering machine. This feature allows your application to hang up calls answered by machines or voicemail without being charged. However, Answering Machine Detection has not been been designed to detect system messages.
If you have multiple cases of calls made to invalid numbers, we recommend creating a database of these invalid numbers so that your app does not call them in the future.
See also: Will I be charged for calls to disconnected numbers