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 to | Start with |
|---|---|
| Run an existing schedule | ATRS folder lookup and schedule listing. |
| Select Tableau content | Account → 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 30The 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-TableAccountId 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 UTF8The selection file records the account, project, workbook and returned view. Keep it with your integration configuration.
Understand parent identifiers
| Request | parentId | Result |
|---|---|---|
GetProjects | Empty, or a returned project ID | Roots, or direct child projects. |
GetWorkbooks | Project ID | Workbooks in that project. |
GetViews | Workbook ID | Views 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
| Value | Purpose |
|---|---|
| ATRS folder/schedule ID | Locate stored ATRS configuration. |
| Tableau account ID | Select the configured connection. |
| Project/workbook/view ID | Select Tableau content within that connection. |
View url | Tableau 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
| Symptom | What to check |
|---|---|
| No accounts | Configured accounts and the API caller’s access. |
| No projects | Selected account’s Tableau permissions and project level. |
| No workbooks | Correct project ID, including nested projects. |
| No views | Use a workbook ID as parentId. |
| Folder lookup fails | Existing ATRS path and exact path property. |
For additional folder lookups, see Folder/Get and Folder/GetUniqueIdFromPath.
Updated about 11 hours ago