Discover Folders, Reports, and Reporting Resources

Find PBRS folders, schedules, Power BI workspaces, reports, and visuals, and obtain the identifiers required for API workflows.

Find the folders, schedules, reporting accounts, workspaces, reports, and visuals your application needs before creating or executing PBRS schedules.

Discovery provides identifiers and resource details. It does not execute reports or confirm that a configured schedule will render and deliver successfully.

Before you begin

You need:

  • A running PBRS REST API service.
  • Its configured base address.
  • A valid access token.
  • Access to the resources your integration will use.
  • A configured Power BI account identifier supplied by your PBRS administrator, if you are working with Power BI.

Complete Authentication and Token Management before running the examples.

The cURL examples use Bash syntax and these variables:

  • PBRS_BASE_URL: your API address, without /api or a trailing slash.
  • PBRS_TOKEN: the access token returned by authentication.

Use your installation's configured protocol, hostname, and port. Send the token with the bearer prefix.

Example IDs, names, paths, and URLs must be replaced with values from your installation.

Understand the resource types

ResourceIdentifier or valuePurpose
PBRS folderNumeric FolderIdOrganizes schedules within PBRS.
PBRS scheduleNumeric uniqueidIdentifies a configured schedule for applicable schedule operations.
Configured Power BI accountString account identifierSelects the Power BI connection configured in PBRS.
Power BI workspaceId returned by workspace discoverySelects a workspace accessible through the configured account.
Power BI report or dashboardUrl returned by discoveryIdentifies the reporting object for applicable schedule operations.
Power BI visualPage index and visual titleIdentifies visual data for export.
Configured SSRS accountNumeric AccountIdSelects an SSRS connection configured in PBRS.
SSRS reportReportPathIdentifies a report on the reporting server.

A PBRS folder path is not an SSRS report path. A configured Power BI account ID is not a workspace ID or a Microsoft application client ID.

Use each value only in the field required by the target operation.

1. Find a PBRS folder

You can retrieve a folder by its numeric identifier or resolve it from an existing PBRS folder path.

Retrieve by identifier

Send the folder identifier as the id query parameter:

curl --request GET \
  "${PBRS_BASE_URL}/api/Folder/Get?id=12" \
  --header "Authorization: bearer ${PBRS_TOKEN}" \
  --header "Accept: application/json"

Relevant response fields include:

FieldMeaning
FolderIdThe folder's numeric identifier.
FolderNameIts name.
FolderParentIts parent folder identifier.
FullPathIts PBRS folder path.

Use the separate subfolder and schedule operations to enumerate folder contents.

Resolve an existing path

curl --request POST \
  "${PBRS_BASE_URL}/api/Folder/GetFolderFromPath" \
  --header "Authorization: bearer ${PBRS_TOKEN}" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --data-binary '{
    "path": "/API Reports"
  }'

Use the returned FolderId in subsequent folder requests.

Obtain a known folder path or starting folder identifier from your PBRS administrator. Do not assume that a particular numeric value identifies the root folder in every installation.

List subfolders

curl --request GET \
  "${PBRS_BASE_URL}/api/Folder/GetSubFolders?id=12" \
  --header "Authorization: bearer ${PBRS_TOKEN}" \
  --header "Accept: application/json"

To traverse the hierarchy, repeat the request with the returned child folder identifiers. Track visited identifiers and limit traversal to the folders your application needs.

2. Find schedules within a folder

curl --request GET \
  "${PBRS_BASE_URL}/api/Folder/GetSchedules?id=12" \
  --header "Authorization: bearer ${PBRS_TOKEN}" \
  --header "Accept: application/json"

The response contains schedule summaries. Useful fields include:

FieldMeaning
uniqueidIdentifier used by applicable schedule operations.
NameSchedule name.
ScheduleTypeSchedule execution category.
IsDataDrivenWhether the schedule is data-driven.
IsEnabledWhether it is enabled.

Retain the schedule type with its identifier.

A summary can contain other identifiers, including ScheduleId. Do not substitute them for uniqueid when an operation requires uniqueid.

Resolve a schedule by path and name

If you know its folder, name, and type:

curl --request POST \
  "${PBRS_BASE_URL}/api/Folder/GetUniqueIdFromPath" \
  --header "Authorization: bearer ${PBRS_TOKEN}" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --data-binary '{
    "path": "/API Reports",
    "scheduleName": "Daily sales",
    "scheduleType": "report"
  }'

