Skip to main content
GET
/
api
/
signals
/
analytics
/
keywords
/
{id}
/
runs
Get run history for a keyword stat
curl --request GET \
  --url https://app.puffle.ai/api/signals/analytics/keywords/{id}/runs \
  --header 'Authorization: Bearer <token>'
{
  "runs": [
    {
      "id": "cc111111-1111-1111-1111-111111111111",
      "keyword_stat_id": "aa111111-1111-1111-1111-111111111111",
      "run_at": "2026-04-22T06:00:00Z",
      "raw_count": 12,
      "prefilter_count": 4,
      "validated_count": 2,
      "avg_confidence": 0.81,
      "avg_score": 68
    }
  ]
}

Overview

Returns up to 100 per-run snapshots for a single keyword stat, ordered by run_at descending. Each snapshot captures the raw/prefilter/validated counts and score averages at the time of that scan — the series forms the time axis under a listKeywordStats row. Returns 404 if the stat doesn’t exist or isn’t owned by the caller.

AI agent notes

Use case. Plot the raw-to-prefilter-to-validated funnel over time to identify regressions after a signal-type edit, or to confirm a prompt change improved precision.Safe to poll. No side effects. Reads are cheap.Upstream. Call listKeywordStats first to discover the keyword stat id you want to drill into. Stats are keyed by (signal_type, source, keyword), not a human name, so fetch the list and filter client-side.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

id
string<uuid>
required

Keyword stat UUID.

Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$

Response

Up to 100 recent runs, newest first.

runs
object[]
required