post/api/v2/reports/schedules

Create a report schedule.

Creates a project-scoped local report schedule and records a schedule-created delivery event. Live email delivery remains gated until a scheduled run is processed with provider credentials. WatchLLM extension.

Requires bearer API key

Parameters

X-Project-Id

header

Required for organization-wide API keys on project-scoped endpoints. Project-scoped keys infer the project automatically.

Schema: string

Request Body

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string"
    },
    "cadence": {
      "type": "string",
      "enum": [
        "weekly",
        "monthly"
      ]
    },
    "recipients": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "kind": {
      "type": "string",
      "enum": [
        "pdf",
        "executive_summary",
        "competitor_snapshot"
      ]
    },
    "dateRange": {
      "type": "string",
      "enum": [
        "last_7_days",
        "last_14_days",
        "last_30_days",
        "last_90_days"
      ]
    }
  },
  "required": [
    "name",
    "cadence",
    "recipients",
    "kind",
    "dateRange"
  ]
}

Responses

201

Created report schedule.

application/json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "cadence": {
      "type": "string"
    },
    "recipients": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "reportConfig": {
      "type": "object",
      "additionalProperties": true
    },
    "enabled": {
      "type": "boolean"
    },
    "createdById": {
      "type": "string",
      "nullable": true
    },
    "createdAt": {
      "type": "string",
      "format": "date-time"
    },
    "nextRunAt": {
      "type": "string",
      "format": "date-time",
      "nullable": true
    },
    "lastRunAt": {
      "type": "string",
      "format": "date-time",
      "nullable": true
    },
    "lastRunStatus": {
      "type": "string",
      "nullable": true
    }
  }
}
400

Invalid report schedule request.

application/json
{
  "type": "object",
  "properties": {
    "error": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  }
}
402

Reporting schedule quota exceeded.

application/json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "error": {
      "type": "string",
      "enum": [
        "BILLING_QUOTA_EXCEEDED"
      ]
    },
    "kind": {
      "type": "string",
      "enum": [
        "paywall"
      ]
    },
    "reason": {
      "type": "string",
      "enum": [
        "quota_exceeded"
      ]
    },
    "metric": {
      "type": "string",
      "enum": [
        "reportingSchedules"
      ]
    },
    "label": {
      "type": "string"
    },
    "current": {
      "type": "integer"
    },
    "limit": {
      "type": "integer"
    },
    "increment": {
      "type": "integer"
    },
    "planName": {
      "type": "string"
    }
  },
  "required": [
    "error",
    "kind",
    "reason",
    "metric",
    "label",
    "current",
    "limit",
    "increment",
    "planName"
  ]
}

Try it

Send this request to the local WatchLLM REST handler. Use a key from `/workspace/api`; organization keys can include `X-Project-Id` only when the endpoint documents that header.