---
title: "Logs"
description: "Read out the logs of a backtest."
canonical: https://www.quantconnect.com/docs/v2/cloud-platform/api-reference/backtest-management/read-backtest/logs
markdown: https://www.quantconnect.com/docs/v2/cloud-platform/api-reference/backtest-management/read-backtest/logs.md
language: python
source: https://github.com/QuantConnect/Documentation/tree/master/01%20Cloud%20Platform/99%20API%20Reference/05%20Backtest%20Management/02%20Read%20Backtest/06%20Logs
modified: 2026-11-02
index: https://www.quantconnect.com/llms.txt
---

# Logs

[Documentation](https://www.quantconnect.com/docs/v2.md) > [Cloud Platform](https://www.quantconnect.com/docs/v2/cloud-platform.md) > [API Reference](https://www.quantconnect.com/docs/v2/cloud-platform/api-reference.md) > [Backtest Management](https://www.quantconnect.com/docs/v2/cloud-platform/api-reference/backtest-management.md) > [Read Backtest](https://www.quantconnect.com/docs/v2/cloud-platform/api-reference/backtest-management/read-backtest.md) > Logs

> Code examples are shown in Python. Append `?lang=csharp` to this URL for the C# version of this page.

## Introduction

Read out the logs of a backtest.

## Description

Per our [Terms and Conditions](https://www.quantconnect.com/terms), you may not use this endpoint to export market data or any other dataset information. For more information about the logs you can produce, see [Log Quotas](https://www.quantconnect.com/docs/v2/cloud-platform/organizations/resources.md#09-Log-Quotas). This endpoint returns a range of lines and can filter them by keyword. To get all the logs of the backtest in one request, call the [/backtests/export/logs](https://www.quantconnect.com/docs/v2/cloud-platform/api-reference/backtest-management/read-backtest/export-logs.md) endpoint, which returns them as a text file.

## Request

Fetch the logs of a backtest for the project Id, backtest Id and lines provided. The `/backtests/read/log` API accepts requests in the following format:

| `ReadBacktestLogsRequest` Model - Request to read logs from a backtest. |  |
| --- | --- |
| projectId | `integer required example: 23456789` Id of the project from which to read the backtest. |
| backtestId | `string required example: 26c7bb06b8487cff1c7b3c44652b30f1` Id of the backtest from which to read the logs. |
| start | `integer required example: 0` Start line (inclusive) of logs to read. The lines numbers start at 0. |
| end | `integer required example: 200` End line (exclusive) of logs to read, where end - start <= 200. |
| query | `string required example: error` Case-insensitive keyword to filter the log lines. The start and end lines index the lines that contain the keyword. To read all the lines, set it to null or an empty string. |
| Example | `{ "projectId": 23456789, "backtestId": "26c7bb06b8487cff1c7b3c44652b30f1", "start": 0, "end": 200, "query": "error" }` |

## Responses

The `/backtests/read/log` API provides a response in the following format:

### 200 Success

| `ReadBacktestLogsResponse` Model - Logs from a backtest. |  |
| --- | --- |
| logs | `string Array` List of logs from the backtest. |
| length | `integer` Total number of log lines in the backtest that match the query. |
| success | `boolean` Indicate if the API request was successful. |
| errors | `string Array` List of errors with the API call. |
| Example | `{ "logs": [ "string" ], "length": 0, "success": true, "errors": [ "string" ] }` |

### 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 example demonstates creating, reading, updating, deleting, and listing backtests of 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())

# --------------------

### Create Backtest
# Define placeholder compilation ID (replace with actual value)
compile_id = "compile_id..."
# Send a POST request to the /backtests/create endpoint to create a backtest
response = post(f'{BASE_URL}/backtests/create', headers=get_headers(), json={
    "projectId": project_id,  # ID of the project to backtest
    "compileId": compile_id,  # Compilation ID for the backtest
    "backtestName": f"Backtest {int(time())}"  # Unique name for the backtest using current timestamp
})
# Parse the JSON response into python managable dict
result = response.json()
# Extract the backtest ID from the response
backtest_id = result['backtest']['backtestId']
# Check if the request was successful and print the result
if result['success']:
    print("Backtest Created Successfully:")
    print(result)

### Read Backtest Statistics
# Prepare data payload to read backtest statistics
payload = {
    "projectId": project_id,  # ID of the project
    "backtestId": backtest_id  # ID of the backtest to read
}
# Send a POST request to the /backtests/read endpoint to get statistics
response = post(f'{BASE_URL}/backtests/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 statistics
if result['success']:
    print("Backtest Statistics:")
    print(result)

### Read Backtest Logs
# Prepare data payload to read the first 200 log lines
payload = {
    "projectId": project_id,  # ID of the project
    "backtestId": backtest_id,  # ID of the backtest to read
    "start": 0,  # Start line (inclusive)
    "end": 200,  # End line (exclusive), at most 200 lines per request
    "query": None  # Keyword to filter the lines, or None to read all of them
}
# Send a POST request to the /backtests/read/log endpoint to get the logs
response = post(f'{BASE_URL}/backtests/read/log', 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 logs
if result['success']:
    print("Backtest Logs:")
    print(result)

### Update Backtest
# Send a POST request to the /backtests/update endpoint to update backtest details
response = post(f'{BASE_URL}/backtests/update', headers=get_headers(), json={
    "projectId": project_id,  # ID of the project
    "backtestId": backtest_id,  # ID of the backtest to update
    "name": f"Backtest_{backtest_id}",  # New name for the backtest
    "note": "The new backtest name is awesome!"  # Additional note
})
# 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("Backtest Updated Successfully:")
    print(result)

### Delete Backtest
# Prepare data payload to delete the backtest
payload = {
    "projectId": project_id,  # ID of the project
    "backtestId": backtest_id  # ID of the backtest to delete
}
# Send a POST request to the /backtests/delete endpoint to delete the backtest
response = post(f'{BASE_URL}/backtests/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("Backtest Deleted Successfully:")
    print(result)

### List Backtests
# Prepare data payload to list backtests with statistics
payload = {
    "projectId": project_id,  # ID of the project
    "includeStatistics": True  # Include statistics in the response
}
# Send a POST request to the /backtests/list endpoint to list backtests
response = post(f'{BASE_URL}/backtests/list', 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 list
if result['success']:
    print("List of Backtests:")
    print(result)

### Export Orders
# Download the orders of the backtest as a CSV file
payload = {
    "backtestId": backtest_id  # ID of the backtest
}
response = post(f'{BASE_URL}/backtests/export/orders', headers=get_headers(), json=payload)
with open(f'orders-{backtest_id}.csv', 'w', newline='') as file:
    file.write(response.text)

### Export Trades
# Download the closed trades of the backtest as a CSV file
payload = {
    "backtestId": backtest_id  # ID of the backtest
}
response = post(f'{BASE_URL}/backtests/export/trades', headers=get_headers(), json=payload)
with open(f'trades-{backtest_id}.csv', 'w', newline='') as file:
    file.write(response.text)

### Export Insights
# Download the insights of the backtest as a JSON file
payload = {
    "backtestId": backtest_id  # ID of the backtest
}
response = post(f'{BASE_URL}/backtests/export/insights', headers=get_headers(), json=payload)
with open(f'insights-{backtest_id}.json', 'w', newline='') as file:
    file.write(response.text)

### Export Logs
# Download the logs of the backtest as a text file
payload = {
    "projectId": project_id,  # ID of the project
    "backtestId": backtest_id  # ID of the backtest
}
response = post(f'{BASE_URL}/backtests/export/logs', headers=get_headers(), json=payload)
with open(f'logs-{backtest_id}.txt', 'w', newline='') as file:
    file.write(response.text)
```
