---
title: "Apply Report Default"
description: "Writes a package's monthlyReportsDefault onto every existing customer currently on that package, once."
---

`POST /api/organizations/:id/package-configs/:packageType/apply-report-default`

[Upsert Package Config](/api/organization/upsert-package-config)'s `monthlyReportsDefault` is a
**template**: it only seeds `monthlyReportsEnabled` for customers created from then on. Saving
the package config never rewrites customers who already exist on it, on purpose, a configuration
save must not silently mutate customer rows. This endpoint is the explicit, one-off action for
the other case: propagate the package's current `monthlyReportsDefault` onto every customer that
already holds that package, right now.

This is a single bulk `UPDATE`, not a loop with per-customer error isolation like
[Bulk Actions](/api/customers/bulk-actions): it writes one boolean column with no cascade and no
side effects, so per-row isolation buys nothing here. Either the whole set is written, or the
request fails before anything is written.

## Path parameter: `:id`

`:id` is the organization's **numeric** `id`, the same integer `id` field returned by
[Get Organization Details](/api/organization/get-organization-details). This is narrower than
the sibling package-config routes, which also resolve `:organizationPublicId` (a UUID). This
endpoint does not: it parses the path segment with `Number(...)` directly and rejects anything
that is not a positive integer with `400 invalidRequestBody`.

## Example (cURL)

```bash
BASE_URL="https://uptimeify.io"
TOKEN="<your-api-token>"

curl -X POST "$BASE_URL/api/organizations/1/package-configs/pro/apply-report-default" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"
```

No request body.

## Response

```json
{ "updated": 42 }
```

`updated` is the number of customer rows written. A customer "holds" the package if its
`packageId` matches this package config's id, or, for customers that were never assigned an id,
if its `packageType` string matches. Customers that only happen to share the same `packageType`
string without holding this exact config are not included.

## Common errors

- `400 invalidRequestBody` `:id` is not a positive integer, or `:packageType` is missing
- `401 unauthorized` you are not logged in
- `403 forbidden` you are not an admin of this organization and not a global admin
- `403 customerScopedTokenForbidden` when called with a customer-scoped API token; this is an organization-wide action and requires an organization-scoped token or a session
- `404 notFound` no package config with this `packageType` exists for this organization

Authorization note:

- Write access is required (organization admin of the target organization, or global admin).
- A customer-scoped API token is refused outright. This endpoint writes across every customer
  holding the package, so there is no customer dimension to narrow it down to; a token bound to
  a single customer must not reach the rest of the organization.

