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.
Each call returns a signed receipt_id to keep with the payment record. Rules 2026-10-15.1.
How the agent should act
| decision | Meaning | What the agent does |
|---|---|---|
| proceed | Every requirement for the activity is met by a current registry fact; nothing is flagged. | Pay. Store receipt_id with the payment. |
| review | A flag (shortage, recall, possible sanctions or exclusion match) or a requirement Jid cannot confirm. | Show the unmet reasons to the user and ask. |
| stop | A registry confirms a hard failure, such as an expired registration or an out-of-service order. | Do not pay. Explain the reason. |
| insufficient_data | Jid 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.
{
"mcpServers": {
"jid": {
"type": "http",
"url": "https://jid.com/mcp",
"headers": {
"Authorization": "Bearer ${JID_KEY}"
}
}
}
}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.// 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}¤cy=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
}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 payingPick 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_commercesell_prescription_drugsmanufacture_drugssell_medical_deviceshaul_freightbroker_freightsell_alcoholproduce_spiritsprovide_investment_adviceaccept_depositslendbill_medicare_medicaidhealthcare_supplierfederal_contractingcharitable_solicitationconstructionoperate_psilocybin_healing_centerA 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.