async def get(self, key, *, dc=None, watch=None, consistency=None):
        """Returns the specified key

        Parameters:
            key (str): Key to fetch
            watch (Blocking): Do a blocking query
            consistency (Consistency): Force consistency
        Returns:
            ObjectMeta: where value is the queried kv value

        Object will look like::

            {
                "CreateIndex": 100,
                "ModifyIndex": 200,
                "LockIndex": 200,
                "Key": "zip",
                "Flags": 0,
                "Value": b"my data",
                "Session": "adf4238a-882b-9ddc-4a9d-5b6758e4159e"
            }

        **CreateIndex** is the internal index value that represents when
        the entry was created.

        **ModifyIndex** is the last index that modified this key.
        This index corresponds to the X-Consul-Index header value that is
        returned in responses, and it can be used to establish blocking
        queries. You can even perform blocking queries against entire
        subtrees of the KV store.

        **LockIndex** is the number of times this key has successfully been
        acquired in a lock. If the lock is held, the Session key provides
        the session that owns the lock.

        **Key** is simply the full path of the entry.

        **Flags** is an opaque unsigned integer that can be attached to each
        entry. Clients can choose to use this however makes sense for their
        application.

        **Value** is a :class:`~aioconsul.typing.Payload` object,
        it depends on **Flags**.
        """
        response = await self._read(key,
                                    dc=dc,
                                    watch=watch,
                                    consistency=consistency)
        result = response.body[0]
        result["Value"] = decode_value(result["Value"], result["Flags"])
        return consul(result, meta=extract_meta(response.headers))