> ## Documentation Index
> Fetch the complete documentation index at: https://docs.timetracker.in/llms.txt
> Use this file to discover all available pages before exploring further.

# Find Project

> Search for a specific project by name within a workspace with comprehensive project details and statistics.

## Overview

The Find Project endpoint allows you to search for a specific project by name within a workspace. This endpoint returns detailed project information including client details, workspace information, and project statistics like task count and time entry count.

<Note>
  This endpoint performs a case-insensitive partial match search on the project name and includes comprehensive project metadata for use in Zapier workflows.
</Note>

## Authentication

All requests require a valid API key in the Authorization header:

```bash theme={null}
Authorization: Bearer YOUR_API_KEY
```

## Find Project

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST 'https://app.timetracker.in/api/integrations/zapier/triggers/projects/find' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer YOUR_API_KEY' \
    -d '{
      "workspace_id": "w1b2c3d4-e5f6-7890-abcd-ef0987654321",
      "name": "Website Redesign"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://app.timetracker.in/api/integrations/zapier/triggers/projects/find', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer YOUR_API_KEY'
    },
    body: JSON.stringify({
      workspace_id: 'w1b2c3d4-e5f6-7890-abcd-ef0987654321',
      name: 'Website Redesign'
    })
  });

  const projects = await response.json();
  ```

  ```python Python theme={null}
  import requests

  url = "https://app.timetracker.in/api/integrations/zapier/triggers/projects/find"
  headers = {
      "Content-Type": "application/json",
      "Authorization": "Bearer YOUR_API_KEY"
  }
  data = {
      "workspace_id": "w1b2c3d4-e5f6-7890-abcd-ef0987654321",
      "name": "Website Redesign"
  }

  response = requests.post(url, headers=headers, json=data)
  projects = response.json()
  ```
</CodeGroup>

### Request Body

<ParamField body="workspace_id" type="string" required>
  The unique identifier of the workspace to search within. Must be a valid UUID format.

  **Example:** `"w1b2c3d4-e5f6-7890-abcd-ef0987654321"`
</ParamField>

<ParamField body="name" type="string" required>
  The project name to search for. Performs case-insensitive partial matching.

  **Example:** `"Website Redesign"` or `"website"` (will match "Website Redesign")
</ParamField>

## Response

### Success Response

Returns an array containing the matching project object with comprehensive details, or an empty array if no match is found:

```json theme={null}
[
  {
    "id": "p1a2b3c4-d5e6-7890-abcd-ef1234567890",
    "name": "Website Redesign",
    "description": "Complete redesign of company website",
    "status": "active",
    "is_private": false,
    "default_billable_rate": 75.0,
    "default_billable": true,
    "estimated_hours": 120.0,
    "estimated_budget": 9000.0,
    "workspace_id": "w1b2c3d4-e5f6-7890-abcd-ef0987654321",
    "workspace_name": "Main Workspace",
    "client_id": "c1a2b3c4-d5e6-7890-abcd-ef1234567890",
    "client_name": "Acme Corp",
    "task_count": 15,
    "time_entry_count": 45,
    "member_count": 3,
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  }
]
```

<ResponseField name="id" type="string">
  Unique project identifier (UUID format)
</ResponseField>

<ResponseField name="name" type="string">
  Project name
</ResponseField>

<ResponseField name="description" type="string">
  Detailed project description
</ResponseField>

<ResponseField name="status" type="string">
  Current project status

  * `active` - Project is currently in progress
  * `completed` - Project has been finished
</ResponseField>

<ResponseField name="is_private" type="boolean">
  Whether the project is private (restricted access) or public
</ResponseField>

<ResponseField name="default_billable_rate" type="number">
  Default hourly rate for this project (overrides workspace default)
</ResponseField>

<ResponseField name="default_billable" type="boolean">
  Whether time entries are billable by default for this project
</ResponseField>

<ResponseField name="estimated_hours" type="number">
  Estimated total hours to complete the project
</ResponseField>

<ResponseField name="estimated_budget" type="number">
  Estimated budget for the project
</ResponseField>

<ResponseField name="workspace_id" type="string">
  Unique identifier of the workspace containing this project
</ResponseField>

<ResponseField name="workspace_name" type="string">
  Human-readable name of the workspace
</ResponseField>

<ResponseField name="client_id" type="string">
  Unique identifier of the associated client (null if no client assigned)
</ResponseField>

<ResponseField name="client_name" type="string">
  Name of the associated client (null if no client assigned)
</ResponseField>

<ResponseField name="task_count" type="integer">
  Total number of tasks within this project
</ResponseField>

<ResponseField name="time_entry_count" type="integer">
  Total number of time entries logged for this project
</ResponseField>

<ResponseField name="member_count" type="integer">
  Number of team members assigned to this project
</ResponseField>

<ResponseField name="created_at" type="string">
  ISO 8601 timestamp when project was created
</ResponseField>

<ResponseField name="updated_at" type="string">
  ISO 8601 timestamp when project was last modified
</ResponseField>

### No Results Response

When no matching project is found, returns an empty array:

```json theme={null}
[]
```

### Error Responses

<AccordionGroup>
  <Accordion title="400 Bad Request - Invalid Parameters">
    ```json theme={null}
    {
      "error": "Invalid request parameters"
    }
    ```

    **Cause**: Missing required fields or invalid UUID format\
    **Solution**: Ensure both `workspace_id` and `name` are provided with valid formats
  </Accordion>

  <Accordion title="401 Unauthorized">
    ```json theme={null}
    {
      "error": "Unauthorized"
    }
    ```

    **Cause**: Invalid or missing API key\
    **Solution**: Verify your API key is correct and properly formatted
  </Accordion>

  <Accordion title="500 Internal Server Error">
    ```json theme={null}
    {
      "error": "Internal server error"
    }
    ```

    **Cause**: Server-side error during search\
    **Solution**: Retry the request or contact support if the issue persists
  </Accordion>
</AccordionGroup>

## Search Behavior

### Partial Matching

The search performs case-insensitive partial matching on the project name:

* **Input**: `"website"` → **Matches**: "Website Redesign", "Mobile Website", "Website Maintenance"
* **Input**: `"redesign"` → **Matches**: "Website Redesign", "App Redesign", "Brand Redesign"

### Workspace Scoping

<Warning>
  **Workspace Isolation**: The search is limited to projects within the specified workspace. Projects from other workspaces are not accessible, even if they match the name criteria.
</Warning>

### Result Ordering

Results are ordered by creation date (newest first), so the most recently created matching project appears first.

## Zapier Integration Usage

### Common Use Cases

<AccordionGroup>
  <Accordion title="Project Selection in Workflows">
    **Use Case**: Allow users to select an existing project when creating tasks or logging time entries in Zapier workflows.

    **Implementation**: Use this endpoint to populate dropdown lists or validate project selections.
  </Accordion>

  <Accordion title="Project Status Monitoring">
    **Use Case**: Monitor project progress and status changes for automated notifications or reporting.

    **Implementation**: Use the `status`, `task_count`, and `time_entry_count` fields to track project health.
  </Accordion>

  <Accordion title="Client-Project Association">
    **Use Case**: Retrieve project details along with client information for billing or reporting workflows.

    **Implementation**: Use the `client_id` and `client_name` fields to associate projects with clients.
  </Accordion>

  <Accordion title="Budget and Time Tracking">
    **Use Case**: Monitor project budgets and time estimates for automated alerts or reporting.

    **Implementation**: Use `estimated_hours`, `estimated_budget`, and `time_entry_count` for progress tracking.
  </Accordion>
</AccordionGroup>

### Zapier Field Mapping

When setting up Zapier actions, you can map these project fields:

* **Project ID** → `id` (for referencing in other API calls)
* **Project Name** → `name` (for display purposes)
* **Project Status** → `status` (for conditional logic)
* **Client Information** → `client_id`, `client_name` (for client association)
* **Budget Data** → `estimated_budget`, `default_billable_rate` (for financial workflows)
* **Progress Metrics** → `task_count`, `time_entry_count`, `member_count` (for reporting)

## Project Statistics

The endpoint provides valuable project statistics that can be used for:

### Progress Tracking

* **Task Count**: Monitor how many tasks are assigned to the project
* **Time Entry Count**: Track how much work has been logged
* **Member Count**: See how many team members are involved

### Budget Management

* **Estimated Hours**: Compare against actual time logged
* **Estimated Budget**: Monitor against actual costs
* **Billable Rate**: Use for automated billing calculations

### Status Monitoring

* **Project Status**: Track active, completed, or on-hold projects
* **Privacy Settings**: Handle public vs. private project access
* **Billable Settings**: Determine if time should be billed by default

## Best Practices

<Check>
  **Search Optimization**:

  * Use specific name fragments for better results
  * Consider project naming conventions in your workspace
  * Handle empty results gracefully in your workflows
  * Cache project data when possible to reduce API calls
</Check>

<Tip>
  **Pro Tip**: Use the project statistics (task\_count, time\_entry\_count) to create automated project health dashboards or alerts when projects exceed estimated hours or budget.
</Tip>

<Warning>
  **Data Freshness**: Project statistics are calculated in real-time. For high-frequency monitoring, consider caching results to avoid excessive API calls.
</Warning>

## Rate Limits

This endpoint follows standard API rate limiting:

* **Rate Limit**: 100 requests per minute per API key
* **Burst Limit**: 10 requests per second
* **Reset Period**: Rolling 60-second window

<Info>
  **Rate Limit Headers**: Response headers include current usage information:

  * `X-RateLimit-Limit`: Maximum requests per window
  * `X-RateLimit-Remaining`: Remaining requests in current window
  * `X-RateLimit-Reset`: Timestamp when the limit resets
</Info>
