# rotate_deploy_hook_url

Source: https://modulify.ai/docs/api/deploy-hooks/rotate-deploy-hook-url

Replaces the URL of one deploy hook with a freshly generated one and returns it.

- Title: Rotate a deploy hook URL
- Scope: `credentials:reveal`
- Access: Destructive
- Endpoint: `POST /v1/rotate_deploy_hook_url`

The old URL stops working immediately and answers not found, so every system calling it starts no build until the new URL is put in its place. Nothing updates those systems for you. The hook keeps its name, its on or off state and its call log.

The tool tells the client to rotate only when a URL has leaked or you explicitly ask, never as routine maintenance, and to hand you the new URL straight away. The warnings on `get_deploy_hook_url` apply to the returned URL too. See [Deploy hooks](https://modulify.ai/docs/automations/deploy-hooks#rotate-the-url).

## Request

Call it with a `POST` to `https://api.modulify.ai/v1/rotate_deploy_hook_url`, sending the inputs below as a JSON object. The token needs the `credentials:reveal` scope.

> **Warning**
>
> This method is marked destructive: it deletes or overwrites data. Check the inputs before you call it, and send an [Idempotency-Key](https://modulify.ai/docs/api/idempotency) header whenever you might retry it.

```bash
curl -X POST https://api.modulify.ai/v1/rotate_deploy_hook_url \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"PROJECT_ID","hookId":"HOOK_ID"}'
```

Over MCP, the same method is the [rotate_deploy_hook_url tool](https://modulify.ai/docs/mcp/deploy-hooks/rotate-deploy-hook-url).

## Inputs

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | Yes | The site id. |
| `hookId` | string | Yes | The hook id from `list_deploy_hooks`. |

## Response

Every call answers with the [JSON envelope](https://modulify.ai/docs/api/requests-and-responses#the-response) 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](https://modulify.ai/docs/api/requests-and-responses#headers-on-every-method-call) 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](https://modulify.ai/docs/api/errors) explains every status code a call can answer with.