Create a deploy hook
create_deploy_hook
Creates a deploy hook, a secret URL that publishes the site whenever something calls it with a plain GET.
The hook is created turned on, and a call to it needs no header and no body. A site holds at most 10 hooks and the call is refused once that is reached.
The URL is not returned. Read it with get_deploy_hook_url, which needs the separate credentials:reveal scope, or copy it from the hook's row in the Deploy hooks tab.
Only one build runs per site at a time, so a call made while a build is running is answered as already building and starts nothing. Each hook accepts at most 10 calls a minute. See Deploy hooks.
Request
Call it with a POST to https://api.modulify.ai/v1/create_deploy_hook, 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/create_deploy_hook \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"projectId":"PROJECT_ID","name":"NAME"}'Over MCP, the same method is the create_deploy_hook tool.
Inputs
| Input | Type | Required | Description |
|---|---|---|---|
projectId |
string | Yes | The site id. |
name |
string | Yes | A label that says what will call the hook, for example GitHub Actions. It cannot be empty, and it is cut to 64 characters. |
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.