Discover Folders and Tableau Resources

Find an ATRS schedule or select a Tableau account, project, workbook and view.

Find an existing ATRS schedule or browse the Tableau content available through a configured ATRS account.

Before you begin

Complete Authentication and Token Management. The PowerShell examples use $AtrsBaseUrl and $AtrsHeaders from that guide. Run the steps in order in the same PowerShell session. Use your installation’s address and identifiers in place of the examples.

The configured Tableau account must have access to the content you want to list.

Choose a discovery workflow

You want toStart with
Run an existing scheduleATRS folder lookup and schedule listing.
Select Tableau contentAccount → project → workbook → view.

ATRS folders organize schedules. Tableau projects organize reporting content. Their identifiers are separate.

Find an ATRS folder and schedule

Enter an existing ATRS folder path. Resolve it with POST /api/Folder/GetFolderFromPath, then list its direct children and schedules:

$AtrsFolderPath = Read-Host "Existing ATRS folder path"
$AtrsFolderBody = @{path=$AtrsFolderPath} | ConvertTo-Json
$AtrsFolder = Invoke-RestMethod -Method Post -Uri "$AtrsBaseUrl/api/Folder/GetFolderFromPath" -Headers $AtrsHeaders -ContentType "application/json" -Body $AtrsFolderBody -TimeoutSec 30
if ($null -eq $AtrsFolder -or $null -eq $AtrsFolder.FolderId) { throw "Folder was not resolved" }
$AtrsFolderId = [int]$AtrsFolder.FolderId
$AtrsChildFolders = Invoke-RestMethod -Method Get -Uri "$AtrsBaseUrl/api/Folder/GetSubFolders?id=$AtrsFolderId" -Headers $AtrsHeaders -TimeoutSec 30
$AtrsFolderSchedules = Invoke-RestMethod -Method Get -Uri "$AtrsBaseUrl/api/Folder/GetSchedules?id=$AtrsFolderId" -Headers $AtrsHeaders -TimeoutSec 30
$AtrsChildFolders | ConvertTo-Json -Depth 30
$AtrsFolderSchedules | ConvertTo-Json -Depth 30

The folder lookup uses the exact JSON property path. The listings use the returned FolderId in the id query parameter. To inspect a child folder, repeat the listing requests with that child’s returned FolderId.

Retain the selected schedule’s numeric identifier and family with this installation. Continue with the Quick Start to run it.

1. List Tableau accounts and root projects

Use GetAccounts, choose its returned AccountId, then request root projects with GetProjects:

$AtrsAccounts = @(Invoke-RestMethod -Method Get -Uri "$AtrsBaseUrl/api/TableauAccount/GetAccounts" -Headers $AtrsHeaders -TimeoutSec 30)
$AtrsAccounts | Select-Object AccountId, AccountName | Format-Table
$AtrsAccountId = Read-Host "AccountId from the list"
if ($AtrsAccountId -notin $AtrsAccounts.AccountId) { throw "Select an account returned by this installation" }
$AtrsDiscoveryBody = @{accountId=$AtrsAccountId; parentId=""} | ConvertTo-Json
$AtrsProjects = @(Invoke-RestMethod -Method Post -Uri "$AtrsBaseUrl/api/TableauAccount/GetProjects" -Headers $AtrsHeaders -ContentType "application/json" -Body $AtrsDiscoveryBody -TimeoutSec 30)
$AtrsProjects | Select-Object id,name,parentProjectId | Format-Table

AccountId identifies the account configured in ATRS. An empty parentId requests root projects.

Browse a nested project

If your workbook belongs to a child project, use this optional loop. Each iteration lists the direct children of a selected parent:

