I think it is good to standardize on the terminology explained at https://url.spec.whatwg.org/#host-miscellaneous
In short:
A host’s public suffix is the portion of a host which is included on the Public Suffix List.
So from your examples list, today (2021), both com
, co.uk
AND uk
are public suffixes.
Historically this was also called "effective TLD" or "eTLD" because, as other answers already wrote about, technically a "TLD" is only the last label, the right most one, after the last dot. So uk
is a TLD but technically co.uk
is not, but is considered to be an "effective TLD" because it works "as if" it is a TLD, regarding registration rules. But this is still ambiguous, hence "public suffix" is far better than "effective TLD".
Also, while we are here, ban absolutely "extension", even if that misuse is widely shared. Domains do not have extensions. A dot, in a domain name, has a very specific and completely different meaning than a dot in a filename, and especially for the concept of extension that was introduced by some OS.
A host’s registrable domain is a domain formed by the most specific public suffix, along with the domain label immediately preceding it,
So stackexchange.com
and google.co.uk
are registrable domains (and are in fact registered).
Again, historically, once we had "eTLD", we could say that those "registrable domain" are "eTLD + 1", +1 meaning +1 label on the left. That terminology was often used by browsers, specifically to define security policies around which cookies can be shared between sites.
The link gives a pseudo algorithm to apply in both cases to define these two items. It has also a table with examples that I reproduce here:
Host input |Public suffix |Registrable domain
-------------------------------------------+--------------+-----------------------
com com null
example.com com example.com
www.example.com com example.com
sub.www.example.com com example.com
EXAMPLE.COM com example.com
github.io github.io null
whatwg.github.io github.io whatwg.github.io
إختبار xn--kgbechtv null
example.إختبار xn--kgbechtv example.xn--kgbechtv
sub.example.إختبار xn--kgbechtv example.xn--kgbechtv
[2001:0db8:85a3:0000:0000:8a2e:0370:7334] null null
Remember however that the publix suffix list is not something baked up in any protocol like DNS and available in a decentralized manner. It is a manual list maintained by volunteers. Which means you can't access it without downloading it (finding zone cuts in the DNS can give you a similar information but not the same: gouv.fr
is a separate public suffix from fr
but there is no delegation points between the two), and you have no guarantee it is either exhaustive or up to date.
Also for everything DNS related the current good document to keep around is RFC 8499 "DNS Terminology".
It is however more tailored for the DNS operations side, that is how names resolved, instead of the DNS registration side, that is how names are registered and where. It does standardizes what a "domain name" is and what a "TLD" is.
It could be useful to consult to straighten out your use of "apex" in:
name.surname.name is a third-level domain and an apex domain.
That name, or any other name in fact, is NOT an "apex" domain. "apex" is not an adjective you can put at some domains and not others. All domains have an apex, it is a specific part of the tree, relative to each node.
As said in above RFC:
Apex: The point in the tree at an owner of an SOA and corresponding
authoritative NS RRset. This is also called the "zone apex".
[RFC4033] defines it as "the name at the child's side of a zone
cut". The "apex" can usefully be thought of as a data-theoretic
description of a tree structure, and "origin" is the name of the
same concept when it is implemented in zone files. The
distinction is not always maintained in use, however, and one can
find uses that conflict subtly with this definition. [RFC1034]
uses the term "top node of the zone" as a synonym of "apex", but
that term is not widely used. These days, the first sense of
"origin" (above) and "apex" are often used interchangeably.
.uk
TLD..name
are unique in this respect (see duskwuff's comment below). In fact, when.name
domains were first launched, you could only register third level domains. However, the registrars I've tried recently only seem to allow SLD registrations. Reference: en.wikipedia.org/wiki/.name