The trust API for AI agents
Jid

AI procurement agents

Your agent is about to pay a supplier. Should it?

Give the agent one call before the payment: the supplier, the activity it is paid for and the amount. Jid returns a decision from published rules, the registry facts behind each reason, and a signed receipt to keep with the payment record.

The check, on a real supplier

An agent is about to send $37,000 to a drug manufacturer. It calls verify with activity=sell_prescription_drugs. This card is computed from the supplier's current registry facts by the same rules the API applies; the amount is the agent's context and does not change them.

The decision is review. The reasons say why, each cited to the registry that issued the fact, and a requirement Jid does not hold (a state licence) is shown as unknown rather than assumed.

Payment of $37,000 pending

Gland Pharma Limited

GET /v1/entities/gland-pharma-limited-j9nehi/verify?activity=sell_prescription_drugs&amount=37000

  • 7 drugs on FDA's current shortage list (carboplatin, dexmedetomidine, etomidate, furosemide, ketorolac, ...).Flag: reviewFDA Drug ShortagesVerified 17 Oct 2026
  • Jid does not hold state board of pharmacy licence registers. Confirm the licence with the state before relying on this decision.Unknown: reviewState boards of pharmacy (or FDA where a state has no licensing programme): not held by Jid
  • 4 establishments registered with FDA through 31 Dec 2027.MetFDA DECRSVerified 17 Oct 2026
  • 265 drug listings under NDC labeler code 68083.MetFDA NDC DirectoryVerified 17 Oct 2026
  • No FDA Enforcement Report names the firm as recalling firm.MetEnforcement Reports (drug, device and food recalls)Verified 12 Oct 2026
  • No FDA warning letter is matched to the firm.MetWarning LettersVerified 12 Oct 2026

5 more requirements checked, 9 met in all.

decision: reviewOpen the file

Each call returns a signed receipt_id to keep with the payment record. Rules 2026-10-15.1.

How the agent should act

decisionMeaningWhat the agent does
proceedEvery requirement for the activity is met by a current registry fact; nothing is flagged.Pay. Store receipt_id with the payment.
reviewA flag (shortage, recall, possible sanctions or exclusion match) or a requirement Jid cannot confirm.Show the unmet reasons to the user and ask.
stopA registry confirms a hard failure, such as an expired registration or an out-of-service order.Do not pay. Explain the reason.
insufficient_dataJid holds none of the records the activity depends on.Ask the user. Absence from Jid is not evidence about the business.

Copy and paste

MCP for agents that use tools; REST for your own payment code. Without a key you get 10 calls a minute and 100 a day per IP; a free key (no card) gives 1,000 checks a month. Search and receipts are free.

MCP server config (.mcp.json or Claude Desktop)
{
  "mcpServers": {
    "jid": {
      "type": "http",
      "url": "https://jid.com/mcp",
      "headers": {
        "Authorization": "Bearer ${JID_KEY}"
      }
    }
  }
}
Instruction for the agent
Before paying any supplier, call verify_business with the supplier, the activity you are paying for and the amount.
Pay only if decision is "proceed", and record receipt_id with the payment.
If decision is "review" or "insufficient_data", show me the reasons that are not met and ask before paying.
If decision is "stop", do not pay.
TypeScript
// Before the agent pays a supplier: verify, act on the decision, keep the receipt.
const JID = "https://jid.com/v1";
const headers = { Authorization: `Bearer ${process.env.JID_KEY}` };

type Decision = "proceed" | "review" | "stop" | "insufficient_data";

export async function checkSupplier(supplier: string, activity: string, amountUsd: number) {
  // 1. Resolve the supplier by name or registry number (FEI, LEI, CIK, USDOT...). Search is free.
  const s = await fetch(`${JID}/search?q=${encodeURIComponent(supplier)}`, { headers }).then((r) => r.json());
  const file = s.results?.[0];
  if (!file) return { decision: "insufficient_data" as Decision, reasons: [], receiptId: null };

  // 2. One check: the decision for this activity, with reasons and a signed receipt.
  const url = `${JID}/entities/${file.id}/verify?activity=${activity}&amount=${amountUsd}&currency=USD`;
  const v = await fetch(url, { headers }).then((r) => r.json());
  return {
    decision: v.decision.decision as Decision,
    reasons: v.decision.reasons.filter((r: any) => r.met !== true), // what blocks or needs a person
    receiptId: v.receipt.receipt_id as string,                       // store with the purchase order
  };
}

// In the payment tool:
const c = await checkSupplier("Gland Pharma", "sell_prescription_drugs", 37000);
if (c.decision === "proceed") {
  // pay, and record c.receiptId on the payment
} else if (c.decision === "stop") {
  // do not pay; tell the user why (c.reasons)
} else {
  // review or insufficient_data: show c.reasons and ask the user before paying
}
Python
import os, requests

