API reference · Search
GET/api/v1/search
Product availabilityAlgaPSA

Unified full-text search

Full-text search across all indexed business records (tickets, clients, contacts, projects, assets, invoices, contracts, documents, knowledge-base articles, and more) backed by the shared app_search_index. Results are tenant-scoped and filtered by the API key user's permissions: a coarse per-type permission gate plus a per-row access-control check, so only records the user could see in-app are returned. No dedicated search permission is required — any valid API key may call this endpoint. Client-portal API keys are automatically scoped to their own client.

Query parameters

querystringRequired
Full-text query. A concise expression of likely record words, identifiers, names, or quoted phrases — not a full sentence. Supports OR for alternatives (e.g. "laptop OR workstation").
typesstringOptional
Comma-separated list of object types to restrict the search (e.g. "ticket,project"). Omit to search every type the API key's user is permitted to read. Allowed values: client, contact, user, ticket, ticket_comment, project, project_phase, project_task, project_task_comment, asset, invoice, invoice_item, invoice_annotation, contract, client_contract, document, kb_article, service_catalog, service_request_submission, service_request_definition, workflow_task, interaction, schedule_entry, time_entry, board, category, tag, status.
limitintegerOptional
Maximum number of results to return. Defaults to 30; capped at 100.
cursorstringOptional
Opaque pagination cursor copied from a prior response's nextCursor.
sortstringOptional
Result ordering. "relevance" (default) ranks by full-text score; "recent" orders by last update.

Response body

Success response 200 · schema SearchResponse

dataobjectRequired
resultsarray of SearchResultRowRequired
Matching records for this page, ordered by the requested sort.
itemsobject
typestringRequired
Indexed business object type.
Enum: clientcontactuserticketticket_commentprojectproject_phaseproject_taskproject_task_commentassetinvoiceinvoice_iteminvoice_annotationcontractclient_contractdocumentkb_articleservice_catalogservice_request_submissionservice_request_definitionworkflow_taskinteractionschedule_entrytime_entryboardcategorytagstatus
idstringRequired
Object identifier within its type.
parentIdstring
Identifier of the parent record for nested results (e.g. the ticket of a ticket comment).
titlestringRequired
Primary display label for the record.
subtitlestring
Secondary context line.
snippetstring
Matched-text excerpt with <mark> tags around the highlighted terms.
urlstringRequired
Relative in-app URL pointing at the record.
scorenumberRequired
Relevance score; higher is more relevant.
updatedAtstring <date-time>Required
Source record last-updated timestamp.
groupsobjectRequired
Total match counts keyed by object type (across all pages), before the page limit is applied.
totalCountintegerRequired
Total number of matches across all permitted types.
nextCursorstring
Cursor for the next page; absent when the result set fits within the page.

Response codes

200
Matching records returned successfully.
400
Query parameter validation failed (missing/empty query, unknown type, or out-of-range limit).
401
API key is missing or invalid.
429
API rate limit exceeded for the key.
500
Unexpected error while executing the search.