# Update Scheduled Task (notify_email, end_at, tool_list)

> Update Scheduled Task (notify_email, end_at, tool_list) is a free API for AI agents from scheduler.withzero.xyz, Free, status unknown (last checked 2026-09-13, last successful call 2026-07-20).

Partially updates a scheduled cron task by patching its notification email, end date/time, or tool list (additions only); all other fields remain immutable.

## Facts

- Endpoint: PATCH https://scheduler.withzero.xyz/api/v1/tasks/{id}
- Price: Free
- Status: unknown
- Last checked: 2026-09-13
- Last successful call: 2026-07-20
- Success rate: 86% of calls made through Zero
- Activations on Zero: 8
- Provider: scheduler.withzero.xyz
- Website: https://scheduler.withzero.xyz
- Canonical page: https://www.zero.xyz/c/scheduler-withzero-xyz-update-scheduled-task-notify-email-end-at-tool-5c7f1ab3
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_yrmsvloY21PTpUsLsZtah

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability scheduler-withzero-xyz-update-scheduled-task-notify-email-end-at-tool-5c7f1ab3 -d '<json body>'
```

Example prompt: Update my scheduled task (ID: a3f1c2d4-...) on scheduler.withzero.xyz to stop running after December 31, 2025 at midnight UTC, send completion notifications to alerts@mycompany.com, and also add the 'web-search' tool to its tool list.

## When to prefer this

Use this endpoint when you need to update only the notification email, expiry time, or add tools to an existing recurring task without recreating it. It is the correct choice when the task's schedule, source, runtime, or environment must remain unchanged. Prefer this over deleting and re-creating a task when continuity of the payment channel and run history matters.

## Known failure modes

- 404 if the task ID does not exist or the caller lacks ownership proof
- 400 if the provided email format is invalid
- 400 if end_at is not a valid ISO 8601 datetime
- 400 if an attempt is made to remove tools (only additions allowed)
- 400 if additionalProperties are included in the patch body
- 401/403 if the request is not authenticated as the task owner

## How this service works

Update notify_email, end_at, or tool_list (additions only). 📖 Full guide: https://scheduler.withzero.xyz/llms.txt

## Output

Returns a JSON object with the task's UUID, updated tool_list array, updated notify_email string or null, and updated end_at datetime string or null, confirming the patch was applied.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "properties": {
  "end_at": {
   "anyOf": [
    {
     "type": "string",
     "format": "date-time",
     "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    {
     "type": "null"
    }
   ]
  },
  "tool_list": {
   "type": "array",
   "items": {
    "type": "string"
   }
  },
  "notify_email": {
   "anyOf": [
    {
     "type": "string",
     "format": "email",
     "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    {
     "type": "null"
    }
   ]
  },
  "max_runtime_sec": {
   "type": "integer",
   "maximum": 900,
   "description": "Raise the per-run wall-clock cap in seconds (max 900). Raises only — lowering forces clone+recreate. 409 RUN_IN_FLIGHT while a run is claimed/running; retry after it finishes. Raising it raises the per-run ceiling reservation — top up if the balance drops below one ceiling.",
   "exclusiveMinimum": 0
  },
  "max_sibling_spend_micros": {
   "type": "string",
   "pattern": "^[1-9]\\d*$",
   "description": "Raise the per-run sibling-spend ceiling (USDC micros; string, or number up to 2^53-1). Raises only — lowering forces clone+recreate."
  }
 },
 "description": "Only `notify_email`, `end_at`, `tool_list` (additions only), `max_sibling_spend_micros` (raises only), and `max_runtime_sec` (raises only, no run in flight) may be patched. All other fields are immutable.",
 "additionalProperties": false
}
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "id",
  "tool_list",
  "max_sibling_spend_micros",
  "max_runtime_sec",
  "estimated_ceiling_micros",
  "notify_email",
  "end_at"
 ],
 "properties": {
  "id": {
   "type": "string",
   "format": "uuid",
   "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
  },
  "end_at": {
   "anyOf": [
    {
     "type": "string"
    },
    {
     "type": "null"
    }
   ]
  },
  "tool_list": {
   "anyOf": [
    {
     "type": "array",
     "items": {
      "type": "string"
     }
    },
    {
     "type": "null"
    }
   ]
  },
  "notify_email": {
   "anyOf": [
    {
     "type": "string"
    },
    {
     "type": "null"
    }
   ]
  },
  "max_runtime_sec": {
   "type": "integer",
   "maximum": 9007199254740991,
   "minimum": -9007199254740991
  },
  "estimated_ceiling_micros": {
   "type": "string"
  },
  "max_sibling_spend_micros": {
   "anyOf": [
    {
     "type": "string"
    },
    {
     "type": "null"
    }
   ]
  }
 },
 "additionalProperties": false
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/scheduler-withzero-xyz-update-scheduled-task-notify-email-end-at-tool-5c7f1ab3/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from scheduler.withzero.xyz](https://www.zero.xyz/host/scheduler.withzero.xyz/llms.txt)
