---
updatedAt: 2026-09-23T12:31:04.000Z
agentTools:
  projectIndex: https://developers.addepar.com/llms.txt
---

# Report Schedules

# Report Schedules

The Report Schedule API automates recurring report generation and delivery from within Addepar. Use it to create, modify, and delete schedules that produce PDF reports on a defined cadence, save them to Generated PDFs, and optionally publish to Client Portal or notify contacts via email.

## Overview

|                             |                                                                                                                                                                 |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Base Route**              | `/v1/report_schedule`                                                                                                                                           |
| **Endpoints**               | **GET** `/v1/report_schedule` `/v1/report_schedule/:id` **POST** `/v1/report_schedule` **PATCH** `/v1/report_schedule/:id` **DELETE** `/v1/report_schedule/:id` |
| **Produces**                | JSON (JSON:API format)                                                                                                                                          |
| **Pagination**              | [Yes](/docs/pagination-1) (default: 50 per page)                                                                                                                |
| **Application Permissions** | **GET:** Access to reporting. **POST, PATCH, DELETE:** Access to reporting, scheduler, and portfolios.                                                          |
| **OAuth Scopes**            | `REPORTS_WRITE`                                                                                                                                                 |

## Resource attributes

All attributes below are returned in successful GET responses.

| Attribute            | Type    | Required       | Constraints                                                                                    | Description                                             | Example                          |
| -------------------- | ------- | -------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------- | -------------------------------- |
| `report_id`          | integer | Yes (POST)     | Must reference an existing report                                                              | The ID of the report to schedule                        | `37`                             |
| `report_name`        | string  | No (read-only) | Populated by the system from the report                                                        | The display name of the scheduled report                | `"Quarterly Performance Report"` |
| `portfolio_id`       | array   | Yes (POST)     | Array of valid portfolio IDs; at least one required                                            | The portfolio IDs included in the schedule              | `[56659, 23546, 65987]`          |
| `frequency`          | string  | Yes (POST)     | Enum: `DAILY`, `WEEKLY`, `MONTHLY`, `QUARTERLY`, `ANNUALLY`                                    | How often the schedule runs                             | `"QUARTERLY"`                    |
| `start_date`         | string  | Yes (POST)     | Format: `YYYY-MM-DD`; must be today or a future date                                           | When the schedule begins                                | `"2026-10-01"`                   |
| `time`               | string  | Yes (POST)     | Format: `HH:MM` (24-hour, firm timezone)                                                       | The time of day the scheduled run executes              | `"09:00"`                        |
| `report_time_period` | string  | Yes (POST)     | Enum: `PAST_DAY`, `PAST_WEEK`, `PAST_MONTH`, `PAST_QUARTER`, `PAST_YEAR`, `CUSTOM`             | The lookback window for report data                     | `"PAST_QUARTER"`                 |
| `portal_publishing`  | string  | No             | Enum: `PUBLISH`, `DO_NOT_PUBLISH`, `USE_CONTACT_PREFERENCE`; default: `USE_CONTACT_PREFERENCE` | Whether to publish the generated PDF to Client Portal   | `"USE_CONTACT_PREFERENCE"`       |
| `email_notification` | string  | No             | Enum: `NOTIFY`, `DO_NOT_NOTIFY`, `USE_CONTACT_PREFERENCE`; default: `USE_CONTACT_PREFERENCE`   | Whether to email contacts affiliated with the portfolio | `"USE_CONTACT_PREFERENCE"`       |
| `label`              | string  | No             | Max 255 chars                                                                                  | The label tagged to the file in File Vault              | `"Performance"`                  |
| `next_run_date`      | string  | No (read-only) | Format: `YYYY-MM-DD`; populated by the system                                                  | The next date this schedule will execute                | `"2027-01-01"`                   |

## Filter parameters

Use filter parameters with the GET list endpoint to narrow results.

| Parameter       | Type    | Constraints                                                 | Description                                        | Example                          |
| --------------- | ------- | ----------------------------------------------------------- | -------------------------------------------------- | -------------------------------- |
| `report_ids[]`  | integer | Must be a valid report ID                                   | Returns schedules for the specified report IDs     | `?report_ids[]=2&report_ids[]=4` |
| `entity_ids[]`  | integer | Must be a valid entity or group ID                          | Returns schedules created for the specified entity | `?entity_ids[]=218`              |
| `frequencies[]` | string  | Enum: `DAILY`, `WEEKLY`, `MONTHLY`, `QUARTERLY`, `ANNUALLY` | Returns schedules matching the specified frequency | `?frequencies[]=DAILY`           |
| `creator_ids[]` | integer | Must be a valid user ID                                     | Returns schedules created by the specified user    | `?creator_ids[]=5`               |

