saturn

/home/coolhand/data/api_auth.db 502 rows sample n=502 seed 42 2026-05-01T17:20:14+00:00

Overview

Source/home/coolhand/data/api_auth.db
Total rows502
Profiled sample502
Columns11
Generated2026-05-01T17:20:14+00:00

Insights opt-in

Model-generated narrative. These are opinions, not facts — the stats below are what saturn measured. Generated by: anthropic:claude-opus-4-7.

Dataset high anthropic:claude-opus-4-7

This dataset contains 502 API request logs across 11 columns, capturing usage telemetry like response time, status code, endpoint, and user agent. Traffic is dominated by a single API ('linguistic-api' at 99.6%) and a single method (GET), with all requests coming from one IP (127.0.0.1), so the interesting variation lives in endpoint, response_time_ms, status_code, and user_agent. Response times are heavily skewed: the median is just 3ms but the mean is 163ms with a max of 1238ms and 78 outliers (~24%), plus a 34% null rate worth investigating. Status codes split between 200 and 429, hinting at rate-limiting behavior. The endpoint column has a long tail of 209 distinct paths, with /api/languages and /api/search leading.

usage_id high anthropic:claude-opus-4-7

A monotonic surrogate key: 502 unique values across 502 rows with no nulls, ranging from 1 to 502 and a perfectly symmetric mean and median of 251.5. Skew is 0.0 and there are no outliers, consistent with a sequential row identifier rather than a measured quantity.

key_id low anthropic:claude-opus-4-7

The column 'key_id' was skipped by the profiler, so no type, uniqueness, or distributional statistics are available beyond a row count of 502 and a null rate of 0.0. The name suggests an identifier, but without n_unique or sample values this cannot be confirmed from the evidence.

api_name high anthropic:claude-opus-4-7

This is a categorical API identifier with only 2 distinct values across 502 rows. It is overwhelmingly dominated by 'linguistic-api' (500 rows, 99.6%), with 'blissAPI' appearing just twice, yielding near-zero entropy (0.037). The column is effectively a constant with two anomalous records.

endpoint high anthropic:claude-opus-4-7

This column records API endpoint paths, with 209 unique routes across 502 requests and no nulls. Traffic is spread fairly evenly (entropy ratio 0.828), though /api/languages leads at 11.6% of hits, followed by /api/search (36) and /api/stats (24); a long tail of rarely-hit routes triggers the alert. Notably /api/languages/NOPE appears 11 times, suggesting either a probing client or a broken reference worth investigating.

method high anthropic:claude-opus-4-7

This column records the HTTP method, but every one of the 502 rows is "GET" — cardinality is 1 and entropy is 0. It carries no information for any downstream model or segmentation.

status_code high anthropic:claude-opus-4-7

This column holds HTTP status codes, taking only 2 distinct values across 502 rows: 200 (success) and 429 (rate-limited), with 200 as the median and 429 as Q3. The mean of 278.9 implies roughly a third of requests were throttled, which is a notable failure rate worth investigating. No nulls or outliers, and the bimodal shape is reflected in the negative kurtosis (-1.57).

response_time_ms high anthropic:claude-opus-4-7

This column captures response times in milliseconds for 502 records. The distribution is severely right-skewed (skew 1.90, kurtosis 1.74): the median is just 3 ms and Q3 is 21 ms, yet the mean is 162.84 ms and the max reaches 1238 ms, with std at 345.34. Two analyst-relevant flags: 34.46% of rows are null, and 23.71% (78 values) fall outside the IQR fence.

cache_hit high anthropic:claude-opus-4-7

This is a numeric flag named cache_hit, presumably a 0/1 indicator of whether a cache lookup succeeded. Across all 502 rows it is constant at 0 (zero_rate 1.0, n_unique 1, std 0.0), meaning no cache hit was ever recorded. That is either a broken instrumentation path or a workload where caching is disabled.

ip_address high anthropic:claude-opus-4-7

This column records an IP address but holds the loopback value 127.0.0.1 for all 502 rows, with zero nulls and cardinality of 1. Entropy is 0.0, so the field carries no information and looks like a placeholder or a logging artefact rather than a real client IP.

user_agent high anthropic:claude-opus-4-7

