Search Projects
Lists / searches active projects.
Authentication: X-API-KEY header (see Authentication).
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | No | Exact project id. When provided, returns just that project (ignores query). |
| query | string | No | An exact client name. Returns that client's projects. Omit to list all projects in the workspace. |
query here is not free text — it is matched to a client by name. If no client with that exact name exists, the endpoint returns 404 Not Found.
Request
curl -X GET https://api.withmoxie.com/public/action/projects/search?query=VALUE \
-H "X-API-KEY: your_api_key_here"
Response
Returns an array of ProjectSearchResult objects: the existing search fields plus description, agreementSource, and proposalVersion. feeSchedule and projectTypeId are included using their existing field names. Query and active-project filtering remain unchanged.
| Field | Meaning |
|---|---|
description | Project description. Preserve it when sending a full PUT update. |
feeSchedule | Billing configuration, including fee type, amount, and retainer settings. |
projectTypeId | Project type id. |
proposalId, proposalName, proposalVersion | Existing proposal/agreement reference. Version 2 refers to the current agreement contract. |
agreementSource | Stored agreement origin snapshot, when available: id, name, and dateSigned. |
This response does not add private project comments, event history, invoice-id collections, import metadata, package-execution internals, or an expanded client/contact object. Existing fields remain compatible with earlier search responses. An API key still grants workspace-owner access to the public API; project descriptions and custom values may contain sensitive business information.
Projects do not persist a direct opportunityId or source-template id. The endpoint does not synthesize these fields or rename proposalId to agreementId. Source references can be absent on independently created projects.
To replace a project, fetch its search result, change the intended fields, and send the public fields to Update Project. Internal state omitted from search is retained by the server. Prefer PATCH for isolated changes.
[
{
"id": "66b0f4c3c3a9e40012ab6611",
"accountId": 10016,
"clientId": "66b0f2a1c3a9e40012ab34cd",
"name": "Website Redesign",
"description": "Design and implementation scope",
"projectTypeId": "project-type-id",
"feeSchedule": { "feeType": "Fixed Price", "amount": 12000 },
"proposalId": "agreement-id",
"proposalName": "Signed terms",
"proposalVersion": 2,
"agreementSource": { "id": "agreement-id", "name": "Signed terms", "dateSigned": "2026-07-01T08:00:00Z" },
"active": true,
"startDate": "2026-07-15",
"dueDate": "2026-10-01",
"dateCreated": "2026-07-01T09:00:00Z",
"client": { "id": "66b0f2a1c3a9e40012ab34cd", "name": "Acme Kft." },
"hexColor": "#5C00E2",
"portalAccess": "FULL",
"showTimeWorkedInPortal": true,
"customValues": []
}
]