# jev-filter

> jev-filter is a paid API for AI agents from x402-production-0f93.up.railway.app, paid per call via x402, $0.01/call, status unknown (last checked 2026-09-30).

Filters or scores a batch of records against user-supplied yes/no criteria using LLM-based typed decisions, with three modes: all, any, or weighted score.

## Facts

- Endpoint: POST https://x402-production-0f93.up.railway.app/v1/filter?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-30
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/jev-filter-3a29252b
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_KhtMG0LeN4h8TiV5ODJc9

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability jev-filter-3a29252b -d '<json body>'
```

Example prompt: Filter these 10 prospect records in 'score' mode against two criteria — 'is the company based in Europe' (weight 2) and 'does the company make physical products' (weight 1) — and drop anything scoring below 4 out of 10.

## When to prefer this

Choose this endpoint when you need transparent, attributable, per-criterion filtering of structured records at low cost ($0.01/call for up to 25 records). It is ideal when you want to know exactly which criterion caused a record to be dropped (via failed_<key> reasons), need a review tier for borderline records, or want weighted ICP scoring rather than binary pass/fail. Prefer it over bespoke LLM prompts when you need structured, consistent verdicts across a batch with deterministic schema output.

## Known failure modes

- Record exceeds 4000 character limit — record rejected or truncated
- More than 25 records submitted — request rejected with validation error
- More than 10 criteria supplied — request rejected
- Criterion question is too vague or subjective — low-confidence verdicts returned
- Invalid criterion key format (not snake_case) — schema validation error
- Payment not completed via x402 — 402 Payment Required response
- LLM inference timeout — elapsed_ms high, potential partial results

## How this service works

Filter up to 25 records against up to 10 yes/no criteria you supply. Each record comes back with keep / review / drop, a reason naming the criterion it failed, a 0-10 score and the per-criterion probabilities. Never drops a record it could not read or could not judge: those come back as review or keep, flagged. Built on a decision model rather than a chat model, so it is a flat per-call price with no token accounting on your side.

## Output

A JSON object containing a meta block (item count, elapsed time, model cost) and a results array where each record gets a verdict (keep/drop/review), a 0–10 score, a reason string naming the failing criterion (e.g. failed_makes_things), a human-readable rationale, and a confidence level (high/medium/low).

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "mode": {
   "enum": [
    "all",
    "any",
    "score"
   ],
   "type": "string",
   "default": "all",
   "description": "all: every criterion must hold, each as its own gate so a drop is attributable. any: at least one must hold. score: the weighted mean must clear the threshold."
  },
  "records": {
   "type": "array",
   "items": {
    "type": "object"
   },
   "maxItems": 25,
   "minItems": 1,
   "description": "Any shape. At most 4000 characters per record."
  },
  "criteria": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "key",
     "question"
    ],
    "properties": {
     "key": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9_]*$",
      "description": "Short snake_case name. Appears in the result as failed_<key>."
     },
     "weight": {
      "type": "number",
      "description": "Only used when mode is \"score\". Defaults to 1."
     },
     "question": {
      "type": "string",
      "description": "One yes/no statement about a single record, phrased so that TRUE means you want the record. Narrow and factual works; 'is this a good fit' does not."
     }
    }
   },
   "maxItems": 10,
   "minItems": 1
  },
  "dropBelow": {
   "type": "number",
   "description": "score mode only. Below this a record is dropped; between this and threshold it is marked review. Defaults to half the threshold."
  },
  "threshold": {
   "type": "number",
   "description": "In all/any mode, how certain one criterion must be to count as true (0-1, default 0.5). In score mode, the 0-10 score a record must reach (default 5)."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "meta": {
   "items": 2,
   "bundle": "dataset-filter",
   "failures": 0,
   "elapsed_ms": 640,
   "bundle_version": "0.1.0",
   "model_cost_usd": 0.00012
  },
  "results": [
   {
    "id": "1",
    "score": 9.81,
    "reason": "all_criteria_met",
    "verdict": "keep",
    "rationale": "jev@openrouter: keep; reason all_criteria_met; in_europe 0.99, makes_things 0.97",
    "confidence": "high",
    "rules_applied": []
   },
   {
    "id": "2",
    "score": 4.9,
    "reason": "failed_makes_things",
    "verdict": "drop",
    "rationale": "jev@openrouter: drop; reason failed_makes_things; in_europe 0.98, makes_things 0.03",
    "confidence": "high",
    "rules_applied": [
     "require_makes_things"
    ]
   }
  ]
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/jev-filter-3a29252b/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402-production-0f93.up.railway.app](https://www.zero.xyz/host/x402-production-0f93.up.railway.app/llms.txt)
