List tickets
Optional custom field filters: any query parameter whose name is custom_field_ + field_key (same snake_case key as in ticket custom_fields) restricts results to tickets whose stored value for that definition matches the parameter value (AND with other filters). Send the literal value __empty__ to match tickets with no stored value for that field. At most 10 distinct keys; values are validated per definition type (for example option UUID for select / multi_select, YYYY-MM-DD for date, ISO 8601 for date_time). Definitions scoped to selected mailboxes only apply when the ticket’s inbox is linked to the definition.
curl -X GET "/api/v1/tickets?query=example_string&q=example_string&status=example_string&inbox_id=123e4567-e89b-12d3-a456-426614174000&assignee_id=example_string&priority=low&tag_ids=example_string&created_after=2024-12-25T10:00:00Z&created_before=2024-12-25T10:00:00Z&updated_after=2024-12-25T10:00:00Z&updated_before=2024-12-25T10:00:00Z&sort=created_at&order=asc&page=25&per_page=25&custom_field_{field_key}=example_string" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN (API key (ixk_...))"
import requests
import json
url = "/api/v1/tickets?query=example_string&q=example_string&status=example_string&inbox_id=123e4567-e89b-12d3-a456-426614174000&assignee_id=example_string&priority=low&tag_ids=example_string&created_after=2024-12-25T10:00:00Z&created_before=2024-12-25T10:00:00Z&updated_after=2024-12-25T10:00:00Z&updated_before=2024-12-25T10:00:00Z&sort=created_at&order=asc&page=25&per_page=25&custom_field_{field_key}=example_string"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN (API key (ixk_...))"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("/api/v1/tickets?query=example_string&q=example_string&status=example_string&inbox_id=123e4567-e89b-12d3-a456-426614174000&assignee_id=example_string&priority=low&tag_ids=example_string&created_after=2024-12-25T10:00:00Z&created_before=2024-12-25T10:00:00Z&updated_after=2024-12-25T10:00:00Z&updated_before=2024-12-25T10:00:00Z&sort=created_at&order=asc&page=25&per_page=25&custom_field_{field_key}=example_string", {
method: "GET",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN (API key (ixk_...))"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "/api/v1/tickets?query=example_string&q=example_string&status=example_string&inbox_id=123e4567-e89b-12d3-a456-426614174000&assignee_id=example_string&priority=low&tag_ids=example_string&created_after=2024-12-25T10:00:00Z&created_before=2024-12-25T10:00:00Z&updated_after=2024-12-25T10:00:00Z&updated_before=2024-12-25T10:00:00Z&sort=created_at&order=asc&page=25&per_page=25&custom_field_{field_key}=example_string", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN (API key (ixk_...))")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('/api/v1/tickets?query=example_string&q=example_string&status=example_string&inbox_id=123e4567-e89b-12d3-a456-426614174000&assignee_id=example_string&priority=low&tag_ids=example_string&created_after=2024-12-25T10:00:00Z&created_before=2024-12-25T10:00:00Z&updated_after=2024-12-25T10:00:00Z&updated_before=2024-12-25T10:00:00Z&sort=created_at&order=asc&page=25&per_page=25&custom_field_{field_key}=example_string')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN (API key (ixk_...))'
response = http.request(request)
puts response.body
{
"data": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"ticket_number": 42,
"subject": "example_string",
"inbox_id": "123e4567-e89b-12d3-a456-426614174000",
"status": "open",
"status_id": "123e4567-e89b-12d3-a456-426614174000",
"status_name": "John Doe",
"status_color": "example_string",
"priority": "low",
"priority_id": "123e4567-e89b-12d3-a456-426614174000",
"priority_name": "John Doe",
"priority_color": "example_string",
"assignee_id": "123e4567-e89b-12d3-a456-426614174000",
"contact_id": "123e4567-e89b-12d3-a456-426614174000",
"remind_at": "2024-12-25T10:00:00Z",
"remind_transition_status_id": "123e4567-e89b-12d3-a456-426614174000",
"created_at": "2024-12-25T10:00:00Z",
"updated_at": "2024-12-25T10:00:00Z"
}
],
"meta": {
"page": 25,
"per_page": 25,
"total": 42
}
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Forbidden",
"message": "You don't have permission to access this resource",
"code": 403
}
{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Please try again later",
"code": 429,
"retryAfter": 3600
}
/tickets
API key from Settings → API. Pass as Authorization: Bearer <key>
Full-text search (PostgreSQL websearch). Matches ticket subject/body vectors and message bodies; combined with all other filters with AND. If both query and q are sent, query wins.
Alias for query (ignored when query is present).
Comma-separated statuses
UUID or __unassigned__
Comma-separated tag UUIDs (ticket must have all)
ISO 8601 lower bound on created_at
ISO 8601 upper bound on created_at
ISO 8601 lower bound on updated_at
ISO 8601 upper bound on updated_at
Repeatable documented pattern (not a single fixed name). Use `custom_field_` + your ticket field’s `field_key`. Value __empty__ = no stored value. See operation description for limits and typing.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token (API key (ixk_...)). API key from Settings → API. Pass as Authorization: Bearer <key>
Query Parameters
Full-text search (PostgreSQL websearch). Matches ticket subject/body vectors and message bodies; combined with all other filters with AND. If both query and q are sent, query wins.
Alias for query (ignored when query is present).
Comma-separated statuses
UUID or unassigned
lownormalhighurgentComma-separated tag UUIDs (ticket must have all)
ISO 8601 lower bound on created_at
ISO 8601 upper bound on created_at
ISO 8601 lower bound on updated_at
ISO 8601 upper bound on updated_at
created_atupdated_atpriorityascdescRepeatable documented pattern (not a single fixed name). Use custom_field_ + your ticket field’s field_key. Value __empty__ = no stored value. See operation description for limits and typing.
Responses
Status type (semantic category)
openin_progresswaitingresolvedclosedCustom status ID
Custom status display name
Custom status hex color
Priority level (semantic category)
lownormalhighurgentCustom priority ID
Custom priority display name
Custom priority hex color
Set when transitioning to waiting (with status / status_id)
Invalid filter (including custom field key, value, or duplicate key)
Problem code unauthorized — missing/invalid Authorization: Bearer, or revoked API key.
Problem code forbidden — workspace has no API access entitlement, or insufficient_scope — read-only API key used for POST/PATCH/DELETE.
Rate limit exceeded
Last updated 3 weeks ago
Built with Documentation.AI