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

# List CRM tasks

> List CRM tasks for your organization with multi-attribute filtering and pagination

Retrieve a paginated list of CRM follow-up tasks. Supports filtering by status (`pending`, `completed`, `cancelled`), assigned team member UUID, associated contact UUID, and due date intervals.

***

### Authentication

This endpoint requires Bearer token authentication.

```http theme={null}
Authorization: Bearer <token>
```

| Header | Type | Required | Description | Format |
| :- | :- | :- | :- | :- |
| `Authorization` | `string` | **Yes** | Scoped organization API key or Bearer JWT token | `Bearer <token>` |

***

### Query Parameters

<ParamField header="Authorization" type="string" required>
  Bearer token for authentication. Format: `Bearer <token>`.
</ParamField>

<ParamField query="status" type="string">
  Filter tasks by current status: `pending`, `completed`, or `cancelled`.
</ParamField>

<ParamField query="assignee_id" type="string">
  Filter by assigned team member user UUID.
</ParamField>

<ParamField query="contact_id" type="string">
  Filter by associated contact UUID.
</ParamField>

<ParamField query="due_before" type="string">
  Filter tasks due on or before this ISO 8601 datetime (e.g. `2026-10-31T23:59:59Z`).
</ParamField>

<ParamField query="due_after" type="string">
  Filter tasks due on or after this ISO 8601 datetime (e.g. `2026-10-01T00:00:00Z`).
</ParamField>

<ParamField query="limit" type="integer" default="50">
  Maximum tasks to return per page (minimum 1, maximum 100).
</ParamField>

<ParamField query="offset" type="integer" default="0">
  Pagination offset (records to skip).
</ParamField>

<ParamField query="page" type="integer">
  Page number (starts at 1). When provided, calculates offset as `(page - 1) * page_size`.
</ParamField>

<ParamField query="page_size" type="integer">
  Alternative alias for `limit` when using page-based pagination.
</ParamField>

***

### Response Fields

<ResponseField name="tasks" type="TaskResponse[]">
  List of task objects:

  <Expandable title="Task object attributes">
    <ResponseField name="id" type="string">Unique UUID identifier of the task.</ResponseField>
    <ResponseField name="organization_id" type="string">Organization UUID.</ResponseField>
    <ResponseField name="contact_id" type="string">Associated contact UUID.</ResponseField>
    <ResponseField name="title" type="string">Task title or subject.</ResponseField>
    <ResponseField name="description" type="string">Detailed notes or instructions, or `null`.</ResponseField>
    <ResponseField name="due_at" type="string">ISO 8601 datetime when task is due, or `null`.</ResponseField>
    <ResponseField name="assignee_id" type="string">Assigned user UUID or `null`.</ResponseField>
    <ResponseField name="status" type="string">Status string: `pending`, `completed`, or `cancelled`.</ResponseField>
    <ResponseField name="created_by_type" type="string">Origin actor type (`user`, `ai`, or `system`).</ResponseField>
    <ResponseField name="created_by_id" type="string">UUID of the creator, or `null`.</ResponseField>
    <ResponseField name="completed_at" type="string">Completion timestamp or `null`.</ResponseField>
    <ResponseField name="created_at" type="string">Creation timestamp.</ResponseField>
    <ResponseField name="updated_at" type="string">Last modification timestamp.</ResponseField>

    <ResponseField name="contact" type="object">
      Associated contact summary:

      <Expandable title="Contact summary fields">
        <ResponseField name="id" type="string">Contact UUID.</ResponseField>
        <ResponseField name="name" type="string">Contact display name.</ResponseField>
        <ResponseField name="phone_number" type="string">Contact phone number.</ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="total" type="integer">
  Total matching task count.
</ResponseField>

<ResponseField name="limit" type="integer">
  Effective limit applied.
</ResponseField>

<ResponseField name="offset" type="integer">
  Effective offset applied.
</ResponseField>

<ResponseField name="has_more" type="boolean">
  Flag indicating if further records are available.
</ResponseField>