## List all schedules

Retrieves all report schedules within the authenticated user's firm.

```bash Request
curl --request GET \
  --url 'https://examplefirm.addepar.com/api/v1/report_schedule' \
  --header 'Authorization: Basic {base64_encoded_credentials}' \
  --header 'Addepar-Firm: {firm_id}' \
  --header 'Accept: application/vnd.api+json'
```

```json 200 Response
{
  "data": [
    {
      "id": "142",
      "type": "report_schedules",
      "attributes": {
        "report_id": 37,
        "report_name": "Quarterly Performance Report",
        "portfolio_id": [56659, 23546],
        "frequency": "QUARTERLY",
        "start_date": "2026-10-01",
        "time": "09:00",
        "report_time_period": "PAST_QUARTER",
        "portal_publishing": "USE_CONTACT_PREFERENCE",
        "email_notification": "USE_CONTACT_PREFERENCE",
        "label": "Performance",
        "next_run_date": "2027-01-01"
      },
      "links": {
        "self": "/v1/report_schedule/142"
      }
    }
  ],
  "included": [],
  "links": {
    "next": "/v1/report_schedule?page[number]=1&page[size]=50"
  }
}
```

```json 403 Error
{
  "errors": [
    {
      "status": "403",
      "title": "Forbidden",
      "detail": "User does not have access to reporting"
    }
  ]
}
```

**Response codes:**

* `200 OK` -- Schedules retrieved successfully
* `403 Forbidden` -- Missing reporting permission; confirm the API user has "Access to reporting" enabled

### Filtering example

```bash Request
curl --request GET \
  --url 'https://examplefirm.addepar.com/api/v1/report_schedule?report_ids[]=37&frequencies[]=QUARTERLY' \
  --header 'Authorization: Basic {base64_encoded_credentials}' \
  --header 'Addepar-Firm: {firm_id}' \
  --header 'Accept: application/vnd.api+json'
```

## Get a schedule by ID

Retrieves a single report schedule by its numeric ID.

```bash Request
curl --request GET \
  --url 'https://examplefirm.addepar.com/api/v1/report_schedule/142' \
  --header 'Authorization: Basic {base64_encoded_credentials}' \
  --header 'Addepar-Firm: {firm_id}' \
  --header 'Accept: application/vnd.api+json'
```

```json 200 Response
{
  "data": {
    "id": "142",
    "type": "report_schedules",
    "attributes": {
      "report_id": 37,
      "report_name": "Quarterly Performance Report",
      "portfolio_id": [56659, 23546, 65987],
      "frequency": "QUARTERLY",
      "start_date": "2026-10-01",
      "time": "09:00",
      "report_time_period": "PAST_QUARTER",
      "portal_publishing": "USE_CONTACT_PREFERENCE",
      "email_notification": "USE_CONTACT_PREFERENCE",
      "label": "Performance",
      "next_run_date": "2027-01-01"
    },
    "links": {
      "self": "/v1/report_schedule/142"
    }
  },
  "included": []
}
```

```json 404 Error
{
  "errors": [
    {
      "status": "404",
      "title": "Not Found",
      "detail": "Schedule 999 does not exist or is not accessible to this user"
    }
  ]
}
```

**Response codes:**

* `200 OK` -- Schedule retrieved successfully
* `403 Forbidden` -- Missing reporting permission; confirm the API user has "Access to reporting" enabled
* `404 Not Found` -- Schedule does not exist or is outside the authenticated user's firm; verify the schedule ID

## Create a schedule

Creates a new report schedule. The schedule begins running at the specified `start_date` and `time`.

```bash Request
curl --request POST \
  --url 'https://examplefirm.addepar.com/api/v1/report_schedule' \
  --header 'Authorization: Basic {base64_encoded_credentials}' \
  --header 'Addepar-Firm: {firm_id}' \
  --header 'Content-Type: application/vnd.api+json' \
  --header 'Accept: application/vnd.api+json' \
  --data '{
    "data": {
      "type": "report_schedules",
      "attributes": {
        "report_id": 37,
        "portfolio_id": [56659, 23546],
        "frequency": "QUARTERLY",
        "start_date": "2026-10-01",
        "time": "09:00",
        "report_time_period": "PAST_QUARTER",
        "portal_publishing": "USE_CONTACT_PREFERENCE",
        "email_notification": "USE_CONTACT_PREFERENCE",
        "label": "Performance"
      }
    }
  }'
```

