Support
List Support Tickets
Request
The organization and the page of closed tickets to list. The /organizations/support/tickets/list API accepts requests in the following format:
ListSupportTicketsRequest Model - Request body to list the support tickets of an organization. | |
|---|---|
| organizationId | string Id of the organization. |
| closedPage | integer Index of the page of closed tickets to return, starting at 0. Each page contains 10 tickets. The default value is 0. |
| Example |
{
"organizationId": "5cad178b20a1d52567b534553413b691",
"closedPage": 0
}
|
Responses
The /organizations/support/tickets/list API provides a response in the following format:
200 Success
SupportTicketListResponse Model - Response from listing the support tickets of an organization. | |
|---|---|
| open | SupportTicket Array Open tickets of the organization. |
| closed | SupportTicket Array Closed tickets in the requested page. |
| closedPage | integer Index of the page of closed tickets in the response. |
| totalClosed | integer Number of closed tickets of the organization. |
| allowance | integer Number of tickets your support seat lets you open in a 1-month rolling window. |
| remaining | integer Number of new tickets you can open now. The value is the allowance minus the tickets you opened in the last month, including closed tickets. |
| success | boolean Indicate if the API request was successful. |
| errors | string Array List of errors with the API call. |
| Example |
{
"open": [
{
"hash": "string",
"title": "string",
"status": "Open",
"time": "September 29, 2026 - 18:00",
"timeUnix": 0,
"data": {
"external_id": "215476157330380",
"ticket_hash": "string",
"status": "open",
"subject": "string",
"created_time": "2026-09-29 18:00:38",
"updated_time": "2026-09-29 18:01:28",
"project_id": 0,
"backtest_id": "string",
"live_deploy_id": "string"
},
"profiles": [
{
"name": "string",
"profile": "string"
}
]
}
],
"closed": [
{
"hash": "string",
"title": "string",
"status": "Open",
"time": "September 29, 2026 - 18:00",
"timeUnix": 0,
"data": {
"external_id": "215476157330380",
"ticket_hash": "string",
"status": "open",
"subject": "string",
"created_time": "2026-09-29 18:00:38",
"updated_time": "2026-09-29 18:01:28",
"project_id": 0,
"backtest_id": "string",
"live_deploy_id": "string"
},
"profiles": [
{
"name": "string",
"profile": "string"
}
]
}
],
"closedPage": 0,
"totalClosed": 0,
"allowance": 0,
"remaining": 0,
"success": true,
"errors": [
"string"
]
}
|
SupportTicket Model - A support ticket of an organization. | |
|---|---|
| hash | string Id of the ticket. |
| title | string Subject of the ticket. |
| status | string Enum Status of the ticket. Options : ['Open', 'Closed'] |
| time | string Time of the last update of the ticket. |
| timeUnix | integer Unix timestamp of the last update of the ticket. |
| data | SupportTicketData object Details of a support ticket. |
| profiles | SupportTicketMember Array Members who took part in the ticket. |
| Example |
{
"hash": "string",
"title": "string",
"status": "Open",
"time": "September 29, 2026 - 18:00",
"timeUnix": 0,
"data": {
"external_id": "215476157330380",
"ticket_hash": "string",
"status": "open",
"subject": "string",
"created_time": "2026-09-29 18:00:38",
"updated_time": "2026-09-29 18:01:28",
"project_id": 0,
"backtest_id": "string",
"live_deploy_id": "string"
},
"profiles": [
{
"name": "string",
"profile": "string"
}
]
}
|
SupportTicketData Model - Details of a support ticket. | |
|---|---|
| external_id | string Id of the ticket in the QuantConnect support system. Mention this Id when you contact our Support Team about the ticket. |
| ticket_hash | string Id of the ticket in the API. The value is the same as the hash of the ticket. |
| status | string Enum Status of the ticket. Options : ['open', 'closed'] |
| subject | string Subject of the ticket. |
| created_time | string Time the ticket was opened, in YYYY-MM-DD HH:MM:SS format. |
| updated_time | string Time of the last update of the ticket, in YYYY-MM-DD HH:MM:SS format. |
| project_id | integer Id of the project attached to the ticket. |
| backtest_id | string Id of the backtest attached to the ticket. |
| live_deploy_id | string Id of the live deployment attached to the ticket. |
| Example |
{
"external_id": "215476157330380",
"ticket_hash": "string",
"status": "open",
"subject": "string",
"created_time": "2026-09-29 18:00:38",
"updated_time": "2026-09-29 18:01:28",
"project_id": 0,
"backtest_id": "string",
"live_deploy_id": "string"
}
|
SupportTicketMember Model - A member who took part in a support ticket. | |
|---|---|
| name | string Name of the member. |
| profile | string URL of the profile image of the member. |
| Example |
{
"name": "string",
"profile": "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 demonstrates checking the ticket quota of your support seat, listing the support tickets of your organization, reading the messages of an open ticket, and opening a new ticket with an attached project, backtest, live deployment, and AI conversation 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())
# --------------------
### Check Ticket Quota
# Send a POST request to the /organizations/support/tickets/list endpoint to get the ticket quota and the tickets
response = post(f'{BASE_URL}/organizations/support/tickets/list', headers=get_headers(), json={
"organizationId": ORGANIZATION_ID,
"closedPage": 0 # Page of 10 closed tickets, starting at 0
})
# Parse the JSON response into python managable dict
result = response.json()
# Print the number of new tickets you can open. Every ticket you opened in the last month counts, even if it's closed
remaining = result['remaining'] if result['success'] else 0
print(f"Remaining tickets: {remaining} of {result.get('allowance')}")
### List Support Tickets
# The same response contains the open tickets and the requested page of closed tickets
open_tickets = result.get('open', [])
for ticket in open_tickets:
print(ticket['data']['external_id'], ticket['status'], ticket['title'])
### Read Support Ticket
if open_tickets:
# Send a POST request to the /organizations/support/tickets/read endpoint to read the first open ticket
response = post(f'{BASE_URL}/organizations/support/tickets/read', headers=get_headers(), json={
"organizationId": ORGANIZATION_ID,
"hash": open_tickets[0]['hash']
})
# Parse the JSON response into python managable dict
result = response.json()
# Check if the request was successful and print the messages
if result['success']:
for message in result['messages']:
print(message['time'], message['name'], message['message'])
### Create Support Ticket (only when the quota has tickets left)
if remaining > 0:
# Send a POST request to the /organizations/support/tickets/create endpoint to open a new ticket
# Each new ticket uses one ticket from the quota of your support seat
response = post(f'{BASE_URL}/organizations/support/tickets/create', headers=get_headers(), json={
"organizationId": ORGANIZATION_ID,
"subject": "Backtest orders don't fill at the expected price",
"message": "<p>The market orders in the attached backtest fill at the previous close.</p>",
"projectId": 12345678, # Optional. Gives the Support Team permission to view the project
"backtestId": "1c991c7eec8a7bd3b4bfc7e18a376fa6", # Optional. Backtest of the attached project
"deployId": "L-141106d80de1da9a9f85ea07c06bf7b6", # Optional. Stopped live deployment of the attached project
"agentDeploymentId": "A-3306e3e787f321efadf5c4392861d68d" # Optional. AI conversation of the attached project
})
# Parse the JSON response into python managable dict
result = response.json()
# Keep the hash of the new ticket to find it and comment on it
ticket_hash = result['hash']
### Get the Id of the New Support Ticket
# Send a POST request to the /organizations/support/tickets/list endpoint to find the new ticket
response = post(f'{BASE_URL}/organizations/support/tickets/list', headers=get_headers(), json={
"organizationId": ORGANIZATION_ID
})
# Parse the JSON response into python managable dict
result = response.json()
# Print the Id to mention when you contact our Support Team about the ticket
ticket = next(t for t in result['open'] if t['hash'] == ticket_hash)
print(f"Ticket Id: {ticket['data']['external_id']}")
### Comment on Support Ticket
# Send a POST request to the /organizations/support/tickets/create endpoint with the hash to comment on the ticket
response = post(f'{BASE_URL}/organizations/support/tickets/create', headers=get_headers(), json={
"organizationId": ORGANIZATION_ID,
"hash": ticket_hash,
"message": "<p>The issue is resolved. Thank you.</p>",
"close": True # Close the ticket after you add the comment
})
# Parse the JSON response into python managable dict
result = response.json()
print(result)