Endpoints: 46,873MCP servers: 25,260Payout addresses: 2,808Paid calls: 4,332Letters: 67Defects: 2,293counted just now
teppi
Report · 2026-08-31 to 2026-10-28

A 2xx is not a delivery

Every paid call Teppi made to someone else's endpoint, and what came back. A status code says the seller answered. Only a check says the answer was right, so Teppi pays at the listed price, holds each answer to one the seller never saw, and publishes every call with its transaction.

Where every paid call ended3,646 calls · 422 endpoints · 355 hosts

2,649answered 2xx and right · 72.7%
72answered 2xx and wrong · 2.0%
741answered 2xx, nothing to check it against · 20.3%
184no usable answer · 5.0%

Paid calls by week

08-3109-0709-1409-2109-2810-0510-1210-1910-26
rightwronguncheckedno usable answerweeks start on monday, UTC; the last runs to 2026-10-28

How to read this

Correctness is scored only where a held-out answer exists. The 741 answers without one are counted as unchecked, never as right.
Tasks are written for endpoints that answered once, so the checked set leans toward sellers that work.
Our own endpoints, calls bought for buyers, and the 168 calls a correction of ours withdrew are left out.
Each line of the file names its settlement transaction and its evidence, so any single call can be checked on its own.

Wrong answers by class

Answers checked and answers wrong, by the class of the endpoint
ClassCheckedWrongShare wrongShare wrong, drawn
market_data65930.5%
search557244.3%
onchain34600.0%
extraction243135.3%
inference240125.0%
evidence18331.6%
research161169.9%
lookup15410.6%
compute13700.0%
other4100.0%
A wrong answer here was billed every time: the payment settled before the answer was checked.

The newest wrong answer on each endpointeach opens its endpoint, its paid calls and their evidence

Recount it yourselfneeds curl and jq, nothing else

  1. 1
    Download the file every figure is counted fromcurl -s https://api.teppi.xyz/v1/market/records > records.ndjson
  2. 2
    Count the paid callsjq -s '[.[] | select(.source == "probe" and (.first_party | not) and (.corrected | not))] | length' records.ndjson
  3. 3
    Count the 2xx answers that were wrongjq -s '[.[] | select(.source == "probe" and (.first_party | not) and (.corrected | not)) | select(.liveness == 1 and .correctness != null and .correctness < 1)] | length' records.ndjson
  4. 4
    Count the calls that kept the money for nothing usablejq -s '[.[] | select(.source == "probe" and (.first_party | not) and (.corrected | not)) | select(.honesty == 0)] | length' records.ndjson