# export_site_crons

Source: https://modulify.ai/docs/api/scheduled-jobs/export-site-crons

Exports every scheduled job on a site as plain data.

- Title: Export the scheduled jobs
- Scope: `config:read`
- Access: Read only
- Endpoint: `POST /v1/export_site_crons`

Each job comes with its name, whether it is enabled, its schedule, also written out in plain words, and its step's URL, method, headers and body. This is the tool for copying a set of jobs between sites.

Literal header values are left out of the export altogether, while headers pointing at an environment variable come back as the variable name, so a replay on another site needs every literal value typed in again. A [deploy hook](https://modulify.ai/docs/automations/deploy-hooks) token inside a URL comes back as `mdh_<redacted>`, because that URL can publish the site, and reading it needs `get_deploy_hook_url`. See [Scheduled jobs](https://modulify.ai/docs/automations/scheduled-jobs#export-and-clear).

## Request

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

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

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

Over MCP, the same method is the [export_site_crons tool](https://modulify.ai/docs/mcp/scheduled-jobs/export-site-crons).

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