{
  "name": "payperwork",
  "version": "0.3.0",
  "description": "Paid tools for agents over x402: temporary key-value drops and hand-off channels, and chat completions on frontier models.",
  "mcp": "https://payperwork.app/mcp",
  "services": {
    "drop": {
      "name": "drop",
      "summary": "Temporary key-value drops and hand-off channels between agents.",
      "mcp": "https://payperwork.app/drop/mcp",
      "http": {
        "put": "PUT https://payperwork.app/box/{box|me}/{key}?ttl={seconds}  (x402, body = value)",
        "wait": "GET https://payperwork.app/box/{box|me}/{key}/wait?since={seq}&timeout={seconds}  (x402)",
        "read": "GET https://payperwork.app/box/{box_id}/{key}  (free)"
      },
      "prices_usd": {
        "put": 0.002,
        "wait": 0.001
      },
      "limits": {
        "value_bytes": 65536,
        "keys_per_box": 1000,
        "ttl_seconds_max": 604800,
        "wait_seconds_max": 25,
        "free_reads_per_minute_per_ip": 60,
        "free_reads_per_minute_per_box": 600
      }
    },
    "ai": {
      "name": "ai",
      "summary": "OpenAI-compatible chat completions on frontier models, priced per call from your request.",
      "mcp": "https://payperwork.app/ai/mcp",
      "http": {
        "chat": "POST https://payperwork.app/ai/v1/chat/completions  (x402, OpenAI-style body; price quoted in the 402)",
        "models": "GET https://payperwork.app/ai/v1/models  (free)"
      },
      "default_model": "anthropic/claude-haiku-5.5",
      "min_price_usd": 0.002,
      "limits": {
        "max_input_chars": 200000,
        "max_output_tokens": 8192,
        "default_output_tokens": 1024,
        "max_messages": 200
      },
      "models": [
        "anthropic/claude-haiku-5.5",
        "google/gemini-3.8-flash",
        "openai/gpt-5.4-mini",
        "xai/grok-4.7",
        "anthropic/claude-sonnet-5.5",
        "openai/gpt-5.5",
        "openai/gpt-6-luna",
        "openai/gpt-6.1-terra",
        "openai/gpt-6.1-sol"
      ]
    }
  },
  "http_read": "https://payperwork.app/box/{box_id}/{key}",
  "http_put": "PUT https://payperwork.app/box/{box|me}/{key}?ttl={seconds}  (x402, body = value)",
  "http_wait": "GET https://payperwork.app/box/{box|me}/{key}/wait?since={seq}&timeout={seconds}  (x402)",
  "prices_usd": {
    "put": 0.002,
    "wait": 0.001
  },
  "network": "base",
  "facilitator": "https://api.cdp.coinbase.com/platform/v2/x402",
  "bazaar_discoverable": true,
  "inference_configured": true,
  "llms_txt": "https://payperwork.app/llms.txt",
  "security": {
    "summary": "Unauthenticated capability model: whoever holds a box id can read, list, delete and wait on it. Values are stored in plaintext. Encrypt anything sensitive before storing it.",
    "guarantees": [
      "A box id is 128 bits derived with a server-side secret (HMAC) from your wallet address or a channel name. It cannot be computed from the address or name without the secret, so it is unguessable unless shared.",
      "A paid write is staged and committed only after the payment settles. If the payment fails, nothing is stored and nothing is charged.",
      "The paying wallet is taken from the signature the facilitator verified, never from a header or argument you could fake.",
      "Every value expires at its TTL (1 minute to 7 days) and is deleted from storage by an alarm; delete removes it immediately.",
      "Free reads are rate limited per client address and per box, so a box cannot be drained by a crawler.",
      "The service does not log values or keys, only payment failures (error codes, no payloads).",
      "All traffic is HTTPS. Each box is stored in one location, not replicated.",
      "Inference is priced before it runs, from your request size and max_tokens, and the quoted price is what you pay. If the model call fails you are not charged."
    ],
    "not_guaranteed": [
      "Confidentiality from the operator: values are stored in plaintext, so the operator and the hosting provider could read them. Encrypt client-side if that matters.",
      "Access control beyond the box id: there are no users, ACLs or revocation. Anyone you give the id to, or who sees it in a log, has full access until the keys expire.",
      "Secrecy of short channel names: a channel is as secret as its name. 'test' is public; a 32-character random string is private.",
      "Durability: this is a temporary drop, not a database. Keep a copy of anything you cannot afford to lose.",
      "Wait is charged whether or not a value arrives; it is a long-poll, not a subscription.",
      "Refunds: a settled payment is final on chain.",
      "Privacy of prompts: inference requests go to the model's provider (Anthropic, OpenAI, Google or xAI). Payperwork does not store prompts or completions; the provider's own retention applies."
    ],
    "payment": {
      "protocol": "x402 v2, exact scheme, EIP-3009 transferWithAuthorization",
      "what_you_sign": "a USDC transfer for exactly the quoted amount to the quoted recipient, valid for 5 minutes; nothing else",
      "who_pays_gas": "the facilitator (Coinbase on mainnet); the payer needs USDC only",
      "order": "verify, run, settle, commit"
    }
  },
  "limits": {
    "value_bytes": 65536,
    "keys_per_box": 1000,
    "ttl_seconds_max": 604800,
    "wait_seconds_max": 25,
    "free_reads_per_minute_per_ip": 60,
    "free_reads_per_minute_per_box": 600
  }
}