# get_deploy_hook_url

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

Returns the full URL of one deploy hook in plain text.

- Title: Reveal a deploy hook URL
- Scope: `credentials:reveal`
- Access: Read only
- Endpoint: `POST /v1/get_deploy_hook_url`

The URL is the credential: anyone holding it can start a publish of the site with a plain `GET`, with no other check. It lands wherever the response goes, an AI client's transcript included, which is why it sits behind `credentials:reveal`, a scope that is unticked by default.

The tool tells the client never to print it, put it in a page, a committed file or a public CI configuration, or send it anywhere you did not ask for. It also tells the client to reach for it only when you are wiring the hook into the system that will call it, and to store it there as a secret. See [Deploy hooks](https://modulify.ai/docs/automations/deploy-hooks#the-url-on-the-row).

## Request

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

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

```bash
curl -X POST https://api.modulify.ai/v1/get_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 [get_deploy_hook_url tool](https://modulify.ai/docs/mcp/deploy-hooks/get-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.