Modulify

Start proving ownership of a domain

start_domain_verification

Begins the ownership check for a domain before it is attached to a site, returning one TXT record to add.

POST /v1/start_domain_verificationScopeconfig:writeMakes changes

It requires a paid plan, the Manage domains permission, room on the site for another custom domain, up to 10, and a domain that does not already belong to this site or another one. A domain another site is only waiting to verify does not block it.

Pass a bare hostname. A value with http:// or https://, a path, or fewer than 4 or more than 253 characters is refused with the same messages as the Custom Domain field. A leading www. is dropped, so www.example.com verifies example.com.

A site has one pending verification at a time, so starting a new one replaces any earlier one. The answer carries the record to add as verificationTxtName, which is _modulify-verification. followed by the domain, and verificationTxtValue. Once it is in place, verify_domain is the step that actually adds the domain, and cancel_domain_verification abandons the attempt. See A domain waiting on verification.

Request

Call it with a POST to https://api.modulify.ai/v1/start_domain_verification, sending the inputs below as a JSON object. The token needs the config:write scope.

It makes changes, so send an Idempotency-Key header whenever you might retry it. A retry with the same key gets the first answer back instead of running again.

curl -X POST https://api.modulify.ai/v1/start_domain_verification \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"PROJECT_ID","domain":"DOMAIN"}'

Over MCP, the same method is the start_domain_verification tool.

Inputs

Input Type Required Description
projectId string Yes The site id.
domain string Yes The bare hostname to prove ownership of, for example example.com.

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.