while ((Read-Host "Descend into a child-project level? yes/no") -eq "yes") {
    $AtrsParentProjectId = Read-Host "Parent project id from the current list"
    if ($AtrsParentProjectId -notin $AtrsProjects.id) { throw "Select a returned project" }
    $AtrsDiscoveryBody = @{accountId=$AtrsAccountId; parentId=$AtrsParentProjectId} | ConvertTo-Json
    $AtrsProjects = @(Invoke-RestMethod -Method Post -Uri "$AtrsBaseUrl/api/TableauAccount/GetProjects" -Headers $AtrsHeaders -ContentType "application/json" -Body $AtrsDiscoveryBody -TimeoutSec 30)
    $AtrsProjects | Select-Object id,name,parentProjectId | Format-Table
}

If a level is empty, rerun the root-project request and stop at the level containing the intended project. A project’s workbook listing does not automatically include all descendants.

2. Select a workbook and view

Select a project from the displayed level. List its workbooks with GetWorkbooks, then select a workbook and list its views with GetViews:

$AtrsProjectId = Read-Host "Project id from the displayed level"
if ($AtrsProjectId -notin $AtrsProjects.id) { throw "Select a returned project" }
$AtrsDiscoveryBody = @{accountId=$AtrsAccountId; parentId=$AtrsProjectId} | ConvertTo-Json
$AtrsWorkbooks = @(Invoke-RestMethod -Method Post -Uri "$AtrsBaseUrl/api/TableauAccount/GetWorkbooks" -Headers $AtrsHeaders -ContentType "application/json" -Body $AtrsDiscoveryBody -TimeoutSec 30)
$AtrsWorkbooks | Select-Object id,name,parentProjectId | Format-Table
$AtrsWorkbookId = Read-Host "Workbook id from the list"
if ($AtrsWorkbookId -notin $AtrsWorkbooks.id) { throw "Select a returned workbook" }
$AtrsDiscoveryBody = @{accountId=$AtrsAccountId; parentId=$AtrsWorkbookId} | ConvertTo-Json
$AtrsViews = @(Invoke-RestMethod -Method Post -Uri "$AtrsBaseUrl/api/TableauAccount/GetViews" -Headers $AtrsHeaders -ContentType "application/json" -Body $AtrsDiscoveryBody -TimeoutSec 30)
$AtrsViews | Select-Object id,name,url,type,parentProjectId | Format-Table
$AtrsViewId = Read-Host "View id from the list"
$AtrsView = $AtrsViews | Where-Object { $_.id -eq $AtrsViewId } | Select-Object -First 1
if ($null -eq $AtrsView) { throw "Select a returned view" }
@{AccountId=$AtrsAccountId; ProjectId=$AtrsProjectId; WorkbookId=$AtrsWorkbookId; View=$AtrsView} | ConvertTo-Json -Depth 20 | Set-Content "./atrs-selected-tableau-resource.json" -Encoding UTF8

The selection file records the account, project, workbook and returned view. Keep it with your integration configuration.

Understand parent identifiers

RequestparentIdResult
GetProjectsEmpty, or a returned project IDRoots, or direct child projects.
GetWorkbooksProject IDWorkbooks in that project.
GetViewsWorkbook IDViews in that workbook. An empty value lists all views available to the account.

Send accountId with these requests. itemType is not needed for this traversal.

Keep the selected values

ValuePurpose
ATRS folder/schedule IDLocate stored ATRS configuration.
Tableau account IDSelect the configured connection.
Project/workbook/view IDSelect Tableau content within that connection.
View urlTableau content URL; it may be relative.

Project and workbook url values can be empty. Preserve the returned view URL and ID. A returned view type is not automatically the schedule’s ObjectType value.

For template-based authoring, preserve the working template’s resource and rendering settings. A discovered view alone does not supply every schedule setting.

Troubleshooting

SymptomWhat to check
No accountsConfigured accounts and the API caller’s access.
No projectsSelected account’s Tableau permissions and project level.
No workbooksCorrect project ID, including nested projects.
No viewsUse a workbook ID as parentId.
Folder lookup failsExisting ATRS path and exact path property.

For additional folder lookups, see Folder/Get and Folder/GetUniqueIdFromPath.


Did this page help you?