JID = "https://jid.com/v1"
H = {"Authorization": f"Bearer {os.environ['JID_KEY']}"}

def check_supplier(supplier: str, activity: str, amount_usd: float) -> dict:
    """Verify a supplier before an agent pays it. Act only on 'proceed'."""
    s = requests.get(f"{JID}/search", params={"q": supplier}, headers=H, timeout=10).json()
    if not s.get("results"):
        return {"decision": "insufficient_data", "reasons": [], "receipt_id": None}
    fid = s["results"][0]["id"]
    v = requests.get(
        f"{JID}/entities/{fid}/verify",
        params={"activity": activity, "amount": amount_usd, "currency": "USD"},
        headers=H, timeout=10,
    ).json()
    return {
        "decision": v["decision"]["decision"],  # proceed | review | stop | insufficient_data
        "reasons": [r for r in v["decision"]["reasons"] if r["met"] is not True],
        "receipt_id": v["receipt"]["receipt_id"],  # keep with the purchase order
    }

c = check_supplier("Gland Pharma", "sell_prescription_drugs", 37000)
if c["decision"] == "proceed":
    pass  # pay; store c["receipt_id"] with the payment
else:
    for r in c["reasons"]:
        print(r["met"], r["requirement"], "-", r["detail"])  # show the user, ask before paying

Pick the activity you are paying for

Each activity checks only requirements Jid can cite, and lists the ones it cannot check as unknown. Full rules, with the law behind each requirement.

General commerce (default)Buying from or paying an ordinary business: the legal entity is active where Jid holds a register, and no sanctions, restricted-party or exclusion match.general_commerce
Sell prescription drugsA supplier selling prescription drugs: FDA establishment registration and NDC listing, the shortage, recall, warning-letter and exclusion record, and the state distribution licence Jid does not hold.sell_prescription_drugs
Manufacture drugsA contract or own-label drug manufacturer: a current FDA establishment registration that covers manufacturing, NDC listings, and the same adverse-record flags.manufacture_drugs
Sell medical devicesA device maker or supplier: current FDA device establishment registration, 510(k) or PMA where its listed devices need one, and recall and warning-letter flags.sell_medical_devices
Haul freight (for-hire motor carrier)A trucking company carrying your goods for hire: active FMCSA carrier authority, insurance at the minimum, no out-of-service order.haul_freight
Broker freightA freight broker arranging transport: active FMCSA broker authority and a surety bond or trust on file.broker_freight
Sell alcohol (wholesale or import)An alcohol wholesaler or importer: TTB basic permit of that type. The state licence is required and Jid does not hold state registers.sell_alcohol
Produce distilled spiritsA distillery: TTB distilled spirits plant permit. The state licence is required and Jid does not hold state registers.produce_spirits
Provide investment adviceAn investment adviser: SEC registration and the Form ADV disciplinary record.provide_investment_advice
Accept depositsA bank or credit union holding funds: an active FDIC-insured or NCUA-insured charter.accept_deposits
LendA lender: an active bank or credit union charter, otherwise a state lending licence (not held by Jid).lend
Bill Medicare or MedicaidA health care provider or supplier billing federal programmes: active NPI, no OIG exclusion. Medicare enrolment is required and Jid does not hold PECOS.bill_medicare_medicaid
Health care supplierA pharmacy, laboratory or DME supplier you buy from: active NPI and no OIG or SAM exclusion.healthcare_supplier
Federal contractingA business taking a federal contract or award: active SAM.gov registration and no SAM.gov exclusion.federal_contracting
Charitable solicitationA charity asking for donations: IRS tax-exempt recognition, not revoked.charitable_solicitation
Construction or home improvement (contractor)A contractor doing construction, trade or home improvement work: a current contractor licence where Jid holds the board (California CSLB; Texas TDLR electrical and air-conditioning contractors; New York City DCWP home improvement contractors). Elsewhere the licence is unknown, never assumed. Jurisdiction US-CA, US-TX or US-NY narrows it.construction
Operate a psilocybin healing or service centre (CO, OR)A licensed psilocybin centre in Colorado or Oregon: the current state licence. Jurisdiction US-CO or US-OR.operate_psilocybin_healing_center

A Jid decision applies the published rules (https://jid.com/decision-rules) to the public-record facts Jid holds. It is not legal advice, not a certification, licence or approval, and not a guarantee about the business. Requirements Jid cannot check are returned as unknown.

Building a procurement or AP agent?

Design partners get the API, monitoring and Verified features free for 12 months, with integration help, in exchange for production use and a case study.