Sealed quote buys

QuoteSeal

QuoteSeal

Any job, any city, any budget. Tell the assistant what quotes you need, approve a spending seal, and buys stay inside the cap - anything above is blocked.

Assistant

Describe the quotes you need

Any job, any city - I prepare a spending seal, you approve, then quotes are bought under that cap. Nothing above the seal goes through.

QuoteSeal

Hi - tell me what quotes you need. Any job, any city: include the work, place, size, and your spending seal (total budget and max per quote). Example: “40 m2 solar film in Lyon, up to 3 quotes, 3 USDC total, 1 USDC max each.”

Enter to send · Shift+Enter for a new line · pay only under the seal

How it works

From a sentence to sealed quote buys

One clear loop for any quote request: describe, approve, buy under the seal.

  1. 01Describe

    Describe the job

    Say what you need quotes for - any trade, city, size, and your spending limits.

  2. 02Seal

    Approve the seal

    Review the plain-English spending seal. Nothing is spent until you approve.

  3. 03Buy

    Quotes under the cap

    Allowed quotes pay. Anything above the seal is blocked - raising the limit always needs a new approval.

Product flow

Describe - Seal - Buy / Block / Raise

The live diagram tracks your chat: allowed quotes pay, overspend is blocked, and raising the seal always needs a new approval.

Flow

Sealed spending flow

Product flow
  1. 1

    Describe

    your job

  2. 2

    Seal

    you approve

  3. 3

    Buy

    under the cap

Buy

Within the seal

Allowed spends go through

Block

Above the seal

Overspend never pays

Raise

Raise the seal

Never silent escalate

Kite · Passport

Identity is part of the product

QuoteSeal runs sealed spends under hard caps, with Kite Passport as the verifiable agent identity rail when available on the host.

Passport identity

QuoteSeal agent

Reading identity…

Checking
Rail
Sealed local
Account
Not signed in
Session
Uses local seal
  1. 01 · Identity

    Verifiable agent identity

    Status from /api/kite/status surfaces agent id, login, and session. Approve can request a Passport spending session with passkey approval when the host is connected.

  2. 02 · Limits

    User-defined permissions

    You set total budget and max per quote, approve the seal once, and pay-time code refuses anything above it. Raising always needs a new approval - never a silent escalate.

  3. 03 · Payments

    Sealed quote network

    Buys run against the quote network under the seal (buy / block / raise). When Passport is connected, Approve also opens a spending session for passkey confirmation.

For developers

Agent and API notes

Always-on integrator surface: curls, env names (no secrets), OpenAPI, and optional MCP. Product chat above stays jargon-free.

Build a plan

POST /api/mandate turns a plain request into a sealed plan. Uses OpenServ when SERV_API_KEY is set; otherwise a local parser.

Sealed run

POST /api/run approves the sealed session and buys quote-network offers under the seal. Overspend is refused at pay time.

Health + identity

