Update Report
Updates an organization report configuration. All fields are optional; at least one must be provided.
PATCH /api/organization/reports/:id
Partially updates a report configuration. :id is the report's id (a UUID). The organization is derived from your authenticated session or API token, and the report must belong to it. Requires organization admin (API tokens act as organization admins). Read-only users cannot update reports.
Only send the fields you want to change. Cross-field validation (schedule and scope) is re-run against the merged result — a PATCH that only changes frequency to weekly without also sending weekday fails if the existing report has no weekday set.
Request Body
Same fields as Create Report, all optional — but at least one field must be present:
| Field | Type | Notes |
|---|---|---|
name | string | 1–200 chars. |
enabled | boolean | |
frequency | "daily" | "weekly" | "monthly" | |
weekday | integer 0–6 | null | Required (effectively) when the resulting frequency is weekly. |
dayOfMonth | integer 1–28 | null | Required (effectively) when the resulting frequency is monthly. |
sendHour | integer 0–23 | |
timezone | string | IANA tz. |
scopeMode | "all" | "customers" | "tags" | |
scopeCustomerIds | integer[] | Must belong to your organization. |
scopeTagIds | integer[] | Must belong to your organization. |
inclusionMode | "all" | "problems" | "threshold" | |
problemSignals | object | { incident, downtimeMinutes, sslDaysLt, responseBreach }. |
thresholdUptimeLt | number | null | |
thresholdResponseGt | integer (ms) | null | |
sendWhenEmpty | boolean | |
sections | object | Six booleans toggling report sections. |
monitorTypes | string[] | One or more of website, dns, dnsbl, domain, icmp, smtp, ssh, tcp, ftp, imap. Cannot be sent as an empty array. |
sectionsByType | object | Per-type section toggles: { "<monitorType>": { "<sectionKey>": boolean } }. Legal sectionKeys depend on the type — see Section keys by monitor type. Sending a section key that isn't legal for its type is rejected with 400 Bad Request. |
groupByCustomer | boolean | Sub-group each monitor type's table by customer. |
format | "email" | "email_pdf" | |
recipientEmails | string[] | Max 50. |
recipientUserIds | string[] | Max 50. |
Example (cURL)
BASE_URL="https://uptimeify.io"
TOKEN="<your-api-token>"
REPORT_ID="3f1c9c1e-8d2a-4c7e-9b1a-2d5f6a7b8c90"
curl -X PATCH "$BASE_URL/api/organization/reports/$REPORT_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"enabled": false,
"recipientEmails": ["ops@agency.io", "cs@agency.io"]
}'Response
{
"id": "3f1c9c1e-8d2a-4c7e-9b1a-2d5f6a7b8c90",
"name": "Weekly Ops Digest",
"enabled": false,
"frequency": "weekly",
"weekday": 1,
"dayOfMonth": null,
"sendHour": 2,
"timezone": "Europe/Berlin",
"scopeMode": "all",
"inclusionMode": "problems",
"monitorTypes": ["website", "dns", "dnsbl", "domain", "icmp", "smtp", "ssh", "tcp", "ftp", "imap"],
"sectionsByType": {},
"groupByCustomer": false,
"format": "email_pdf",
"recipientEmails": ["ops@agency.io", "cs@agency.io"],
"recipientUserIds": []
}Common errors
401 Unauthorized— not authenticated.403 Forbidden(forbidden) — not an organization admin.404 Not Found(notFound) — no report with this id exists for your organization.400(invalidReportSchedule) — the resultingweeklyconfig has noweekday, or the resultingmonthlyconfig has nodayOfMonth.400(invalidReportScope) — scope ids are not owned by your organization, or the resultingthresholdmode has no threshold.400 Bad Request— asectionsByTypeentry contains asectionKeythat isn't legal for its monitor type, ormonitorTypesis sent as an empty array.