# get_analytics_key

Source: https://modulify.ai/docs/api/analytics/get-analytics-key

Returns the analytics API key of a site in plain text, minting one if the site never had one.

- Title: Reveal the analytics API key
- Scope: `credentials:reveal`
- Access: Makes changes
- Endpoint: `POST /v1/get_analytics_key`

This is the server-only credential the site's own server code uses to read its visitor analytics. The site receives it as the locked `MODULIFY_ANALYTICS_KEY` variable, next to `MODULIFY_ANALYTICS_URL`, and the response carries it as `analyticsKey` with the API address as `apiUrl`. The key only reads analytics: it cannot change collection, clear data or touch anything else.

It comes back in full, so it lands wherever the response goes, an AI client's transcript included. The tool tells the client never to print it, never to put it in a page, a client component or a committed file, never to send it anywhere you did not ask for, and to reach for it only when you explicitly ask to see or copy your key. That is why it sits behind `credentials:reveal`, which is unticked by default.

Any member of the workspace can read the key, and it makes no analytics lookup. See [API access](https://modulify.ai/docs/grow/analytics#api-access).

## Request

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

It makes changes, so send an [Idempotency-Key](https://modulify.ai/docs/api/idempotency) header whenever you might retry it. A retry with the same key gets the first answer back instead of running again.

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

Over MCP, the same method is the [get_analytics_key tool](https://modulify.ai/docs/mcp/analytics/get-analytics-key).

## Inputs

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | Yes | The site id. |

## 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.