{"openapi":"3.1.0","info":{"title":"paylog","version":"1.0.0","description":"On-chain payment spending tracker for MPP (Tempo) and x402 (Base). Pass a wallet address to get a breakdown of what AI agents spent across MPP and x402 services. Includes service registry, AI crawler diagnostics, and x402-gated content API.","x-guidance":"x402 endpoints (Base mainnet, $0.01 USDC): GET /api/v1/x402/report — x402 spending history for a Base wallet; GET /api/v1/x402/services — x402 service registry; GET /api/v1/content/{slug} — paid blog content. JPYC x402 endpoints (Polygon mainnet eip155:137, asset 0xe7c3d8c9a439fede00d2600032d5db0be71c3c29 via x402-jpyc facilitator https://x402-jpyc.vercel.app): GET /api/v1/content/adding-jpyc-polygon-x402 (2 JPYC); GET /api/v1/content/jpyc-ascii (0.1 JPYC) — include EIP-3009 signature in X-Payment header. MPP endpoints (Tempo chain, $0.001 USDC): GET /api/v1/report — MPP spending report (also accepts JPYC payment: 2 JPYC on Polygon mainnet eip155:137 via x402-jpyc facilitator https://x402-jpyc.vercel.app — include EIP-3009 signature in X-Payment header); GET /api/v1/insights — cost optimization tips; GET /api/v1/services — MPP service registry. For MPP endpoints use mppx or Tempo CLI. For x402 endpoints use @x402/fetch or CDP wallet.","x-jp402":{"currency":"JPYC"}},"x-discovery":{"ownershipProofs":[]},"x-service-info":{"categories":["analytics","payments","finance"],"docs":{"homepage":"https://www.paylog.dev","apiReference":"https://www.paylog.dev/openapi.json","llms":"/llms.txt"}},"paths":{"/api/v1/content/adding-jpyc-polygon-x402":{"get":{"operationId":"getJpycContentAddingJpycPolygon","tags":["blog","content","x402","jpyc","polygon"],"summary":"Full article: adding JPYC on Polygon as an x402 payment option (custom facilitator, multi-option 402, cross-chain revenue tracking)","description":"Returns the full markdown of \"Adding JPYC on Polygon as a Payment Option for x402\". Paid in JPYC on Polygon mainnet via the x402-jpyc facilitator (include an EIP-3009 signature in the X-Payment header). Sending Accept: text/html returns 403 (agent-only endpoint).","x-payment-info":{"price":{"mode":"fixed","currency":"JPYC","amount":"2"},"protocols":[{"x402":{"network":"eip155:137","asset":"0xe7c3d8c9a439fede00d2600032d5db0be71c3c29","payTo":"0xf32b61954c4f7b9c5c8b650291aafe280809152c"}}]},"responses":{"200":{"description":"Post content","content":{"application/json":{"schema":{"type":"object","required":["slug","title","date","content"],"properties":{"slug":{"type":"string","example":"adding-jpyc-polygon-x402"},"title":{"type":"string","example":"Adding JPYC on Polygon as a Payment Option for x402"},"date":{"type":"string","format":"date","example":"2026-04-13"},"content":{"type":"string","description":"Full markdown content of the post"}}}}}},"402":{"description":"Payment Required (2 JPYC via x402 on Polygon mainnet eip155:137)"},"403":{"description":"Browser access blocked (Accept: text/html) — agent-only endpoint"}}}},"/api/v1/content/jpyc-ascii":{"get":{"operationId":"getJpycContentJpycAscii","tags":["blog","content","x402","jpyc","polygon"],"summary":"Full JPYC ASCII art — a sample x402 + JPYC paid content piece on Polygon","description":"Returns the full markdown of \"JPYC ASCII Art\". Paid in JPYC on Polygon mainnet via the x402-jpyc facilitator (include an EIP-3009 signature in the X-Payment header). Sending Accept: text/html returns 403 (agent-only endpoint).","x-payment-info":{"price":{"mode":"fixed","currency":"JPYC","amount":"0.1"},"protocols":[{"x402":{"network":"eip155:137","asset":"0xe7c3d8c9a439fede00d2600032d5db0be71c3c29","payTo":"0xf32b61954c4f7b9c5c8b650291aafe280809152c"}}]},"responses":{"200":{"description":"Post content","content":{"application/json":{"schema":{"type":"object","required":["slug","title","date","content"],"properties":{"slug":{"type":"string","example":"jpyc-ascii"},"title":{"type":"string","example":"JPYC ASCII Art"},"date":{"type":"string","format":"date","example":"2026-04-16"},"content":{"type":"string","description":"Full markdown content of the post"}}}}}},"402":{"description":"Payment Required (0.1 JPYC via x402 on Polygon mainnet eip155:137)"},"403":{"description":"Browser access blocked (Accept: text/html) — agent-only endpoint"}}}},"/api/v1/x402/services":{"get":{"operationId":"getX402Services","tags":["registry","services","x402","base"],"summary":"x402 service registry","description":"Mapping of x402 service names to payTo addresses on Base mainnet. Updated daily via GitHub Actions.","x-payment-info":{"price":{"mode":"fixed","amount":"0.010000","currency":"USD"},"protocols":[{"x402":{"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}]},"responses":{"200":{"description":"x402 service registry","content":{"application/json":{"schema":{"type":"object","required":["updated_at","count","services"],"properties":{"updated_at":{"type":"string","format":"date-time"},"count":{"type":"integer","example":105},"services":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"},"payTo":{"type":"string"},"network":{"type":"string","example":"eip155:8453"},"asset":{"type":"string"},"description":{"type":"string"}}}}}}}}},"402":{"description":"Payment Required ($0.01 USDC via x402 on Base)"}}}},"/api/v1/content/{slug}":{"get":{"operationId":"getBlogContent","tags":["blog","content","x402","base"],"summary":"Get blog post content","description":"Returns full markdown content of a paid blog post. Requires x402 payment ($0.01 USDC on Base mainnet). Unknown slugs also return 402 (payment is not settled for non-existent posts).","x-payment-info":{"price":{"mode":"fixed","amount":"0.010000","currency":"USD"},"protocols":[{"x402":{"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}]},"parameters":[{"name":"slug","in":"path","required":true,"description":"Article slug (see /blog for the list)","schema":{"type":"string","example":"monetize-ai-crawlers-with-x402"}}],"responses":{"200":{"description":"Post content","content":{"application/json":{"schema":{"type":"object","required":["slug","title","date","content"],"properties":{"slug":{"type":"string","example":"monetize-ai-crawlers-with-x402"},"title":{"type":"string","example":"8 Things That Tripped Me Up Implementing x402"},"date":{"type":"string","format":"date","example":"2026-04-05"},"content":{"type":"string","description":"Full markdown content of the post"}}}}}},"402":{"description":"Payment Required ($0.01 USDC via x402 on Base)"},"404":{"description":"Post not found (returned after payment — not settled)"}}}},"/api/v1/x402/report":{"get":{"operationId":"getX402Report","tags":["expense","spending","finance","payments","history","analytics","x402","base"],"summary":"Get Base x402 spending report by wallet","x-payment-info":{"price":{"mode":"fixed","amount":"0.010000","currency":"USD"},"protocols":[{"x402":{"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}]},"parameters":[{"name":"wallet","in":"query","required":true,"description":"Wallet address to query (0x...)","schema":{"type":"string","example":"0x71157bff79245b6d1f9b10dc206e744e5d1f00a3"}},{"name":"chain","in":"query","required":false,"description":"Chain to query. \"base\" for Base only, \"all\" for Tempo+Base combined.","schema":{"type":"string","enum":["base","all"],"default":"base"}}],"responses":{"200":{"description":"Spending report"},"400":{"description":"Missing or invalid required parameter"},"402":{"description":"Payment Required ($0.01 USDC via x402 on Base)"},"503":{"description":"RPC unavailable"}}}},"/api/v1/trust/signal":{"post":{"operationId":"postTrustSignal","tags":["trust","feedback","three-layer"],"summary":"Receive trust signal from Tagamie (Accounting layer)","description":"Closes the 3-layer loop. Tagamie POSTs here when an invoice transitions to status=issued, allowing paylog (Discovery layer) to update per-seller trust scores. Auth: shared secret in x-trust-signal-secret header. Schema: knowledge/cross-layer-context.md §11. Operator-only — not advertised for agent discovery.","x-payment-info":{"price":{"mode":"fixed","amount":"0","currency":"JPY"},"protocols":[]},"responses":{"201":{"description":"Signal recorded"},"400":{"description":"Invalid payload"},"401":{"description":"Unauthorized (secret mismatch)"},"500":{"description":"Trust signal secret not configured"},"503":{"description":"Trust store unavailable"}}}},"/api/v1/jpyc/report":{"get":{"operationId":"getJpycReport","tags":["expense","spending","finance","payments","history","analytics","x402-jpyc","polygon","jpyc","discovery","three-layer"],"summary":"Get JPYC spending report by wallet (Polygon mainnet)","description":"Discovery-layer endpoint for the agent-economy 3-layer structure (knowledge/cross-layer-context.md). Returns JPY-denominated spending breakdown plus CrossLayerContext v1 envelope per service so agents can pipe directly into yen402-mcp. Phase A: served free with rate limit; x402-jpyc paywall lands in Phase E.","x-payment-info":{"price":{"mode":"fixed","amount":"0","currency":"JPY"},"protocols":[]},"parameters":[{"name":"wallet","in":"query","required":true,"description":"Polygon wallet address to query (0x...)","schema":{"type":"string","example":"0xAAAA0000000000000000000000000000000000aa"}},{"name":"from","in":"query","required":true,"description":"Start date (YYYY-MM-DD, UTC midnight)","schema":{"type":"string","format":"date","example":"2026-04-01"}},{"name":"to","in":"query","required":false,"description":"End date (YYYY-MM-DD), defaults to today","schema":{"type":"string","format":"date","example":"2026-05-21"}}],"responses":{"200":{"description":"JPYC spending report with CrossLayerContext envelope per service"},"400":{"description":"Missing or invalid required parameter"},"429":{"description":"Rate limit exceeded"},"500":{"description":"RPC or aggregation failure"}}}}}}