Saltar al contenido
Jev | typesafeAPI & Playground
…

Use case · risk signals

Jev for fraud signals and KYB review

Reviewed November 10, 2026. jevtypesafe.org is an independent third-party host, not TypeSafe AI or Sardine.

A risk workflow can use a model to interpret evidence without giving it authority to approve a business or reject a customer. Jev can answer narrowly defined questions about supplied findings. Your application collects the facts, applies policy, and sends cases to qualified reviewers.

This page is not financial, credit, fraud-management, or legal advice. The example below does not approve or reject payments, loans, or KYB applications. Do not use an unvalidated model output as the sole basis for a consequential decision.

Third-party case study: what Sardine reported

In a November 2, 2026 Sardine article, Soups Ranjan describes three uses of Jev. These are Sardine's experiments and integrations, not experiments run on jevtypesafe.org.

For one incident, account-link analysis expanded five known bad users into 13 users and 29 fraudulent card transactions. Jev flagged 27 of those 29 transactions. Rules flagged 26, and the Sonnet pipeline flagged 18. The article reports roughly 100 ms per Jev call with fewer than 1,000 input tokens, and about one twenty-fifth of the comparison run's cost.

These numbers describe a known fraudulent set, not overall accuracy across legitimate and fraudulent traffic. They do not establish a false-positive rate. The Sonnet comparison bundled all 29 judgments, which differs from a live per-transaction flow. The article used one broad fraud-risk question and says narrower questions are the next experiment.

Sardine also describes a name/email consistency signal with three outcomes, with married names as an open edge case — a signal, not proof of fraud. For KYB, Sardine's Web360 collects registration, website, search, and review findings; Jev turns supplied findings into structured answers within Sardine Flow — not a claim that jevtypesafe.org provides Web360 or Sardine Flow.

Primary source: Sardine, November 2, 2026.

Separate collection, interpretation, and policy

Jev does not fetch missing records in this pattern. A returned probability is not a factual verification of an external database.

WorkOwner
Obtain registration records and source snapshotsAuthorized application services
Compute velocity counts, dates, and account linksApplication code
Judge whether supplied evidence supports entity or activity matchingFocused model questions
Determine thresholds, legal requirements, and review priorityValidated policy code and qualified staff
Approve an action or make an adverse decisionAuthorized process with required human review

Local illustrative pattern: prioritize a KYB review queue

This independent illustration uses a fictional design studio and two synthetic findings. The host request asks whether the supplied evidence supports an entity match and an activity match. It does not ask “approve this business.”

The assumed response uses Noul fields documented by this host. Probabilities and usage are illustrative, not measured. The offline review_queue function returns only manual-review labels. Missing or invalid judgments go to missing-judgment review. Stale or unconfirmed evidence goes to stale-evidence review. A low match probability flags an evidence gap. Even two high probabilities still go to standard manual review, not automatic acceptance.

The 0.8 boundary is a demonstration, not a risk policy. Missing evidence must not be interpreted as proof of wrongdoing.

Validate before using real applicant data

Evaluate on consented, appropriately protected data and representative legitimate cases, not only known fraud. Separate tuning and holdout sets. Measure false positives, missed cases, calibration, review volume, and errors across relevant language and name patterns.

Keep sensitive records out of public demos. Review data-processing terms for this independent host separately from official TypeSafe terms. Define retention, access controls, audit records, outage behavior, and a model-change review before launch.

Read the judgment-and-code method and the host API contract. The playground is useful for synthetic inputs, not a certified KYB product.

Complete offline example

Synthetic input and assumed response, for illustration only. This code does not call a service or execute business actions.

Host request (illustrative)
{
  "model": "jev",
  "state": {
    "business": "Illustrative Paper Lantern Studio",
    "findings": [
      {
        "source_id": "registry_snapshot",
        "text": "The registry snapshot lists Paper Lantern Studio LLC as active."
      },
      {
        "source_id": "application",
        "text": "The applicant describes a design studio, but has not supplied evidence of the trading-name relationship."
      }
    ]
  },
  "questions": {
    "entity_match": {
      "type": "noul",
      "instructions": "Do the supplied findings support that the applicant and registered entity are the same legal entity? Judge only the supplied evidence."
    },
    "activity_match": {
      "type": "noul",
      "instructions": "Do the supplied findings support that observed business activity matches the stated design-studio activity? Missing evidence does not establish a match."
    }
  }
}
Response (assumed)
{
  "model": "jev-1.14.0",
  "answers": {
    "entity_match": {
      "type": "noul",
      "noul": 0.46
    },
    "activity_match": {
      "type": "noul",
      "noul": 0.31
    }
  },
  "usage": {
    "input_tokens": 240,
    "billed_tokens": 240,
    "output_tokens": 0,
    "remaining_tokens": 11999760
  },
  "meta": {
    "decide_model": "jev",
    "credit_multiplier": 1
  }
}
review_queue
import math

def probability(response, name):
    try:
        answer = response["answers"][name]
        value = answer["noul"]
        if answer["type"] != "noul":
            return None
        if type(value) not in (int, float):
            return None
        if not math.isfinite(value) or not 0 <= value <= 1:
            return None
        return value
    except (KeyError, TypeError):
        return None

def review_queue(response, facts):
    """Prioritize manual KYB review. Never approve or reject an applicant."""
    entity = probability(response, "entity_match")
    activity = probability(response, "activity_match")
    if entity is None or activity is None:
        return "manual_review_missing_judgment"
    if not isinstance(facts, dict) or facts.get("evidence_current") is not True:
        return "manual_review_stale_evidence"
    if entity < 0.8 or activity < 0.8:
        return "manual_review_evidence_gap"
    return "manual_review_standard"

Sources

This is an unofficial community resource. We are not affiliated with TypeSafe AI, Sardine, or Liquid AI.