GET /api/health, /api/kite/status, and /api/x402/quote/{tier}. Passport identity and session create live under /api/kite/*.

OpenAPI 3Agents section

$BASE_URL = https://quoteseal.ozc.fr

# QuoteSeal health - OpenAPI: $BASE_URL/openapi.yaml
curl -s "$BASE_URL/api/health"
# QuoteSeal mandate - free text to sealed plan
curl -s -X POST "$BASE_URL/api/mandate" \
  -H 'Content-Type: application/json' \
  -d '{
    "message": "Get up to 3 quotes for a 40 m2 solar-film install in Lyon. Total budget 3 USDC. Max 1 USDC per quote. Valid for 2 hours."
  }'
# QuoteSeal sealed run - pass MandatePlan from /api/mandate
# Tip: PLAN=$(curl -s -X POST "$BASE_URL/api/mandate" -H 'Content-Type: application/json' \
#   -d '{"message":"40 m2 solar film in Lyon, 3 USDC total, 1 USDC max per quote"}')
# curl -s -X POST "$BASE_URL/api/run" -H 'Content-Type: application/json' -d "{\"plan\": $PLAN}"
curl -s -X POST "$BASE_URL/api/run" \
  -H 'Content-Type: application/json' \
  -d '{
    "plan": {
      "mandate": {
        "job": "solar film install",
        "city": "Lyon",
        "areaM2": 40,
        "maxQuotes": 3,
        "maxAmountPerTx": 1,
        "maxTotalAmount": 3,
        "ttlHours": 2,
        "preferredTiers": ["cheap", "standard", "premium"]
      },
      "session": {
        "taskSummary": "Sealed quote run",
        "maxAmountPerTx": 1,
        "maxTotalAmount": 3,
        "ttlHours": 2,
        "assets": "USDC",
        "allowedEndpoints": [
          "$BASE_URL/api/x402/quote/cheap",
          "$BASE_URL/api/x402/quote/standard",
          "$BASE_URL/api/x402/quote/premium"
        ],
        "mode": "kite_sandbox"
      },
      "plan": [
        { "tier": "cheap", "reason": "Under seal", "expectedPriceUsdc": 0.3 },
        { "tier": "standard", "reason": "Under seal", "expectedPriceUsdc": 0.8 },
        { "tier": "premium", "reason": "May block", "expectedPriceUsdc": 1.5 }
      ],
      "rationale": "Agent sealed plan",
      "source": "fallback"
    }
  }'
# Quote network merchants (402 without X-PAYMENT; seal enforced with session token)
curl -s "$BASE_URL/api/x402/quote/cheap"
curl -s "$BASE_URL/api/x402/quote/standard"
curl -s "$BASE_URL/api/x402/quote/premium"

For agents

Call QuoteSeal before you spend on quotes.

QuoteSeal is a sealed spending gate for quote buys - not an open wallet. Other agents POST here to compile a plan, approve a seal, then buy only under the cap. Humans use the chat above; agents use the same REST surface (and optional MCP) to get buy / block / raise events without silent escalate. Passport identity lives under /api/kite/*. See Identity for live agent status and session create.

Agents

Mandate → run → respect blocks. Never auto-raise the seal. Prefer npm run mcp or OpenAPI curls with $BASE_URL.

Humans

Describe → approve the seal → watch buy / block / raise in chat and the flow diagram. Same checks; the UI adds plain-English copy.

OpenAPI 3 specLive: quoteseal.ozc.fr/openapi.yaml

Set $BASE_URL = https://quoteseal.ozc.fr (or your host)

Env notes

Environment (no secrets in chat or commits):
- SERV_API_KEY optional - without it, mandate compile uses a local parser
- SERV_BASE_URL defaults to the OpenServ inference API
- NEXT_PUBLIC_APP_URL - public origin for x402 resource URLs
- QUOTESEAL_BASE_URL - MCP proxy target (default https://quoteseal.ozc.fr)
Copy .env.example to .env.local. Never commit .env.local.

curl: GET /api/health

Replace $BASE_URL with your host

# QuoteSeal health - OpenAPI: $BASE_URL/openapi.yaml
curl -s "$BASE_URL/api/health"

curl: POST /api/mandate

Free text → sealed plan

# QuoteSeal mandate - free text to sealed plan
curl -s -X POST "$BASE_URL/api/mandate" \
  -H 'Content-Type: application/json' \
  -d '{
    "message": "Get up to 3 quotes for a 40 m2 solar-film install in Lyon. Total budget 3 USDC. Max 1 USDC per quote. Valid for 2 hours."
  }'

curl: POST /api/run

Approve plan → buy / block / raise

# QuoteSeal sealed run - pass MandatePlan from /api/mandate
# Tip: PLAN=$(curl -s -X POST "$BASE_URL/api/mandate" -H 'Content-Type: application/json' \
#   -d '{"message":"40 m2 solar film in Lyon, 3 USDC total, 1 USDC max per quote"}')
# curl -s -X POST "$BASE_URL/api/run" -H 'Content-Type: application/json' -d "{\"plan\": $PLAN}"
curl -s -X POST "$BASE_URL/api/run" \
  -H 'Content-Type: application/json' \
  -d '{
    "plan": {
      "mandate": {
        "job": "solar film install",
        "city": "Lyon",
        "areaM2": 40,
        "maxQuotes": 3,
        "maxAmountPerTx": 1,
        "maxTotalAmount": 3,
        "ttlHours": 2,
        "preferredTiers": ["cheap", "standard", "premium"]
      },
      "session": {
        "taskSummary": "Sealed quote run",
        "maxAmountPerTx": 1,
        "maxTotalAmount": 3,
        "ttlHours": 2,
        "assets": "USDC",
        "allowedEndpoints": [
          "$BASE_URL/api/x402/quote/cheap",
          "$BASE_URL/api/x402/quote/standard",
          "$BASE_URL/api/x402/quote/premium"
        ],
        "mode": "kite_sandbox"
      },
      "plan": [
        { "tier": "cheap", "reason": "Under seal", "expectedPriceUsdc": 0.3 },
        { "tier": "standard", "reason": "Under seal", "expectedPriceUsdc": 0.8 },
        { "tier": "premium", "reason": "May block", "expectedPriceUsdc": 1.5 }
      ],
      "rationale": "Agent sealed plan",
      "source": "fallback"
    }
  }'

curl: quote network

/api/x402/quote/{cheap|standard|premium}

# Quote network merchants (402 without X-PAYMENT; seal enforced with session token)
curl -s "$BASE_URL/api/x402/quote/cheap"
curl -s "$BASE_URL/api/x402/quote/standard"
curl -s "$BASE_URL/api/x402/quote/premium"

Cursor MCP config

npm run mcp · env QUOTESEAL_BASE_URL

{
  "mcpServers": {
    "quote-seal": {
      "command": "npx",
      "args": ["tsx", "mcp/server.ts"],
      "cwd": "/absolute/path/to/QuoteSeal",
      "env": {
        "QUOTESEAL_BASE_URL": "https://quoteseal.ozc.fr"
      }
    }
  }
}

FAQ

Frequently asked questions

Seal, SERV, Passport identity, agents - short answers.

QuoteSeal

QuoteSeal

Any job, any city. Describe the quotes you need, approve a spending seal, and buys stay inside the cap.

© 2026 QuoteSeal - no custody - pay only under the seal

Kite Passport identity · sealed quote network