> ## 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.

# Get CRM dashboard metrics

> Retrieve aggregated CRM metrics for contacts, AI/human handling, and tasks

Retrieve executive and operational metrics summarizing your organization's entire CRM state in real time. Returns contacts broken down by lifecycle stage, AI vs human conversation handling counts, and active/overdue task quantities.

***

### 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>` |

***

### Input parameters

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

***

### Response Fields

<ResponseField name="contacts" type="object">
  Contact distribution across pipeline lifecycle stages:

  <Expandable title="Contacts breakdown">
    <ResponseField name="total" type="integer">Total number of contacts in the organization.</ResponseField>
    <ResponseField name="new" type="integer">Contacts in `new` stage.</ResponseField>
    <ResponseField name="engaged" type="integer">Contacts in `engaged` stage.</ResponseField>
    <ResponseField name="qualified" type="integer">Contacts in `qualified` stage.</ResponseField>
    <ResponseField name="customers" type="integer">Contacts marked as `customer` or `customers`.</ResponseField>
    <ResponseField name="lost" type="integer">Contacts marked as `lost`.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="handling" type="object">
  Conversation delegation distribution:

  <Expandable title="Handling breakdown">
    <ResponseField name="ai" type="integer">Contacts currently handled automatically by Voice & Chat AI agents (`ai_handling: true`).</ResponseField>
    <ResponseField name="human" type="integer">Contacts currently routed to human agents (`ai_handling: false`).</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="tasks" type="object">
  Operational task statistics:

  <Expandable title="Tasks breakdown">
    <ResponseField name="pending" type="integer">Total active tasks in `pending` status.</ResponseField>
    <ResponseField name="overdue" type="integer">Pending tasks whose `due_at` timestamp is earlier than current time.</ResponseField>
  </Expandable>
</ResponseField>

***

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET "https://api.sayvy.ai/api/v1/crm/dashboard" \
    -H "Authorization: Bearer <token>"
  ```

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

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

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

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

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api.sayvy.ai/api/v1/crm/dashboard", {
    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/dashboard"))
      .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}
  {
    "contacts": {
      "total": 1250,
      "new": 340,
      "engaged": 520,
      "qualified": 210,
      "customers": 150,
      "lost": 30
    },
    "handling": {
      "ai": 980,
      "human": 270
    },
    "tasks": {
      "pending": 45,
      "overdue": 8
    }
  }
  ```

  ```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/overview"
    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" }}>List tasks</div>

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

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

    <a
      href="/api-reference/crm/list-tasks"
      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.