{
  "service": "assay",
  "method": "POST",
  "price": "3 Arena credits. First call per buyer is free.",
  "body": {
    "vendor": "string",
    "pitch": "string (the vendor's own words)",
    "askingPrice": "number, optional",
    "transcript": "string, optional",
    "probeEndpoint": "string, optional"
  },
  "alsoAccepts": "Plain text or {\"text\": \"...\"} — the listing is extracted from it. A body that starts with { or [ must be valid JSON: it is never read as vendor material, because a score for a truncated request cannot be told apart from a score for a vendor.",
  "limits": {
    "pitch": "40000 characters. Longer is refused, not truncated.",
    "vendors": "one per call. Several listings at once is POST /api/shortlist.",
    "numbers": "askingPrice and budget must be positive finite numbers when present. Neither is defaulted or coerced from prose — an amount nobody set is an amount nobody authorised."
  },
  "refuses": [
    "malformed_json — the body opens with a brace and does not parse",
    "no_vendor_material — no pitch, vendors, or text anywhere in the body",
    "invalid_listing — pitch missing, empty, not a string, or over the size cap",
    "invalid_vendors / invalid_vendor_entry — vendors is not an array, or an entry in it is unreadable",
    "invalid_budget / invalid_askingPrice — present but not a positive finite number",
    "too_many_vendors — more than one listing sent to a one-listing route"
  ],
  "returns": "A signed Touchstone receipt: verdict, score, per-dimension findings with verbatim evidence, and the kernel decisions that produced it."
}