What the decision rests on today
A marketing page about a data product.
Every one of these is believed because of who supplied it, and none of them can be checked by the engineer who has to depend on it.
A page describes coverage. It never says where the coverage stops, because nobody writes that part down.
A sandbox is fixture data shaped to answer well. It tells you nothing about the corpus behind it.
An evaluation that starts with a sales call and a key is an evaluation of the sales call.
What oddly puts on the record
Four reads. No key. Fetchable from your page, not only from ours.
Cross-origin on purpose: a receipt only our own origin can read proves nothing to anyone else.
curl -s https://myoddly.com/api/public/corpus-stats
curl -s https://myoddly.com/api/public/corpus-map
curl -s https://myoddly.com/api/public/observation
curl -s https://myoddly.com/api/public/receipt/corpus
What the estate has written down, with the newest observation stamp behind the counts and the read stamp kept separate from it.
Where the record reaches and where it stops. Subjects that cannot be placed are counted and named by class rather than dropped.
One observation end to end: both clocks, the gap between them, the hash of the row before it, and the day root it folds into.
The verbs
Observe. Seal. Publish. Anchor.
The same four on every surface. A product here is the record read for one decision, never a second machine.
Read the source as it is published, and write down both clocks.
Hash the row with its predecessor, so no receipt can move without every later one changing.
Fold the day's receipts into one root and put it where anyone can read it.
Submit the root to a chain we do not run. From then on, checking us does not involve us.
One call with no key, and what it returned
This response was fetched by your browser, not captured by ours.
curl -s https://myoddly.com/api/public/observation
Make the same call and you will get the same shape, with whatever the ledger wrote most recently in it.
- observation
- subject
- class
- attribute
- value
- method
- source
- observed
- fetched
- clock gap
- previous receipt
- this receipt
- day root
- 53e09c73262ac668f4b36f1cab43f32509b0a24c4eca4237ef7ed205d028e508
- anchored in block
- 970,446
A row above that the call did not answer for you shows nothing: this page would rather leave it out than print a value nobody fetched. The generated reference and the machine-readable contract for the keyed platform interface live at the developer reference and are not restated here.
The MCP server
Add the record to an agent by its address. No key, no account.
https://myoddly.com/api/public/mcp
Streamable HTTP, stateless and POST only. Paste the address into any MCP client that adds a server by URL. There is no key to issue and no sign-in, so there is no authentication step to configure. Every tool reads; none of them writes.
curl -s https://myoddly.com/api/public/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
- record_subject_history
- One subject's change history and current state, with both clocks and the receipt hash of every row. Takes
subject_key. - record_verify_receipt
- Recomputes one receipt end to end: its hash, the link to the row before it, its day root and that root's anchor. Takes
receipt_hash. - record_answer
- The newest observed value of one attribute of one subject, with its source, its receipt and its scope. Takes
subject_keyandattribute. - benchmark_categories
- The product categories the commerce corpus covers, with how many observations back each. Call it first. Takes nothing.
- benchmark_lookup
- Observed price and assortment figures for one category: the median and the p25 to p75 band, with sample size, currency and scope. Takes
category. - store_audit
- The free storefront audit against a public domain: the platform, the checks that failed, and the catalogue against observed category norms. Takes
url.
The full descriptions, input schemas and rates are what the server itself returns from tools/list, and the same catalogue is published as the server descriptor. An empty answer is an honest one: a subject or category the record has not observed comes back empty rather than estimated.
Read it. Build on it. Depend on it.
Read it
Free, with attribution.
Build on it
By the meter. Developers
Depend on it
By contract.