Answers one question: what is the state of a domain in this account? It only reads. It does not buy, connect, assign, renew or change DNS, and it says nothing about domains outside the account.
Every call runs in the user's own context: as the signed-in user, never as an app, and never with an API
key or an integration token. The account the user is working in is the account for the call. A domain that
is not in the account comes back as 404, which is an answer, not a failure (see below). Every domain in
the account, whether registered through Wix or registered elsewhere and connected to Wix, is read from
the domain views.
http://, https://, www. and any
path. Keep the extension the user typed. A subdomain (shop.example.com) is a valid input here.Never name an endpoint, a field or an enum value to the user.
Make this one read-only call, with whatever lets you run a short script over several Wix API requests at
once. Put the domain in domain and the account's ID in accountId: it is the Account ID in the Wix
context you already read, and the expiry lookup needs it as targetAccountId. Keep the helpers inside the one
function.
It asks for the domain view first. Only when there is none does it look at the unassigned list, then
at the assigned list, and when neither holds the domain the answer is "not found". Each request is
wrapped so that a failure is an answer ("no view", "no match") and never an error to chase. The call
already retries the domain view once, because its first attempt can fail on a missing call scope and the
second goes through. Do not retry anything yourself, do not try another tool, and do not search the docs.
The wrapping is deliberate. Domain views and the assigned list are not reliably reachable from every
session (a domain-view 404 and an assigned 400 "subject is missing" were seen), so a failed
request is read as "not there" and the next source is tried.
source: "domainView" is the domain view below. source: "lists" is the answer from the account's
domain lists, read further down. expirationDate and autoRenew come from the unassigned entry
(expiresAt, isAutoRenewed). When the entry lacks them, or the domain is on a site, the Premium asset
supplies them; only Wix-registered domains have one. For any other domain they are absent. The returned
object is already trimmed to the exact match: the lists carry far more fields, including registrant
details, and none of them is read or mentioned.
id, domain and domainType can be missing. Report only what is present.The lookup above falls back to the account's domain lists: assigned (the sites the user's domains are
on) and unassigned (the domains on no site). filter.searchTerm matches substrings, so the call keeps
only an exact domainName match. Read where in the result:
| Result | Say |
|---|---|
where primary | "{domain} is in your account, and it's the primary domain of {siteName}." |
where redirect | "{domain} is in your account, and it redirects to {siteName}." |
where unassigned | "{domain} is in your account, but it isn't on a site yet", plus the rows below. |
wixRegistration false | Start with "{domain} is registered elsewhere and connected to Wix". |
wixRegistration true | "It's registered through Wix." |
expirationDate | The date, written out ("1 March 2027"). |
autoRenew true / false | Auto-renew is on / off. Absent: say nothing about renewal. |
managementType POINTING / DNS | "Its settings stay at its provider" / "Wix manages its settings". Any other value or none: say nothing about the method. |
where is null, including when a request failed | "I can't find {domain} in your Wix account." Do not mention the failed call. A miss is not proof that the user doesn't own it: these lists see the Wix account, not the registry. Never say someone else owns it, and say nothing about who holds it. If the user then asks whether it can be registered, use Check Domain Availability; to buy or connect it, Domain Search, Purchase and Connect. |
This call is the last source: do not search the docs or call any other API, even when the user asked for an expiry, a renewal or add-ons. Add-ons, SSL and the DNS check are not reported. An expiry or renewal that the result does not carry is never stated or guessed: say Wix can't report it for this domain.
A domain the user bought elsewhere and connected to Wix is also a domain view, with domainType
CONNECTED. Say "It's registered elsewhere and connected to Wix", then report assignment and
dnsPropagation as in the table below.
A connected domain has no expiry, renewal or add-ons at Wix: its registrar owns those. Never state or guess
them, even when the user asks. The same goes for SSL: never state it for a connected domain, even when
sslCertificate is present.
domainType is REGISTERED for a domain bought through Wix, and the registered block carries the
details. A CONNECTED domain has no registered block (see above); the other rows apply to both.
| Field | Say |
|---|---|
assignment absent | "It isn't on any site yet." |
assignment.assignmentType PRIMARY | "It's the primary domain of the site assignedToId." |
assignment.assignmentType REDIRECT | "It redirects to {redirectInfo.primaryDomain}." |
registered.expirationDate | The date, written out ("1 March 2027"). |
registered.lifecycleStatus INACTIVE | "The registration is no longer active" (expired or transferred away). graceEndDate and redemptionEndDate are the last dates it can still be recovered, when the user asks. |
registered.subscription present | Auto-renew on or off from autoRenew. |
registered.subscription absent | "Renewal billing isn't set up yet." Do not say auto-renew is off. |
registered.icannStatus PENDING | "The contact email still has to be verified" — an unverified domain is deactivated after a deadline. |
registered.icannStatus DEACTIVATED | "It was deactivated because the contact email wasn't verified." |
registered.addons.<name>.enabled | On or off. supported: true with enabled: false means available but turned off; say nothing about whether it was bought. |
registered.premium true | The registry charges more than the standard rate to renew. Give no price. |
dnsPropagation.status | SUCCEEDED "the domain's settings are correct"; IN_PROGRESS "changes are still spreading, check again later"; FAILED "the domain isn't pointing at Wix correctly". Absent: no information, say so. Say "DNS" only if the user did. |
sslCertificate.active | Whether the site on this domain has a valid certificate. |
assignedToId is a site ID. Use the site's name if it is already in the conversation, otherwise give the ID.Query returns the account's domains, registered and connected, up to 100 per call, but can only
filter by id. Use it to list everything and filter the rows yourself. Search filters and sorts on the
fields listed below, and also matches free text on the domain name. Filter domainType on CONNECTED for
the domains registered elsewhere.
Both answer { "domainViews": [ ... ], "pagingMetadata": { "cursors": { "next": "..." }, "hasNext": true } }.
Both return at most 100 per page (Search defaults to 50); a larger limit is a 400. While
hasNext is true, repeat the call with "cursorPaging": { "limit": 100, "cursor": "<cursors.next>" }
(inside query for Query, inside cursorSearch for Search) before answering a question about "all" or
"how many".
Filterable and sortable on Search: domain, displayName, rootDomain, domainType,
assignment.assignedToId, assignment.assignmentType, dnsPropagation.status,
sslCertificate.active, registered.expirationDate, registered.registeredDate,
registered.lifecycleStatus, registered.subscription.autoRenew, registered.addons.privacy.enabled,
registered.addons.dnssec.enabled. Anything else, such as "not on any site", is filtered in code.
Free text on the name: "search": { "expression": "example", "fields": ["domain"] } inside
cursorSearch.
Answer a list in one table, one row per domain, with only the columns the question needs.
No WHOIS, registrant, registrar or owner lookup, no valuation, and nothing about a domain that is not in the account. Anything beyond reading a domain's state is another skill's task. Say what you found, then hand over:
Last updated: 29 October 2026