reports.save
Save a report to run again later: a name, one report operation (reports.revenue, reports.owed, reports.quoteWinRate, reports.today, reports.week, costs.jobs), its settings, and an optional moving date range (today, this_week, last_week, this_month, last_month, last_7_days, last_30_days, last_90_days, this_quarter, last_quarter, this_year, last_year) worked out on the shop's calendar each run. Send report_id to change a saved one. Owner or office only.
| Who | Agents can call this |
| REST | POST /v1/reports/saved |
| MCP tool | reports_save |
| Writes | yes, send an Idempotency-Key |
| Area | Costs, expenses and reports |
When to use it
Save a report to run again later: a name, one report operation (reports.revenue, reports.owed, reports.quoteWinRate, reports.today, reports.week, costs.jobs), its settings, and an optional moving date range (today, this_week, last_week, this_month, last_month, last_7_days, last_30_days, last_90_days, this_quarter, last_quarter, this_year, last_year) worked out on the shop's calendar each run. Send report_id to change a saved one.
What to tell the owner
Say what you did in plain words and what happens next.
Input
| Field | Type | Required |
|---|---|---|
shop_id | string (uuid) | yes |
report_id | string (uuid) | no |
name | string | yes |
op_id | string (one of reports.revenue, reports.owed, reports.quoteWinRate, reports.today, reports.week, costs.jobs) | yes |
params | object | no |
date_range | ['string', 'null', ' ', '(', 'o', 'n', 'e', ' ', 'o', 'f', ' ', 't', 'o', 'd', 'a', 'y', ',', ' ', 't', 'h', 'i', 's', '_', 'w', 'e', 'e', 'k', ',', ' ', 'l', 'a', 's', 't', '_', 'w', 'e', 'e', 'k', ',', ' ', 't', 'h', 'i', 's', '_', 'm', 'o', 'n', 't', 'h', ',', ' ', 'l', 'a', 's', 't', '_', 'm', 'o', 'n', 't', 'h', ',', ' ', 'l', 'a', 's', 't', '_', '7', '_', 'd', 'a', 'y', 's', ',', ' ', 'l', 'a', 's', 't', '_', '3', '0', '_', 'd', 'a', 'y', 's', ',', ' ', 'l', 'a', 's', 't', '_', '9', '0', '_', 'd', 'a', 'y', 's', ',', ' ', 't', 'h', 'i', 's', '_', 'q', 'u', 'a', 'r', 't', 'e', 'r', ',', ' ', 'l', 'a', 's', 't', '_', 'q', 'u', 'a', 'r', 't', 'e', 'r', ',', ' ', 't', 'h', 'i', 's', '_', 'y', 'e', 'a', 'r', ',', ' ', 'l', 'a', 's', 't', '_', 'y', 'e', 'a', 'r', ',', ' ', 'N', 'o', 'n', 'e', ')'] | no |
Example
POST https://doingwork.work/v1/reports/saved
content-type: application/json
Idempotency-Key: 3f1c...
{
"shop_id": "00000000-0000-4000-8000-000000000000",
"name": "Ruiz Plumbing",
"op_id": "reports.revenue"
}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. |