← Files LaunchDarklyARCHIVED FILE

skills/built-in-metrics/references/metrics-api.md

3.22 KB · Oct 5, 2026 · 18:24 UTC

↓ Download file

# Metrics API

Retrieve config metrics via the LaunchDarkly REST API.

## Endpoint

```
GET /api/v2/projects/{projectKey}/ai-configs/{configKey}/metrics
```

## Authentication

Requires an API token with `ai-configs:read` permission.

```python
headers = {
    "Authorization": "your-api-token",
    "LD-API-Version": "beta"
}
```

## Implementation
```python
import requests
import time
import os

def get_ai_config_metrics(project_key: str, config_key: str, env: str = "production", hours: int = 24):
    """Get config metrics for the last N hours."""
    API_TOKEN = os.environ.get("LAUNCHDARKLY_API_TOKEN")

    now = int(time.time())
    start = now - (hours * 3600)

    url = f"https://app.launchdarkly.com/api/v2/projects/{project_key}/ai-configs/{config_key}/metrics"

    params = {
        "from": start,
        "to": now,
        "env": env
    }

    headers = {
        "Authorization": API_TOKEN,
        "LD-API-Version": "beta"
    }

    response = requests.get(url, headers=headers, params=params)

    if response.status_code == 200:
        metrics = response.json()
        print(f"[OK] Metrics for {config_key} (last {hours} hours, {env}):")
        print(f"     Generations: {metrics.get('generationCount', 0):,}")
        print(f"     Success: {metrics.get('generationSuccessCount', 0):,}")
        print(f"     Errors: {metrics.get('generationErrorCount', 0):,}")
        print(f"     Input Tokens: {metrics.get('inputTokens', 0):,}")
        print(f"     Output Tokens: {metrics.get('outputTokens', 0):,}")
        print(f"     Total Tokens: {metrics.get('totalTokens', 0):,}")
        print(f"     Input Cost: ${metrics.get('inputCost', 0):.4f}")
        print(f"     Output Cost: ${metrics.get('outputCost', 0):.4f}")
        print(f"     Duration (ms): {metrics.get('durationMs', 0):,}")
        print(f"     TTFT (ms): {metrics.get('timeToFirstTokenMs', 0):,}")
        print(f"     Thumbs Up: {metrics.get('thumbsUp', 0)}")
        print(f"     Thumbs Down: {metrics.get('thumbsDown', 0)}")
        return metrics
    else:
        print(f"[ERROR] Failed to get metrics: {response.status_code}")
        return None
```

## Response Fields

| Field | Description |
|-------|-------------|
| `generationCount` | Total number of generations |
| `generationSuccessCount` | Successful generations |
| `generationErrorCount` | Failed generations |
| `inputTokens` | Total input tokens used |
| `outputTokens` | Total output tokens generated |
| `totalTokens` | Sum of input + output tokens |
| `inputCost` | Cost for input tokens |
| `outputCost` | Cost for output tokens |
| `durationMs` | Total duration in milliseconds |
| `timeToFirstTokenMs` | Time to first token (streaming) |
| `thumbsUp` | Positive feedback count |
| `thumbsDown` | Negative feedback count |

## Query Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `from` | int | Unix timestamp for start of range |
| `to` | int | Unix timestamp for end of range |
| `env` | string | Environment key (default: "production") |

## Notes

- Time range is specified in Unix timestamps (seconds)
- Costs are calculated based on model pricing and token usage
- Feedback counts require user feedback tracking implementation
- Rate limits apply; see API documentation for details

SHA-256: 2c24f3fc57f5824b82d8eb018043584a585b0d89a0b9d233419362e992414ebd