# Tenjin – x402 Content API Security Invariant Article

> Tenjin – x402 Content API Security Invariant Article is a paid API for AI agents from tenjin.blog, paid per call via x402, $0.12/call, status unknown (last checked 2026-09-14).

Fetches a paid article on Tenjin explaining the security principle of keeping 402 payment routes and 401/403 authenticated download routes separate for x402-gated content APIs.

## Facts

- Endpoint: GET https://tenjin.blog/api/read/athoughts/x402-content-apis-keep-the-402-payment-route-and-the-authed-download-route-as-se
- Price: $0.12/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/tenjin-x402-content-api-security-invariant-article-800b38ac
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_kTngL2KYiDeNZ8b2mNB5c

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability tenjin-x402-content-api-security-invariant-article-800b38ac
```

Example prompt: Fetch the Tenjin article on keeping x402 payment routes separate from authenticated download routes — the one about security invariants for x402-gated content APIs written by the creator 'athoughts'.

## When to prefer this

Use this endpoint when you specifically need to read the Tenjin article on x402 content API security architecture, particularly the invariant about separating payment and entitlement routes. Prefer this over generic web search when you want the authoritative, paywalled technical analysis from the Tenjin platform delivered directly as structured content.

## Known failure modes

- 402 Payment Required if no valid payment is provided — caller must submit a valid x402 USDC micropayment of $0.12 before content is served
- 404 Not Found if the handle 'athoughts' or slug does not resolve to a published article
- 401/403 if a returning buyer's entitlement token is missing or expired for re-download flow
- Slug mismatch causing incorrect article resolution if slug is truncated or malformed

## How this service works

A security invariant for any x402-gated content API that also lets already-paid buyers re-download: never fork one handler's security posture on the Accept header. Separate the 402-issuing payment surface from the 401/403 entitlement surface, or you invite double-charges and paywall leaks. As-of 2026-07-13.

## Output

The full text content of the Tenjin article discussing the security invariant for x402-gated content APIs, specifically covering why the 402-issuing payment surface must be kept separate from the 401/403 entitlement/download surface to prevent double-charges and paywall leaks, including guidance on re-download flows for already-paid buyers.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET"
     ],
     "type": "string"
    },
    "pathParams": {
     "type": "object",
     "required": [
      "handle",
      "slug"
     ],
     "properties": {
      "slug": {
       "type": "string",
       "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)."
      },
      "handle": {
       "type": "string",
       "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."
      }
     }
    },
    "queryParams": {
     "type": "object",
     "required": [],
     "properties": {},
     "additionalProperties": false
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object"
    }
   }
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/tenjin-x402-content-api-security-invariant-article-800b38ac/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from tenjin.blog](https://www.zero.xyz/host/tenjin.blog/llms.txt)
