{
  "updated": "2026-03-24",
  "currency": "USDC",
  "network": "eip155:84532",
  "services": [
    {
      "service": "wallet.prim.sh",
      "description": "Agent wallets. Generate keys, hold USDC on Base, and pay any x402 invoice.",
      "routes": [
        {
          "method": "POST",
          "path": "/v1/wallets",
          "price_usdc": "0.001",
          "description": "Register a wallet via EIP-191 signature"
        },
        {
          "method": "GET",
          "path": "/v1/wallets",
          "price_usdc": "0.001",
          "description": "List registered wallets owned by the calling wallet"
        },
        {
          "method": "GET",
          "path": "/v1/wallets/{address}",
          "price_usdc": "0.001",
          "description": "Get full wallet details including balance, policy, and status"
        },
        {
          "method": "DELETE",
          "path": "/v1/wallets/{address}",
          "price_usdc": "0.001",
          "description": "Permanently deactivate a wallet. Irreversible. Pending fund requests cancelled."
        },
        {
          "method": "POST",
          "path": "/v1/wallets/{address}/fund-request",
          "price_usdc": "0.001",
          "description": "Request USDC funding for a wallet. A human operator can approve or deny."
        },
        {
          "method": "GET",
          "path": "/v1/wallets/{address}/fund-requests",
          "price_usdc": "0.001",
          "description": "List all fund requests for a wallet"
        },
        {
          "method": "POST",
          "path": "/v1/fund-requests/{id}/approve",
          "price_usdc": "0.001",
          "description": "Approve a pending fund request. Returns the address to send USDC to."
        },
        {
          "method": "POST",
          "path": "/v1/fund-requests/{id}/deny",
          "price_usdc": "0.001",
          "description": "Deny a pending fund request"
        },
        {
          "method": "GET",
          "path": "/v1/wallets/{address}/policy",
          "price_usdc": "0.001",
          "description": "Get the spending policy for a wallet"
        },
        {
          "method": "PUT",
          "path": "/v1/wallets/{address}/policy",
          "price_usdc": "0.001",
          "description": "Update spending policy for a wallet. All fields optional. Pass null to remove a limit."
        },
        {
          "method": "POST",
          "path": "/v1/wallets/{address}/pause",
          "price_usdc": "0.001",
          "description": "Pause operations for a wallet. Temporarily halts spending without deactivating."
        },
        {
          "method": "POST",
          "path": "/v1/wallets/{address}/resume",
          "price_usdc": "0.001",
          "description": "Resume operations for a paused wallet"
        }
      ]
    },
    {
      "service": "faucet.prim.sh",
      "description": "Free testnet USDC and ETH on demand. Fund your agent wallet and start building.",
      "routes": [
        {
          "method": "POST",
          "path": "/v1/faucet/usdc",
          "price_usdc": "0.001",
          "description": "Dispense 10 test USDC on Base Sepolia. Rate limit: once per 2 hours per address."
        },
        {
          "method": "POST",
          "path": "/v1/faucet/eth",
          "price_usdc": "0.001",
          "description": "Dispense 0.01 test ETH on Base Sepolia. Rate limit: once per 1 hour per address."
        },
        {
          "method": "GET",
          "path": "/v1/faucet/status",
          "price_usdc": "0.001",
          "description": "Check rate limit status for a wallet address across both faucets."
        },
        {
          "method": "GET",
          "path": "/v1/faucet/treasury",
          "price_usdc": "0.001",
          "description": "Check treasury wallet ETH balance and refill status."
        },
        {
          "method": "POST",
          "path": "/v1/faucet/refill",
          "price_usdc": "0.001",
          "description": "Batch-claim testnet ETH from Coinbase CDP faucet into treasury. Rate limited to once per 10 minutes."
        }
      ]
    },
    {
      "service": "gate.prim.sh",
      "description": "Access control and onboarding for agents. Invite codes, allowlisting, wallet funding.",
      "routes": [
        {
          "method": "POST",
          "path": "/v1/redeem",
          "price_usdc": "0.001",
          "description": "Redeem an invite code. Wallet is allowlisted and funded with USDC + ETH."
        }
      ]
    },
    {
      "service": "store.prim.sh",
      "description": "Object storage. Persist artifacts across ephemeral VMs. S3-compatible.",
      "routes": [
        {
          "method": "POST",
          "path": "/v1/buckets",
          "price_usdc": "0.015/GB/mo",
          "description": "Create a new storage bucket"
        },
        {
          "method": "GET",
          "path": "/v1/buckets",
          "price_usdc": "0.001",
          "description": "List all buckets owned by the calling wallet"
        },
        {
          "method": "GET",
          "path": "/v1/buckets/{id}",
          "price_usdc": "0.001",
          "description": "Get details for a single bucket. Caller must own the bucket."
        },
        {
          "method": "DELETE",
          "path": "/v1/buckets/{id}",
          "price_usdc": "0.001",
          "description": "Delete a bucket. Bucket must be empty first."
        },
        {
          "method": "PUT",
          "path": "/v1/buckets/{id}/objects/{key}",
          "price_usdc": "free",
          "description": "Upload an object. Key may include slashes. Content-Length header required."
        },
        {
          "method": "GET",
          "path": "/v1/buckets/{id}/objects",
          "price_usdc": "0.001",
          "description": "List objects in a bucket. Cursor-based pagination."
        },
        {
          "method": "GET",
          "path": "/v1/buckets/{id}/objects/{key}",
          "price_usdc": "0.001",
          "description": "Download an object. Response body is streamed directly."
        },
        {
          "method": "DELETE",
          "path": "/v1/buckets/{id}/objects/{key}",
          "price_usdc": "0.001",
          "description": "Delete an object from a bucket"
        },
        {
          "method": "GET",
          "path": "/v1/buckets/{id}/quota",
          "price_usdc": "0.001",
          "description": "Get quota and usage for a bucket"
        },
        {
          "method": "PUT",
          "path": "/v1/buckets/{id}/quota",
          "price_usdc": "0.015/GB/mo",
          "description": "Set the storage quota for a bucket. Pass null to reset to default (100 MB)."
        },
        {
          "method": "POST",
          "path": "/v1/buckets/{id}/quota/reconcile",
          "price_usdc": "0.015/GB/mo",
          "description": "Recompute bucket usage by scanning actual R2 storage. Use when usage_bytes appears incorrect."
        },
        {
          "method": "POST",
          "path": "/v1/buckets/{id}/presign",
          "price_usdc": "0.001",
          "description": "Generate a presigned URL for direct GET or PUT access to an object. GET presign requires object to exist."
        }
      ]
    },
    {
      "service": "search.prim.sh",
      "description": "Search for agents. Zero ads, zero SEO spam. Just facts and clean markdown.",
      "routes": [
        {
          "method": "POST",
          "path": "/v1/search",
          "price_usdc": "0.001",
          "description": "Search the web and return ranked results with optional AI-generated answer"
        },
        {
          "method": "POST",
          "path": "/v1/search/news",
          "price_usdc": "0.001",
          "description": "Search for recent news articles, ordered by recency"
        },
        {
          "method": "POST",
          "path": "/v1/extract",
          "price_usdc": "0.001",
          "description": "Extract readable content from one or more URLs as markdown or plain text"
        }
      ]
    },
    {
      "service": "feedback.prim.sh",
      "description": "Report bugs, friction, and feature requests. Free. Every prim surfaces the feedback URL.",
      "routes": [
        {
          "method": "POST",
          "path": "/v1/submit",
          "price_usdc": "free",
          "description": "Submit feedback about any prim."
        },
        {
          "method": "GET",
          "path": "/v1/feed",
          "price_usdc": "0.001",
          "description": "List recent feedback (internal, requires x-internal-key)."
        }
      ]
    }
  ]
}
