What you can do
- Monitor every Bolt run across the Paradime workspaces you choose: status, duration, who or what triggered it, and the git branch, commit and pull request.
- See what happened inside each run: every command with its exit code, and every dbt model, test, seed and snapshot with its status and timings. When a run fails, you see how many models still built, for example 340 of 350.
- Find the dbt nodes that fail most often and the slowest ones over the last 30 days.
- Use the dashboard in the app for run activity over 14 days, schedule health over 30 days and recent failures. Each failure links to the run in Paradime.
- Query runs and schedules with SQL, point a BI tool at them, or join them with your own Snowflake data.
- Refresh on Snowflake serverless compute, every 30 minutes by default. The refresh doesn’t need a warehouse.
Prerequisites
- A Paradime account API key (it starts with
prdm_cmp_) with the Bolt schedules metadata viewer capability, and access to every workspace you want to monitor. Workspace API keys don’t work with the app. Step 1 below shows how to generate the key. - A Paradime account hosted in US East (N. Virginia), Europe (London) or Europe (Ireland). The app can’t reach accounts hosted in Europe (Frankfurt) at the moment.
- The ACCOUNTADMIN role in Snowflake for installation and setup. Setup creates an external access integration and grants account-level task privileges to the app, and ACCOUNTADMIN can do both by default.
Set up the app
Step 1: Generate an account API key in Paradime
- Go to Settings and select API Keys in the left panel.
- Click Generate API Key.
- Grant the Bolt schedules metadata viewer capability. The app only reads metadata, so it needs nothing more.
- Select every workspace you want to monitor.
- Copy the API key and the API endpoint shown with it. You can’t see the key again after you leave this screen.
Only users with the Admin role can generate account API keys, and only for workspaces where they are an Admin. The Workspace Admin role isn’t enough. See API Keys.
Step 2: Install the app from the Snowflake Marketplace
- Open the Paradime Bolt App listing and click Get. If Paradime sent you an offer link, open that link and accept the offer instead.
- Follow Snowflake’s steps to install the app.
<app_name>.
Step 3: Connect the app to Paradime
Open the app in Snowsight. The first time you open it, it takes you through four steps: Connect, Authorize, Pipeline and First sync. Connecting has two parts, in two different places:- In the app’s form, choose your Paradime hosting region, then fill in Company token or full endpoint URL and Account API key. Paste the full API endpoint from step 1 into the endpoint field. It already includes the right host, so the region choice doesn’t matter. The key goes only in Account API key: if the endpoint field holds a key, the app warns you and doesn’t build the value.
-
The app shows a JSON value like this one. Copy it with the copy icon.
- Click Grant network access + credentials. The button turns on once the app has built the value. Snowflake opens its own dialog to create a network rule, a secret and an external access integration in your account.
-
In Snowflake’s dialog, paste the JSON value from the app into Secret value and click Connect. By default, Snowflake stores the secret in a new database called
<app_name>_APP_DATA, in a schema calledCONFIGURATION. To change the secret’s name or where it’s stored, open Advanced options.
The API host depends on where your Paradime account is hosted:
Step 4: Allow scheduled refreshes
Click Grant task privileges. This grants the appEXECUTE TASK and EXECUTE MANAGED TASK, so the refresh runs on Snowflake serverless compute without a warehouse.
Step 5: Create the pipeline
Click Create pipeline. This creates the procedure that calls the Paradime API and the task that runs it. The task starts paused. If the app already marks Pipeline as done, skip this step.Step 6: Test the connection and run the first sync
- Click Test connection. When it works, the app shows the API host it reached and how many workspaces and schedules your API key can see.
- Click Sync now. The first sync finds your workspaces and starts monitoring the ones your API key can read.
Step 7: Choose workspaces and turn on the schedule
In the Setup tab:- In Workspaces, select Monitor for each workspace you want, then click Save workspace selection. The API key access column shows whether your API key can read each workspace.
- In Refresh schedule, set Refresh every (minutes) to a value from 5 to 1440 and click Apply interval. The default is 30.
- Click Enable to start the scheduled refresh. Click Pause to stop it.
Use the app
The app has four tabs:- Dashboard: run activity over the last 14 days, schedule health over the last 30 days, and recent failures with a View in Paradime link to each one.
- Runs: the latest 1,000 synced runs, which you can filter by workspace, state and schedule name. Each run links to Paradime.
- dbt nodes: the commands and dbt node results of a run, and the least reliable and slowest nodes over the last 30 days.
- Setup: the Paradime connection, the pipeline, workspace selection, the refresh schedule, the command and dbt node results switch, and the sync history.
dbt nodes tab
Select a run to see:- How many nodes succeeded, how many models built and how many tests passed, out of the total. Nodes with a
warnstatus count as succeeded. - How many nodes failed, warned or were skipped.
- Each command of the run, with its result, exit code, start time and duration.
- Each dbt node, with failed nodes first. You can filter by result.

