paperclipai/paperclip · error

Job scheduling is not enabled

Error message

Job scheduling is not enabled

What it means

Returned as HTTP 501 by GET /api/plugins/:pluginId/jobs when the server was constructed without job scheduling dependencies (jobDeps is undefined). All job routes — list, runs, trigger — uniformly refuse with this error when the scheduler/job store is not wired into the API.

Source

Thrown at server/src/routes/plugins.ts:2544

  // ===========================================================================
  // Job scheduling routes
  // ===========================================================================

  /**
   * GET /api/plugins/:pluginId/jobs
   *
   * List all scheduled jobs for a plugin.
   *
   * Query params:
   * - `status` (optional): Filter by job status (`active`, `paused`, `failed`)
   *
   * Response: PluginJobRecord[]
   * Errors: 404 if plugin not found
   */
  router.get("/plugins/:pluginId/jobs", async (req, res) => {
    assertBoardOrgAccess(req);
    if (!jobDeps) {
      res.status(501).json({ error: "Job scheduling is not enabled" });
      return;
    }

    const { pluginId } = req.params;
    const plugin = await resolvePlugin(registry, pluginId);
    if (!plugin) {
      res.status(404).json({ error: "Plugin not found" });
      return;
    }

    const rawStatus = req.query.status as string | undefined;
    const validStatuses = ["active", "paused", "failed"];
    if (rawStatus !== undefined && !validStatuses.includes(rawStatus)) {
      res.status(400).json({
        error: `Invalid status '${rawStatus}'. Must be one of: ${validStatuses.join(", ")}`,
      });
      return;
    }

View on GitHub (pinned to a7e689b3c3)

Solutions

  1. Enable job scheduling (jobDeps wiring) in the server configuration for that deployment
  2. Confirm the deployment version supports scheduled plugin jobs
  3. Until enabled, hide the jobs UI affordance so users do not hit the 501
Defensive patterns

Strategy: fallback

Validate before calling

// One-time capability probe, cached
let jobsEnabled: boolean | null = null;
async function checkJobsEnabled() {
  if (jobsEnabled === null) {
    const r = await fetch(`/api/plugins/${pluginId}/jobs`);
    jobsEnabled = r.status !== 501;
  }
  return jobsEnabled;
}

Try / catch

try { return await listPluginJobs(pluginId); } catch (e) { if (e.status === 501) return { jobs: [], schedulingDisabled: true }; throw e; }

Prevention

When it happens

Trigger: Calling GET /api/plugins/:pluginId/jobs (optionally ?status=...) on a deployment where the job scheduling subsystem was not enabled at boot.

Common situations: Minimal or older self-hosted builds without the scheduler; feature disabled by configuration; UI shows a jobs tab but the backing server lacks the job subsystem.

Related errors


AI-assisted analysis of paperclipai/paperclip@a7e689b3c3 (2026-08-18). Data as JSON: /api/errors/c98e0ed0bde18d2d. Report an issue: GitHub.