---
title: "Create a Scheduled Report Run"
method: POST
path: "/reports/scheduled/runs"
tags: ["Reports"]
---

# Create a Scheduled Report Run

`POST /reports/scheduled/runs`

## Request

- Base URL: `https://console.jumpcloud.com/api/v2`
- URL: `https://console.jumpcloud.com/api/v2/reports/scheduled/runs`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/jumpcloud/apis/jumpcloud-api-2/docs/reports/scheduled/runs/post.ts> (a function with typed inputs; its response is checked against the schema)

Create a new Scheduled Report Run.

#### Sample Request
```
curl -X POST https://console.jumpcloud.com/api/v2/reports/scheduled/runs \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: {API_KEY}' \
  -d '{"scheduled_report_run": {...}}'
```

## Request body

- JumpcloudInsightsCreateScheduledReportRunRequest
  - `scheduledReportRun` JumpcloudInsightsScheduledReportRun, required
    - `artifactUrl` string, nullable: Presigned download URL when the run succeeded (same link as email/slack notifications). Falls back to a relative API path only when no stored URL exists.
    - `completedAt` string, date-time
    - `displayName` string, nullable: Scheduled report display name (primary label in history UI)
    - `fileSize` string, nullable: File size in bytes
    - `id` string
    - `rowCount` string, nullable: Emitted as string in JSON (e.g. "123"); omit when not set to avoid validation errors.
    - `scheduleFrequency` string, nullable: Stored and returned as lowercase: daily, weekly, monthly, quarterly
    - `scheduleTime` string, nullable: Time of day for the schedule (e.g., "09:00 AM", "14:30")
    - `scheduledReportId` string
    - `startedAt` string, date-time
    - `status` string: Status: IN_PROGRESS, SUCCESS, FAILED
    - `timeZone` string, nullable: Timezone for the schedule (e.g., "GMT-2", "America/New_York")
    - `timeoutAt` string, date-time, nullable: Omit when not set to avoid null (validator expects string or absent).

## Response `200`

- JumpcloudInsightsScheduledReportRun
  - `artifactUrl` string, nullable: Presigned download URL when the run succeeded (same link as email/slack notifications). Falls back to a relative API path only when no stored URL exists.
  - `completedAt` string, date-time
  - `displayName` string, nullable: Scheduled report display name (primary label in history UI)
  - `fileSize` string, nullable: File size in bytes
  - `id` string
  - `rowCount` string, nullable: Emitted as string in JSON (e.g. "123"); omit when not set to avoid validation errors.
  - `scheduleFrequency` string, nullable: Stored and returned as lowercase: daily, weekly, monthly, quarterly
  - `scheduleTime` string, nullable: Time of day for the schedule (e.g., "09:00 AM", "14:30")
  - `scheduledReportId` string
  - `startedAt` string, date-time
  - `status` string: Status: IN_PROGRESS, SUCCESS, FAILED
  - `timeZone` string, nullable: Timezone for the schedule (e.g., "GMT-2", "America/New_York")
  - `timeoutAt` string, date-time, nullable: Omit when not set to avoid null (validator expects string or absent).

## Other responses

- `201`: Success creating a Scheduled Report Run.
- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `500`: Internal Server Error

---

[API](https://skmtc.dev/jumpcloud/apis/jumpcloud-api-2.md) - [All operations](https://skmtc.dev/jumpcloud/apis/jumpcloud-api-2/llms.txt) - [OpenAPI document](https://skmtc.dev/jumpcloud/apis/jumpcloud-api-2/revisions/3f09fe63caaa?raw)