```json 201 Response
{
  "data": {
    "id": "144",
    "type": "report_schedules",
    "attributes": {
      "report_id": 37,
      "report_name": "Quarterly Performance Report",
      "portfolio_id": [56659, 23546],
      "frequency": "QUARTERLY",
      "start_date": "2026-10-01",
      "time": "09:00",
      "report_time_period": "PAST_QUARTER",
      "portal_publishing": "USE_CONTACT_PREFERENCE",
      "email_notification": "USE_CONTACT_PREFERENCE",
      "label": "Performance",
      "next_run_date": "2027-01-01"
    },
    "links": {
      "self": "/v1/report_schedule/144"
    }
  },
  "included": []
}
```

```json 400 Error
{
  "errors": [
    {
      "status": "400",
      "title": "Bad Request",
      "detail": "Missing required attribute: report_id"
    }
  ]
}
```

**Response codes:**

* `201 Created` -- Schedule created successfully
* `400 Bad Request` -- Missing or invalid parameters; check the `detail` field for the specific attribute that failed validation
* `403 Forbidden` -- Missing reporting, scheduler, or portfolio permission; confirm all three are enabled for the API user
* `404 Not Found` -- The referenced `report_id` does not exist or is not accessible; verify the report exists before scheduling

## Edit a schedule

Updates an existing schedule. Include only the attributes you want to change. Omitted attributes retain their current values.

```bash Request
curl --request PATCH \
  --url 'https://examplefirm.addepar.com/api/v1/report_schedule/142' \
  --header 'Authorization: Basic {base64_encoded_credentials}' \
  --header 'Addepar-Firm: {firm_id}' \
  --header 'Content-Type: application/vnd.api+json' \
  --header 'Accept: application/vnd.api+json' \
  --data '{
    "data": {
      "id": "142",
      "type": "report_schedules",
      "attributes": {
        "frequency": "MONTHLY",
        "time": "07:00",
        "portal_publishing": "PUBLISH",
        "email_notification": "NOTIFY"
      }
    }
  }'
```

```json 200 Response
{
  "data": {
    "id": "142",
    "type": "report_schedules",
    "attributes": {
      "report_id": 37,
      "report_name": "Quarterly Performance Report",
      "portfolio_id": [56659, 23546, 65987],
      "frequency": "MONTHLY",
      "start_date": "2026-10-01",
      "time": "07:00",
      "report_time_period": "PAST_QUARTER",
      "portal_publishing": "PUBLISH",
      "email_notification": "NOTIFY",
      "label": "Performance",
      "next_run_date": "2026-11-01"
    },
    "links": {
      "self": "/v1/report_schedule/142"
    }
  },
  "included": []
}
```

```json 400 Error
{
  "errors": [
    {
      "status": "400",
      "title": "Bad Request",
      "detail": "Invalid value for frequency: must be one of DAILY, WEEKLY, MONTHLY, QUARTERLY, ANNUALLY"
    }
  ]
}
```

**Response codes:**

* `200 OK` -- Schedule updated successfully
* `400 Bad Request` -- Invalid attribute value; check the `detail` field for allowed values
* `403 Forbidden` -- Missing reporting, scheduler, or portfolio permission; confirm all three are enabled
* `404 Not Found` -- Schedule does not exist or is outside the authenticated user's firm; verify the schedule ID

## Delete a schedule

Permanently deletes a schedule. This stops all future runs. This action cannot be undone.

```bash Request
curl --request DELETE \
  --url 'https://examplefirm.addepar.com/api/v1/report_schedule/142' \
  --header 'Authorization: Basic {base64_encoded_credentials}' \
  --header 'Addepar-Firm: {firm_id}' \
  --header 'Accept: application/vnd.api+json'
```

No response body is returned on successful deletion.

**Response codes:**

* `204 No Content` -- Schedule deleted successfully
* `403 Forbidden` -- Missing reporting, scheduler, or portfolio permission; confirm all three are enabled
* `404 Not Found` -- Schedule does not exist or is outside the authenticated user's firm; verify the schedule ID

> **Related resources**
>
> * [Report Generation](/docs/report-generation) -- Run a report on demand outside of a schedule
> * [Generated Reports](/docs/generated-reports) -- Access completed report runs and download PDF files
> * [Report List](/docs/report-list) -- Retrieve report IDs for use with scheduling endpoints
> * [Pagination](/docs/pagination-1) -- Cursor-based pagination for list requests