For agents

Where the machine-readable versions of these docs live, and the rules an agent needs before calling the API on someone's behalf.

A robot holding a parcel and a product card

These docs are written for agents as well as people. The same rules appear in three places so an agent gets them whichever way it arrives.

Machine-readable entry points

ResourceURL
Page index/llms.txt
Every page, concatenated/llms-full.txt
Any page as Markdownappend .md to its path, for example /docs/quickstart.md, or send Accept: text/markdown
The contracthttps://api.ongoing.ai/v1/openapi.json

Operation notes in the contract

Every operation in the OpenAPI document carries three vendor extensions:

ExtensionContent
x-scopeThe scope the key needs, or any / none.
x-billing-unitThe unit a successful call consumes, or free.
x-agent-notesWhen to call it, what it costs, side effects, and how to read the result correctly.

The MCP server (later release) builds its tool descriptions from x-agent-notes, so the tool an agent sees and the page a person reads are the same text.

Rules that prevent wrong conclusions

  1. A 404 or no_match means no profile was returned; it does not say why. Read reason first. not_in_corpus is missing coverage, and offering an observation (refresh: true, needs write:scans) is the right response. not_ecommerce is the one case that is a statement about the site: we observed it and classified it as not a store. Never report either as "this is not a store" without naming which one it was.
  2. A technology missing from technologies was not seen within what that observation covered. Only a technology_removed signal or an install_state of inactive is a confirmed removal, and both require three consecutive comparable misses. Do not report a single absence as a vendor being dropped.
  3. last_observed_at-style fields describe the observation, not the change. effective_at on a signal is the estimate of when the change happened.
  4. stale results are complete and billed. Do not discard them; report the observation date.
  5. Every POST you might retry needs an Idempotency-Key derived from a stable identifier, or a timeout can bill twice.
  6. Read GET /v1/account before a bulk run and keep within plan.limits; compare period.included against period.used before spending.
  7. Quote request_id when reporting a failure to a person.

Test the rules

The acceptance test for these docs is a fresh agent session with a test key that completes: validate the key, read one store, enrich a batch, explain a no_match correctly, and recover from a 403 forbidden_scope by naming the missing scope. If any step needs information that is not in llms-full.txt or the contract, that is a documentation bug; report it.

On this page