---
title: List saved Agent Analytics insights
description: "Returns saved cost, efficiency, and quality findings, ranked by magnitude times confidence. These are periodically evaluated findings, not live queries. Heal…"
product: general
lang: en
token_estimate: 1957
---
# List saved Agent Analytics insights

> For AI agents: a documentation index is available at [/docs/llms.txt](/docs/llms.txt). Append `.md` to any page URL for markdown, or send `Accept: text/markdown`.

## List saved Agent Analytics insights

**GET** `/v1/projects/{project_id}/agent-analytics/insights`

Full URL: `https://developer-api.amplitude.com/v1/projects/{project_id}/agent-analytics/insights`

**Servers:**
- Production: `https://developer-api.amplitude.com/v1/projects/{project_id}/agent-analytics/insights`
- Staging: `https://developer-api.stag2.amplitude.com/v1/projects/{project_id}/agent-analytics/insights`

List saved Agent Analytics insights

Returns saved cost, efficiency, and quality findings, ranked by magnitude
times confidence. These are periodically evaluated findings, not live
queries. Healthy and closed findings can remain visible. Thumbs-downed
findings are excluded. Use each finding's project_id for individual reads.

## Authorizations

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| Authorization | string | Yes | — | http |

## Path parameters

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| project_id (path) | string | Yes | 12345 | Amplitude project identifier, backed by the canonical app ID. Constraints: pattern: ^[0-9]+$ |

## Query parameters

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| limit (query) | integer | No | 50 | Number of items to return. Defaults to 50, max 200. Constraints: min: 1, max: 200 |
| cursor (query) | string | No | — | Opaque cursor from `pagination.next_cursor` on the previous response. Numeric offsets are capped by the underlying search index (10,000 results per query). Well-formed pagination stops before that window; requests whose cursor would exceed it return 400 `pagination_not_supported`. Constraints: nullable |
| agent_name (query) | string | No | — | Exact agent name. Omit for all scopes; an empty string selects project-level findings only. |

## Response (application/json)

**200** — Saved findings and an opaque next-page cursor. Keep the same project and agent filter when paging.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| data | object[] | Yes | — | — |
| data.id | string | Yes | — | Constraints: format: uuid |
| data.object | string | Yes | — | — |
| data.project_id | string | Yes | — | The finding's own project, including when listed through a portfolio. |
| data.agent_name | string | Yes | — | Empty for project-level findings. |
| data.finding_key | string | Yes | — | Rule key, such as tool-failures. Not a unique finding identifier. |
| data.category | string | Yes | — | Allowed values: cost, efficiency, quality |
| data.title | string | Yes | — | — |
| data.summary | string | Yes | — | — |
| data.recommendation | string | Yes | — | — |
| data.measurements | object[] | Yes | — | — |
| data.measurements.key | string | Yes | — | — |
| data.measurements.label | string | Yes | — | — |
| data.measurements.value | number | Yes | — | — |
| data.measurements.unit | string | Yes | — | Constraints: nullable |
| data.evidence | object | Yes | — | — |
| data.evidence.session_ids | string[] | Yes | — | — |
| data.evidence.chart_definition | object | Yes | — | Opaque, read-only chart definition. Its nested keys are preserved; the shape is not intended for authoring. Constraints: nullable |
| data.magnitude | number | Yes | — | Constraints: min: 0, max: 1 |
| data.confidence | number | Yes | — | Constraints: min: 0, max: 1 |
| data.score | number | Yes | — | 100 times magnitude times confidence; higher ranks first. Constraints: min: 0, max: 100 |
| data.status | string | Yes | — | Allowed values: opened, in_progress, closed |
| data.window_start | string | Yes | — | Constraints: format: date-time |
| data.window_end | string | Yes | — | Constraints: format: date-time |
| data.evaluated_at | string | Yes | — | Constraints: format: date-time |
| pagination | object | Yes | — | — |
| pagination.next_cursor | string | Yes | — | Cursor for the next page, or `null` on the last page. Chart list responses may stop before all project charts are enumerated because the search backend caps each query at 10,000 sorted hits. Constraints: nullable |
| pagination.has_more | boolean | Yes | — | — |

```json
{
  "data": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "object": "agent_analytics_insight",
      "project_id": "string",
      "agent_name": "string",
      "finding_key": "string",
      "category": "cost",
      "title": "string",
      "summary": "string",
      "recommendation": "string",
      "measurements": [
        {
          "key": "string",
          "label": "string",
          "value": 0,
          "unit": "string"
        }
      ],
      "evidence": {
        "session_ids": [
          "string"
        ],
        "chart_definition": {}
      },
      "magnitude": 0,
      "confidence": 0,
      "score": 0,
      "status": "opened",
      "window_start": "2024-01-01T00:00:00Z",
      "window_end": "2024-01-01T00:00:00Z",
      "evaluated_at": "2024-01-01T00:00:00Z"
    }
  ],
  "pagination": {
    "next_cursor": "string",
    "has_more": true
  }
}
```

**400**

**401**

**403**

**404**

**429**

**502**

## Code samples

### cURL

```bash
curl -X GET "https://developer-api.amplitude.com/v1/projects/12345/agent-analytics/insights?limit=50" \
  -H "Content-Type: application/json" \
  -H "Authorization: YOUR_API_KEY"
```

### Python

```python
import requests

response = requests.get(
    "https://developer-api.amplitude.com/v1/projects/12345/agent-analytics/insights?limit=50",
    headers={
        "Content-Type": "application/json",
        "Authorization": "YOUR_API_KEY"
    }
)
data = response.json()
```

### JavaScript

```javascript
const response = await fetch("https://developer-api.amplitude.com/v1/projects/12345/agent-analytics/insights?limit=50", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "YOUR_API_KEY"
  }
});
const data = await response.json();
```

### PHP

```php
<?php
$ch = curl_init("https://developer-api.amplitude.com/v1/projects/12345/agent-analytics/insights?limit=50");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "Authorization: YOUR_API_KEY"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
```

### Go

```go
package main

import (
  "bytes"
  "net/http"
)

func main() {
req, _ := http.NewRequest("GET", "https://developer-api.amplitude.com/v1/projects/12345/agent-analytics/insights?limit=50", nil)
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "YOUR_API_KEY")
  client := &http.Client{}
  resp, _ := client.Do(req)
  defer resp.Body.Close()
}
```

### Java

```java
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://developer-api.amplitude.com/v1/projects/12345/agent-analytics/insights?limit=50"))
      .method("GET", HttpRequest.BodyPublishers.noBody())
.header("Content-Type", "application/json")
      .header("Authorization", "YOUR_API_KEY")
      .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
```

### Ruby

```ruby
require "net/http"
require "json"

uri = URI("https://developer-api.amplitude.com/v1/projects/12345/agent-analytics/insights?limit=50")
request = Net::HTTP::Get.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "YOUR_API_KEY"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
  http.request(request)
end
```

