Check custom domains
get_domain_status
Reads the custom domains of a site, with whether each one is connected and the exact DNS records each hostname needs.
A site can have up to 10 custom domains, and every connected one serves the same site. Each entry in domains carries its _id, which is the domainId the other domain tools take, the hostname in Domain and its www companion in WwwDomain if it has one, and whether each is connected in IsConnected and WwwIsConnected.
Every DNS record listed for a hostname, in RequiredDnsRecords and WwwRequiredDnsRecords, has a valid flag saying whether it is already in place and a checked flag saying whether the lookup could be completed. IsCloudflare says whether the domain's DNS is on Cloudflare. While one of its hostnames is not connected, DomainConnect says whether its DNS provider supports one-click setup, and it is null once every hostname of that domain is connected or when no supported provider is found.
Pass domainId to check one domain, or leave it out to check them all. A site with no custom domains answers with an empty list, and a domain still waiting on start_domain_verification is not listed until verify_domain adds it. The primary domain, the one links to the live site use, is the first entry whose domain is connected, or failing that the first connected www companion, and a domain whose root was removed counts with its www hostname in the root's place.
It runs live DNS lookups against public resolvers, so it is slow and its answer lags a change just made at a registrar. It is also the call that re-checks DNS and marks a domain connected once its records are in place, so call it once after a change rather than polling it.
When the workspace has no paid plan any more, the custom domains are paused. The answer then carries paused true and lists the domains as they are, without any DNS lookup, and none of them serves the site until the workspace is on a paid plan again, when they come back on their own. See Connect a custom domain.
Request
Call it with a POST to https://api.modulify.ai/v1/get_domain_status, sending the inputs below as a JSON object. The token needs the config:read scope.
It only reads and changes nothing, so retrying it is safe.
curl -X POST https://api.modulify.ai/v1/get_domain_status \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"projectId":"PROJECT_ID","workspaceId":"WORKSPACE_ID"}'Over MCP, the same method is the get_domain_status tool.
Inputs
| Input | Type | Required | Description |
|---|---|---|---|
projectId |
string | Yes | The site id. |
workspaceId |
string | Yes | The workspace the site belongs to. |
domainId |
string | No | The _id of one custom domain to check, as get_domain_status or add_custom_domain returned it. Leave it out to check every domain of the site. |
Response
Every call answers with the JSON envelope of success, message, data, code and version. data holds the result described above, and on a method that returns a total, count carries it. The response headers carry the call's X-Request-Id and what is left of your per-minute budget in X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Errors explains every status code a call can answer with.