Why does some fields names in Elasticsearch's API output have `_` in them

If we take a look into the output of some of the APIs especially of search and run below command for a particular index let's say twitter

curl <host-ip>:9200/twitter/_search/pretty

below is response that we get

{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : null,
    "hits" : [ ]
  }
}

my question here is why do we have an _ in shards field name and make it _shards. If that is the way people decided to go why don't we have have _ in took, timed_out and hits.