Skip to main content
POST

Authorizations

Authorization
string
header
required

An API key, sent as Authorization: Bearer <key>. Each operation lists the scope its key needs: decisions:evaluate (evaluate and read evaluations), decisions:feedback (your app's feedback) or decisions:develop (everything else, including owner feedback and the review queue). An operation listing no scope takes any scoped key. A key with no scope, or without the operation's, gets 403 INSUFFICIENT_SCOPE.

Headers

idempotency-key
string

Makes a retry safe. For 24 hours, the same key with the same request returns the first stored result (with Idempotent-Replayed: true); the same key with a different request is a 422 IDEMPOTENCY_KEY_REUSED. Keys are scoped to the organization and environment across every operation, so use a fresh key per request. A request that failed before its result was stored runs again when retried with its key.

Required string length: 1 - 255
Pattern: ^[\x20-\x7e]+$

Body

application/json
about
object
required

What the feedback is about. {evaluation_id} is preferred: it names exactly the answer you are judging. {decision_id, item_id} means the item's latest primary evaluation in the key's environment, resolved when the feedback arrives; the response says which one. Verdict claims need evaluation_id.

claims
object[]
required

What you are saying about the evaluation, 1 to 65 claims: expected_answer (at most one per question), expected_outcome or verdict (at most one, and not both), and input_broken.

Required array length: 1 - 65 elements

What one question's answer should have been. It is stored against the question as it was asked (its hash), so a reworded question does not inherit it. Aggregations and attributes take none: aggregations are computed and attributes are facts you supplied.

source
enum<string>
required

Who is speaking. Three sources count toward an evaluation's consensus answer, which is what previews and suggestions learn from (on primary and example evaluations whose content is stored): owner through this route, reviewers answering through the review routes (the Review app), and imported examples. The owner outranks reviewers, and reviewers outrank imported examples. app_native and app_resolution provide supporting feedback only. owner: the decision owner's judgment. An expected_outcome or verdict claim decides the consensus; expected_answer claims refine a case that has a consensus and on their own decide nothing. owner folds every person into one: all owner feedback through this route is the decision owner's single voice, whoever sent it, and the latest owner submission with an end-level claim decides, replacing earlier ones. Agreement between people is only kept for reviewers on the review routes, who each get one vote. Use owner for corrections you stand behind. app_native: your app's own feedback about the outcome it acted on, for example a user approved or reverted it. app_resolution: how your own process finally settled the case, for example an appeal. The two weak sources never decide a consensus, but they are not inert. The first feedback a group of near-identical items gets in an environment, from any source other than an import, puts the group in training (an imported example's group is in the example split instead). A native or resolution submission's reason is shown to the suggestion generator alongside a case that other feedback decided. An input_broken claim from any source sets the evaluation aside.

Available options:
app_native,
app_resolution,
owner
actor
string

Who in your system this comes from, for example a user or agent id. It is namespaced under your key. Not allowed with source owner: the owner is you.

Required string length: 1 - 256
reason
string

Optional: why the answer was off, in your words. It is context for whoever writes the next change to the decision, so the most useful reason names the question that got it wrong, quotes the words in the content that show it, and states the rule that applies. A sentence is enough.

Maximum string length: 4000
unsure
boolean

True when the judge is not confident in these claims.

supersedes
string

The id of your own earlier submission on the same evaluation that this one replaces. Only the latest submission in a chain counts; the earlier one stays readable and shows superseded_by.

Pattern: ^fbk_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$

Response

Recorded

environment
enum<string>
required

The environment of the key that made the call: production or test. Evaluations, feedback, reviews and suggestions are separate per environment; registered structures are shared.

Available options:
production,
test
id
string
required
Pattern: ^fbk_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
evaluation_id
string
required
Pattern: ^evl_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
item_id
string
required
claim_count
integer
required
Required range: x >= 1
resolved_from_item
boolean
required