π οΈ Developers
The Fume developer surface: the public REST API, the OpenAPI specification, markdown representations of every page, and the machine-readable indexes.
Everything Fume publishes for people is also published for programs. This section is the map: what the Fume API exposes, where the OpenAPI specification lives, and how to read any page on this site as markdown instead of HTML.
There is no signup, no API key and no SDK to install. Every endpoint documented here is public and unauthenticated.
Start here
Fume API reference
Every endpoint, its parameters, and a curl example for each.
Agent access to Fume
Markdown negotiation, llms.txt, the sitemap, and how errors are shaped.
The short version
| Resource | URL |
|---|---|
| OpenAPI 3.1 specification | /openapi.json |
| Tokenized fund registry, as JSON | /api/registry/funds |
| Fund service provider catalog, as JSON | /api/fund-builder/providers |
| Index written for language models | /llms.txt |
| Whole site as one markdown file | /llms-full.txt |
| Sitemap | /sitemap.xml |
Point a tool at the specification and the rest follows:
curl -s https://www.fume.finance/openapi.json | jq '.paths | keys'What the Fume API is, and is not
It is a read API over public catalog data. The Tokenized Fund Registry and the fund service provider directory are already published as HTML; the endpoints return the same records as JSON so you do not have to scrape them. They are cacheable, CORS-open, and safe to call from a browser or an agent.
It is not a way to operate a fund. Tokenization, NAV runs, subscriptions and redemptions happen in the Fume application, behind authentication, and are not part of this specification. If that is what you are looking for, book a call.
The remaining endpoints are the website's own forms β contact, newsletter, provider introductions, registry listings. They are documented for completeness, but production protects them with a captcha, so they expect a browser. An agent that wants to reach a human should email info@fume.finance instead.
Every error looks the same
Any non-2xx response from any endpoint, including a 404 or a 405, returns this envelope:
{
"error": "A valid email address is required.",
"code": "invalid_email",
"message": "A valid email address is required.",
"hint": "Send a syntactically valid address in the `email` field, e.g. \"jane@example.com\".",
"status": 400,
"docs": "https://www.fume.finance/openapi.json"
}Branch on code, show message, follow hint. error carries the same text as message and exists because the site's own forms already read that key.