Welcome to the DataDev Quest Challenge for July 2025! This challenge is designed to teach you
how to use the Metadata API to query content on your site.
Challenge Overview
Objective:
Familiarize yourself with the Metadata API, and use it to query the content on your site.
Why this challenge?
Some information about your site is only accessible through the Metadata API, or more easily accessed this way. It uses a different query language, GraphQL, to access that information.
Learning Goals
- Become familiar with GraphQL
- Learn how to use the graphiql web interface
- Be familiar with how to read the JSON output
Submission Guidelines
- Source Code: Publish your project publicly in your GitHub profile
- Add README: Include any setup instructions and describe how to run the program.
- Video of Solution: Include a video of your solution in the README file. You can publish it on YouTube and embed the iframe, or save the video file in the repository’s root directory
- Comments: Ensure your code is well-commented
- Submission: Submit your challenge in the following forms
Additional Resources
- Official documentation for the Metadata API
- Postman Collection for Tableau’s REST APIs – Check Tableau APIs / Tableau Metadata API (GraphQL)
- Anya Prosvetova’s blog post introducing the Metadata API
- GraphQL Documentation
- Github Metadata API Samples
- Tableau Server Client for Python
Getting Started
The first step is to get and set up your Tableau Developer Sandbox. Cristian Saavedra Desmoineaux has a Medium Post that provides a step-by-step guide to configuring it.
1. In your Tableau Cloud Site, go to Explore

Check if there is a project named Samples. If not, you can publish a workbook of your own connecting to Superstore for this challenge.
2. How to navigate to the GraphiQL interface?
You can get there two ways. First is by Going to External Assets in the left hand navigation then by clicking on Query metadata (GraphiQL) in the upper right of the page.

The second method is to go there directly once signed into your site by replacing the entire path of your URL with /metadata/graphiql. If you are on the developer sandbox, for example, it would be https://10ax.online.tableau.com/metadata/graphiql/. You should see an interface that looks like this:

The GraphiQL interface consists of three panes:
- The left most pane is where you write your GraphQL query.
- The middle pane is where the results are displayed.
- The left hand side is the documentation.
In the documentation pane, under “Root Types” is the type “Query.” Clicking on “Query” will then display all of the various “root” nodes that you can have for your query.

For our example, lets construct a workbook query. The structure of a GraphQL query is as follows:
# The word query is required, as is a name without spaces (example ddq_workbooks), and the curly braces.
query ddq_workbooks {
}
You can scroll down (or search) and click on “workbooks” to see more information about workbooks:

Let’s update our query to include the workbook node. The nice thing about GraphQL is that you can ask it to give you only the fields that you are actually interested in.
query ddq_workbooks {
workbooks{
# What fields do you want out?
}
}
Now, lets try this example:
query ddq_workbooks {
workbooks{
name,
id,
uri
}
}
Now click on the play icon or use Control + Enter with the keyboard and you will get the results on the right:

Challenge
Now that you have some basics around how the Metadata API and GraphQL work and can be accessed, your challenge is to write a query that gets out details about a workbook of your choosing. Retrieve its ids, the owner’s id, and the name of the project that it is in. Extra credit if you apply filters appropriately!
Solutions
# Basic query to get workbook and owner information
query ddq_workbooks {
workbooks{
id
name
luid
vizportalUrlId
owner {
luid
name
}
}
}
Who am I?
I am Jordan Woods, a Tableau DataDev Ambassador and co-founder of DataDevQuest. I am passionate about data, Python, and automation. You can contact me on LinkedIn.

Special Thanks to Cristian Saavedra Desmoineaux and Anya Prosvetova!
