ARC · DEVELOPERS · MCP TOOLS · CHECK A STORE

validate_ucp_profile

Validate a UCP profile

Validate a store's /.well-known/ucp (by host or pasted JSON) against the published UCP 2026-08-25 schema and spec rules. Errors, warnings and spec links.

NO LOGINREAD-ONLYREACHES THE OPEN WEB

What it does

Validate a Universal Commerce Protocol (UCP) business profile against the published UCP JSON Schema (current release) and spec rules: authority binding, https endpoints, orphaned extensions and, for a URL, hosting headers (no redirects, Cache-Control public max-age>=60). Pass url (store host, homepage or profile URL; /.well-known/ucp is added for a homepage) or profile (the JSON). Returns errors, warnings and info, each with a path and the spec section. Free, no login, no model call. Validation is not certification. JSON: GET /api/ucp/validate?url=

Limits: 300 validations per network per day.

Arguments

NameTypeRequiredDescription
urlstringnoStore host, homepage or profile URL, e.g. allbirds.com
profileany JSONnoThe profile JSON (object or string) to validate without fetching.
Full input JSON Schema
INPUT SCHEMA
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Store host, homepage or profile URL, e.g. allbirds.com"
    },
    "profile": {
      "description": "The profile JSON (object or string) to validate without fetching."
    }
  }
}

Call it

From Claude, Cursor, ChatGPT or VS Code, connect the server (config) and ask in plain words; the client picks the tool. Or call it directly with JSON-RPC:

CURL · JSON-RPC
curl -s https://www.arcreport.ai/api/ask \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"validate_ucp_profile","arguments":{"url":"allbirds.com"}}}'
JAVASCRIPT
const res = await fetch("https://www.arcreport.ai/api/ask", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "validate_ucp_profile",
      "arguments": {
        "url": "allbirds.com"
      }
    }
  }),
});
const { result } = await res.json();
const data = JSON.parse(result.content[0].text); // result.isError is true on errors
console.log(data);
PYTHON
import json, requests

res = requests.post("https://www.arcreport.ai/api/ask", json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "validate_ucp_profile",
        "arguments": {
            "url": "allbirds.com"
        }
    }
}, timeout=30)
result = res.json()["result"]
print(json.loads(result["content"][0]["text"]))

REST equivalent

GET /api/ucp/validate. POST {"profile": {...}} to validate JSON without fetching. Documented in openapi.json.

CURL · GET
curl -s 'https://www.arcreport.ai/api/ucp/validate?url=allbirds.com'