schedule.events
Visits between two dates as calendar events (uid, title, start, end, location, status confirmed, tentative or cancelled), ready to copy into an outside calendar; save the uid to update the same event later. Dates are in the shop's time zone, to is inclusive, at most 62 days. Filter by worker or mine.
| |
|---|
| Who | Agents can call this |
| REST | GET /v1/schedule/events |
| MCP tool | schedule_events |
| Writes | no |
| Area | 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
Tell them what you found in plain words. Don't read back raw fields.
| Field | Type | Required |
|---|
shop_id | string (uuid) | yes |
from | string (date) | yes |
to | string (date) | yes |
person_id | string (uuid) | no |
mine | boolean | no |
include_cancelled | boolean | no |
updated_since | string (date-time) | no |
Example
GET https://doingwork.work/v1/schedule/events?shop_id=00000000-0000-4000-8000-000000000000&from=...&to=...
Output
| Field | Type | Always there |
|---|
time_zone | string | yes |
events | array | yes |
events[].uid | string | yes |
events[].visit_id | string (uuid) | yes |
events[].job_id | string (uuid) | yes |
events[].title | string | yes |
events[].start | string (date-time) | yes |
events[].end | string (date-time) | yes |
events[].time_zone | string | yes |
events[].location | ['string', 'null'] | yes |
events[].description | ['string', 'null'] | yes |
events[].status | string | yes |
events[].priority | string | yes |
events[].assignee_ids | array | yes |
events[].updated_at | string (date-time) | yes |
truncated | boolean | yes |
{
"time_zone": "...",
"events": [
{
"uid": "...",
"visit_id": "00000000-0000-4000-8000-000000000000",
"job_id": "00000000-0000-4000-8000-000000000000",
"title": "...",
"start": "...",
"end": "...",
"time_zone": "...",
"location": "...",
"description": "40 gallon gas heater, installed",
"status": "...",
"priority": "...",
"assignee_ids": [
"00000000-0000-4000-8000-000000000000"
],
"updated_at": "..."
}
],
"truncated": true
}
Errors
| Code | Status | What to do |
|---|
invalid_input, invalid_token, rate_limited | | Can happen on any call. See errors. |