{"name":"jev-filter","summary":"Typed decisions over records: filter a batch against criteria you supply, or score leads against an ICP. Flat price per call, paid with x402.","payment":{"protocol":"x402","network":"eip155:8453","asset":"USDC","pay_to":"0x0FAa1f473CdF918d8437d0F746270b98f13b7307","facilitator":"https://api.cdp.coinbase.com/platform/v2/x402"},"limits":{"maxRecords":25,"maxCriteria":10,"maxRecordChars":4000},"endpoints":[{"method":"POST","path":"/v1/filter","price_usd":0.01,"priced_per":"call of up to 25 records","description":"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.","input_schema":{"type":"object","required":["records","criteria"],"properties":{"records":{"type":"array","minItems":1,"maxItems":25,"items":{"type":"object"},"description":"Any shape. At most 4000 characters per record."},"criteria":{"type":"array","minItems":1,"maxItems":10,"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>."},"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."},"weight":{"type":"number","description":"Only used when mode is \"score\". Defaults to 1."}}}},"mode":{"type":"string","enum":["all","any","score"],"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."},"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)."},"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."}}},"output_schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record's id field, or its index."},"verdict":{"type":"string","description":"One rung of the ladder for this operation."},"reason":{"type":"string","description":"A single label explaining the verdict."},"score":{"type":"number","description":"0-10."},"confidence":{"type":"string","enum":["high","medium","low"]},"rationale":{"type":"string","description":"The per-signal probabilities behind it."},"rules_applied":{"type":"array","items":{"type":"string"},"description":"Which deterministic safety gates fired."},"error":{"type":"string","description":"Present only when this one item could not be judged. Its verdict is then the safest rung, never a discard."}}}},"meta":{"type":"object","properties":{"bundle":{"type":"string"},"bundle_version":{"type":"string"},"questions_sha256":{"type":"string","description":"Hash of the exact question wording used, so a result is reproducible."},"engine":{"type":"string"},"items":{"type":"integer"},"failures":{"type":"integer"},"elapsed_ms":{"type":"integer"},"model_cost_usd":{"type":"number","description":"What the call cost the server in model tokens. Published so you can see the markup you are paying."}}}}},"input_example":{"records":[{"id":"1","company":"Nordfjord Packaging AS","country":"Norway","contact":"S. Halvorsen"},{"id":"2","company":"Bright Ideas Consultancy","country":"UK","contact":""}],"criteria":[{"key":"in_europe","question":"The company operates in Europe."},{"key":"makes_things","question":"This is a company that manufactures or automates physical production, not a service business."}],"mode":"all"},"output_example":{"results":[{"id":"1","verdict":"keep","reason":"all_criteria_met","score":9.81,"confidence":"high","rationale":"jev@openrouter: keep; reason all_criteria_met; in_europe 0.99, makes_things 0.97","rules_applied":[]},{"id":"2","verdict":"drop","reason":"failed_makes_things","score":4.9,"confidence":"high","rationale":"jev@openrouter: drop; reason failed_makes_things; in_europe 0.98, makes_things 0.03","rules_applied":["require_makes_things"]}],"meta":{"bundle":"dataset-filter","bundle_version":"0.1.0","items":2,"failures":0,"elapsed_ms":640,"model_cost_usd":0.00012}}},{"method":"POST","path":"/v1/score-leads","price_usd":0.1,"priced_per":"call of up to 25 leads","description":"Score up to 25 company or contact records against an ideal customer profile: 0-10 fit score, qualified / review / disqualified verdict, reason label. Calibrated on 240 labelled leads: 0.879 accuracy, and no qualified lead ever disqualified or vice versa. Catches competitor name variants and subsidiaries of excluded accounts that string matching misses. Uncertainty widens the net: sparse records, unnamed contacts and low-confidence calls go to review, never to disqualified.","input_schema":{"type":"object","required":["leads","buyerProfile"],"properties":{"leads":{"type":"array","minItems":1,"maxItems":25,"items":{"type":"object"},"description":"Company or contact records, any shape."},"buyerProfile":{"type":"object","description":"Who you sell to. All fields optional, more detail means sharper scoring.","properties":{"sells":{"type":"string"},"target_industries":{"type":"array","items":{"type":"string"}},"target_size":{"type":"string"},"target_regions":{"type":"array","items":{"type":"string"}},"buyer_roles":{"type":"array","items":{"type":"string"}},"buying_triggers":{"type":"array","items":{"type":"string"}},"exclusions":{"type":"object","properties":{"competitors":{"type":"array","items":{"type":"string"}},"existing_customers":{"type":"array","items":{"type":"string"}},"blocked_domains":{"type":"array","items":{"type":"string"}}}}}}}},"output_schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record's id field, or its index."},"verdict":{"type":"string","description":"One rung of the ladder for this operation."},"reason":{"type":"string","description":"A single label explaining the verdict."},"score":{"type":"number","description":"0-10."},"confidence":{"type":"string","enum":["high","medium","low"]},"rationale":{"type":"string","description":"The per-signal probabilities behind it."},"rules_applied":{"type":"array","items":{"type":"string"},"description":"Which deterministic safety gates fired."},"error":{"type":"string","description":"Present only when this one item could not be judged. Its verdict is then the safest rung, never a discard."}}}},"meta":{"type":"object","properties":{"bundle":{"type":"string"},"bundle_version":{"type":"string"},"questions_sha256":{"type":"string","description":"Hash of the exact question wording used, so a result is reproducible."},"engine":{"type":"string"},"items":{"type":"integer"},"failures":{"type":"integer"},"elapsed_ms":{"type":"integer"},"model_cost_usd":{"type":"number","description":"What the call cost the server in model tokens. Published so you can see the markup you are paying."}}}}},"input_example":{"leads":[{"id":"l1","company":"Acme Robotics GmbH","industry":"industrial automation","headcount":180,"country":"Germany","contact":{"name":"A. Meyer","title":"VP Operations"},"notes":"job board shows 3 open automation engineer roles"}],"buyerProfile":{"sells":"industrial motion-control retrofit kits","target_industries":["industrial automation","packaging machinery"],"target_size":"50-1000 employees","target_regions":["Germany","Netherlands","Nordics"],"buyer_roles":["VP Operations","Plant Manager"],"exclusions":{"competitors":["Lenze"],"existing_customers":[]}}},"output_example":{"results":[{"id":"l1","verdict":"qualified","reason":"buying_trigger","score":9.05,"confidence":"medium","rationale":"jev@openrouter: qualified; reason buying_trigger; industry_match 0.93, geo_match 0.99, role_authority 0.95, buying_trigger 0.98, exclusion_hit 0.01","rules_applied":[]}],"meta":{"bundle":"lead-qualifier","bundle_version":"0.4.1","items":1,"failures":0,"elapsed_ms":910,"model_cost_usd":0.000067}}}],"errors":[{"status":400,"when":"The input breaks a documented limit or is missing a required field.","body":{"error":"records holds 40 items; this endpoint takes at most 25 per call. Split the batch."},"note":"Returned before any payment settles, so a rejected call costs nothing."},{"status":402,"when":"No payment was presented. The body carries the price and how to pay.","note":"Standard x402. Pay and retry the same request."},{"status":500,"when":"The model was unreachable for the whole batch.","body":{"error":"upstream model unavailable","failures":25},"note":"Individual items that fail do NOT fail the call: they come back inside results with an error field and the safest verdict."}],"guarantees":["A record that cannot be read or cannot be judged is never discarded; it comes back flagged on the safest rung.","Input that breaks a documented limit is refused with 400 before payment settles.","Every response carries the hash of the exact question wording used, so a result can be reproduced.","Every response carries what the call cost the server in model tokens."]}