Search Projects
Search projects using up to two filters (prop1/op1/value1 and optionally prop2/op2/value2), combined with logic (AND/OR).
Properties:
- propX can be a standard field (e.g., status, title, city, type, accountId, etc.) or a custom property key name.
- Use the property key from your company settings.
- Filter by parent account with accountId. clientId is accepted as a deprecated alias for backwards compatibility.
Operators (opX):
- Equality: eq, neq
- Numeric/datetime comparisons: gt, gte, lt, lte
- Text/string matching: contains (case-insensitive)
- Lists: in, nin (CSV list in valueX)
- Ranges: between (use valueX as from,to)
- Existence: exists is not supported for custom properties due to performance limitations. Use eq or neq instead.
- status has a fixed set of values, so it supports only eq, neq, in, and nin.
Value formats:
- in/nin: lists can be provided as:
- Plain CSV: value1=OPEN,ACTIVE
- Quoted CSV (to include commas inside a value): value1="Last, First",Other
- JSON array: value1=["Last, First","Other"]
- between: from,to (e.g., value1=2025-01-01,2025-12-31 or value1=10,20)
- Dates should be ISO 8601 strings; numeric-like values on custom properties are matched against both numeric and text representations.
Examples:
- status equals ACTIVE: ?prop1=status&op1=eq&value1=ACTIVE
- custom id equals 1234: ?prop1=legacy_tool_project_id&op1=eq&value1=1234
- title contains "Solar": ?prop1=name&op1=contains&value1=Solar
- status IN (ACTIVE, ON_HOLD) AND city = Austin: ?prop1=status&op1=in&value1=ACTIVE,ON_HOLD&logic=and&prop2=city&op2=eq&value2=Austin
Note: If a project has no title (empty or whitespace-only), the response returns the parent account's title instead. The stored value is not modified — this is a read-time fallback only. Title-based search (title query param, full-text q, or the /projects/search endpoint with prop=title&op=contains) also matches projects whose own title is null/empty when the parent account's title matches the search term.
Supports date filtering (updated_after, updated_before), optionally widened to project-level line item edits via include_line_item_updates. updated_after/updated_before also match projects whose custom property values changed within the window.
Request
- Base URL: https://api.coperniq.io/v1
- URL: https://api.coperniq.io/v1/projects/search
- Auth: API key in header x-api-key
Query parameters
First field to filter (standard or custom keyName)
Operator for prop1
Value for prop1 (comma-separated values for in/nin or between)
Logical combination when both prop1 and prop2 are provided
Optional second field to filter
Operator for prop2
Value for prop2 (comma-separated values for in/nin or between)
Number of items per page (max 100)
Page number (1-based)
Filter items updated after this timestamp (ISO 8601). Also matches records whose custom property values changed within the window.
Filter items updated before this timestamp (ISO 8601). Also matches records whose custom property values changed within the window.
Requires updated_after and/or updated_before to also be passed — has no effect on its own. When true, widens that window to also match projects whose project-level line items (estimate/scope items) were added or edited in the window, and adds a lineItemsUpdatedAt field to each returned project (the most recent updatedAt among its own scope line items, null if none). Line items on quotes/invoices are excluded. Deletions and reorders are not detected. Ordering remains on the project's own updatedAt, so this flag is not a replacement for a full change-feed. Default: false. Only applies to project list/search endpoints.
Phase template ID to filter by phase-entry date. Required when entered_after or entered_before is provided. Given alone (no date bounds), matches records that ever entered this phase.
Only include records that entered the phase given by entered_phase_id on or after this date/timestamp. Accepts a date (2026-07-01) or a full ISO 8601 timestamp (2026-07-01T00:00:00Z). Requires entered_phase_id.
Only include records that entered the phase given by entered_phase_id before this date/timestamp (exclusive). Accepts a date (2026-08-01) or a full ISO 8601 timestamp (2026-08-01T00:00:00Z). Requires entered_phase_id.
Phase template ID to filter by phase-exit date. Required when exited_after or exited_before is provided. Given alone (no date bounds), matches records that have exited this phase at any point.
Only include records that exited the phase given by exited_phase_id on or after this date/timestamp. Accepts a date (2026-07-01) or a full ISO 8601 timestamp (2026-07-01T00:00:00Z). Requires exited_phase_id.
Only include records that exited the phase given by exited_phase_id before this date/timestamp (exclusive). Accepts a date (2026-08-01) or a full ISO 8601 timestamp (2026-08-01T00:00:00Z). Requires exited_phase_id. On opportunities, combine with exited_phase_id set to a "Closed - Won"-style phase template to find deals that closed within a date range.
Sort order for results
Whether to include archived (inactive) records in the response. By default only active records are returned.
Whether to include associated contacts in the response. Defaults to false unless explicitly set to true.
Response
List of projects matching filters
Changes
No recorded changes to this operation across all 1 revision of this API.