---
title: "Evaluate and pay per call in USDC (x402), no account needed"
method: POST
path: "/api/x402/evaluate"
tags: ["Evaluate"]
---

# Evaluate and pay per call in USDC (x402), no account needed

`POST /api/x402/evaluate`

## Request

- Base URL: `https://overwing.ai`
- URL: `https://overwing.ai/api/x402/evaluate`
- Auth: none required

Same body and response as POST /api/v1/evaluate. Without an X-PAYMENT header the response is 402 with x402 payment requirements. Sign them with an x402 client and resend; settlement happens only after a successful evaluation. The response adds a `paid` object.

## Request body

- EvaluateRequest
  - `input` string, required: The LLM output (or any text) to evaluate. The input can be in any language the model reads. Tested on 2026-09-29 in Spanish, Portuguese, French, German, Japanese, Chinese (Simplified), Korean, Arabic and Hindi: 7 checks in each, and every verdict matched the English one. A small test, not a benchmark: the texts were written by a model and have not been reviewed by native speakers. Responses are in English whatever the input language.
  - `rule_set` string, required: Rule set slug. Prebuilt: content-safety (toxicity, PII, self-harm, sexual content, severity) and outbound-message (adds unauthorized_pii and confidential_leak, and reads the context object)
  - `metadata` object: Opaque context echoed back and stored with the evaluation
  - `context` object: Structured facts about the situation, passed to the model as state next to the text so rules can reference them: e.g. { recipient: "known customer", channel: "email", owns_contact_info: true }. Max 8 KB.
  - `store` boolean: False runs the check without keeping the input text or the context: the record holds the verdict, scores and metadata only. It cannot turn storage back on when the organization has store_inputs off (PATCH /api/v1/org). The response header X-Input-Stored says which happened.

## Response `200`

Verdict

- Evaluation
  - `id` string, required
  - `verdict` 'pass' | 'fail' | 'review', required: fail: a rule's fail condition matched. review: a rule's confidence was below its review threshold and nothing failed. pass: otherwise.
  - `recommended_action` 'block' | 'redact' | 'review' | 'allow', required: One word to act on, derived from the failed rules' actions: block if any failed rule says block, else redact, else review (a review verdict or a review-action fail), else allow.
  - `aggregate_score` number, required: Weighted score: pass=1, review=0.5, fail=0 per rule, weighted by rule weight. A ranking signal for sorting or thresholds, not a decision: use verdict and recommended_action to act.
  - `confidence` number, required: Minimum confidence across rules
  - `latency_ms` integer, required
  - `results` RuleResult[], required
    - `rule` string, required
    - `action` 'block' | 'redact' | 'review', required: The rule's declared action: what to do when this rule fails
    - `type` 'choice' | 'score' | 'noul', required
    - `answer` union, required: choice: selected option; score: position on the level scale (may be fractional); noul: boolean
      - string
      - number
      - boolean
    - `probability` number, required
    - `confidence` number, required
    - `verdict` 'pass' | 'fail' | 'review', required: fail: a rule's fail condition matched. review: a rule's confidence was below its review threshold and nothing failed. pass: otherwise.

## Other responses

- `400`: Invalid input
- `402`: Payment required (x402 requirements in the body)
- `429`: Capacity exhausted
- `502`: Evaluation engine error

---

[API](https://skmtc.dev/overwing/apis/overwing-api.md) · [All operations](https://skmtc.dev/overwing/apis/overwing-api/llms.txt) · [OpenAPI document](https://skmtc.dev/overwing/apis/overwing-api/revisions/ff1282d31438?raw)
