ghl_project_search_tasks
Search project tasks across a location using filters, sorting, free-text queries, and cursor pagination to find and sync work items.
Instructions
PROJECT MANAGEMENT API — hierarchy is spaces -> folders -> lists -> tasks (+ comments, space statuses, recurring tasks). Task batch-get is RBAC-filtered (inaccessible ids are omitted, not errors) and omits embedded subtasks. position is an opaque server-assigned lexorank string; there is no public reorder endpoint. Recurring tasks use owners/contactIds and rruleOptions.intervalType (task create uses assignees/contactId). Task search supports updatedAt filtering/sorting for incremental sync. The docs do not describe what a delete cascades to — treat every delete as destructive.
Search Tasks
Searches tasks across the location with filters, sort, free-text query, and optional subtaskViewMode. Requires limit; pass body searchAfter from the previous response searchAfter (opaque base64url string) for the next page. Scope to lists with listIds (max 10) — do not send a separate graph filter when using listIds. Filter subtasks with parentTaskId (Tasks V2 locations only; otherwise 422). subtaskViewMode=expanded returns embedded subtasks[]; separate may include parentName. Neither field appears on Get/Create/Update/List/Batch. total is the hit count after filters and access scope.
Endpoint: POST /projects/tasks/search (Version header: v3; source: v3/projects-v3.json)
OAuth scopes: projects/tasks.readonly
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body (schema carried verbatim from the official OpenAPI spec). | |
| locationId | No | Location id. Required for APP channel (`?locationId=`). Ignored for OAuth/PIT (token location is used). Do not send in path, body, or headers. |