---
title: visits.createRecurring | Doing Work API
description: Book a repeating visit (daily, weekly or monthly, every n) for a job. All visits are booked now, up to 104. Times repeat in the shop's local time zone. Ove
url: https://doingwork.work/docs/reference/visits-createrecurring/
---

# visits.createRecurring

Book a repeating visit (daily, weekly or monthly, every n) for a job. All visits are booked now, up to 104. Times repeat in the shop's local time zone. Overlaps and unavailable workers come back as warnings, never blocks.

|  |  |
|---|---|
| Who | Agents can call this |
| REST | `POST /v1/visits/recurring` |
| MCP tool | `visits_createRecurring` |
| Writes | yes, send an Idempotency-Key |
| Area | [Scheduling and visits](https://doingwork.work/docs/reference/#scheduling-and-visits) |

## When to use it

Read schedule.settings first: it has the shop's time zone, working hours, arrival window and buffer. Use schedule.findTime to get open times that fit the shop's hours, each worker's hours and time off, and visits already booked with the buffer around them, then book with visits.create.

## What to tell the owner

Say what you did in plain words and what happens next.

## Input

| Field | Type | Required |
|---|---|---|
| `job_id` | string (uuid) | yes |
| `starts_at` | string (date-time) | yes |
| `ends_at` | string (date-time) | yes |
| `freq` | string (one of daily, weekly, monthly) | yes |
| `every` | integer | no |
| `occurrences` | integer | no |
| `until` | string (date-time) | no |
| `title` | string | no |
| `notes` | string | no |
| `assignee_ids` | array | no |
| `arrival_window_minutes` | integer | no |

## Example

```http
POST https://doingwork.work/v1/visits/recurring
content-type: application/json
Idempotency-Key: 3f1c...

{
  "job_id": "00000000-0000-4000-8000-000000000000",
  "starts_at": "...",
  "ends_at": "...",
  "freq": "daily"
}
```

## Output

JSON. The response shape isn't published yet; read the fields you need and ignore the rest. Errors are `{code, message, status}`.

## Errors

| Code | Status | What to do |
|---|---|---|
| `invalid_input`, `invalid_token`, `rate_limited` |  | Can happen on any call. See [errors](https://doingwork.work/docs/errors/). |
