{
    "schema": "ursy.net/capabilities/v1",
    "property": "ursy.net",
    "version": "0.3.2",
    "state": "website_live_sales_closed",
    "ordering_enabled": false,
    "truth_policy": "Nothing on this property is a quote. A quote is server-priced, expiring and issued per request.",
    "currency": "GBP",
    "vat": "exclusive",
    "offer_id_scheme": "ursy:<property>:<sku>",
    "rails": [
        {
            "id": "x402",
            "enabled": false,
            "detail": "Lane A is not open."
        },
        {
            "id": "stripe",
            "enabled": false,
            "detail": "Lane B is not open."
        }
    ],
    "limits": {
        "quote_valid_seconds": 900,
        "quotes_per_client_per_hour": 60,
        "quotes_per_day": 5000,
        "max_quantity": 100
    },
    "capabilities": [
        {
            "id": "ursy.net:status",
            "title": "Read measured service and release status.",
            "method": "GET",
            "canonical_url": "https://ursy.net/wp-json/ursy-net/v1/status",
            "effect": "read",
            "execution_location": "server",
            "auth_audience": "public",
            "requirements": "Read with HTTPS GET; no private data is returned."
        },
        {
            "id": "ursy.net:capabilities",
            "title": "Read implemented and enabled capabilities.",
            "method": "GET",
            "canonical_url": "https://ursy.net/wp-json/ursy-net/v1/capabilities",
            "effect": "read",
            "execution_location": "server",
            "auth_audience": "public",
            "requirements": "Read with HTTPS GET; no private data is returned."
        },
        {
            "id": "ursy.net:catalogue",
            "title": "Read every offer, transcribed from its owning property. Nothing is purchasable.",
            "method": "GET",
            "canonical_url": "https://ursy.net/wp-json/ursy-net/v1/catalogue",
            "effect": "read",
            "execution_location": "server",
            "auth_audience": "public",
            "requirements": "Read with HTTPS GET; no private data is returned."
        },
        {
            "id": "ursy.net:offers",
            "title": "Resolve one offer by its ursy:<property>:<sku> identifier.",
            "method": "GET",
            "canonical_url": "https://ursy.net/wp-json/ursy-net/v1/offers/{offer_id}",
            "effect": "read",
            "execution_location": "server",
            "auth_audience": "public",
            "requirements": "Read with HTTPS GET; no private data is returned."
        },
        {
            "id": "ursy.net:mcp",
            "title": "Product MCP endpoint (JSON-RPC 2.0 over POST).",
            "method": "POST",
            "canonical_url": "https://ursy.net/wp-json/ursy-net/v1/mcp",
            "effect": "write",
            "execution_location": "server",
            "auth_audience": "public",
            "requirements": "HTTPS POST with a JSON body; refusals are typed."
        },
        {
            "id": "ursy.net:mandates",
            "title": "Read bounded delegated spending authority. Requires an owner grant.",
            "method": "GET",
            "canonical_url": "https://ursy.net/wp-json/ursy-net/v1/mandates",
            "effect": "read",
            "execution_location": "server",
            "auth_audience": "owner",
            "requirements": "Requires an owner grant."
        },
        {
            "id": "ursy.net:quotes",
            "title": "Create an expiring, server-priced quote. No charge is made.",
            "method": "POST",
            "canonical_url": "https://ursy.net/wp-json/ursy-net/v1/quotes",
            "effect": "write",
            "execution_location": "server",
            "auth_audience": "public",
            "requirements": "HTTPS POST with a JSON body; refusals are typed."
        },
        {
            "id": "ursy.net:quote",
            "title": "Read one issued quote and whether it has expired.",
            "method": "GET",
            "canonical_url": "https://ursy.net/wp-json/ursy-net/v1/quotes/{quote_id}",
            "effect": "read",
            "execution_location": "server",
            "auth_audience": "public",
            "requirements": "Read with HTTPS GET; no private data is returned."
        },
        {
            "id": "ursy.net:orders",
            "title": "Place an order against an unexpired quote. Validates fully, then refuses while ordering is closed. No charge is ever made by this route.",
            "method": "POST",
            "canonical_url": "https://ursy.net/wp-json/ursy-net/v1/orders",
            "effect": "write",
            "execution_location": "server",
            "auth_audience": "public",
            "requirements": "HTTPS POST with a JSON body; refusals are typed."
        },
        {
            "id": "ursy.net:order",
            "title": "Read one placed order. Requires an owner grant.",
            "method": "GET",
            "canonical_url": "https://ursy.net/wp-json/ursy-net/v1/orders/{order_id}",
            "effect": "read",
            "execution_location": "server",
            "auth_audience": "owner",
            "requirements": "Requires an owner grant."
        }
    ],
    "observed_at": "2026-10-14T05:17:51+00:00"
}