---
title: "List project tools with usage metrics"
method: GET
path: "/v1/projects/{projectSlug}/tools"
tags: ["Tools"]
---

# List project tools with usage metrics

`GET /v1/projects/{projectSlug}/tools`

Returns every tool in the project over the range — the union of defined and called tools — with per-tool usage metrics, offered counts, a call trend, and project-wide totals. The range defaults to the trailing 7 days.

## Path parameters

- `projectSlug` string, required — Project slug (human-readable identifier)

## Query parameters

- `fromIso` string, date-time — Lower bound (inclusive) of the time range. Defaults to 7 days before `toIso`.
- `toIso` string, date-time — Upper bound (inclusive) of the time range. Defaults to now.
- `trendBucketSeconds` integer — Bucket width in seconds. Derived from the range (~30 buckets) when omitted.

## Response `200`

Tools analytics

- ToolsAnalyticsResponse
  - `totals` ToolsAnalyticsTotals, required — Project-wide denominators for the range.
    - `traces` integer, required — Total traces in the range.
    - `sessions` integer, required — Total sessions in the range.
    - `tracesWithToolCalls` integer, required — Traces with at least one tool call (any tool).
    - `sessionsWithToolCalls` integer, required — Sessions with at least one tool call (any tool).
  - `tools` ToolSummary[], required — Every tool in the range — the union of defined and called tools.
    - `name` string, required — Tool name.
    - `metrics` ToolUsageMetrics, nullable, required — Call-side usage metrics. `null` when the tool was defined but never called in the range.
      - `calls` integer, required — Number of times the tool was called in the range.
      - `errors` integer, required — Number of calls that ended in an error.
      - `errorRate` number, required — Fraction of calls that errored, 0..1.
      - `avgDurationNs` number, required — Mean call duration, in nanoseconds.
      - `p50DurationNs` number, required — Median (p50) call duration, in nanoseconds.
      - `p95DurationNs` number, required — 95th-percentile call duration, in nanoseconds.
      - `p99DurationNs` number, required — 99th-percentile call duration, in nanoseconds.
      - `tracesUsed` integer, required — Distinct traces with at least one call of this tool.
      - `sessionsUsed` integer, required — Distinct sessions with at least one call of this tool.
      - `traceUsageRate` number, required — `tracesUsed` divided by total traces in the range, 0..1.
      - `sessionUsageRate` number, required — `sessionsUsed` divided by total sessions in the range, 0..1.
      - `firstSeen` string, required — ISO-8601 timestamp of the first call in the range.
      - `lastUsed` string, required — ISO-8601 timestamp of the most recent call in the range.
    - `offeredCount` integer, required — LLM turns that offered this tool. 0 means no definition was seen.
    - `offeredTraces` integer, required — Distinct traces that offered this tool.
    - `lastOffered` string, nullable, required — ISO-8601 timestamp the tool was last offered. `null` when never offered.
    - `selectionRate` number, nullable, required — Calls per offer (`calls / offeredCount`). Can exceed 1. `null` when never offered.
    - `trend` ToolCallHistogramBucket[], required — Per-bucket call counts across the range.
      - `bucketStart` string, required — ISO-8601 UTC timestamp of the bucket's start.
      - `calls` integer, required — Number of calls in this bucket.
      - `errors` integer, required — Number of errored calls in this bucket.
      - `p50DurationNs` number, required — Median call duration in this bucket, in nanoseconds.

## Other responses

- `400` — Validation error
- `401` — Unauthorized
- `404` — Not found

---

[API](https://skmtc.net/latitude-dev/apis/latitude.md) · [All operations](https://skmtc.net/latitude-dev/apis/latitude/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/latitude-dev/latitude/versions/6a8789c59a5c/schema)
