{"manifest":"hindsite.agent","version":"1","name":"Hindsite","description":"A publication. Reading does not require a payment. Support is optional. Nothing on this manifest gates an article.","homepage":"https://hindsite.space","api_base":"https://api.hindsite.space","openapi":"https://api.hindsite.space/openapi.json","authentication":{"required":false,"cookies":false,"csrf":false,"captcha":false,"javascript":false},"reading":{"free_to_open":true,"http_402":false,"note":"Articles are not sold individually, and this API does not answer content with HTTP 402. Some older pieces are shortened unless the reader is a subscriber. That rule was already there. These routes do not change it."},"errors":{"shape":{"error":"machine_code","message":"What to do, in one sentence."},"note":"A body that is not JSON, or a field of the wrong type, returns HTTP 422."},"content":{"article_json":{"method":"GET","url_template":"https://api.hindsite.space/api/publication/editions/{slug}/machine?lang={lang}","description":"Article as JSON. body_markdown is Markdown. citations are the numbered sources. lang is en, de, fr, es, it, or pt."},"article_markdown":{"method":"GET","url_template":"https://api.hindsite.space/api/publication/editions/{slug}/machine.md?lang={lang}","media_type":"text/markdown"},"article_page":{"url_template":"https://hindsite.space/articles/{slug}"},"archive":{"method":"GET","url":"https://api.hindsite.space/api/publication/archive"},"literature_essay":{"method":"GET","url_template":"https://api.hindsite.space/api/literature/essays/{slug}?lang={lang}","description":"Essay JSON. body_md is Markdown. consulted lists the records used."},"langs":["en","de","fr","es","it","pt"]},"support":{"donate_page":"https://hindsite.space/donate","currency":"gbp","presets_gbp":[3,5,10],"presets_pence":[300,500,1000],"custom_amount":{"min_pence":100,"max_pence":1000000,"unit":"pence"},"create":{"method":"POST","url":"https://api.hindsite.space/api/support/donations","content_type":"application/json"},"status":{"method":"GET","url_template":"https://api.hindsite.space/api/support/donations/{id}"},"success_url":"https://hindsite.space/donate?donation=success&id={id}&session_id={CHECKOUT_SESSION_ID}","cancel_url":"https://hindsite.space/donate?donation=cancelled&id={id}"},"subscribe":{"page":"https://hindsite.space/subscribe","plans":[{"tier":"pro","name":"Subscriber","price":"£4 per month"},{"tier":"supporter","name":"Supporter","price":"£7 per month"}],"checkout":{"method":"POST","url":"https://api.hindsite.space/api/billing/checkout","body":{"tier":"pro"},"headless":false,"note":"A human signs in first. The session cookie is how Stripe Customer Checkout knows who is paying. Agents donating should use POST /api/support/donations, which needs no cookie."}},"payments":{"rails":[{"id":"stripe_checkout","works_today":true,"programmatic":false,"browser_required":true,"summary":"POST a donation and open checkout_url, or give that URL to a person. Poll status_url until status is paid. Hosted Stripe page. No card data touches Hindsite.","owner_setup":"Nothing new. This uses the Stripe account that already takes subscriptions.","stripe_profile_id":null},{"id":"stripe_spt","works_today":false,"programmatic":true,"browser_required":false,"summary":"POST shared_payment_token (spt_…) with the amount. The existing Stripe secret key confirms a PaymentIntent. No Checkout page unless the bank returns a confirmation URL, which is then in action_url.","owner_setup":"The charge path is built and uses the existing Stripe secret key. Agents cannot mint a token for Hindsite until you claim a business profile in the Stripe Dashboard (the id starts with profile_) and set the Fly secret HINDSITE_STRIPE_PROFILE_ID on the hindsite-api app. That is an id, not a new account and not a new secret key. Confirm the UK account is on Stripe's list for Shared Payment Tokens (US, Canada, and some European countries). Until the profile id is published here, agents should use the Checkout link.","stripe_profile_id":null},{"id":"stripe_mpp","works_today":false,"programmatic":true,"browser_required":false,"summary":"Machine Payments Protocol (Stripe and Tempo). A server answers HTTP 402 with a price, the agent pays with a card token or stablecoin, and Stripe settles to the existing balance. Not enabled. Articles will not return 402.","owner_setup":"Do not attach this to an article. Reading stays free. If you later want a separate paid path: enable Machine payments in the Stripe Dashboard, put the business profile id in HINDSITE_STRIPE_PROFILE_ID, and ask for the rail on a new URL that is not an article. Card payments reuse Shared Payment Tokens. Stablecoins (Tempo or Solana) need Stablecoins and Crypto turned on. Outside the US, email machine-payments@stripe.com with the Stripe account id. You do not create a wallet. The reference library is Node (mppx); this API is Python, so it is a port rather than a setting.","stripe_profile_id":null},{"id":"stripe_x402","works_today":false,"programmatic":true,"browser_required":false,"summary":"Stripe's x402. HTTP 402, USDC on Base, settled into the existing Stripe balance. Private preview. Not enabled. Articles will not return 402.","owner_setup":"Email machine-payments@stripe.com with the Stripe account id and ask for x402 access. Stripe creates the deposit address. Do not create a crypto wallet. It uses HTTP 402, so it can only be added on a new payment path, never on an article. Non-US accounts need that same approval. The minimum charge is about 0.01 USDC.","stripe_profile_id":null},{"id":"x402_coinbase","works_today":false,"programmatic":true,"browser_required":false,"summary":"x402 outside Stripe, usually USDC on Base via a facilitator such as Coinbase CDP. Not enabled. This API will not create a wallet.","owner_setup":"You would create a receiving wallet yourself (USDC on Base) and a Coinbase CDP facilitator key, or another facilitator. Send the address and the key when you want the rail added. This service will not generate either. Same rule: never HTTP 402 on an article.","stripe_profile_id":null},{"id":"ap2","works_today":false,"programmatic":false,"browser_required":false,"summary":"Agent Payments Protocol (FIDO Alliance, from Google's AP2). A signed mandate that records what a person allowed an agent to pay. It does not move money. It would sit in front of Checkout or a Shared Payment Token.","owner_setup":"Publish a merchant identity key and verify mandates. No new payment account. Not required for donations.","stripe_profile_id":null},{"id":"acp","works_today":false,"programmatic":true,"browser_required":false,"summary":"Agentic Commerce Protocol (Stripe, OpenAI, Meta). A checkout conversation for an agent shopping inside another app. A donation is one amount, not a catalogue, so this is not wired up.","owner_setup":"Add ACP checkout-session endpoints and register Hindsite as a merchant. It uses the same Stripe account. No new payment account.","stripe_profile_id":null}]},"feedback":{"method":"POST","url":"https://api.hindsite.space/api/agent-messages","content_type":"application/json","kinds":["suggestion","bug","correction","question","other"],"statuses":["open","answered","closed"],"stores_ip":false,"stores_reply_token":false,"user_agent":"Taken from the User-Agent header. Do not put it in the JSON.","automated_action":false,"create":{"method":"POST","url":"https://api.hindsite.space/api/agent-messages"},"read":{"method":"GET","url_template":"https://api.hindsite.space/api/agent-messages/{thread_id}","header":"X-Reply-Token","poll_interval_seconds":30},"follow_up":{"method":"POST","url_template":"https://api.hindsite.space/api/agent-messages/{thread_id}","header":"X-Reply-Token"},"fields":{"kind":"required on the first message","message":"required, 8 to 2000 characters","article_slug":"optional","article_url":"optional http(s) URL","agent_name":"optional","operator":"optional","contact":"optional. Stored for a person to read. Not emailed automatically.","webhook_url":"optional https URL. Stored. Not called. Future work.","website":"Leave empty. It is a spam trap."},"note":"A person reads these and can reply on the same thread. The create response includes a reply token. Only its hash is stored. Send that token as X-Reply-Token to read the thread or add a follow-up. The text is never executed, rendered as HTML, or sent to a model. webhook_url is saved and is not requested."}}