Project Management
Create Project
Request
Name and language of the project to create. The /projects/create API accepts requests in the following format:
CreateProjectRequest Model - Request to create a project with the specified name and language via QuantConnect.com API. | |
|---|---|
| name | string Project name. |
| language | string Enum Programming language to use. Options : ['C#', 'Py'] |
| organizationId | string The organization to create project under. If you don't provide a value, it defaults to your preferred organization. |
| Example |
{
"name": "string",
"language": "C#",
"organizationId": "string"
}
|
Responses
The /projects/create API provides a response in the following format:
200 Success
ProjectListResponse Model - Project list response. | |
|---|---|
| projects | Project Array List of projects for the authenticated user. |
| versions | LeanVersion Array List of LEAN versions. |
| success | boolean Indicate if the API request was successful. |
| errors | string Array List of errors with the API call. |
| Example |
{
"projects": [
{
"projectId": 0,
"organizationId": "string",
"name": "string",
"modified": "2021-11-26T15:18:27.693Z",
"created": "2021-11-26T15:18:27.693Z",
"ownerId": 0,
"language": "C#",
"collaborators": [
{
"uid": 0,
"liveControl": true,
"permission": "read",
"publicId": "string",
"profileImage": "string",
"email": "string",
"name": "string",
"bio": "string",
"owner": true
}
],
"leanVersionId": 0,
"leanPinnedToMaster": true,
"owner": true,
"description": "string",
"channelId": "string",
"parameters": ,
"libraries": [
{
"projectId": 0,
"libraryName": "string",
"ownerName": "string",
"access": true
}
],
"grid": {
"xs": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"sm": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"md": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"lg": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"xl": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
]
},
"liveGrid": {
"xs": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"sm": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"md": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"lg": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"xl": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
]
},
"paperEquity": 0,
"lastLiveDeployment": "2021-11-26T15:18:27.693Z",
"liveForm": {
"brokerageData": {
"authentication": ,
"additionalProperties": {
"id": "string"
}
},
"dataProvidersData": [
{
"id": "string"
}
],
"node": "string",
"notifyInsights": "true",
"notifyOrderEvents": "true",
"autoRestart": "true"
},
"encrypted": true,
"codeRunning": true,
"leanEnvironment": 0,
"encryptionKey": {
"id": "string",
"name": "string"
}
}
],
"versions": [
{
"id": 0,
"created": "2021-11-26T15:18:27.693Z",
"description": "string",
"leanHash": "string",
"leanCloudHash": "string",
"name": "string",
"ref": "string",
"public": true
}
],
"success": true,
"errors": [
"string"
]
}
|
Project Model - Response from reading a project by id. | |
|---|---|
| projectId | integer Project id. |
| organizationId | string Orgainization id. |
| name | string Name of the project. |
| modified | string($date-time) Modified date for the project. |
| created | string($date-time) Date the project was created. |
| ownerId | integer Owner id. |
| language | string Enum Programming language of the project. Options : ['C#', 'Py'] |
| collaborators | Collaborator Array List of collaborators. |
| leanVersionId | integer The version of LEAN this project is running on. |
| leanPinnedToMaster | boolean Indicate if the project is pinned to the master branch of LEAN. |
| owner | boolean Indicate if you are the owner of the project. |
| description | string The project description. |
| channelId | string Channel id. |
| parameters | ParameterSet object Optimization parameters. |
| libraries | Library Array The library projects. |
| grid | Grid object The grid arrangement of charts. |
| liveGrid | Grid object The grid arrangement of charts. |
| paperEquity | number The equity value of the last paper trading instance. |
| lastLiveDeployment | string($date-time) The last live deployment active time. |
| liveForm | LiveForm object The live wizard content used. |
| encrypted | boolean Indicates if the project is encrypted. |
| codeRunning | boolean Indicates if the project is running or not. |
| leanEnvironment | integer LEAN environment of the project running on. |
| encryptionKey | EncryptionKey object Encryption key details. |
| Example |
{
"projectId": 0,
"organizationId": "string",
"name": "string",
"modified": "2021-11-26T15:18:27.693Z",
"created": "2021-11-26T15:18:27.693Z",
"ownerId": 0,
"language": "C#",
"collaborators": [
{
"uid": 0,
"liveControl": true,
"permission": "read",
"publicId": "string",
"profileImage": "string",
"email": "string",
"name": "string",
"bio": "string",
"owner": true
}
],
"leanVersionId": 0,
"leanPinnedToMaster": true,
"owner": true,
"description": "string",
"channelId": "string",
"parameters": ,
"libraries": [
{
"projectId": 0,
"libraryName": "string",
"ownerName": "string",
"access": true
}
],
"grid": {
"xs": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"sm": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"md": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"lg": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"xl": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
]
},
"liveGrid": {
"xs": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"sm": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"md": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"lg": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"xl": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
]
},
"paperEquity": 0,
"lastLiveDeployment": "2021-11-26T15:18:27.693Z",
"liveForm": {
"brokerageData": {
"authentication": ,
"additionalProperties": {
"id": "string"
}
},
"dataProvidersData": [
{
"id": "string"
}
],
"node": "string",
"notifyInsights": "true",
"notifyOrderEvents": "true",
"autoRestart": "true"
},
"encrypted": true,
"codeRunning": true,
"leanEnvironment": 0,
"encryptionKey": {
"id": "string",
"name": "string"
}
}
|
Collaborator Model | |
|---|---|
| uid | integer User ID. |
| liveControl | boolean Indicate if the user has live control. |
| permission | string Enum The permission this user is given. Options : ['read', 'write'] |
| publicId | string The user public ID. |
| profileImage | string The url of the user profile image. |
string The registered email of the user. | |
| name | string The display name of the user. |
| bio | string The biography of the user. |
| owner | boolean Indicate if the user is the owner of the project. |
| Example |
{
"uid": 0,
"liveControl": true,
"permission": "read",
"publicId": "string",
"profileImage": "string",
"email": "string",
"name": "string",
"bio": "string",
"owner": true
}
|
Library Model | |
|---|---|
| projectId | integer Project Id of the library project. |
| libraryName | string Name of the library project. |
| ownerName | string Name of the library project owner. |
| access | boolean Indicate if the library project can be accessed. |
| Example |
{
"projectId": 0,
"libraryName": "string",
"ownerName": "string",
"access": true
}
|
Grid Model - The grid arrangement of charts. | |
|---|---|
| xs | GridChart Array List of chart in the xs (Extra small) position. |
| sm | GridChart Array List of chart in the sm (Small) position. |
| md | GridChart Array List of chart in the md (Medium) position. |
| lg | GridChart Array List of chart in the lg (Large) position. |
| xl | GridChart Array List of chart in the xl (Extra large) position. |
| Example |
{
"xs": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"sm": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"md": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"lg": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
],
"xl": [
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
]
}
|
GridChart Model - The chart display properties. | |
|---|---|
| chartName | string The chart name. |
| width | integer Width of the chart. |
| height | integer Height of the chart. |
| row | integer Number of rows of the chart. |
| column | integer Number of columns of the chart. |
| sort | integer Sort of the chart. |
| Example |
{
"chartName": "string",
"width": 0,
"height": 0,
"row": 0,
"column": 0,
"sort": 0
}
|
LiveForm Model - The live wizard content used. | |
|---|---|
| brokerageData | BrokerageData object Brokerage data saved on live deployment. |
| dataProvidersData | BrokerageId Array The data providers used in the live deployment. |
| node | string Node ID of the live node deployed. |
| notifyInsights | string Enum Indicates if notification should be issued on new insights. Options : ['true', 'false'] |
| notifyOrderEvents | string Enum Indicates if notification should be issued on new order events. Options : ['true', 'false'] |
| autoRestart | string Enum Indicates if the live algorithm should automatically restart after encountering runtime errors. Options : ['true', 'false'] |
| Example |
{
"brokerageData": {
"authentication": ,
"additionalProperties": {
"id": "string"
}
},
"dataProvidersData": [
{
"id": "string"
}
],
"node": "string",
"notifyInsights": "true",
"notifyOrderEvents": "true",
"autoRestart": "true"
}
|
BrokerageData Model - Brokerage data saved on live deployment. | |
|---|---|
| authentication | object Authentication details of the live brokerage. Details on each brokerage refers to https://www.quantconnect.com/docs/v2/lean-cli/api-reference/lean-cloud-live-deploy. |
| additionalProperties | BrokerageId object Brokerage Id. |
| Example |
{
"authentication": ,
"additionalProperties": {
"id": "string"
}
}
|
LiveAuthenticationData Model - Authentication details of the live brokerage. Details on each brokerage refers to https://www.quantconnect.com/docs/v2/lean-cli/api-reference/lean-cloud-live-deploy. | |
|---|---|
| LiveAuthenticationData | object Authentication details of the live brokerage. Details on each brokerage refers to https://www.quantconnect.com/docs/v2/lean-cli/api-reference/lean-cloud-live-deploy. |
| Example |
{
"LiveAuthenticationData":
}
|
BrokerageId Model - Brokerage Id. | |
|---|---|
| id | string The ID of the brokerage. |
| Example |
{
"id": "string"
}
|
EncryptionKey Model - Encryption key details. | |
|---|---|
| id | string Encryption key id. |
| name | string Name of the encryption key. |
| Example |
{
"id": "string",
"name": "string"
}
|
LeanVersion Model | |
|---|---|
| id | integer Id of the LEAN version. |
| created | string($date-time) Date when this version was created. |
| description | string Description of the LEAN version. |
| leanHash | string Commit Hash in the LEAN repository. |
| leanCloudHash | string Commit Hash in the LEAN Cloud repository. |
| name | string Name of the branch where the commit is. |
| ref | string Reference to the branch where the commit is. |
| public | boolean Indicates if the version is available for the public. |
| Example |
{
"id": 0,
"created": "2021-11-26T15:18:27.693Z",
"description": "string",
"leanHash": "string",
"leanCloudHash": "string",
"name": "string",
"ref": "string",
"public": true
}
|
401 Authentication Error
UnauthorizedError Model - Unauthorized response from the API. Key is missing, invalid, or timestamp is too old for hash. | |
|---|---|
| www_authenticate | string Header |
Responses
The /projects/create API provides a response in the following format:
200 Success
ProjectListResponse Model - Project list response. | |
|---|---|
| projects | Project Array List of projects for the authenticated user. |
| versions | LeanVersion Array List of LEAN versions. |
| success | boolean Indicate if the API request was successful. |
| errors | string Array List of errors with the API call. |
| Example |
{
"projects": [
{
"projectId": 23456789,
"organizationId": "5cad178b20a1d52567b534553413b691",
"name": "string",
"modified": "2021-11-26T15:18:27.693Z",
"created": "2021-11-26T15:18:27.693Z",
"ownerId": 0,
"language": "C#",
"collaborators": [
{
"uid": 0,
"liveControl": true,
"permission": "read",
"publicId": "string",
"profileImage": "https://cdn.quantconnect.com/web/i/users/profile/abc123.jpeg",
"email": "abc@123.com",
"name": "string",
"bio": "string",
"owner": true
}
],
"leanVersionId": 0,
"leanPinnedToMaster": true,
"owner": true,
"description": "string",
"channelId": "string",
"parameters": [
{
"name": "string",
"value": 0
}
],
"libraries": [
{
"projectId": 23456789,
"libraryName": "string",
"ownerName": "string",
"access": true
}
],
"grid": "string",
"liveGrid": "string",
"paperEquity": 0,
"lastLiveDeployment": "2021-11-26T15:18:27.693Z",
"liveForm": ,
"encrypted": true,
"codeRunning": true,
"leanEnvironment": 0,
"encryptionKey": {
"id": "string",
"name": "string"
}
}
],
"versions": [
{
"id": 0,
"created": "2021-11-26T15:18:27.693Z",
"description": "string",
"leanHash": "string",
"leanCloudHash": "string",
"name": "string",
"ref": "string",
"public": 0
}
],
"success": true,
"errors": [
"string"
]
}
|
Project Model - Response from reading a project by id. | |
|---|---|
| projectId | integer Project id. |
| organizationId | string Orgainization id. |
| name | string Name of the project. |
| modified | string($date-time) Modified date for the project. |
| created | string($date-time) Date the project was created. |
| ownerId | integer Owner id. |
| language | string Enum Programming language of the project. Options : ['C#', 'Py'] |
| collaborators | Collaborator Array List of collaborators. |
| leanVersionId | integer The version of LEAN this project is running on. |
| leanPinnedToMaster | boolean Indicate if the project is pinned to the master branch of LEAN. |
| owner | boolean Indicate if you are the owner of the project. |
| description | string The project description. |
| channelId | string Channel id. |
| parameters | ParameterSet Array Optimization parameters. |
| libraries | Library Array The library projects. |
| grid | string Configuration of the backtest view grid. |
| liveGrid | string Configuration of the live view grid. |
| paperEquity | number The equity value of the last paper trading instance. |
| lastLiveDeployment | string($date-time) The last live deployment active time. |
| liveForm | object The last live wizard content used. |
| encrypted | boolean Indicates if the project is encrypted. |
| codeRunning | boolean Indicates if the project is running or not. |
| leanEnvironment | integer LEAN environment of the project running on. |
| encryptionKey | EncryptionKey object Encryption key details. |
| Example |
{
"projectId": 23456789,
"organizationId": "5cad178b20a1d52567b534553413b691",
"name": "string",
"modified": "2021-11-26T15:18:27.693Z",
"created": "2021-11-26T15:18:27.693Z",
"ownerId": 0,
"language": "C#",
"collaborators": [
{
"uid": 0,
"liveControl": true,
"permission": "read",
"publicId": "string",
"profileImage": "https://cdn.quantconnect.com/web/i/users/profile/abc123.jpeg",
"email": "abc@123.com",
"name": "string",
"bio": "string",
"owner": true
}
],
"leanVersionId": 0,
"leanPinnedToMaster": true,
"owner": true,
"description": "string",
"channelId": "string",
"parameters": [
{
"name": "string",
"value": 0
}
],
"libraries": [
{
"projectId": 23456789,
"libraryName": "string",
"ownerName": "string",
"access": true
}
],
"grid": "string",
"liveGrid": "string",
"paperEquity": 0,
"lastLiveDeployment": "2021-11-26T15:18:27.693Z",
"liveForm": ,
"encrypted": true,
"codeRunning": true,
"leanEnvironment": 0,
"encryptionKey": {
"id": "string",
"name": "string"
}
}
|
Collaborator Model | |
|---|---|
| uid | integer User ID. |
| liveControl | boolean Indicate if the user have live control. |
| permission | string Enum The permission this user is given. Options : ['read', 'write'] |
| publicId | string The user public ID. |
| profileImage | string The url of the user profile image. |
string The registered email of the user. | |
| name | string The display name of the user. |
| bio | string The biography of the user. |
| owner | boolean Indicate if the user is the owner of the project. |
| Example |
{
"uid": 0,
"liveControl": true,
"permission": "read",
"publicId": "string",
"profileImage": "https://cdn.quantconnect.com/web/i/users/profile/abc123.jpeg",
"email": "abc@123.com",
"name": "string",
"bio": "string",
"owner": true
}
|
ParameterSet Model - Parameter set. | |
|---|---|
| name | string Name of parameter. |
| value | number Value of parameter. |
| Example |
{
"name": "string",
"value": 0
}
|
Library Model | |
|---|---|
| projectId | integer Project Id of the library project. |
| libraryName | string Name of the library project. |
| ownerName | string Name of the library project owner. |
| access | boolean Indicate if the library project can be accessed. |
| Example |
{
"projectId": 23456789,
"libraryName": "string",
"ownerName": "string",
"access": true
}
|
EncryptionKey Model - Encryption key details. | |
|---|---|
| id | string Encryption key id. |
| name | string Name of the encryption key. |
| Example |
{
"id": "string",
"name": "string"
}
|
LeanVersion Model | |
|---|---|
| id | integer ID of the LEAN version. |
| created | string($date-time) Date when this version was created. |
| description | string Description of the LEAN version. |
| leanHash | string Commit Hash in the LEAN repository. |
| leanCloudHash | string Commit Hash in the LEAN Cloud repository. |
| name | string Name of the branch where the commit is. |
| ref | string Reference to the branch where the commit is. |
| public | integer Indicates if the version is available for the public (1) or not (0). |
| Example |
{
"id": 0,
"created": "2021-11-26T15:18:27.693Z",
"description": "string",
"leanHash": "string",
"leanCloudHash": "string",
"name": "string",
"ref": "string",
"public": 0
}
|
401 Authentication Error
UnauthorizedError Model - Unauthorized response from the API. Key is missing, invalid, or timestamp is too old for hash. | |
|---|---|
| www_authenticate | string Header |
Examples
The following examples demonstrate project management through the QuantConnect API.
Example 1: CRUD Operations
This example demonstates creating, reading, updating, and deleting a project through the cloud API.
from base64 import b64encode
from hashlib import sha256
from time import time
from requests import get, post
BASE_URL = 'https://www.quantconnect.com/api/v2/'
# You need to replace these with your actual credentials.
# You can request your credentials at https://www.quantconnect.com/settings/
# You can find our organization ID at https://www.quantconnect.com/organization/
USER_ID = 0
API_TOKEN = '____'
ORGANIZATION_ID = '____'
def get_headers():
# Get timestamp
timestamp = f'{int(time())}'
time_stamped_token = f'{API_TOKEN}:{timestamp}'.encode('utf-8')
# Get hased API token
hashed_token = sha256(time_stamped_token).hexdigest()
authentication = f'{USER_ID}:{hashed_token}'.encode('utf-8')
authentication = b64encode(authentication).decode('ascii')
# Create headers dictionary.
return {
'Authorization': f'Basic {authentication}',
'Timestamp': timestamp
}
# Authenticate to verify credentials
response = post(f'{BASE_URL}/authenticate', headers = get_headers())
print(response.json())
# --------------------
# The project ID of the project to manage
project_id = 12345678
### Create Project
# Send a POST request to the /projects/create endpoint to create a new project
response = post(f'{BASE_URL}/projects/create', headers=get_headers(), json={
"name": f"Project_{int(time())}", # Unique project name using current timestamp
"language": "Py" # Programming language for the project (Python)
})
# Parse the JSON response into python managable dict
result = response.json()
# Extract the project ID from the response
project_id = result['projects'][0]['projectId']
# Check if the request was successful and print the result
if result['success']:
print("Project Created Successfully:")
print(result)
### Read Project
# Prepare data payload to read project details
payload = {
"id": project_id # ID of the project to read
}
# Send a POST request to the /projects/read endpoint to get project details
response = post(f'{BASE_URL}/projects/read', headers=get_headers(), json=payload)
# Parse the JSON response into python managable dict
result = response.json()
# Check if the request was successful and print the project details
if result['success']:
print("Project Details:")
print(result)
### Update Project
# Send a POST request to the /projects/update endpoint to update project details
response = post(f'{BASE_URL}/projects/update', headers=get_headers(), json={
"projectId": project_id, # ID of the project to update
"name": f"Project_{project_id}", # New name for the project
"description": "The new project name is awesome!" # New description
})
# Parse the JSON response into python managable dict
result = response.json()
# Check if the request was successful and print the result
if result['success']:
print("Project Updated Successfully:")
print(result)
### Delete Project
# Prepare data payload to delete the project
payload = {
"projectId": project_id # ID of the project to delete
}
# Send a POST request to the /projects/delete endpoint to delete the project
response = post(f'{BASE_URL}/projects/delete', headers=get_headers(), json=payload)
# Parse the JSON response into python managable dict
result = response.json()
# Check if the request was successful and print the result
if result['success']:
print("Project Deleted Successfully:")
print(result)
Example 2: Delete All Projects in a Directory
This example deletes all projects under a specific directory in the organization workspace.
from base64 import b64encode
from hashlib import sha256
from time import time
from requests import get, post
BASE_URL = 'https://www.quantconnect.com/api/v2/'
# You need to replace these with your actual credentials.
# You can request your credentials at https://www.quantconnect.com/settings/
# You can find our organization ID at https://www.quantconnect.com/organization/
USER_ID = 0
API_TOKEN = '____'
ORGANIZATION_ID = '____'
def get_headers():
# Get timestamp
timestamp = f'{int(time())}'
time_stamped_token = f'{API_TOKEN}:{timestamp}'.encode('utf-8')
# Get hased API token
hashed_token = sha256(time_stamped_token).hexdigest()
authentication = f'{USER_ID}:{hashed_token}'.encode('utf-8')
authentication = b64encode(authentication).decode('ascii')
# Create headers dictionary.
return {
'Authorization': f'Basic {authentication}',
'Timestamp': timestamp
}
# Authenticate to verify credentials
response = post(f'{BASE_URL}/authenticate', headers = get_headers())
print(response.json())
# --------------------
def get_projects_in_directory(key):
"""Get all projects in a specific directory in the organization
workspace.
Keyword arguments:
key -- path to a directory of projects in the organization workspace
(ex: path/to/dir)
"""
# Split the key into path segments.
key_segments = [s for s in key.split('/') if s]
if not key_segments:
print('Invalid key:', key)
return
# Iterate through all projects
response = post(f'{BASE_URL}/projects/read', headers=get_headers())
response.raise_for_status()
project_ids = []
for project in response.json()['projects']:
# Check if the project is in the directory.
if all(a == b for a, b in zip(key_segments, project['name'].split('/'))):
project_ids.append(project['projectId'])
return project_ids
def delete_projects(project_ids):
"""Delete a set of projects.
Keyword arguments:
project_ids -- list of project Ids.
"""
for id_ in project_ids:
post(
f'{BASE_URL}/projects/delete',
headers=get_headers(),
json={'projectId': id_}
).raise_for_status()
delete_projects(get_projects_in_directory('/path/to/projects/to/delete'))