<!-- https://developers.silktide.com/v1/governance/report-schedules/get-report-schedule | Governance / Report schedules -->

# Get a report schedule and who it emails

`GET /v1/report-schedules/{reportScheduleId}`

Returns one report schedule and who it emails.

Subscribers come in two lists. `subscribers.assigneeIds` are users and roles in the account, as [assignee](https://developers.silktide.com/v1/platform/assignees.md) ids. `subscribers.emails` are any other addresses, which need no Silktide user. Each email links to the new snapshot through a share link, so it opens for people outside the account too.

Any user who can see the schedule can get it. When the API key's user can also admin it, the answer includes `permissions`: who may see and admin the schedule. For anyone else, `permissions` is left out.

## Request

### Path parameters

- `reportScheduleId` (integer, required, at least 1): The report schedule.

## Response

Status `200`.

- `reportSchedule` (object, required): The report schedule.
  - `reportScheduleId` (integer, required, at least 1): The report schedule.
  - `name` (string, required, at least 1 characters): Its name. The snapshots it makes are named from their template, not from this.
  - `reportTemplateId` (string, required, 1 to 16 characters): The report template each snapshot is built from.
  - `context` (object or map of any JSON or empty list, required): What it covers, in the shape its `contextTypeId` takes: `{"websiteId": 3, "sectionId": 0}` for one website, `{"criteria": {...}}` for several. `[]` when it has none.
    - `websiteId` (integer, required, at least 1): The website.
    - `sectionId` (integer, required): One of its sections. `0` for the whole website.
  - `emailSubject` (string, required, up to 255 characters): The subject of the email subscribers get. Empty for the default, the snapshot's name followed by "is ready".
  - `emailMessage` (string, required, up to 4096 characters): Text at the top of the email subscribers get. Can be empty.
  - `scheduleInterval` (string, required): The unit of how often it runs. One of: `day`, `week`, `month`, `year`.
  - `schedulePeriod` (integer, required, 1 to 90): How many `scheduleInterval`s apart runs are. `week` and `2` runs every two weeks.
  - `scheduleFromDate` (integer, required): When the schedule counts from. Each run falls a whole number of periods after it.
  - `durationInterval` (string, required): The unit of how far back each snapshot looks. One of: `day`, `week`, `month`, `year`.
  - `durationPeriod` (integer, required, 1 to 90): How many `durationInterval`s back each snapshot looks, from when it runs.
  - `created` (integer, required): When it was created.
  - `lastRun` (integer, required): When it last made a snapshot. `0` if never.
  - `nextDue` (integer, required): When it next runs. In the past when a run is waiting to be picked up.
  - `creatorAssigneeId` (string, required): The assignee who created it: a user (`u:`), an API key (`a:`), or `system` for those Silktide made itself.
  - `skipped` (object, required, can be null): Null, or why its last due run made no snapshot and sent no email. It runs again by itself once the reason has gone.
    - `at` (integer, required): When the run was due.
    - `reason` (string, required): Why it was skipped, as a stable id: `no-platform-access` when the account has no active plan.
    - `message` (string, required, can be null): The reason, in the API user's language. Null for a reason without one.
- `permissions` (object, optional): Who may see and admin the schedule. Only when the API key's user can admin it.
  - `components` (list of objects, required): The permissions a report schedule has: one to see it, one to admin it.
    - `permissionId` (string, required): The permission, such as `Report-ReportRead`.
    - `componentType` (string, required): What can be given it. `assignees` for users and roles.
    - `label` (string, required): Its name, such as `Can see this dashboard / snapshot`.
    - `description` (string, required, can be null): What it allows. Null for these permissions.
    - `inheritedPermissionIds` (list of strings, required): Permissions that include this one: anyone with those has this too.
    - `models` (list of any JSON, required): Reserved. Empty for these permissions.
  - `componentValues` (map of list of strings, required): Who was given each permission on this report schedule directly, as assignee ids (`u:` users, `g:` roles).
  - `fixedValues` (map of list of strings, required): Who has each permission from elsewhere, such as account-wide roles. Changed elsewhere, not here.
- `subscribers` (object, required): Who is emailed each snapshot.
  - `assigneeIds` (list of strings, required): Users and roles emailed when it runs, as assignee ids (`u:` users, `g:` roles).
  - `emails` (list of strings, required): Other email addresses it is sent to, lowercased.

## Errors

| Status | Type | When |
| --- | --- | --- |
| 403 | `EditionNotAvailable` | The account does not have Silktide 4. Reports, report schedules and report templates are Silktide 4's, so an account with only Silktide 5 cannot use them. |
| 400 | `InvalidRequest` | `reportScheduleId` is not a whole number. `properties.field` is `reportScheduleId`. |
| 404 | `ModelNotFound` | No report schedule with that id exists in the account. |
| 403 | `AccessDenied` | The report schedule exists, but the API key's user cannot see it. |
| 401 | `NotLoggedIn` | No API key was sent, or it is not a key for this region. |
| 429 | `TooManyRequests` | Too many requests to this path in five seconds. Retry after the number of seconds in the `Retry-After` header, which `properties.retryAfter` repeats. |
| 503 | - | Silktide is busy. Retry after the number of seconds in the `Retry-After` header. |

## Access

- Permission: Can see this report schedule
- Plan feature: none
- Edition: Silktide 4 only
- Cost: free
- Stability: stable, since 1.0.0

## Example: A weekly report on websites tagged pre-production

```bash
curl "https://api.eu.silktide.com/v1/report-schedules/2" \
  -H "Authorization: silktide token=$SILKTIDE_API_KEY"
```

Response:

```json
{
  "reportSchedule": {
    "reportScheduleId": 2,
    "name": "Weekly pre-production website summary",
    "reportTemplateId": "websites",
    "context": {
      "criteria": {
        "tagIds": [
          "pre-production"
        ]
      }
    },
    "emailSubject": "",
    "emailMessage": "",
    "scheduleInterval": "week",
    "schedulePeriod": 1,
    "scheduleFromDate": 1793664000,
    "durationInterval": "day",
    "durationPeriod": 7,
    "created": 1793600000,
    "lastRun": 1795478400,
    "nextDue": 1796083200,
    "creatorAssigneeId": "u:eu-12",
    "skipped": null
  },
  "permissions": {
    "components": [
      {
        "permissionId": "Report-ReportScheduleRead",
        "componentType": "assignees",
        "label": "Can see this report schedule",
        "description": null,
        "inheritedPermissionIds": [
          "Report-ReportScheduleAdmin",
          "Report-ReportScheduleReadAll"
        ],
        "models": []
      },
      {
        "permissionId": "Report-ReportScheduleAdmin",
        "componentType": "assignees",
        "label": "Can admin this report schedule",
        "description": null,
        "inheritedPermissionIds": [
          "Report-ReportScheduleAdminAll"
        ],
        "models": []
      }
    ],
    "componentValues": {
      "Report-ReportScheduleRead": [],
      "Report-ReportScheduleAdmin": []
    },
    "fixedValues": {
      "Report-ReportScheduleRead": [],
      "Report-ReportScheduleAdmin": [],
      "Report-ReportScheduleReadAll": [
        "g:2",
        "u:eu-12"
      ],
      "Report-ReportScheduleAdminAll": [
        "g:2",
        "u:eu-12"
      ]
    }
  },
  "subscribers": {
    "assigneeIds": [
      "u:eu-12",
      "u:eu-14"
    ],
    "emails": [
      "web-team@example.com"
    ]
  }
}
```
