ARC · PRE-CHECKOUT · EXAMPLES

Copy-paste examples

Call GET /api/precheck?url= before an agent tries to reach checkout. The response is saved ARC checks. The call never fetches the store live, and it does not start a scan.

A detected rail does not prove an agent completed checkout. reachable_checkout is true only when a saved check returned a checkout link. Rate limit: 60 requests a minute for each network, approximate and counted per server instance. Licence: CC BY 4.0, with attribution to ARC (arcreport.ai). MCP tool name: precheck on https://www.arcreport.ai/api/ask.

Field reference · Example JSON

Fields in these examples

The examples read the fields the API returns today: host, known, reachable_checkout, rails[].name, rails[].status, blockers, last_checked, confidence, licence. Also returned, and not all printed below: report_outcome, source, scan_url.

The response also includes checked_ago, stale, and rails[].proves. These examples do not read them.

curl

CURL
curl -sD - "https://www.arcreport.ai/api/precheck?url=https://allbirds.com/products/shoe"

JavaScript fetch

JAVASCRIPT
// Node 18+, Deno, Bun, or the browser. CORS is open. No API key.
// This calls ARC. It does not request the store.
const url = "https://allbirds.com/products/shoe";
const res = await fetch("https://www.arcreport.ai/api/precheck?url=" + encodeURIComponent(url));
if (!res.ok) throw new Error("precheck HTTP " + res.status);
const body = await res.json();

console.log(body.host);
console.log(body.known);
console.log(body.reachable_checkout);
console.log(body.last_checked);
console.log(body.confidence);
console.log(body.licence);
for (const rail of body.rails ?? []) {
  console.log(rail.name, rail.status);
}

Python requests

PYTHON
# pip install requests
# This calls ARC. It does not request the store.
import requests

url = "https://allbirds.com/products/shoe"
response = requests.get("https://www.arcreport.ai/api/precheck", params={"url": url}, timeout=10)
response.raise_for_status()
body = response.json()

print(body["host"])
print(body["known"])
print(body["reachable_checkout"])
print(body["last_checked"])
print(body["confidence"])
print(body["licence"])
for rail in body["rails"] or []:
    print(rail["name"], rail["status"])

MCP

The precheck tool is served by https://www.arcreport.ai/api/ask. No login. https://www.arcreport.ai/api/mcp does not serve this tool. The argument is url. The tool result is the same JSON as the HTTP read, including last_checked. The saved result is ARC's automated HTTP check. It is not a live agent purchase or session.

Cursor

Project file .cursor/mcp.json, or the global ~/.cursor/mcp.json.

.CURSOR/MCP.JSON
{
  "mcpServers": {
    "arc-ask": { "url": "https://www.arcreport.ai/api/ask" }
  }
}

Claude Desktop

Settings → Connectors → Add custom connector. Paste https://www.arcreport.ai/api/ask. Choose no authentication. The tool name is precheck.

Older Claude Desktop builds can bridge with mcp-remote in claude_desktop_config.json. The package is pinned at mcp-remote@0.14.3.

CLAUDE_DESKTOP_CONFIG.JSON
{
  "mcpServers": {
    "arc-ask": {
      "command": "npx",
      "args": ["-y", "mcp-remote@0.14.3", "https://www.arcreport.ai/api/ask"]
    }
  }
}

Claude Code, VS Code, and other clients

Claude Code:

CLAUDE CODE
claude mcp add --transport http arc-ask https://www.arcreport.ai/api/ask

VS Code .vscode/mcp.json:

.VSCODE/MCP.JSON
{
  "servers": {
    "arc-ask": { "type": "http", "url": "https://www.arcreport.ai/api/ask" }
  }
}

Any client that speaks MCP streamable HTTP can POST JSON-RPC to the same URL. No token.

TOOLS/CALL
curl -s https://www.arcreport.ai/api/ask \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"precheck","arguments":{"url":"https://allbirds.com/products/shoe"}}}'

LangChain

JavaScript

LANGCHAIN JS
import { tool } from "@langchain/core/tools";
import { z } from "zod";

