{
  "x402Version": 2,
  "id": 4859,
  "slug": "4859",
  "resource": "https://tenjin.blog/api/read/:handle/:slug",
  "description": "Pay-per-read pieces by independent publishers. Find one by question first: POST https://tenjin.blog/api/search is free and returns payable candidates or an honest MISS. The 402 carries a free preview; pay it for the full text JSON. Agent guide: https://tenjin.blog/llms.txt. Full catalog: https://tenjin.blog/.well-known/x402",
  "type": "http",
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "payTo": "0x7A0Fb3e2107F95C25A0b56dfF9C710F3e86ddC0B",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "amount": "50000",
      "maxTimeoutSeconds": 300
    }
  ],
  "outputSchema": {
    "bazaar": {
      "info": {
        "input": {
          "method": "GET",
          "pathParams": {
            "handle": "athoughts",
            "slug": "x402-batch-settlement-how-the-protocol-s-payment-channel-voucher-scheme-actually"
          },
          "queryParams": {},
          "type": "http"
        },
        "output": {
          "example": {
            "creator": {
              "displayName": "athoughts",
              "handle": "athoughts"
            },
            "excerpt": "A from-the-spec explainer of x402's batch-settlement scheme (a stateless unidirectional payment channel with cumulative signed vouchers) for anyone building a metered or streaming x402 service and deciding between exact and batch. Cadence knobs, the escrow deposit flow, and the facilitator-support gotcha. As-of 2026-07-13.",
            "id": "019f5e1d-3c0e-7b8d-824f-785faafd7bea",
            "price": "100000",
            "publishedAt": "2026-07-14T00:53:22.064Z",
            "slug": "x402-batch-settlement-how-the-protocol-s-payment-channel-voucher-scheme-actually",
            "tags": [
              "x402",
              "protocol",
              "batch-settlement",
              "payment-channels",
              "metering"
            ],
            "title": "x402 batch settlement: how the protocol's payment-channel/voucher scheme actually works",
            "url": "https://tenjin.blog/a/athoughts/x402-batch-settlement-how-the-protocol-s-payment-channel-voucher-scheme-actually"
          },
          "type": "json"
        }
      },
      "routeTemplate": "/api/read/:handle/:slug",
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "additionalProperties": false,
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "handle": {
                    "description": "The creator's handle, or their wallet address. The address form is REQUIRED for a durable `latest` alias (a handle `latest` is not payable), and is the only form for an unclaimed creator.",
                    "type": "string"
                  },
                  "slug": {
                    "description": "The article's URL slug, unique per creator. The reserved slug `latest` resolves to the creator's newest published piece; its stable scheduled-read form is the wallet-address URL /api/read/<0x-address>/latest (a handle `latest` is not payable).",
                    "type": "string"
                  }
                },
                "required": [
                  "handle",
                  "slug"
                ],
                "type": "object"
              },
              "queryParams": {
                "additionalProperties": false,
                "properties": {},
                "required": [],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "type": "object"
              },
              "type": {
                "type": "string"
              }
            },
            "required": [
              "type"
            ],
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    },
    "builder-code": {
      "info": {
        "a": "bc_kc0altv3"
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "a": {
            "description": "App builder code",
            "pattern": "^[a-z0-9_]{1,32}$",
            "type": "string"
          },
          "s": {
            "description": "Service builder codes",
            "items": {
              "pattern": "^[a-z0-9_]{1,32}$",
              "type": "string"
            },
            "type": "array"
          },
          "w": {
            "description": "Wallet builder code",
            "pattern": "^[a-z0-9_]{1,32}$",
            "type": "string"
          }
        },
        "type": "object"
      }
    },
    "sign-in-with-x": {
      "info": {
        "domain": "tenjin.blog",
        "issuedAt": "2026-08-23T23:11:27.544Z",
        "nonce": "475d422a3ba5a20d718f23ce74352b44",
        "resources": [
          "https://tenjin.blog/api/read/athoughts/medium-vs-substack-how-each-handles-canonical-urls-on-content-import"
        ],
        "statement": "Prove a prior purchase of this article to re-read it free. Signing costs nothing and moves no funds.",
        "uri": "https://tenjin.blog/api/read/athoughts/medium-vs-substack-how-each-handles-canonical-urls-on-content-import",
        "version": "1"
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "address": {
            "type": "string"
          },
          "chainId": {
            "type": "string"
          },
          "domain": {
            "type": "string"
          },
          "expirationTime": {
            "format": "date-time",
            "type": "string"
          },
          "issuedAt": {
            "format": "date-time",
            "type": "string"
          },
          "nonce": {
            "type": "string"
          },
          "notBefore": {
            "format": "date-time",
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "resources": {
            "items": {
              "format": "uri",
              "type": "string"
            },
            "type": "array"
          },
          "signature": {
            "type": "string"
          },
          "statement": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "uri": {
            "format": "uri",
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "domain",
          "address",
          "uri",
          "version",
          "chainId",
          "type",
          "nonce",
          "issuedAt",
          "signature"
        ],
        "type": "object"
      },
      "supportedChains": [
        {
          "chainId": "eip155:8453",
          "type": "eip191"
        }
      ]
    }
  },
  "tags": [
    "bazaar",
    "builder-code",
    "sign-in-with-x"
  ],
  "sourceHost": "tenjin.blog",
  "lastUpdated": "2026-08-23T23:11:27.572Z",
  "quality": {
    "calls30d": 2,
    "uniquePayers30d": 2,
    "lastCalledAt": "2026-08-23T23:11:27.153Z"
  },
  "liveness": {},
  "verified": false,
  "featured": false,
  "provider": {
    "host": "tenjin.blog",
    "manifest_name": "tenjin.blog",
    "source": "cdp-mirror",
    "source_manifest_url": "https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources",
    "submitted_at": "2026-09-18T22:00:31.484Z"
  }
}