A failed run: 16 of 57 models built, and 15 of 35 tests passed.

Query the data
The app’s tables and views are standard Snowflake objects, so you can query them with SQL or connect a BI tool to them.
Join the tables and views on
workspace_uid and run_id.
The outcome column groups dbt’s statuses so that models and tests compare:
In
core.v_bolt_run_commands, a command with exit code -1 has the outcome skipped: it didn’t run because an earlier command failed.
For example, to see the schedules with the lowest success rate first:
Command and dbt node results
On each sync, after it loads runs, the app fetches the commands and dbt node results of finished runs that it hasn’t fetched yet. The node results come from therun_results.json of each dbt command, without the compiled SQL.
- The app waits 15 minutes after a run ends before it fetches the run, so that Paradime has its results.
- Each sync fetches up to 100 runs, newest first. After you install or upgrade the app, the first syncs load the runs already stored, 100 at a time.
- Paradime keeps dbt node results for 60 days. Runs older than that have commands but no node results.
- A node that runs in two commands of the same run, for example
dbt seedthendbt build, has two rows incore.v_bolt_run_nodes.core.v_bolt_run_node_summarycounts it once, with the result of its last execution. - Your existing API key works. The Bolt schedules metadata viewer capability includes everything the app needs.
Turn off command and dbt node results
dbt result messages can quote the SQL that failed. If you don’t want the app to store them, open Setup > Command and dbt node results and turn off Fetch command and dbt node results. Syncs stop fetching them. To delete the results already stored, select I understand this deletes them all and click Delete stored results.
app_admin can do the same:
Roles and access
The app has two application roles. The role that installed the app holds both.
To give other Snowflake roles access:
Everyone who can open the app sees the Setup tab and can use it, whichever application role they hold.
What the app stores
The app stores Bolt run and schedule metadata: schedule names, cron schedules and owners, run ids and states, start and end times, durations, who triggered each run, and the git branch, commit and pull request. For each finished run, it also stores:- Each command: the command text, exit code, start and end.
- Each dbt node result: unique id, resource type, status, compile and execute timings, test failure count, the adapter response (rows affected and query id) and dbt’s result message. dbt error messages can quote the SQL that failed, or values from it. To stop storing them, see Turn off command and dbt node results.
Troubleshooting
Change the credentials
Most errors below are fixed by giving the app a new secret value. In the app:- Open Setup, expand Change API key, region or secret, select Disconnect this app from Paradime and click Disconnect and reconnect.
- The app goes back to the Connect step. Follow step 3 again with the right values. Snowflake’s dialog asks for the new Secret value.
- Click Test connection. The app switches to the new secret by itself.
-
Find the secret the app uses. In the row for
PARADIME_API_CREDENTIALS, thedatabase_name,schema_nameandobject_namecolumns give its full name. -
Set its value to the JSON value from step 3:
- In the app, open Setup and click Test connection.
The Paradime credentials secret is empty or The Paradime credentials secret holds only an API key
The secret doesn’t hold the JSON value from step 3. Usually only the API key was pasted into Snowflake’s dialog, or the field was left empty. Change the credentials.
The Paradime credentials secret must be JSON like {"api_endpoint": "...", "api_key": "..."}
The secret holds something other than the JSON value from step 3. This usually happens when Select existing secret picked a secret made for something else. Change the credentials.
Credentials secret is missing api_endpoint or Credentials secret is missing api_key
The secret holds JSON, but one of the two fields is missing or empty. Change the credentials.
api_key must be an account-level Paradime API key (prdm_cmp_...); legacy workspace keys are not supported
The secret holds a workspace API key. Generate an account API key as in step 1, then change the credentials.
api_endpoint must be a paradime.io URL
The api_endpoint field isn’t a Paradime API URL. Use the API endpoint shown with your API key, then change the credentials.
api_endpoint contains an API key
The API key was entered as the endpoint. Put the endpoint shown with your key in api_endpoint and the key in api_key, then change the credentials.
Paradime did not accept the API key in the credentials secret
Paradime doesn’t recognize the key. It may have been revoked, or it belongs to a different Paradime account than the endpoint. Generate an account API key as in step 1, then change the credentials.
The Paradime API endpoint was not found (HTTP 404)
The company token in api_endpoint doesn’t match a Paradime account. Copy the endpoint shown with your API key, then change the credentials.
MissingCapabilityError: api key does not have capability bolt:schedules:list
The API key doesn’t have the Bolt schedules metadata viewer capability. Generate a key with that capability as in step 1, then change the credentials.
No workspaces with Bolt schedules are visible to this API key
The app finds workspaces through their Bolt schedules, so it only lists workspaces that have at least one schedule and that your API key can access. Check which workspaces the key has, or add workspace UIDs in Setup > Workspaces > Add workspace UIDs manually.
Disabled N workspace(s) this API key cannot access
A sync turned off workspaces your API key can’t read. To monitor them:
- Generate an account API key that includes those workspaces, and change the credentials to use it.
- In Setup, click Discover workspaces to check access again.
- Select Monitor for the workspaces and click Save workspace selection.
No workspaces are enabled or visible to this API key
No workspace is selected for monitoring, or your API key can’t see any workspace. In Setup > Workspaces, select Monitor for at least one workspace and click Save workspace selection. If the list is empty, check which workspaces your API key includes.
A run has no dbt node results
Check these in order:- The run ended less than 15 minutes ago. The app fetches it on a later sync.
- The run is older than 60 days. Paradime no longer has its node results.
- The run has no dbt commands that ran. Commands that aren’t dbt commands, and dbt commands with exit code
-1, have no node results. - Results are turned off. In Setup, check that Fetch command and dbt node results is on.
- The sync hasn’t reached the run yet. After an install or upgrade, the app loads 100 runs per sync. In Setup > Sync history,
run_detailsshows how many runs each sync fetched.
run_details shows "unavailable": true, the Paradime API for your region doesn’t support dbt node results yet. The app tries again on each sync, and no action is needed.
Share the app’s logs with Paradime support
If your account has an event table, the app writes its logs there. To let Paradime support see them, set up an event table and turn on event sharing. Snowflake’s guide covers both: Enable logging and event sharing for an app. The SQL to turn on sharing is:FAQ
How do I change the API key the app uses?
How do I change the API key the app uses?
In the app, open Setup, expand Change API key, region or secret and click Disconnect and reconnect, then go through step 3 again with the new key. See Change the credentials.
How much run history does the app load?
How much run history does the app load?
Each sync loads the 50 most recent runs of each schedule, for up to 500 schedules per workspace, and adds them to the runs already stored. The app keeps every run it loads, so your history grows from the day you install it. It doesn’t load runs older than that.
Do I need a new API key for dbt node results?
Do I need a new API key for dbt node results?
No. The Bolt schedules metadata viewer capability includes the run status the app needs. Installs that upgrade to version 0.2 start fetching command and dbt node results on the next sync.
Does the app read data from my warehouse?
Does the app read data from my warehouse?
No. The app only stores the Bolt metadata it reads from the Paradime API. See What the app stores.
Does the refresh need a warehouse?
Does the refresh need a warehouse?
No. The refresh task runs on Snowflake serverless compute. Queries you run on the app’s tables and views use your own warehouse, as with any other query.