Example response:

{
  "uniqueid": 101
}

Use the exact request names path, scheduleName, and scheduleType.

Verify the selected schedule before submitting changes or execution. A name alone is not sufficient to identify a schedule across different folders.

3. Discover Power BI workspaces

Obtain the configured Power BI account identifier from your PBRS administrator.

Request its accessible workspaces using the Id query parameter:

curl --request GET \
  "${PBRS_BASE_URL}/api/PowerBiAccount/GetWorkspaces?Id=7f320302-7ccb-4aba-a052-56197424ab36" \
  --header "Authorization: bearer ${PBRS_TOKEN}" \
  --header "Accept: application/json"

Here, the request's Id identifies the configured account.

Each workspace in the response contains:

FieldMeaning
NameWorkspace display name.
IdWorkspace identifier for subsequent discovery requests.

Keep the account ID and workspace ID separate. Select the workspace by its returned identity rather than assuming that its name is unique.

Preserve the returned workspace identifier, including an empty string if that is the value returned for the selected workspace.

4. Discover Power BI reports and dashboards

These operations require a GET request with a JSON body:

ResourceEndpoint
Power BI reportsGET /api/PowerBiAccount/GetReports
DashboardsGET /api/PowerBiAccount/GetDashboards
Paginated reportsGET /api/PowerBiAccount/GetPaginatedReports

All three use this request structure:

{
  "AccountId": "7f320302-7ccb-4aba-a052-56197424ab36",
  "WorkspaceId": "24a89913-81fe-4815-a822-8d49cxxxfec1"
}

Replace both illustrative values with the configured account ID and the selected workspace's returned ID.

List reports

curl --request GET \
  "${PBRS_BASE_URL}/api/PowerBiAccount/GetReports" \
  --header "Authorization: bearer ${PBRS_TOKEN}" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --data-binary '{
    "AccountId": "7f320302-7ccb-4aba-a052-56197424ab36",
    "WorkspaceId": "24a89913-81fe-4815-a822-8d49cxxxfec1"
  }'

Each returned reporting object contains Name and Url.

Use the returned Url for the applicable report configuration field. Preserve it as returned; do not rebuild it from the display name or substitute an unrelated browser URL.

To list dashboards or paginated reports, use the corresponding endpoint with the same account-and-workspace request structure.

GET request bodies

The request body is required even though the method is GET. Do not move its fields into query parameters or change the method to POST unless the operation explicitly supports that alternative.

Some HTTP clients and intermediaries do not support GET request bodies. The cURL command explicitly preserves GET while sending JSON.

Interactive request buttons are disabled for these operations because OpenAPI 3.0 API explorers do not consistently support GET bodies.

5. Discover visuals in a Power BI report

Use the configured account ID and the report URL returned by report discovery:

curl --request GET \
  "${PBRS_BASE_URL}/api/PowerBiAccount/GetVisualsForReport" \
  --header "Authorization: bearer ${PBRS_TOKEN}" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --data-binary '{
    "AccountId": "7f320302-7ccb-4aba-a052-56197424ab36",
    "ReportUrl": "https://app.powerbi.com/reportEmbed?reportId=64e25062-4786-43be-bfea-56ec8b9aaeca"
  }'

This operation also requires a GET request body.

The response groups visual titles by page index:

{
  "0": [
    "Sales by region",
    "Monthly revenue"
  ]
}

Page indexes are zero-based: "0" represents the first page.

For visual-data export, retain:

  • The report URL.
  • The numeric page index.
  • The exact visual title.

Use the page index as PageNumber and the title as VisualTitle in the applicable export settings.

Visual-data page indexes differ from the one-based page numbers used by report-rendering page selections. Do not reuse one numbering convention for the other.

Discover visuals again after report changes that affect page order or visual titles.

6. Search schedules by keyword

Keyword searches find configured PBRS schedules. They do not search the contents of reports or apply report filters.

Schedule collectionSupported request
Power BI single schedulesPOST /api/SingleSchedule/GetAll
Paginated schedulesPOST /api/SingleSchedule/GetAllPaginated
Package schedulesGET /api/PackageSchedule/GetAll with a JSON body

The single and paginated operations also support GET bodies. Prefer their POST variants when your client cannot send a GET body.

Search request

