Modulify

List sites

list_sites

Lists the sites in a workspace, newest first, with the name, description, web addresses and last publish date of each.

POST /v1/list_sitesScopesites:readRead only

This is the main way to find the projectId that the other site tools need, which each row carries as _id. Sites inside folders are listed too.

Each row carries the public subdomain in DefaultSubdomain, which get_site takes as its slug, and the custom domains in Domains, each with its www companion and whether each hostname is connected. DomainsPaused is true while the custom domains are paused because the workspace no longer has a paid plan.

Archived sites are left out unless you pass archived as true, which lists only the archived ones, the same as the Archive page. Every row carries Archived.

One call returns at most 8 sites, whatever the size of the workspace, and the response reports the total, in count over the HTTP API and in its first line over MCP. To see the rest, call again with offset 8, then 16, and keep going until you have collected that total. See Search and filters.

Request

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

It only reads and changes nothing, so retrying it is safe.

curl -X POST https://api.modulify.ai/v1/list_sites \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"workspaceId":"WORKSPACE_ID"}'

Over MCP, the same method is the list_sites tool.

Inputs

Input Type Required Description
workspaceId string Yes The workspace whose sites you want.
offset integer No How many sites to skip. Pages are 8 long, so walk them with 0, then 8, then 16. Defaults to 0.
term string No Keeps only sites whose name, description, subdomain or any custom domain contains this text, ignoring case, or whose creator or last editor matches it. A site id finds that site directly.
sort string No The order to list them in: latest-updated-projects, oldest-updated-projects, latest-created-projects, oldest-created-projects, name-asc or name-desc. Defaults to newest created first. most-viewed-projects and most-cloned-projects are accepted but not implemented, so they quietly give newest created first as well.
archived boolean No True lists only archived sites, the same as the Archive page. Leave it out to list the sites the dashboard shows, which skips archived ones.

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.