If you know the name, you can use the name as a value for the "numbers" argument. However, in the case of the "/ip address" menu, there are no names to begin with, unlike, say, the "/interface" or "/queue simple" menus.
If you don't know the name (or there aren't names, as in here), you need to then use "print", along with a query that would match the desired item(s), and get their names or IDs from the output.
2. If using =interface= parameter is wrong, why API doesn't return "!trap" ? It just gives me "!done"
"interface" is a valid property you can change on a matching item. For example, you can specify that a particular address that was previously assigned to ether1 would now belong to ether2 instead.
It's just that without "numbers", there are zero items matched, and thus a set is "successfully" executed on 0 items. IMHO, yes, there should be an error for a missing required argument (that one being "numbers"), but regardless, "interface" is a valid argument name.
3. And why in other areas (as I mentioned for example on setting SSID) the =.id= parameter is accepted with interface name.
It seems to me the ".id" argument was never intended to be used as a way to target items... Or perhaps it was at one point, but MikroTik have come to realize this is not consistent with how CLI works, and are trying to fix it. CLI uses normal arguments (usually "numbers") to target items, and so that is how the API is modified to be like.