---
name: "schedules_create"
area: "schedules"
title: "Repeat a tool call"
price: "$0.50"
method: "POST"
url: "https://api.conecto.chat/v1/tools/schedules_create"
mcp_server: "https://api.conecto.chat/mcp/schedules"
auth: "Authorization: Bearer <conecto_sk_ key>"
docs_url: "https://conecto.chat/tools/schedules/schedules_create"
---

# Repeat a tool call (`schedules_create`)

Runs a tool call on a timetable in the business's time zone, from every 15 minutes to once a month; each run is a normal call at the tool's price.

Run any tool on a timetable, e.g. a weekly report, a daily export or a reminder every Monday at 9:00, in the business's time zone. It runs as this bot, under its daily budget, and each run costs the tool's own price; the reply estimates the most it can cost a month. arguments are checked now; date words in them ({today}, {today+7}, {month}, {last_month}, {year}) are filled in at each run. For one run, use schedules_run_later. Tools that take tokens or read the vault can't be scheduled. A schedule is $0.50 a month, renewed from the balance; the first month is this call. Five failed runs in a row pause it and email the owner.

Price: $0.50 a call. A call that fails costs nothing.

## Use it when

A call should repeat: a weekly export, a daily post, a monthly report.

- For one call at one later time, use [schedules_run_later](https://conecto.chat/tools/schedules/schedules_run_later.md).

## Say this to your agent

> Every Monday at 7, export last week's bookkeeping journal for our accountant.

## Inputs

| Name | Type | Required | Description | Allowed values | Default |
|---|---|---|---|---|---|
| `name` | string | yes | e.g. "Monday invoice reminders". 1 to 80 characters. |  |  |
| `tool` | string | yes | The tool to run, e.g. "invoices_remind". 1 to 80 characters. |  |  |
| `arguments` | object | no | The tool's arguments, as you would send them. |  |  |
| `timetable` | object | yes | When it runs, in time_zone. {"every": "minutes", "interval": 30} (15 at the least, 60 for tools that contact people or sites outside the business); {"every": "hour", "interval": 1, "minute": 0}; {"every": "day", "at": "09:00"}; {"every": "week", "days": ["mon", "thu"], "at": "09:00"}; {"every": "month", "day": 1, "at": "09:00"} (day 1 to 28, or "last"). |  |  |
| `timetable.every` | string | yes, when `timetable` is given |  | `"minutes"`, `"hour"`, `"day"`, `"week"`, `"month"` |  |
| `timetable.interval` | integer | no |  |  |  |
| `timetable.minute` | integer | no |  |  |  |
| `timetable.at` | string | no |  |  |  |
| `timetable.days` | array of strings | no | Up to 7 items. |  |  |
| `timetable.day` | integer or string | no |  |  |  |
| `time_zone` | string | no | e.g. "America/Los_Angeles". The business calendar's time zone if left out, else UTC. Up to 64 characters. |  |  |

## Example

Written for Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon.

MCP: call `schedules_create` on the MCP server `https://api.conecto.chat/mcp/schedules` with these arguments:

```json
{
  "name": "Weekly journal for the accountant",
  "tool": "books_export",
  "arguments": {
    "what": "journal",
    "from": "{today-7}",
    "to": "{today-1}"
  },
  "timetable": {
    "every": "week",
    "days": [
      "mon"
    ],
    "at": "07:00"
  },
  "time_zone": "America/Los_Angeles"
}
```

REST:

```bash
curl https://api.conecto.chat/v1/tools/schedules_create \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Weekly journal for the accountant", "tool": "books_export", "arguments": {"what": "journal", "from": "{today-7}", "to": "{today-1}"}, "timetable": {"every": "week", "days": ["mon"], "at": "07:00"}, "time_zone": "America/Los_Angeles"}'
```

## Response

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "schedules_create",
  "status": "succeeded",
  "replayed": false,
  "cost_usd": "$0.50",
  "balance_usd": "$19.75",
  "result": {
    "schedule": {
      "schedule_id": 4101,
      "name": "Weekly journal for the accountant",
      "tool": "books_export",
      "arguments": {
        "what": "journal",
        "from": "{today-7}",
        "to": "{today-1}"
      },
      "timetable": {
        "every": "week",
        "days": [
          "mon"
        ],
        "at": "07:00"
      },
      "runs_when": "every Monday at 07:00",
      "time_zone": "America/Los_Angeles",
      "paused": false,
      "done": false,
      "bot": "Pip",
      "next_run_at": "2026-10-19T07:00:00-07:00",
      "last_run_at": null,
      "last_status": null,
      "last_call_id": null,
      "last_error": null,
      "runs": 0
    },
    "upcoming": [
      "2026-10-19T07:00:00-07:00",
      "2026-10-26T07:00:00-07:00"
    ],
    "cost": {
      "runs_a_month": 4,
      "each_run": {
        "model": "per_call",
        "usd": "$0.001",
        "micros": 1000
      },
      "most_a_month_usd": "$0.504"
    },
    "rent": {
      "rental_id": 4101,
      "kind": "schedule",
      "label": "Schedule: Weekly journal for the accountant",
      "status": "active",
      "monthly_usd": "$0.50",
      "renews_at": "2026-11-14T08:00:00+00:00",
      "grace_until": null
    }
  }
}
```

`result`: schedule: its schedule_id, name, tool, arguments, timetable in words, time zone, bot and next run; upcoming: the next three runs; cost: runs a month, each run's price and the most a month can cost; rent: the monthly rental this call started.

## Errors

| Code | Status | When | Fix |
|---|---|---|---|
| `not_found` | 404 | No tool has that name. | Use a tool name from GET /v1/tools. |
| `not_schedulable` | 400 | The tool cannot run on its own: it handles secrets, schedules things itself, buys from a quote that expires, or starts a monthly rental. | Call that tool yourself when it is needed. |
| `invalid_input` | 400 | The arguments do not fit the tool (the message names the one), or time_zone is not a time zone name. | Send the arguments the tool's page lists; time zones like "America/Los_Angeles". |
| `invalid_input` | 400 | The timetable is not one the message lists: minutes under 15 (60 for a tool that contacts people or sites outside the business), a time not like 09:00, or a month day past 28. | Use one of the timetables on this page. |
| `limit_reached` | 409 | The business has 100 schedules already. | Delete one with schedules_delete. |

The refusals every tool can give (401 key, 402 balance, 429 limits) are on the errors page: https://conecto.chat/docs/errors.md

## Related

- [schedules_run_later](https://conecto.chat/tools/schedules/schedules_run_later.md): Runs one tool call once at a set time, up to a year ahead, with no monthly rent. $0.01 a call.
- [schedules_list](https://conecto.chat/tools/schedules/schedules_list.md): Every schedule and waiting one-off run: what it runs and when, as which bot, and how its last run went. Free up to 1,000,000 reads a month.
- [schedules_get](https://conecto.chat/tools/schedules/schedules_get.md): One schedule in full: its next three runs, its last ten runs with their call_ids and costs, and its rent. Free up to 1,000,000 reads a month.
- [schedules_update](https://conecto.chat/tools/schedules/schedules_update.md): Changes a schedule's name, arguments, timetable or time zone, or pauses and resumes it. $0.001 a call.
- [schedules_delete](https://conecto.chat/tools/schedules/schedules_delete.md): Stops a schedule for good, or cancels a one-off run before it runs; past runs stay in the call log. Free.