curl --request POST \
  "${PBRS_BASE_URL}/api/SingleSchedule/GetAll" \
  --header "Authorization: bearer ${PBRS_TOKEN}" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --data-binary '{
    "FilterValues": ["sales"],
    "FilterOperator": "LIKE",
    "MatchType": "ALL"
  }'
FieldMeaning
FilterValuesA nonempty array of keyword values.
FilterOperatorComparison operator: LIKE, NOT LIKE, =, or <>.
MatchTypeCombine comparisons using ALL or ANY.

Use explicit, nonempty filters. Despite the operation names, omitting filters does not mean “return every schedule.” Empty requests do not have a universal empty-result guarantee either.

Use folder traversal when you need to enumerate schedules in a known PBRS folder.

Search responses are not guaranteed to be complete export definitions. Do not submit a search result unchanged as an update or migration payload.

7. Discover SSRS accounts and report metadata

List configured accounts

curl --request GET \
  "${PBRS_BASE_URL}/api/SSRSAccount/GetAll" \
  --header "Authorization: bearer ${PBRS_TOKEN}" \
  --header "Accept: application/json"

Example response:

[
  {
    "AccountId": 1,
    "AccountName": "Reporting Server"
  }
]

SSRS account identifiers are numeric. They are distinct from the string identifiers used for configured Power BI accounts.

Retrieve metadata for a known report

Obtain the report path from your reporting-server administrator or an existing report configuration.

MetadataEndpoint
Data sourcesPOST /api/SsrsReport/GetReportDatasources
ParametersPOST /api/SsrsReport/GetReportParameters
Parameters evaluated with current selectionsPOST /api/SsrsReport/GetReportParametersWithValues

For data sources or parameter definitions, send:

{
  "AccountId": 1,
  "ReportPath": "/Sales/Daily Sales"
}

For dependent or cascading parameters, include current selections:

{
  "AccountId": 1,
  "ReportPath": "/Sales/Daily Sales",
  "CurrentValues": [
    {
      "Name": "Region",
      "Value": "West"
    }
  ]
}

Parameter responses represent ParameterValues as a string-to-string dictionary, not an array.

Use the SSRS report path with the configured reporting account. Do not pass a PBRS folder path or a Power BI report URL in its place.

For Power BI Report Server workflows, follow Integrate SSRS and Power BI Report Server and the source-specific schedule contracts.

Create a PBRS folder when needed

Folder creation changes PBRS configuration. Perform it only when your workflow requires a new folder.

Provide the intended parent folder identifier:

curl --request POST \
  "${PBRS_BASE_URL}/api/Folder/Createfolder" \
  --header "Authorization: bearer ${PBRS_TOKEN}" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --data-binary '{
    "foldername": "API Exports",
    "parentid": 12
  }'

The operation returns a boolean, not the new folder identifier.

After successful creation, retrieve the parent's subfolders or resolve the resulting path to obtain the new FolderId.

Duplicate names or invalid parents can cause failure. Do not assume creation automatically reuses an existing folder. If the request times out, check whether the folder was created before repeating it.

Handle empty results and errors

An empty collection means the request returned no matching resources in that context. It does not establish that the resource is absent from every account, workspace, or folder.

Check:

  • The selected account and its access to the reporting service.
  • The workspace or folder identifier.
  • The reporting object type.
  • Keyword values and comparison settings.
  • Whether a required GET body reached the server.
  • Whether the resource was renamed, moved, or removed.

Check the HTTP status before parsing the response. An error response is not an empty collection, and discovery failures do not necessarily return HTTP 404.

Do not add pagination parameters unless the operation documents them.

Preserve discovery context

Store identifiers together with the context that gives them meaning:

  • PBRS server and environment.
  • Folder ID and path.
  • Schedule type and uniqueid.
  • Configured reporting account ID.
  • Workspace ID.
  • Report URL or reporting-server path.
  • Visual page index and title, where applicable.

Do not assume identifiers are interchangeable across PBRS installations.

Refresh discovery when resources move, names change, access changes, or reports are republished. A resource being discoverable does not prove that every rendering option or delivery workflow is available for it.

Next steps

Continue with Create and Update Single Schedules to configure schedules using the discovered resources.

Use Export Power BI Visual Data to Excel for visual-specific exports, or Quick Start: Execute and Monitor a Schedule to run an existing schedule.


Did this page help you?