Skip to main content

Scheduled Updates

Scheduled Updates let you keep a work's content fresh by re-running the AI generation pipeline on a recurring basis. You can choose from seven cadences ranging from hourly to monthly, and the platform handles retries, failure tracking, and billing automatically.

When to use this

Enable scheduled updates on works where the underlying data changes frequently — for example, a work of trending open-source projects that should reflect new entries every week.

Prerequisites

  • The work must have completed at least one generation (initial setup must be done first).
  • At least one AI provider plugin must be active.
  • Scheduled updates must be enabled globally (SCHEDULED_UPDATES_ENABLED environment variable, defaults to true).

How It Works

  1. Schedule creation — You set a cadence (hourly, daily, weekly, monthly) via the API or the Web Dashboard. The platform calculates the next run time.
  2. Automatic execution — When nextRunAt arrives, the platform triggers a generation run using the work's existing config.
  3. Success — On completion, nextRunAt advances to the next cadence interval and the failure counter resets.
  4. Failure handling — On error, the run is retried after 15 minutes. If failures exceed the maxFailureBeforePause threshold (default 3), the schedule is automatically paused and you receive a notification.
  5. Stuck run recovery — Runs stuck in a "generating" state for over 1 hour are automatically marked as failed.

Configuration

Cadences

CadenceInterval
hourlyEvery hour
every_3_hoursEvery 3 hours
every_8_hoursEvery 8 hours
every_12_hoursEvery 12 hours
dailyEvery 24 hours
weeklyEvery 7 days
monthlyEvery 30 days

Available cadences may depend on your subscription plan. Cadences not included in your plan can still be used with pay-per-use billing.

Billing Modes

ModeDescription
subscriptionCounts against your plan's included scheduled works
usagePay-per-use — bypasses plan limits, any cadence available

Settings

FieldTypeDefaultDescription
cadencestringhourly, every_3_hours, every_8_hours, every_12_hours, daily, weekly, or monthly (required on creation)
billingModestringsubscriptionsubscription or usage
maxFailureBeforePausenumber3Consecutive failures before auto-pause (1–10)
alwaysCreatePullRequestbooleanfalseForce a PR for every scheduled run
providerOverridesobjectnullOverride AI, search, screenshot, content extractor, or pipeline plugins for this schedule

Provider Overrides

You can override which plugins the scheduled run uses, independent of the work's default settings:

FieldDescription
aiAI provider plugin ID
searchSearch provider plugin ID
screenshotScreenshot provider plugin ID
contentExtractorContent extractor plugin ID
pipelinePipeline plugin ID

Each override must reference an installed and enabled plugin. Set providerOverrides to null to clear all overrides.

API

All endpoints require JWT authentication.

Get Schedule

MethodEndpointDescription
GET/api/works/:id/scheduleGet the current schedule and status
curl http://localhost:3100/api/works/<work-id>/schedule \
-H "Authorization: Bearer <token>"

Response:

{
"status": "success",
"workId": "<uuid>",
"schedule": {
"status": "active",
"cadence": "weekly",
"billingMode": "subscription",
"nextRunAt": "2026-02-26T10:00:00.000Z",
"lastRunAt": "2026-02-19T10:00:00.000Z",
"lastRunStatus": "generated",
"failureCount": 0,
"maxFailureBeforePause": 3,
"alwaysCreatePullRequest": false,
"allowedCadences": [
{ "cadence": "weekly", "allowed": true },
{ "cadence": "daily", "allowed": true },
{ "cadence": "hourly", "allowed": false, "payPerUse": true, "reason": "Upgrade to Pro for this cadence" }
],
"subscriptionsEnabled": true,
"providerOverrides": null
}
}

Create or Update Schedule

MethodEndpointDescription
PUT/api/works/:id/scheduleCreate or update a schedule
curl -X PUT http://localhost:3100/api/works/<work-id>/schedule \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"enable": true,
"cadence": "weekly",
"billingMode": "subscription",
"maxFailureBeforePause": 5
}'

Request body — all fields optional:

FieldTypeDescription
enablebooleantrue to activate, false to pause
cadencestringhourly, every_3_hours, every_8_hours, every_12_hours, daily, weekly, or monthly
billingModestringsubscription or usage
maxFailureBeforePausenumber1–10
alwaysCreatePullRequestbooleanForce PR on every run
providerOverridesobject or nullPlugin overrides (set to null to clear)

Errors:

StatusReason
400Cadence not provided and no existing schedule
400Cadence not available on plan and billing mode is subscription
400maxFailureBeforePause outside 1–10
400Provider override references an uninstalled or disabled plugin
400Activating would exceed plan's work limit
400Work has not completed initial generation

Cancel Schedule

MethodEndpointDescription
DELETE/api/works/:id/scheduleCancel the schedule
curl -X DELETE http://localhost:3100/api/works/<work-id>/schedule \
-H "Authorization: Bearer <token>"

Canceling resets the schedule to its default state (cadence cleared, billing mode reset to subscription, provider overrides cleared).

Run Immediately

MethodEndpointDescription
POST/api/works/:id/schedule/runTrigger a scheduled run now
curl -X POST http://localhost:3100/api/works/<work-id>/schedule/run \
-H "Authorization: Bearer <token>"

Returns 202 Accepted. The schedule must be in active status — returns 400 otherwise.

Schedule Statuses

StatusDescription
disabledDefault state — schedule exists but was never activated
activeRunning on the configured cadence
pausedTemporarily stopped (manually or due to exceeding failure threshold)
canceledSchedule was deleted and reset
  • Works API — Full endpoint reference including schedule endpoints
  • AI & Generation — The generation pipeline that runs on each scheduled update
  • Collections — Items generated by scheduled updates can be assigned to collections