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/apior 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
| Resource | Identifier or value | Purpose |
|---|---|---|
| PBRS folder | Numeric FolderId | Organizes schedules within PBRS. |
| PBRS schedule | Numeric uniqueid | Identifies a configured schedule for applicable schedule operations. |
| Configured Power BI account | String account identifier | Selects the Power BI connection configured in PBRS. |
| Power BI workspace | Id returned by workspace discovery | Selects a workspace accessible through the configured account. |
| Power BI report or dashboard | Url returned by discovery | Identifies the reporting object for applicable schedule operations. |
| Power BI visual | Page index and visual title | Identifies visual data for export. |
| Configured SSRS account | Numeric AccountId | Selects an SSRS connection configured in PBRS. |
| SSRS report | ReportPath | Identifies 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:
| Field | Meaning |
|---|---|
FolderId | The folder's numeric identifier. |
FolderName | Its name. |
FolderParent | Its parent folder identifier. |
FullPath | Its 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:
| Field | Meaning |
|---|---|
uniqueid | Identifier used by applicable schedule operations. |
Name | Schedule name. |
ScheduleType | Schedule execution category. |
IsDataDriven | Whether the schedule is data-driven. |
IsEnabled | Whether 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:
| Field | Meaning |
|---|---|
Name | Workspace display name. |
Id | Workspace 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:
| Resource | Endpoint |
|---|---|
| Power BI reports | GET /api/PowerBiAccount/GetReports |
| Dashboards | GET /api/PowerBiAccount/GetDashboards |
| Paginated reports | GET /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 collection | Supported request |
|---|---|
| Power BI single schedules | POST /api/SingleSchedule/GetAll |
| Paginated schedules | POST /api/SingleSchedule/GetAllPaginated |
| Package schedules | GET /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"
}'| Field | Meaning |
|---|---|
FilterValues | A nonempty array of keyword values. |
FilterOperator | Comparison operator: LIKE, NOT LIKE, =, or <>. |
MatchType | Combine 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.
| Metadata | Endpoint |
|---|---|
| Data sources | POST /api/SsrsReport/GetReportDatasources |
| Parameters | POST /api/SsrsReport/GetReportParameters |
| Parameters evaluated with current selections | POST /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.
Updated 1 day ago