***

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET "https://api.sayvy.ai/api/v1/crm/tasks?status=pending&limit=20" \
    -H "Authorization: Bearer <token>"
  ```

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

  url = "https://api.sayvy.ai/api/v1/crm/tasks"

  params = {
      "status": "pending",
      "limit": 20
  }

  headers = {
      "Authorization": "Bearer <token>"
  }

  response = requests.get(url, headers=headers, params=params)
  print(response.status_code)
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const params = new URLSearchParams({
    status: "pending",
    limit: "20"
  });

  const response = await fetch(`https://api.sayvy.ai/api/v1/crm/tasks?${params.toString()}`, {
    method: "GET",
    headers: {
      "Authorization": "Bearer <token>"
    }
  });

  const data = await response.json();
  console.log(data);
  ```

  ```java Java theme={null}
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;

  HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://api.sayvy.ai/api/v1/crm/tasks?status=pending&limit=20"))
      .header("Authorization", "Bearer <token>")
      .GET()
      .build();

  HttpResponse<String> response =
      HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
  System.out.println(response.body());
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "tasks": [
      {
        "id": "e4b9d107-1b4e-4f32-8df6-96cbef3e6801",
        "organization_id": "00000000-0000-0000-0000-000000000001",
        "contact_id": "7b8f9e2a-4c1d-48ef-9123-bcde456789ab",
        "title": "Follow up on product demo",
        "description": "Contact requested a quote after attending webinar",
        "due_at": "2026-10-15T15:00:00Z",
        "assignee_id": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
        "status": "pending",
        "created_by_type": "user",
        "created_by_id": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
        "completed_at": null,
        "created_at": "2026-10-07T10:00:00Z",
        "updated_at": "2026-10-07T10:00:00Z",
        "contact": {
          "id": "7b8f9e2a-4c1d-48ef-9123-bcde456789ab",
          "name": "Jane Doe",
          "phone_number": "+14155550199"
        }
      }
    ],
    "total": 1,
    "limit": 20,
    "offset": 0,
    "has_more": false
  }
  ```

  ```json 401 Unauthorized theme={null}
  {
    "detail": "Unauthorized"
  }
  ```
</ResponseExample>

***

<div
  style={{
display: "flex",
alignItems: "center",
justifyContent: "space-between",
backgroundColor: "rgba(255, 255, 255, 0.03)",
border: "1px solid rgba(255, 255, 255, 0.08)",
borderRadius: "16px",
padding: "10px 18px",
marginTop: "40px",
gap: "16px",
flexWrap: "wrap"
}}
>
  <a
    href="/api-reference/crm/dashboard"
    style={{
display: "inline-flex",
alignItems: "center",
gap: "6px",
color: "#94A3B8",
textDecoration: "none",
fontSize: "14px",
fontWeight: "500",
padding: "4px 8px"
}}
  >
    <span style={{ fontSize: "16px" }}>‹</span> Previous
  </a>

  <div
    style={{
display: "flex",
alignItems: "center",
gap: "16px",
backgroundColor: "rgba(255, 255, 255, 0.04)",
border: "1px solid rgba(255, 255, 255, 0.06)",
borderRadius: "12px",
padding: "8px 16px",
marginLeft: "auto"
}}
  >
    <div style={{ textAlign: "right" }}>
      <div style={{ fontSize: "13px", fontWeight: "700", color: "#F8FAFC" }}>Create task</div>

      <div style={{ fontSize: "11px", color: "#94A3B8", maxWidth: "260px", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
        POST /api/v1/crm/tasks
      </div>
    </div>

    <div style={{ width: "1px", height: "24px", backgroundColor: "rgba(255, 255, 255, 0.1)" }} />

    <a
      href="/api-reference/crm/create-task"
      style={{
  display: "inline-flex",
  alignItems: "center",
  gap: "6px",
  color: "#94A3B8",
  textDecoration: "none",
  fontSize: "14px",
  fontWeight: "500"
}}
    >
      Next <span style={{ fontSize: "16px" }}>›</span>
    </a>
  </div>
</div>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.