visits.answerChange
Answer a customer's request to move or cancel a visit. decline leaves the visit as it is. accept on a cancel request cancels the visit (visits.cancel); accept on a reschedule moves it to starts_at (and ends_at, or the same length as before) through visits.update. Pass apply false to mark it accepted without changing the visit (you already moved it). The customer sees the answer and your note on their hub. If a shop approval rule holds the visit change, the request stays open and the approval id comes back. Owner or office only.
| Who | Agents can call this |
| REST | POST /v1/visits/answerChange |
| MCP tool | visits_answerChange |
| Writes | yes, send an Idempotency-Key |
| Area | Scheduling and visits |
When to use it
Give a customer one page with everything they have with the shop: hub.createLink makes a link for one customer (shown once; send it yourself, Doing Work sends nothing). On it the customer sees their quotes, jobs, invoices with what is still owed, upcoming visits and requests, opens a quote, pays an invoice, asks to move or cancel a visit, and asks for new work (it arrives as a portal request).
What to tell the owner
Say what you did in plain words and what happens next.
Input
| Field | Type | Required |
|---|---|---|
change_request_id | string (uuid) | yes |
decision | string (one of accept, decline) | yes |
note | string | no |
starts_at | string (date-time) | no |
ends_at | string (date-time) | no |
apply | boolean | no |
Example
POST https://doingwork.work/v1/visits/answerChange
content-type: application/json
Idempotency-Key: 3f1c...
{
"change_request_id": "00000000-0000-4000-8000-000000000000",
"decision": "accept"
}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. |