Getting Started with DeskDirector
DeskDirector Portals
Browser Support
What is the DeskDirector Admin Portal?
What is the DeskDirector Tech Portal
What is the DeskDirector Client Portal?
Desktop Portal
Managing Your Account
Admin Essentials
DeskDirector Features Overview
Logging in to DeskDirector
User Profiles & Profile Pictures
Managing Tickets with DeskDirector
Office Hours
Getting Started with the Solution Library
How Searching Works
Embedding Help Page Media
Get started with the DeskDirector Power Automate Connector
Features
Portal Customization
Forms
Service Catalogue
Communication
Email Connectors
Notifications
Email Notifications
Actionable Messages for Emails
Real-Time Chats
Email Template Engine
Surveys
Broadcasts
Generative AI
DeskDirector with Generative AI
Ticket Summary for TECH Portal
Setting up AI Service Providers
Microsoft Foundry for DeskDirector
Knowledge Bases for AI Assistants
Custom Tools for AI Assistants
AI Assistants in DeskDirector
Advanced
Login & Authentication
Contact Groups
Custom Domains
File Storage
Dashboard
Accounts
Contacts
Approvals
Tags
Task Lists
The Learning Center
Portal Deep Linking
Auditing & Analytics
Microsoft Power Automate
Actions
Solutions
Featured Solution: Teams Ticket Discussion
Power Automate Template Gallery
Featured Solution: Ticket Briefing
Power Automate Administration
DeskDirector Power Platform Connector Reference
Power Automate Connector - Setting up your first flow
Microsoft Teams App
Introducing the DeskDirector for Microsoft Team App
Installing the Microsoft Teams App (Client Mode)
Installing the Microsoft Teams App (TECH Mode)
Setting up Tags for Teams Discussions (TECH Portal)
Branding the DeskDirector Teams App
DeskDirector Teams App Notifications
Contact Groups Integration with Microsoft Teams
Setting up Content Security Policy (CSP)
Advanced topic: Setting up Tech & Client Mode in the same tenancy
Integrating Microsoft Teams with DeskDirector Tech Portal
Smart Alerts for TECH Users
Integrations
Developer Resources
Getting Started
What is the Toki Iti API
API Versions & Routes
Roles & Scopes
Authorization Options
Querying the API
How to Change an Entity Through the API
API Key Authorization
OAuth Fundamentals
Understanding OAuth for Tokity Integrations: Key Concepts
OAuth Authorization Code Flow: How an App Gets Access to Tokity
OAuth App Registration
How to Register an OAuth App to Integrate with Tokity
Choosing an OAuth App Type: Confidential vs. Public Apps and Client Secrets
OAuth Personal Secrets: What They Are and When to Use Them
OAuth Administration
Configuring OAuth Settings in Tokity
Managing OAuth Authorized Sessions and User Consent
Granting OAuth Admin Consent at the Root Level
API Response Control
Uploading Attachments (Ticket API)
The Prefer Header — Overview
Controlling Returned Data (Ticket API)
Controlling Returned Data (Form Result API)
Controlling Returned Data (Workspace API)
Workspace Ordering
How Workspace Ordering Works
Creating and Reordering Workspace Groups
Adding and Reordering Tickets in a Workspace Group
Data Sync & Notifications
Delta API: Tracking Changes Over Time
Webhooks vs. Events — Differences, When to Use Which
Verifying Webhook and Event Payloads (HMAC Signature)
Ticket Widgets
Ticket Widget: Overview
How the Widget Is Requested
Ticket Widget Anatomy and Styling
Ticket Widget Actions: Leading, Secondary and Primary
Ticket Widget: Progress Type
Ticket Widget: List Type
Ticket Widget: Description Type
Ticket Widget: Form Type
Ticket Widget: Control When a Widget Refreshes
Ticket Widget: Form Results and State Across Steps
Ticket Widget: Error Responses and Debugging
Ticket Widget: Building a Multi-Step Request
Glossary
Security
Troubleshooting
Troubleshooting via Web Developer Tools
Permissions & Access - Common Issues
Contact DeskDirector Support
Troubleshooting DeskDirector Connection Issues
Desktop Portal - Common Issues
Contact Impersonation
Approvals - Common Issues
Microsoft Teams App - Common Issues
Email & Email Delivery - Common Issues
Login & Authentication - Common Issues
DeskDirector Desktop App - Installation Issues
- All Categories
- Developer Resources
- Getting Started
- Querying the API
Querying the API
Updated
by Helpdocs Admin
Most collection endpoints in v4 support filtering, searching, and ordering through a single POST request. Rather than a dedicated query language, you send a JSON payload describing what you want — including pagination, text search, property filters, and sort order.
Use skip and take to page through results:
{
"skip": 0,
"take": 25
}Full text search
To search across an entity's text fields, use the term property (older endpoints may still use search — term is now preferred):
{
"term": "printer offline"
}Any text you provide is tokenized by splitting on spaces, then matched using full text search. Exact matches are weighted more heavily than prefix matches.
Filtering by property
List-based filters (v2/v3 style)
Older versions let you filter a property by providing a list of IDs. The server matches entities where the property contains any of the listed values:
{
"queues": [{ "entityId": 33, "name": "support" }],
"assignees": [{ "entityId": 234, "name": "agent" }]
}A few things to know:
- The server only reads
entityId—nameis included for UI display purposes only and can be left blank ornull. - Within a single property, multiple values are combined with OR (match any).
- Between different properties, the filter is combined with AND.
The example above returns entities in either queue 33 and assigned to agent 234 — i.e., must match both the queue condition and the assignee condition.
Operator-based filters (v4)
v4 introduces an operator for each property, giving you more control than a simple "contains any" match:
{
"queues": { "operator": "in", "value": [{ "entityId": 33, "name": "support" }] },
"assignees": { "operator": "exist" }
}This example returns entities in queue 33 that also have any assignee. As before, conditions across different properties are combined with AND — only the logic within a single property has more options now.
Operator types
There are two operator variants, depending on whether the property is a single value or a collection:
export type TokenOperator =
| 'in'
| 'not_in'
| 'exist'
| 'not_exist';
export type TokenCollectionOperator =
| 'all_in'
| 'not_all_in'
| 'in'
| 'not_in'
| 'exist'
| 'not_exist';
Use TokenCollectionOperator for properties that are themselves collections on the entity — it adds all_in / not_all_in, letting you match entities that contain all specified values, not just any of them.
Simple filters
Some filters don't need an operator at all — for example, filtering by entity state or a boolean property. These accept the value directly.
Filtering by metadata
Several entities — including agent, contact, account, ticket, comment, and time entry — support metadata: custom string-to-string key/value pairs you define. Metadata is a useful place to store references to external systems, such as mapping an account to a company record in another platform (e.g., a zendesk_organization_id key holding that system's ID as the value).
Metadata filtering always uses TokenOperator (in, not_in, exist, not_exist) — full text search isn't available on metadata fields, but these four operators cover most scenarios.
Provide metadata filters as a list, since you can filter on multiple keys at once:
{
"metadata": [
{ "key": "organization_id", "operator": "in", "value": ["1", "3"] }
]
}Ordering results
Where supported, use the order property to sort results. You can provide multiple fields, applied in sequence:
{
"order": ["-name", "created_at"]
}This example sorts by name descending first, then by created_at ascending for any ties. All order tokens sort ascending by default — prefix a token with - to sort descending.
Each entity has its own set of supported order tokens. For example, tickets support:
export type TicketOrderToken =
| 'name'
| 'id'
| 'last_modified_at'
| 'last_comment_at'
| 'created_at'
| 'relevance';
term), it's best to leave order unset, or explicitly use relevance. Full text search has its own internal weighting system for ranking results, which a manual sort order would override.Finding the exact filters available for an entity
Every entity has its own specific set of filterable properties and order tokens. To see the full definition for a given endpoint, use our TypeScript conversion tool:
/swagger/index.html?urls.primaryName=Internal+API+V2#/TypeScript/get_api_v2_typescript_api
Provide a root-level path (e.g., /api/v4/accounts) to generate a TypeScript definition showing exactly which properties, operators, and string enums are supported for that entity.