HTTP User-Agent strings from request logs, with only 12 distinct values across 502 rows and no nulls. Traffic is dominated by non-browser clients: Werkzeug/3.1.4 (the Flask dev server's default UA) at 215 hits and GoogleOther at 196, together covering ~82% of requests, with curl and assorted bots (Bytespider, Applebot, Googlebot, bingbot, GPTBot) making up most of the rest. Genuine human browser traffic appears negligible — only a single Firefox hit and a handful of mobile Safari/Chrome entries.

timestamp high anthropic:claude-opus-4-7

This is a timestamp column stored as strings, with 299 unique values across 502 rows and no nulls. The distribution is unusually clumpy for a timestamp: six values on 2026-04-17 each repeat 14-38 times, accounting for roughly 189 rows, while most other timestamps appear only a handful of times. That burst pattern suggests batched events or a logging artifact rather than free-flowing event time.

Numeric correlation

usage_id numeric

rows502
null0 (0.0%)
unique502
min1.000
max502.000
mean251.500
median251.500
std145.059
q1126.250
q3376.750
iqr250.500
skew0.000
kurtosis-1.200
n_outliers0
outlier_rate0.000
zero_rate0.000

key_id unknown

no profiler for kind=unknown
rows502
null0 (0.0%)

api_name categorical

top value is 99.6% of rows
rows502
null0 (0.0%)
unique2
top_valuelinguistic-api
top_rate0.996
cardinality2
entropy0.037
entropy_ratio0.037
Top values (rank 1–20)
  1. linguistic-api — 500
  2. blissAPI — 2

endpoint categorical

180 singleton categories
rows502
null0 (0.0%)
unique209
top_value/api/languages
top_rate0.116
cardinality209
entropy6.383
entropy_ratio0.828
Top values (rank 1–20)
  1. /api/languages — 58
  2. /api/search — 36
  3. /api/stats — 24
  4. /api/languages/macroareas — 18
  5. /api/languages/by_macroarea/Africa — 16
  6. /api/languages/eng — 13
  7. /api/languages/spa/phonemes — 12
  8. /api/families/indo1319 — 12
  9. /api/typology/wals/parameters — 12
  10. /api/languages/NOPE — 11
  11. /api/languages/eng/features — 11
  12. /api/languages/cmn — 10
  13. /api/languages/eng/phonemes — 10
  14. /api/languages/NOPE/phonemes — 10
  15. /api/languages/NOPE/features — 10
  16. /api/families/NOPE — 10
  17. /api/typology/wals/map/81A — 8
  18. /api/typology/phonology/summary — 7
  19. /api/typology/phonology/inventory/eng — 7
  20. /api/typology/types/by_family — 6

method categorical

top value is 100.0% of rows
rows502
null0 (0.0%)
unique1
top_valueGET
top_rate1.000
cardinality1
entropy-0.000
entropy_ratio0.000
Top values (rank 1–20)
  1. GET — 502

status_code numeric

rows502
null0 (0.0%)
unique2
min200.000
max429.000
mean278.918
median200.000
std108.940
q1200.000
q3429.000
iqr229.000
skew0.654
kurtosis-1.572
n_outliers0
outlier_rate0.000
zero_rate0.000

response_time_ms numeric

34.5% null 23.7% rows beyond 1.5 IQR
rows502
null173 (34.5%)
unique83
min2.000
max1,238
mean162.839
median3.000
std345.341
q13.000
q321.000
iqr18.000
skew1.903
kurtosis1.744
n_outliers78
outlier_rate0.237
zero_rate0.000

cache_hit numeric

only one distinct value
rows502
null0 (0.0%)
unique1
min0.000
max0.000
mean0.000
median0.000
std0.000
q10.000
q30.000
iqr0.000
skew0.000
kurtosis0.000
n_outliers0
outlier_rate0.000
zero_rate1.000

ip_address categorical

top value is 100.0% of rows
rows502
null0 (0.0%)
unique1
top_value127.0.0.1
top_rate1.000
cardinality1
entropy-0.000
entropy_ratio0.000
Top values (rank 1–20)
  1. 127.0.0.1 — 502

user_agent categorical

rows502
null0 (0.0%)
unique12
top_valueWerkzeug/3.1.4
top_rate0.428
cardinality12
entropy1.962
entropy_ratio0.547
Top values (rank 1–20)
  1. Werkzeug/3.1.4 — 215
  2. Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.7680.177 Mobile Safari/537.36 (compatible; GoogleOther) — 196
  3. Mozilla/5.0 (Linux; Android 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; Bytespider; https://zhanzhang.toutiao.com/) — 26
  4. curl/7.81.0 — 24
  5. Mozilla/5.0 (iPhone; CPU iPhone OS 26_5_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/147.0.7727.99 Mobile/15E148 Safari/604.1 — 14
  6. Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15 (Applebot/0.1; +http://www.apple.com/go/applebot) — 14
  7. Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.7680.177 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) — 7
  8. Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/136.0.0.0 Safari/537.36 — 2
  9. Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:146.0) Gecko/20100101 Firefox/146.0 — 1
  10. Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.3; +https://openai.com/gptbot) — 1
  11. Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.116 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) — 1
  12. Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.137 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) — 1

timestamp categorical

281 singleton categories
rows502
null0 (0.0%)
unique299
top_value2026-04-17 10:06:57
top_rate0.076
cardinality299
entropy6.980
entropy_ratio0.849
Top values (rank 1–20)
  1. 2026-04-17 10:06:57 — 38
  2. 2026-04-17 10:07:57 — 38
  3. 2026-04-17 10:32:51 — 37
  4. 2026-04-17 10:07:09 — 31
  5. 2026-04-17 10:26:55 — 31
  6. 2026-04-17 10:06:29 — 14
  7. 2026-04-23 00:15:04 — 4
  8. 2026-04-24 01:08:10 — 4
  9. 2026-04-24 22:11:19 — 4
  10. 2026-01-06 05:06:58 — 3
  11. 2026-04-19 04:06:23 — 3
  12. 2026-01-06 05:07:53 — 2
  13. 2026-04-17 10:26:53 — 2
  14. 2026-04-17 10:27:44 — 2
  15. 2026-04-19 04:33:00 — 2
  16. 2026-04-19 07:17:09 — 2
  17. 2026-04-29 21:16:59 — 2
  18. 2026-04-30 03:37:45 — 2
  19. 2026-01-06 05:39:57 — 1
  20. 2026-01-06 09:44:58 — 1