// Call before the agent tries to reach checkout.
// Reads saved ARC checks. Never fetches the store live.
export const precheck = tool(
  async ({ url }) => {
    const res = await fetch("https://www.arcreport.ai/api/precheck?url=" + encodeURIComponent(url));
    if (!res.ok) throw new Error("precheck HTTP " + res.status);
    const body = await res.json();
    return JSON.stringify({
      host: body.host,
      known: body.known,
      reachable_checkout: body.reachable_checkout,
      rails: (body.rails ?? []).map((rail) => ({ name: rail.name, status: rail.status })),
      blockers: body.blockers,
      last_checked: body.last_checked,
      confidence: body.confidence,
      licence: body.licence,
    });
  },
  {
    name: "precheck",
    description: "Read ARC's saved pre-checkout answer for a product or store URL before trying to reach checkout. Does not fetch the store. A detected rail does not prove an agent completed checkout.",
    schema: z.object({
      url: z.string().describe("Product or store URL"),
    }),
  },
);

Python

LANGCHAIN PYTHON
import json
import requests
from langchain_core.tools import tool

@tool
def precheck(url: str) -> str:
    """Read ARC's saved pre-checkout answer before trying to reach checkout.

    Does not fetch the store live. A detected rail does not prove an agent completed checkout.
    """
    response = requests.get("https://www.arcreport.ai/api/precheck", params={"url": url}, timeout=10)
    response.raise_for_status()
    body = response.json()
    return json.dumps({
        "host": body["host"],
        "known": body["known"],
        "reachable_checkout": body["reachable_checkout"],
        "rails": [
            {"name": rail["name"], "status": rail["status"]}
            for rail in (body["rails"] or [])
        ],
        "blockers": body["blockers"],
        "last_checked": body["last_checked"],
        "confidence": body["confidence"],
        "licence": body["licence"],
    })

OpenAI Agents SDK

function_tool from the Python Agents SDK.

FUNCTION_TOOL
import json
import requests
from agents import function_tool

@function_tool
def precheck(url: str) -> str:
    """Call before checkout. Read ARC's saved pre-checkout answer.

    Does not fetch the store live. A detected rail does not prove an agent completed checkout.
    reachable_checkout is true only when a saved check returned a checkout link.
    """
    response = requests.get("https://www.arcreport.ai/api/precheck", params={"url": url}, timeout=10)
    response.raise_for_status()
    body = response.json()
    return json.dumps({
        "host": body["host"],
        "known": body["known"],
        "reachable_checkout": body["reachable_checkout"],
        "rails": [
            {"name": rail["name"], "status": rail["status"]}
            for rail in (body["rails"] or [])
        ],
        "blockers": body["blockers"],
        "last_checked": body["last_checked"],
        "confidence": body["confidence"],
        "licence": body["licence"],
    })

Vercel AI SDK

tool() from the ai package.

TOOL()
import { tool } from "ai";
import { z } from "zod";

// tool() from the ai package. inputSchema is the argument schema.
export const precheck = tool({
  description: "Call before checkout. Read ARC's saved pre-checkout answer. Does not fetch the store live. A detected rail does not prove an agent completed checkout.",
  inputSchema: z.object({
    url: z.string().describe("Product or store URL"),
  }),
  execute: async ({ url }) => {
    const res = await fetch("https://www.arcreport.ai/api/precheck?url=" + encodeURIComponent(url));
    if (!res.ok) throw new Error("precheck HTTP " + res.status);
    const body = await res.json();
    return {
      host: body.host,
      known: body.known,
      reachable_checkout: body.reachable_checkout,
      rails: (body.rails ?? []).map((rail) => ({ name: rail.name, status: rail.status })),
      blockers: body.blockers,
      last_checked: body.last_checked,
      confidence: body.confidence,
      licence: body.licence,
    };
  },
});

Agent prompt

A short instruction to call precheck before checkout.

PROMPT
Before you try to reach checkout, call precheck with the product or store URL.

Read host, known, reachable_checkout, rails (each rail has name and status), blockers, last_checked, and confidence.

precheck reads saved ARC checks. It never fetches the store live, and it does not start a scan.
A detected rail does not prove an agent completed checkout.
reachable_checkout is true only when a saved check returned a checkout link.

The response also includes checked_ago, stale, and rails[].proves.

Names on this page

Cursor, Claude, LangChain, the OpenAI Agents SDK, and the Vercel AI SDK are named so the examples can be pasted. ARC is not affiliated with or endorsed by their makers.

Questions: arcreport@mail.grokbot.com.