ARC · PRE-CHECKOUT · V1

Pre-checkout read

Ask whether ARC already knows if an agent can reach checkout at a store. The answer is built from saved checks. ARC does not fetch that URL, and it does not start a scan.

For agents · MCP server · OpenAPI · Outcome report

Request

GET /api/precheck?url= with a product or store URL. HTTP and HTTPS only. No API key. The same read is the precheck tool on https://www.arcreport.ai/api/ask.

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

Fields

hostHostname, lowercased, without a leading www or a trailing dot. A subdomain can resolve to the registrable host ARC already lists (for example shop.example.co.uk to example.co.uk).
last_checkedISO time of the saved check. Null when there is none.
checked_agoCoarse age of last_checked, such as “3 hours ago” or “2 days ago”. Null when there is no saved check. Under an hour stays “under 1 hour ago”.
staleTrue when last_checked is 24 hours old or older. False when the saved check is newer than that. Null when there is no saved check.
knownTrue when the public catalog, a saved rails check, or directory check history has this host. False for a host ARC has not published, including EachSpy, OpenStreetMap, campaign shops, and a store that opted out.
reachable_checkoutTrue when a saved check returned a checkout link, false when that check finished without one, null when ARC has no completed check.
railsUCP, ACP, Shop Pay, WebMCP and MCP, each with a status and a proves sentence for what that status records. Checkout WebMCP is included when a saved Shopify reading exists. Null when known is false. proves describes the saved check. It does not mean an order was placed.
blockersStandard sentences for a saved block. Empty when nothing blocked the check. Null when known is false.
confidencehigh, medium, low, or none. A completed check from the last 7 days is high. A completed check from the last 30 days is medium. Older or failed evidence is low. No evidence is none.
report_outcomehttps://www.arcreport.ai/docs/outcome-report — where to report one checkout attempt.
sourceARC (arcreport.ai).
licenceCC BY 4.0.
scan_urlLink to the free scan page when the host is unknown. Null when known is true. Opening this API does not run that scan.

Example shape from the same builder as the API, with the clock fixed at 13 Oct 2026 00:00 UTC. Not a live database row.

{
  "host": "allbirds.com",
  "last_checked": "2026-10-12T18:00:00.000Z",
  "checked_ago": "6 hours ago",
  "stale": false,
  "known": true,
  "reachable_checkout": true,
  "rails": [
    {
      "name": "UCP",
      "status": "valid",
      "proves": "The saved check found a UCP profile that passed validation. That alone does not show an agent can reach checkout."
    },
    {
      "name": "ACP",
      "status": "not recorded",
      "proves": "ARC has not recorded ACP for this check."
    },
    {
      "name": "Shop Pay",
      "status": "not recorded",
      "proves": "ARC has not recorded Shop Pay for this check."
    },
    {
      "name": "WebMCP",
      "status": "yes",
      "proves": "The saved check detected Shopify's WebMCP adapter in storefront HTML. That is not a live browser session."
    },
    {
      "name": "MCP",
      "status": "yes",
      "proves": "The saved check got an answer from a storefront or UCP MCP endpoint."
    }
  ],
  "blockers": [],
  "confidence": "high",
  "source": "ARC (arcreport.ai)",
  "licence": "CC BY 4.0",
  "report_outcome": "https://www.arcreport.ai/docs/outcome-report",
  "scan_url": null
}

Caching

Successful responses send Cache-Control: public, s-maxage=300, stale-while-revalidate=86400. The CDN can reuse a response for five minutes, and serve a stale copy for a day while it refreshes. The server also keeps a 256-entry memory cache for 60 seconds. The read uses the database, so the route runs on Node rather than the edge runtime. A local timing check of a cached answer stays under 100 milliseconds at the median.

Counts

A successful answer increments a daily total for that host. Unknown, excluded and opted-out lookups share one (unknown) bucket. The raw address and the user agent are not stored. Calls from ARC's own internal clients are left out of that total.

Rate limit

60 requests a minute for each network. The key is an HMAC of the client address. The raw address is not stored. The 61st request in that minute is HTTP 429 with a Retry-After header. OPTIONS is not counted. The limit is approximate and counted per server instance, so the CDN and each running instance keep their own window.

Licence

The JSON is free to use, share and adapt under CC BY 4.0 with attribution to ARC (arcreport.ai). GET /api/precheck/stats returns checks_served, the total answers counted by host and day. Questions: arcreport@mail.grokbot.com.