Project Management

Read Project

Introduction

List details of all projects, or the project matched the passed project ID if the project ID property passed.

Request

The projectId for the project to read, or nothing to get a details list of all projects. The /projects/read API accepts requests in the following format:

ReadProjectRequest Model - Request to get details about a specific project or a subset of your projects.
projectId integer
Id of the project to read.
start integer
Starting (inclusive, zero-based) index of the projects to fetch. If you provide this property, omit the project Id property.
end integer
Last (exlusive) index of the projects to fetch. If you provide this property, omit the project Id property.
Example
{
  "projectId": 0,
  "start": 0,
  "end": 0
}

Responses

The /projects/read 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
required

Project id.
organizationId string
required

Orgainization id.
name string
required

Name of the project.
modified string($date-time)
required

Modified date for the project.
created string($date-time)
required

Date the project was created.
ownerId integer
required

Owner id.
language string Enum
required

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.
email 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
required

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

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'))

You can also see our Videos. You can also get in touch with us via Discord.

Did you find this page helpful?

Contribute to the documentation: