{"openapi":"3.1.0","info":{"title":"Josh Horneman: agent commerce","version":"1.0.0","description":"Pay-per-request access to Josh Horneman’s writing, AI-clone research and authored frameworks, over x402 in USDC on Base.\n\nVersioning: this contract is v1 (info.version). Additive changes ship without notice.\nBreaking changes are announced at least 90 days ahead with Deprecation and Sunset\nheaders on affected endpoints and a note in /llms.txt.\n\nRate limits: paid endpoints share a daily capacity and return RateLimit-Limit,\nRateLimit-Remaining and RateLimit-Reset headers. When capacity is reached the\nresponse is 503 with Retry-After (seconds until UTC midnight).\n\nErrors: JSON objects with machine-readable code and human-readable error/detail\nfields (see components.schemas.Error). Unknown /api/* paths return RFC 9457\napplication/problem+json.","x-guidance":"Josh Horneman is an Australian business coach and AI consultant. This origin sells his\nwriting, research and authored frameworks to AI agents over the x402 protocol, settled in\nUSDC on Base. There is no API key, account or signup.\n\nStart with GET /api/agent/catalog (free). It lists every product with live pricing and the\nconcrete resource URLs for each article, note and framework.\n\nFree products (catalog, fit, notes) answer 200 directly. Paid products answer 402 with an\nx402 challenge in both the JSON body and the PAYMENT-REQUIRED header; attach an X-PAYMENT\nheader and repeat the request to receive the content. Payment is only ever captured on a\nsuccessful 2xx, so a 404 or an error never charges you.\n\nUse fit (free) to get an engagement recommendation and a booking link for a human client.","contact":{"email":"josh@joshhorneman.com","url":"https://www.joshhorneman.com/agents"}},"servers":[{"url":"https://www.joshhorneman.com"}],"paths":{"/api/agent/catalog":{"get":{"operationId":"catalog","summary":"Product catalogue","description":"Free machine-readable index of every agent-payable product on this site.","tags":["Data"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"service":"string","network":"base | base-sepolia","products":[{"slug":"string","method":"string","resource":"string","priceUsd":"string"}]}}}},"404":{"description":"Resource not found. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Daily capacity reached. Retry after the Retry-After header (seconds until UTC midnight).","headers":{"Retry-After":{"description":"Seconds until capacity resets (UTC midnight).","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[]}},"/api/agent/fit":{"post":{"operationId":"fit","summary":"Engagement fit recommendation","description":"Free tool. Submit a business profile (answers to the fit questions) and get a recommended engagement type plus a booking link.","tags":["Tools"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"recommendation":{"key":"coaching | consulting | howll","title":"string","description":"string"},"booking_url":"string","human_page":"string"}}}},"404":{"description":"Resource not found. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Daily capacity reached. Retry after the Retry-After header (seconds until UTC midnight).","headers":{"Retry-After":{"description":"Seconds until capacity resets (UTC midnight).","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["answers"],"properties":{"answers":{"type":"array","items":{"type":"integer","minimum":0},"description":"One answer index per fit question, in order. Call the endpoint with an invalid body to receive the questions and their answer options."}}},"example":{"answers":[0,1,2,0,1,0,2]}}}},"security":[]}},"/api/agent/notes":{"get":{"operationId":"notes","summary":"Notes index","description":"Free index of published notes and digests, with the paid resource URL for each.","tags":["Content"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"notes":[{"slug":"string","title":"string","type":"string","published_at":"string","resource":"string"}]}}}},"404":{"description":"Resource not found. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Daily capacity reached. Retry after the Retry-After header (seconds until UTC midnight).","headers":{"Retry-After":{"description":"Seconds until capacity resets (UTC midnight).","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[]}},"/api/agent/note/{slug}":{"get":{"operationId":"note","summary":"Note (full text)","description":"Full markdown of a single published note or digest.","tags":["Content"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"slug":"string","title":"string","type":"string","body":"string (markdown)","published_at":"string"}}}},"402":{"description":"Payment Required. The x402 challenge is in the body and the PAYMENT-REQUIRED header."},"404":{"description":"Resource not found. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Daily capacity reached. Retry after the Retry-After header (seconds until UTC midnight).","headers":{"Retry-After":{"description":"Seconds until capacity resets (UTC midnight).","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"Note slug. List them free at GET /api/agent/notes.","schema":{"type":"string"},"example":"weekly-digest"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]}}},"/api/agent/article/{slug}":{"get":{"operationId":"article","summary":"Insight article (full text)","description":"Full text of a published insight article as structured JSON.","tags":["Content"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"slug":"string","title":"string","description":"string","category":"string","date":"string","url":"string","text":"string","wordCount":"number"}}}},"402":{"description":"Payment Required. The x402 challenge is in the body and the PAYMENT-REQUIRED header."},"404":{"description":"Resource not found. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Daily capacity reached. Retry after the Retry-After header (seconds until UTC midnight).","headers":{"Retry-After":{"description":"Seconds until capacity resets (UTC midnight).","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"Article slug. Every slug is listed free at GET /api/agent/catalog.","schema":{"type":"string"},"example":"sovereign-ai-australia"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]}}},"/api/agent/ask":{"post":{"operationId":"ask","summary":"Ask the AI clone","description":"One question to Verbatim, an AI clone answering on behalf of the site owner.","tags":["Inference"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"answer":"string","citations":[{"chunk_id":"string","capture_title":"string","capture_url":"string"}],"confidence":"number (1-5)","verified":"boolean"}}}},"402":{"description":"Payment Required. The x402 challenge is in the body and the PAYMENT-REQUIRED header."},"404":{"description":"Resource not found. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Daily capacity reached. Retry after the Retry-After header (seconds until UTC midnight).","headers":{"Retry-After":{"description":"Seconds until capacity resets (UTC midnight).","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["question"],"properties":{"question":{"type":"string","minLength":2,"description":"The question to put to the AI clone."}}},"example":{"question":"What is your view on sovereign AI for small business?"}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]}}},"/api/agent/research":{"post":{"operationId":"research","summary":"Research brief","description":"A structured, corpus-grounded research brief in the site owner’s voice: summary, key points, cited evidence, and implications.","tags":["Inference"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"brief":"string (markdown, sections: Summary / Key points / Evidence / Implications)","citations":[{"chunk_id":"string","capture_title":"string","capture_url":"string"}],"confidence":"number (1-5)","verified":"boolean"}}}},"402":{"description":"Payment Required. The x402 challenge is in the body and the PAYMENT-REQUIRED header."},"404":{"description":"Resource not found. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Daily capacity reached. Retry after the Retry-After header (seconds until UTC midnight).","headers":{"Retry-After":{"description":"Seconds until capacity resets (UTC midnight).","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["question"],"properties":{"question":{"type":"string","minLength":8,"description":"The research question to brief on."},"focus":{"type":"string","description":"Optional angle to bias the brief towards."}}},"example":{"question":"How should an SME sequence its first year of AI adoption?"}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.50"},"protocols":[{"x402":{}}]}}},"/api/agent/framework/{slug}":{"get":{"operationId":"framework","summary":"Premium framework","description":"A complete authored framework or playbook document (markdown).","tags":["Content"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"slug":"string","title":"string","version":"string","summary":"string","body":"string (markdown)","updated":"string"}}}},"402":{"description":"Payment Required. The x402 challenge is in the body and the PAYMENT-REQUIRED header."},"404":{"description":"Resource not found. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error. No payment is captured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Daily capacity reached. Retry after the Retry-After header (seconds until UTC midnight).","headers":{"Retry-After":{"description":"Seconds until capacity resets (UTC midnight).","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"Framework slug. Every slug is listed free at GET /api/agent/catalog.","schema":{"type":"string"},"example":"sme-ai-readiness-assessment"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"2.00"},"protocols":[{"x402":{}}]}}}},"components":{"schemas":{"Error":{"type":"object","description":"Typed error model for every 4xx/5xx response. code is stable and machine-readable; error/detail are human-readable.","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message."},"code":{"type":"string","description":"Stable machine-readable code.","enum":["payment_required","invalid_payment","not_found","invalid_request","capacity_reached","internal_error"]},"detail":{"type":"string","description":"Resolution hint."}}}}},"tags":[{"name":"Data","description":"Machine-readable discovery."},{"name":"Content","description":"Authored writing and frameworks."},{"name":"Inference","description":"AI-clone answers and research briefs."},{"name":"Tools","description":"Free tools for qualifying and booking."}]}