raterType.
Shape
Exactly one of
(userId, publicRaterId) is set on human ratings;
exactly one of (autouserId, autouserRunId) is set on autouser ratings.
Listing
starting_after. See Pagination.
Submitting a human rating via the API
Most ratings come from the dashboard or the public share link. If you need to submit one programmatically (e.g. wiring up a custom rater UI):Agreement
The/agreement endpoint reports how much your raters agreed with each
other.
The unit is the (design, dimension) pair
One item is one design scored on one dimension. Three raters scoring one design on four dimensions is twelve paired observations, not three. Items drawn from the same rating are not independent, so a large item count from a single design is weaker evidence than the same count spread across several designs.A rater is an agent, not a persona
Running one persona withagentCount: 3 starts three independent runs —
three sessions, three transcripts, three judge calls — and they count as
three raters in raterCount. independentRaterCount is the coarser
count — distinct personas and people, so three agents of one persona are
1 — and it is the one to gate on when the question is “how many points of
view”, not “how many trials”.
Anonymous raters who arrive through a share link are told apart by their
PublicRater row, so three strangers rating the same design are three
raters, not one.
intraRater is replicate agreement, not test-retest
The same three runs are also three passes of ONE instrument over the same
item, and intraRater reports how often that instrument gave itself the
same score. It counts every unordered pair of replicates, so it does not
depend on the order the runs happened to finish in — those agents run
concurrently.
It is a different quantity from overallAgreementPercent on the same
0-100 axis. Do not read it against the agreement bands below: they say
when two raters agreeing is trustworthy, and the bar for an instrument
reproducing its own score is higher.
What the numbers mean
overallAgreementPercent is direct-count agreement: the share of
scored items where two raters gave the same score (for SxS, picked the
same side). It is not a rescaled kappa, so read it against the chance
floor of your scale — 20% on a 5-point scale, 14% on 7-point, ~33% for
SxS direction.
The kappa equivalents come from converting Landis & Koch’s bands through
the chance floor of the scale — 20% for a 5-point SSE dimension, ~33% for
an SxS direction, which is why the SxS column sits higher for the same
kappa. They shift again on other scale lengths; use
scaleGroups when
your dimensions mix them.
kappa.value is chance-corrected, and kappa.isMean tells you whether
it is a single Cohen’s κ or an item-count-weighted mean of several — one
per rater pair, and one per scale group within a pair. Kappas are never
pooled across scale lengths, because chance agreement depends on how many
points a rater could have picked. Krippendorff’s α appears as alpha
when every dimension shares one scale.
When there is no number
kappa.value is null — not 0 — whenever kappa is undefined. The
common case is a unanimous panel: with no variance the arithmetic is 0/0,
and both Cohen’s κ and Krippendorff’s α return 1.0 by convention.
kappa.blocked says which case it is and what would change it.
overallAgreementPercent is null only when nothing can be measured at
all, and notComputable then carries the reason (no_ratings,
single_rater, no_shared_items) plus a remedy.
Caching
Agreement is cached onEvaluation.agreementCache and recomputed
whenever any input it was built from has changed — a rating added,
removed or edited, or the evaluation’s dimension config touched. The
count alone used to be the test, which could not see an edited rating and
so let a cached figure outlive the ratings behind it. The first call
after a change is slightly slower (~100ms) as it warms the cache;
subsequent calls are instant.
Streaming ratings into a warehouse
The shape is stable —dimensionRatings is a JSON map, factors and
openTextResponses are JSON. Subscribe to the rating.created webhook
(see Events) and append rows to BigQuery / Snowflake
as they arrive. Use Autousers-Event-Id as the dedup key on insert.
See the Looker / BigQuery recipe.