Run notebooks using API
The Datalore Run API lets you trigger notebook runs programmatically and check their execution status. Use it to automate workflows, integrate notebook execution into external systems, or run notebooks on a schedule.
- Authentication
Authenticate every request with a bearer token.
- Base URL
https://datalore.jetbrains.com/
https://{host}/
- Request body
Every request identifies a notebook by its ownerId and id. You can extract these values from the notebook URL, which follows the: https://datalore.jetbrains.com/notebook/{ownerId}/{id} format.
Every request identifies a notebook by its ownerId and id. You can extract these values from the notebook URL, which follows the format https://{host}/notebook/{ownerId}/{id} format.
Run a notebook
/api/run/v1/notebook
Runs the notebook with the given ID and returns the run ID. Optionally accepts parameters for parameterized runs using values from the interactive controls in the notebook.
Request parameters
{
"notebookId": "user123/notebook456",
"updateReport": "never",
"directFileStorageWrite": true,
"parameters": [
{
"name": "Columns",
"value": "revenue"
}
]
}
Get a run status
/api/run/v1/{runId}
Returns the status of the run with the given ID.
Responses
{
"runId": "example",
"userId": "example",
"notebookId": "example",
"startTime": "1971-04-26T12:26:06Z",
"endTime": "1971-04-26T12:26:06Z",
"success": true,
"status": "example",
"updateReport": "never",
"directFileStorageWrite": true,
"artifacts": [
{
"name": "analysis.ipynb",
"path": "/notebook/user123/notebook456/artifacts/run1/analysis.ipynb"
}
],
"readOnly": true
}
Run a notebook in interactive mode
/api/computation/v1/notebook
Runs the notebook specified by its ID interactively. This updates the notebook outputs in place. Does not return a run ID or artifacts.
Request parameters
{
"notebookId": "user123/notebook456"
}
Run API commands from a notebook
You can run API commands directly from a notebook in the Datalore editor to trigger another notebook. The following example shows a one-cell notebook containing API requests.
HOST = "https://datalore.jetbrains.com"
API_TOKEN = "my-api-token"
NOTEBOOK_ID = "my-user/my-notebook" # make sure it's not the CURRENT notebook if you don't want infinite recursion
import requests
import time
from IPython.display import display, HTML
from urllib.parse import quote
response = requests.post(
f"{HOST}/api/run/v1/notebook",
headers={"Authorization": f"Bearer {API_TOKEN}"},
json={"notebookId": NOTEBOOK_ID, "updateReport": "never"}
)
print('Submit response: ', response)
if not response.ok:
raise RuntimeError("Error submitting request")
else:
run_id = response.json()["runId"]
hasEndTime = False
while not hasEndTime:
status_response = requests.get(
f"{HOST}/api/run/v1/{run_id}",
headers={"Authorization": f"Bearer {API_TOKEN}"}
)
run = status_response.json()
if run.get('endTime'):
hasEndTime = True
print('Finished')
print(status_response.json())
else:
print('Status: ', run.get('status'))
time.sleep(1)
artifacts = {}
for artifact in status_response.json()['artifacts']:
display(HTML(f"<a href='{artifact['path']}'>{artifact['name']}</a>"))
artifacts[artifact['name']] = requests.get(
f"{HOST}{quote(artifact['path'])}",
headers={"Authorization": f"Bearer {API_TOKEN}"}
).text
artifacts
14 August 2026